SOCA
State.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2017-2021 UCAR
3  *
4  * This software is licensed under the terms of the Apache Licence Version 2.0
5  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6  */
7 
8 #ifndef SOCA_STATE_STATE_H_
9 #define SOCA_STATE_STATE_H_
10 
11 #include <memory>
12 #include <ostream>
13 #include <string>
14 #include <vector>
15 
16 #include "soca/Fortran.h"
17 
18 #include "oops/base/Variables.h"
19 #include "oops/util/DateTime.h"
20 #include "oops/util/ObjectCounter.h"
21 #include "oops/util/Printable.h"
22 #include "oops/util/Serializable.h"
23 
24 // Forward declarations
25 namespace eckit {
26  class Configuration;
27 }
28 namespace ufo {
29  class GeoVaLs;
30  class Locations;
31 }
32 namespace soca {
33  class Geometry;
34  class Increment;
35 }
36 
37 //-----------------------------------------------------------------------------
38 
39 namespace soca {
40 
41  /// SOCA model state
42  /*!
43  * A State contains everything that is needed to propagate the state
44  * forward in time.
45  */
46  class State : public util::Printable,
47  public util::Serializable,
48  private util::ObjectCounter<State> {
49  public:
50  static const std::string classname() {return "soca::State";}
51 
52  /// Constructor, destructor
53  State(const Geometry &, const oops::Variables &,
54  const util::DateTime &);
55  State(const Geometry &, const eckit::Configuration &);
56  State(const Geometry &, const State &);
57  State(const State &);
58  virtual ~State();
59  State & operator=(const State &);
60 
61  /// Needed by PseudoModel
62  void updateTime(const util::Duration & dt) {time_ += dt;}
63 
64  /// Rotations
65  void rotate2north(const oops::Variables &, const oops::Variables &) const;
66  void rotate2grid(const oops::Variables &, const oops::Variables &) const;
67 
68  /// Logarithmic and exponential transformations
69  void logtrans(const oops::Variables &) const;
70  void expontrans(const oops::Variables &) const;
71 
72  /// Interactions with Increment
73  State & operator+=(const Increment &);
74 
75  /// I/O and diagnostics
76  void read(const eckit::Configuration &);
77  void write(const eckit::Configuration &) const;
78  double norm() const;
79  const util::DateTime & validTime() const;
80  util::DateTime & validTime();
81 
82  /// Serialize and deserialize
83  size_t serialSize() const override;
84  void serialize(std::vector<double> &) const override;
85  void deserialize(const std::vector<double> &, size_t &) override;
86 
87 
88  int & toFortran() {return keyFlds_;}
89  const int & toFortran() const {return keyFlds_;}
90  std::shared_ptr<const Geometry> geometry() const;
91  const oops::Variables & variables() const {return vars_;}
92 
93  /// Other
94  void zero();
95  void accumul(const double &, const State &);
96 
97  private:
98  void print(std::ostream &) const override;
99 
101 
102  std::shared_ptr<const Geometry> geom_;
103  oops::Variables vars_;
104  util::DateTime time_;
105  };
106 // -----------------------------------------------------------------------------
107 
108 } // namespace soca
109 
110 #endif // SOCA_STATE_STATE_H_
Geometry handles geometry for SOCA model.
Definition: Geometry.h:48
Increment Class: Difference between two states.
Definition: Increment.h:61
SOCA model state.
Definition: State.h:48
std::shared_ptr< const Geometry > geometry() const
Definition: State.cc:222
void serialize(std::vector< double > &) const override
Definition: State.cc:157
const int & toFortran() const
Definition: State.h:89
void updateTime(const util::Duration &dt)
Needed by PseudoModel.
Definition: State.h:62
void rotate2grid(const oops::Variables &, const oops::Variables &) const
Definition: State.cc:91
double norm() const
Definition: State.cc:197
void accumul(const double &, const State &)
Definition: State.cc:193
F90flds keyFlds_
Definition: State.h:100
const util::DateTime & validTime() const
Definition: State.cc:218
void deserialize(const std::vector< double > &, size_t &) override
Definition: State.cc:174
int & toFortran()
Definition: State.h:88
State & operator+=(const Increment &)
Interactions with Increment.
Definition: State.cc:100
static const std::string classname()
Definition: State.h:50
void write(const eckit::Configuration &) const
Definition: State.cc:119
State(const Geometry &, const oops::Variables &, const util::DateTime &)
Constructor, destructor.
Definition: State.cc:33
void expontrans(const oops::Variables &) const
Definition: State.cc:211
oops::Variables vars_
Definition: State.h:103
void zero()
Other.
Definition: State.cc:189
void print(std::ostream &) const override
Definition: State.cc:124
size_t serialSize() const override
Serialize and deserialize.
Definition: State.cc:143
void rotate2north(const oops::Variables &, const oops::Variables &) const
Rotations.
Definition: State.cc:84
virtual ~State()
Definition: State.cc:69
util::DateTime time_
Definition: State.h:104
void logtrans(const oops::Variables &) const
Logarithmic and exponential transformations.
Definition: State.cc:205
const oops::Variables & variables() const
Definition: State.h:91
std::shared_ptr< const Geometry > geom_
Definition: State.h:102
void read(const eckit::Configuration &)
I/O and diagnostics.
Definition: State.cc:112
State & operator=(const State &)
Basic operators.
Definition: State.cc:76
int F90flds
key type for soca_fields_mod::soca_fields
Definition: Fortran.h:26
Definition: GetValues.h:27