SOCA
Increment.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2009-2016 ECMWF.
3  * (C) Copyright 2017-2021 UCAR.
4  *
5  * This software is licensed under the terms of the Apache Licence Version 2.0
6  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
7  * In applying this licence, ECMWF does not waive the privileges and immunities
8  * granted to it by virtue of its status as an intergovernmental organisation nor
9  * does it submit to any jurisdiction.
10  */
11 
12 #ifndef SOCA_INCREMENT_INCREMENT_H_
13 #define SOCA_INCREMENT_INCREMENT_H_
14 
15 #include <memory>
16 #include <ostream>
17 #include <string>
18 #include <vector>
19 
20 #include "soca/Fortran.h"
21 
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/ObjectCounter.h"
27 #include "oops/util/Printable.h"
28 #include "oops/util/Serializable.h"
29 
30 // Forward declarations
31 namespace atlas {
32  class FieldSet;
33 }
34 namespace eckit {
35  class Configuration;
36 }
37 namespace ufo {
38  class GeoVaLs;
39  class Locations;
40 }
41 namespace soca {
42  class Geometry;
43  class GeometryIterator;
44  class State;
45 }
46 
47 // -----------------------------------------------------------------------------
48 
49 namespace soca {
50 
51  /// Increment Class: Difference between two states
52  /*!
53  * Some fields that are present in a State may not be present in
54  * an Increment. The Increment contains everything that is needed by
55  * the tangent-linear and adjoint models.
56  */
57 
58  class Increment :
59  public util::Printable,
60  public util::Serializable,
61  private util::ObjectCounter<Increment> {
62  public:
63  static const std::string classname() {return "soca::Increment";}
64 
65  /// Constructor, destructor
66  Increment(const Geometry &, const oops::Variables &,
67  const util::DateTime &);
68  Increment(const Geometry &, const Increment &);
69  Increment(const Increment &, const bool);
70  Increment(const Increment &);
71  virtual ~Increment();
72 
73  /// Basic operators
74  void diff(const State &, const State &);
75  void ones();
76  void zero();
77  void zero(const util::DateTime &);
78  Increment & operator =(const Increment &);
79  Increment & operator+=(const Increment &);
80  Increment & operator-=(const Increment &);
81  Increment & operator*=(const double &);
82  void axpy(const double &, const Increment &, const bool check = true);
83  double dot_product_with(const Increment &) const;
84  void schur_product_with(const Increment &);
85  void random();
86  void dirac(const eckit::Configuration &);
87 
88  /// Getpoint/Setpoint
89  oops::LocalIncrement getLocal(const GeometryIterator &) const;
90  void setLocal(const oops::LocalIncrement &, const GeometryIterator &);
91 
92  /// ATLAS
93  void setAtlas(atlas::FieldSet *) const;
94  void toAtlas(atlas::FieldSet *) const;
95  void fromAtlas(atlas::FieldSet *);
96 
97  /// I/O and diagnostics
98  void read(const eckit::Configuration &);
99  void write(const eckit::Configuration &) const;
100  double norm() const;
101  const util::DateTime & validTime() const;
102  util::DateTime & validTime();
103  void updateTime(const util::Duration & dt);
104 
105  /// Serialize and deserialize
106  size_t serialSize() const override;
107  void serialize(std::vector<double> &) const override;
108  void deserialize(const std::vector<double> &, size_t &) override;
109 
110  /// Other
111  void accumul(const double &, const State &);
112  int & toFortran() {return keyFlds_;}
113  const int & toFortran() const {return keyFlds_;}
114  std::shared_ptr<const Geometry> geometry() const;
115 
116 
117  /// Data
118  private:
119  void print(std::ostream &) const override;
120 
122  oops::Variables vars_;
123  util::DateTime time_;
124  std::shared_ptr<const Geometry> geom_;
125  };
126  // -----------------------------------------------------------------------------
127 
128 } // namespace soca
129 
130 #endif // SOCA_INCREMENT_INCREMENT_H_
Geometry handles geometry for SOCA model.
Definition: Geometry.h:48
Increment Class: Difference between two states.
Definition: Increment.h:61
std::shared_ptr< const Geometry > geometry() const
Definition: Increment.cc:313
void deserialize(const std::vector< double > &, size_t &) override
Definition: Increment.cc:297
void setAtlas(atlas::FieldSet *) const
ATLAS.
Definition: Increment.cc:200
int & toFortran()
Definition: Increment.h:112
static const std::string classname()
Definition: Increment.h:63
Increment & operator=(const Increment &)
Definition: Increment.cc:91
void schur_product_with(const Increment &)
Definition: Increment.cc:142
void read(const eckit::Configuration &)
I/O and diagnostics.
Definition: Increment.cc:217
void updateTime(const util::Duration &dt)
Definition: Increment.cc:261
oops::Variables vars_
Definition: Increment.h:122
void toAtlas(atlas::FieldSet *) const
Definition: Increment.cc:205
void accumul(const double &, const State &)
Other.
Definition: Increment.cc:138
size_t serialSize() const override
Serialize and deserialize.
Definition: Increment.cc:266
util::DateTime time_
Definition: Increment.h:123
std::shared_ptr< const Geometry > geom_
Definition: Increment.h:124
F90flds keyFlds_
Definition: Increment.h:121
void write(const eckit::Configuration &) const
Definition: Increment.cc:222
void serialize(std::vector< double > &) const override
Definition: Increment.cc:280
Increment & operator-=(const Increment &)
Definition: Increment.cc:103
double norm() const
Definition: Increment.cc:245
void diff(const State &, const State &)
Basic operators.
Definition: Increment.cc:82
void fromAtlas(atlas::FieldSet *)
Definition: Increment.cc:210
Increment & operator+=(const Increment &)
Definition: Increment.cc:97
virtual ~Increment()
Definition: Increment.cc:75
Increment(const Geometry &, const oops::Variables &, const util::DateTime &)
Constructor, destructor.
Definition: Increment.cc:38
void dirac(const eckit::Configuration &)
Definition: Increment.cc:122
void setLocal(const oops::LocalIncrement &, const GeometryIterator &)
Definition: Increment.cc:191
const util::DateTime & validTime() const
Definition: Increment.cc:253
Increment & operator*=(const double &)
Definition: Increment.cc:109
void print(std::ostream &) const override
Data.
Definition: Increment.cc:227
const int & toFortran() const
Definition: Increment.h:113
double dot_product_with(const Increment &) const
Definition: Increment.cc:146
oops::LocalIncrement getLocal(const GeometryIterator &) const
Getpoint/Setpoint.
Definition: Increment.cc:157
void axpy(const double &, const Increment &, const bool check=true)
Definition: Increment.cc:132
SOCA model state.
Definition: State.h:48
Definition: Geometry.h:31
int F90flds
key type for soca_fields_mod::soca_fields
Definition: Fortran.h:26
Definition: GetValues.h:27