12 #include "atlas/field.h"
20 #include "eckit/exception/Exceptions.h"
22 #include "oops/base/LocalIncrement.h"
23 #include "oops/base/Variables.h"
24 #include "oops/util/DateTime.h"
25 #include "oops/util/Duration.h"
26 #include "oops/util/Logger.h"
28 #include "ufo/GeoVaLs.h"
29 #include "ufo/Locations.h"
39 const util::DateTime & vt)
40 : time_(vt), vars_(vars), geom_(new
Geometry(geom))
44 Log::trace() <<
"Increment constructed." << std::endl;
48 : time_(other.time_), vars_(other.vars_), geom_(new
Geometry(geom))
52 Log::trace() <<
"Increment constructed from other." << std::endl;
56 : time_(other.time_), vars_(other.vars_), geom_(new
Geometry(*other.geom_))
64 Log::trace() <<
"Increment copy-created." << std::endl;
68 : time_(other.time_), vars_(other.vars_), geom_(new
Geometry(*other.geom_))
72 Log::trace() <<
"Increment copy-created." << std::endl;
77 Log::trace() <<
"Increment destructed" << std::endl;
124 Log::trace() <<
"Increment dirac initialized" << std::endl;
162 std::vector<int> varlens(
vars_.size());
165 for (
int ii = 0; ii <
vars_.size(); ii++) {
166 if (
vars_[ii] ==
"tocn") varlens[ii]=nzo;
167 else if (
vars_[ii] ==
"socn") varlens[ii]=nzo;
168 else if (
vars_[ii] ==
"hocn") varlens[ii]=nzo;
169 else if (
vars_[ii] ==
"uocn") varlens[ii]=nzo;
170 else if (
vars_[ii] ==
"vocn") varlens[ii]=nzo;
171 else if (
vars_[ii] ==
"ssh") varlens[ii]=1;
172 else if (
vars_[ii] ==
"cicen") varlens[ii]=1;
173 else if (
vars_[ii] ==
"hicen") varlens[ii]=1;
174 else if (
vars_[ii] ==
"hsnon") varlens[ii]=1;
175 else if (
vars_[ii] ==
"chl") varlens[ii]=nzo;
176 else if (
vars_[ii] ==
"biop") varlens[ii]=nzo;
181 int lenvalues = std::accumulate(varlens.begin(), varlens.end(), 0);
182 std::vector<double> values(lenvalues);
187 return oops::LocalIncrement(
vars_, values, varlens);
193 const std::vector<double> vals = values.getVals();
218 util::DateTime * dtp = &
time_;
223 const util::DateTime * dtp = &
time_;
228 os << std::endl <<
" Valid time: " <<
validTime();
231 std::vector<double> zstat(3*nf);
233 for (
int jj = 0; jj < nf; ++jj) {
234 os << std::endl << std::right << std::setw(7) <<
vars_[jj]
235 <<
" min=" << std::fixed << std::setw(12) <<
236 std::right << zstat[3*jj]
237 <<
" max=" << std::fixed << std::setw(12) <<
238 std::right << zstat[3*jj+1]
239 <<
" mean=" << std::fixed << std::setw(12) <<
240 std::right << zstat[3*jj+2];
275 nn +=
time_.serialSize();
284 std::vector<double> vect_field(nn, 0);
285 vect.reserve(vect.size() + nn + 1 +
time_.serialSize());
288 vect.insert(vect.end(), vect_field.begin(), vect_field.end());
294 time_.serialize(vect);
309 time_.deserialize(vect, index);
Geometry handles geometry for SOCA model.
Increment Class: Difference between two states.
std::shared_ptr< const Geometry > geometry() const
void deserialize(const std::vector< double > &, size_t &) override
void setAtlas(atlas::FieldSet *) const
ATLAS.
Increment & operator=(const Increment &)
void schur_product_with(const Increment &)
void read(const eckit::Configuration &)
I/O and diagnostics.
void updateTime(const util::Duration &dt)
void toAtlas(atlas::FieldSet *) const
void accumul(const double &, const State &)
Other.
size_t serialSize() const override
Serialize and deserialize.
std::shared_ptr< const Geometry > geom_
void write(const eckit::Configuration &) const
void serialize(std::vector< double > &) const override
Increment & operator-=(const Increment &)
void diff(const State &, const State &)
Basic operators.
void fromAtlas(atlas::FieldSet *)
Increment & operator+=(const Increment &)
Increment(const Geometry &, const oops::Variables &, const util::DateTime &)
Constructor, destructor.
void dirac(const eckit::Configuration &)
void setLocal(const oops::LocalIncrement &, const GeometryIterator &)
const util::DateTime & validTime() const
Increment & operator*=(const double &)
void print(std::ostream &) const override
Data.
double dot_product_with(const Increment &) const
oops::LocalIncrement getLocal(const GeometryIterator &) const
Getpoint/Setpoint.
void axpy(const double &, const Increment &, const bool check=true)
const util::DateTime & validTime() const
void soca_increment_setpoint_f90(F90flds &, const F90iter &, const double &, const int &)
void soca_increment_sizes_f90(const F90flds &, int &, int &, int &, int &)
void soca_increment_serialize_f90(const F90flds &, const F90geom &, const size_t &, double[])
void soca_increment_self_mul_f90(const F90flds &, const double &)
void soca_increment_getpoint_f90(const F90flds &, const F90iter &, double &, const int &)
void soca_increment_dot_prod_f90(const F90flds &, const F90flds &, double &)
void soca_increment_copy_f90(const F90flds &, const F90flds &)
void soca_increment_change_resol_f90(const F90flds &, const F90flds &)
void soca_increment_to_atlas_f90(const F90flds &, const F90geom &, const oops::Variables &, atlas::field::FieldSetImpl *)
void soca_increment_gpnorm_f90(const F90flds &, const int &, double &)
void soca_increment_write_file_f90(const F90flds &, const eckit::Configuration *const &, const util::DateTime *const *)
void soca_increment_axpy_f90(const F90flds &, const double &, const F90flds &)
void soca_increment_delete_f90(F90flds &)
void soca_increment_deserialize_f90(const F90flds &, const F90geom &, const size_t &, const double[], size_t &)
void soca_increment_set_atlas_f90(const F90flds &, const F90geom &, const oops::Variables &, atlas::field::FieldSetImpl *)
void soca_increment_from_atlas_f90(const F90flds &, const F90geom &, const oops::Variables &, atlas::field::FieldSetImpl *)
void soca_increment_random_f90(const F90flds &)
void soca_increment_rms_f90(const F90flds &, double &)
constexpr double SerializeCheckValue
void soca_increment_accumul_f90(const F90flds &, const double &, const F90flds &)
void soca_increment_self_add_f90(const F90flds &, const F90flds &)
void soca_increment_self_schur_f90(const F90flds &, const F90flds &)
void soca_increment_serial_size_f90(const F90flds &, const F90geom &, size_t &)
void soca_increment_self_sub_f90(const F90flds &, const F90flds &)
void soca_increment_diff_incr_f90(const F90flds &, const F90flds &, const F90flds &)
void soca_increment_create_f90(F90flds &, const F90geom &, const oops::Variables &)
void soca_increment_ones_f90(const F90flds &)
void soca_increment_zero_f90(const F90flds &)
void soca_increment_read_file_f90(const F90flds &, const eckit::Configuration *const &, util::DateTime *const *)
void soca_increment_dirac_f90(const F90flds &, const eckit::Configuration *const &)