15 #include "eckit/exception/Exceptions.h"
17 #include "oops/util/abor1_cpp.h"
18 #include "oops/util/Logger.h"
29 oops::Log::trace() <<
"ufo::Variables created empty" << std::endl;
36 oops::Log::trace() <<
"ufo::Variables(config) start " << std::endl;
37 for (
size_t jvar = 0; jvar < confs.size(); ++jvar) {
40 oops::Log::trace() <<
"ufo::Variables(conf) done" << std::endl;
47 oops::Log::trace() <<
"ufo::Variables(oops::Vars) start" << std::endl;
48 if (oopsvars.channels().size() > 0) {
52 size_t pos = oopsvars[0].find_last_of(
'_');
53 vars_.push_back(
Variable(oopsvars[0].substr(0, pos), oopsvars.channels()));
55 for (
size_t jvar = 0; jvar < oopsvars.size(); ++jvar) {
65 oops::Log::trace() <<
"ufo::Variables(ufovars, group) start " << std::endl;
66 for (
size_t jvar = 0; jvar < vars.
size(); ++jvar) {
106 for (
size_t ivar = 0; ivar <
vars_.size(); ++ivar) {
115 size_t curr_indx = 0;
116 for (
size_t ivar = 0; ivar <
vars_.size(); ++ivar) {
118 return vars_[ivar][jj-curr_indx];
120 curr_indx +=
vars_[ivar].size();
122 ABORT(
"Variable index exceeds collective variable arrays size");
130 for (
size_t ivar = 0; ivar <
vars_.size(); ++ivar) {
131 if (
vars_[ivar].group() == group) {
157 oops::Variables vars;
158 for (
size_t ivar = 0; ivar <
vars_.size(); ++ivar) {
159 for (
size_t jj = 0; jj <
vars_[ivar].size(); ++jj) {
170 for (
size_t jj = 0; jj <
vars_.size(); ++jj) {
171 if (
vars_[jj].group() == group)
177 found = found || funcvars.
hasGroup(group);
181 found = found || funcvars.
hasGroup(group);
185 found = found || funcvars.
hasGroup(group);
189 found = found || funcvars.
hasGroup(group);
198 os <<
vars_.size() <<
" variables: ";
199 for (
size_t jj = 0; jj <
vars_.size(); ++jj) {
200 if (jj > 0) os <<
", ";
A function of observation data.
const ufo::Variables & requiredVariables() const
required variables
bool hasGroup(const std::string &) const
void print(std::ostream &) const
size_t nvars() const
Return the number of constituent "primitive" (single-channel) variables.
Variables & operator+=(const Variables &)
Variable variable(const size_t) const
Return a given constituent "primitive" (single-channel) variable.
const Variable & operator[](const size_t) const
Return a given constituent Variable (which may contain multiple channels).
std::vector< Variable > vars_
oops::Variables toOopsVariables() const
size_t size() const
Return the number of constituent Variable objects (some of which may contain multiple channels).
Variables allFromGroup(const std::string &) const
Common properties of ObsFunctions producing values of type FunctionValue.