FV3-JEDI
State.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2017-2020 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 FV3JEDI_STATE_STATE_H_
9 #define FV3JEDI_STATE_STATE_H_
10 
11 #include <memory>
12 #include <ostream>
13 #include <string>
14 #include <vector>
15 
16 #include "oops/base/Variables.h"
17 #include "oops/util/DateTime.h"
18 #include "oops/util/ObjectCounter.h"
19 #include "oops/util/Printable.h"
20 
24 
25 namespace eckit {
26  class Configuration;
27 }
28 
29 namespace ufo {
30  class GeoVaLs;
31  class Locations;
32 }
33 
34 namespace oops {
35  class Variables;
36 }
37 
38 namespace fv3jedi {
39  class Geometry;
40  class Increment;
41 
42 // FV3JEDI model state
43 
44 // -------------------------------------------------------------------------------------------------
45 class State : public util::Printable, private util::ObjectCounter<State> {
46  public:
47  static const std::string classname() {return "fv3jedi::State";}
48 
49 // Constructor, destructor and basic operators
50  State(const Geometry &, const oops::Variables &, const util::DateTime &);
51  State(const Geometry &, const eckit::Configuration &);
52  State(const Geometry &, const State &);
53  State(const State &);
54  virtual ~State();
55 
56  State & operator=(const State &);
57  void zero();
58  void accumul(const double &, const State &);
59 
60 // Interpolate state
61  void changeResolution(const State & xx);
62 
63 // Interactions with Increment
64  State & operator+=(const Increment &);
65 
66 // IO and diagnostics
67  void read(const eckit::Configuration &);
68  void analytic_init(const eckit::Configuration &, const Geometry &);
69  void write(const eckit::Configuration &) const;
70  double norm() const;
71 
72 /// Serialize and deserialize
73  size_t serialSize() const;
74  void serialize(std::vector<double> &) const;
75  void deserialize(const std::vector<double> &, size_t &);
76 
77 // Utilities
78  std::shared_ptr<const Geometry> geometry() const {return geom_;}
79  const oops::Variables & variables() const {return vars_;}
80 
81  const util::DateTime & time() const {return time_;}
82  util::DateTime & time() {return time_;}
83  const util::DateTime & validTime() const {return time_;}
84  util::DateTime & validTime() {return time_;}
85  void updateTime(const util::Duration & dt) {time_ += dt;}
86 
87  int & toFortran() {return keyState_;}
88  const int & toFortran() const {return keyState_;}
89 
90 // Private methods and variables
91  private:
92  void print(std::ostream &) const;
94  std::shared_ptr<const Geometry> geom_;
95  oops::Variables vars_;
96  util::DateTime time_;
97 };
98 
99 // -------------------------------------------------------------------------------------------------
100 
101 } // namespace fv3jedi
102 
103 #endif // FV3JEDI_STATE_STATE_H_
oops
Definition: ErrorCovariance.h:25
fv3jedi::State::read
void read(const eckit::Configuration &)
Definition: State.cc:98
fv3jedi::State::time
const util::DateTime & time() const
Definition: State.h:81
fv3jedi::State::variables
const oops::Variables & variables() const
Definition: State.h:79
fv3jedi::State::serialSize
size_t serialSize() const
Serialize and deserialize.
Definition: State.cc:163
fv3jedi::State::norm
double norm() const
Definition: State.cc:157
fv3jedi::State::~State
virtual ~State()
Definition: State.cc:74
fv3jedi::State::classname
static const std::string classname()
Definition: State.h:47
Geometry.h
fv3jedi::State::zero
void zero()
Definition: State.cc:149
fv3jedi::State::changeResolution
void changeResolution(const State &xx)
Definition: State.cc:84
ufo
Definition: GetValues.h:39
fv3jedi::State::write
void write(const eckit::Configuration &) const
Definition: State.cc:110
fv3jedi::State::vars_
oops::Variables vars_
Definition: State.h:95
fv3jedi::State::geometry
std::shared_ptr< const Geometry > geometry() const
Definition: State.h:78
fv3jedi::State::geom_
std::shared_ptr< const Geometry > geom_
Definition: State.h:94
eckit
Definition: FieldsMetadata.h:25
fv3jedi::F90state
int F90state
Definition: interface.h:42
fv3jedi::State::validTime
util::DateTime & validTime()
Definition: State.h:84
fv3jedi::State::toFortran
int & toFortran()
Definition: State.h:87
fv3jedi::State::validTime
const util::DateTime & validTime() const
Definition: State.h:83
fv3jedi::State::accumul
void accumul(const double &, const State &)
Definition: State.cc:153
fv3jedi::State::serialize
void serialize(std::vector< double > &) const
Definition: State.cc:174
fv3jedi::Geometry
Geometry handles geometry for FV3JEDI model.
Definition: Geometry.h:41
fv3jedi::State::print
void print(std::ostream &) const
Definition: State.cc:116
fv3jedi::State::operator=
State & operator=(const State &)
Definition: State.cc:78
fv3jedi::Increment
Definition: Increment.h:52
fv3jedi::State::operator+=
State & operator+=(const Increment &)
Definition: State.cc:89
fv3jedi::State
Definition: State.h:45
State.interface.h
fv3jedi::State::analytic_init
void analytic_init(const eckit::Configuration &, const Geometry &)
Definition: State.cc:104
fv3jedi
Configuration files should be formatted as e.g.
Definition: ErrorCovariance.cc:20
Increment.h
fv3jedi::State::toFortran
const int & toFortran() const
Definition: State.h:88
fv3jedi::State::updateTime
void updateTime(const util::Duration &dt)
Definition: State.h:85
fv3jedi::State::time
util::DateTime & time()
Definition: State.h:82
fv3jedi::State::time_
util::DateTime time_
Definition: State.h:96
fv3jedi::State::State
State(const Geometry &, const oops::Variables &, const util::DateTime &)
Definition: State.cc:31
fv3jedi::State::deserialize
void deserialize(const std::vector< double > &, size_t &)
Definition: State.cc:189
fv3jedi::State::keyState_
F90state keyState_
Definition: State.h:93