FV3-JEDI
Increment.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_INCREMENT_INCREMENT_H_
9 #define FV3JEDI_INCREMENT_INCREMENT_H_
10 
11 #include <memory>
12 #include <ostream>
13 #include <string>
14 #include <vector>
15 
16 #include "atlas/field.h"
17 
20 #include "fv3jedi/State/State.h"
21 #include "oops/base/GeneralizedDepartures.h"
22 #include "oops/base/LocalIncrement.h"
23 #include "oops/base/Variables.h"
24 #include "oops/util/DateTime.h"
25 #include "oops/util/dot_product.h"
26 #include "oops/util/Duration.h"
27 #include "oops/util/ObjectCounter.h"
28 #include "oops/util/Printable.h"
29 
30 namespace eckit {
31  class Configuration;
32 }
33 
34 namespace ufo {
35  class GeoVaLs;
36  class Locations;
37 }
38 
39 namespace oops {
40  class Variables;
41 }
42 
43 namespace fv3jedi {
44  class ModelBiasIncrement;
45  class State;
46 
47 // FV3JEDI increment
48 
49 // -------------------------------------------------------------------------------------------------
50 
51 class Increment : public oops::GeneralizedDepartures, public util::Printable,
52  private util::ObjectCounter<Increment> {
53  public:
54  static const std::string classname() {return "fv3jedi::Increment";}
55 
56 /// Constructor, destructor
57  Increment(const Geometry &, const oops::Variables &, const util::DateTime &);
58  Increment(const Geometry &, const Increment &);
59  Increment(const Increment &, const bool);
60  virtual ~Increment();
61 
62 /// Basic operators
63  void diff(const State &, const State &);
64  void zero();
65  void zero(const util::DateTime &);
66  void ones();
67  Increment & operator =(const Increment &);
68  Increment & operator+=(const Increment &);
69  Increment & operator-=(const Increment &);
70  Increment & operator*=(const double &);
71  void axpy(const double &, const Increment &, const bool check = true);
72  double dot_product_with(const Increment &) const;
73  void schur_product_with(const Increment &);
74  void random();
75  void dirac(const eckit::Configuration &);
76 
77 /// Get/Set increment values at grid points
78  oops::LocalIncrement getLocal(const GeometryIterator &) const;
79  void setLocal(const oops::LocalIncrement &, const GeometryIterator &);
80 
81 /// ATLAS
82  void setAtlas(atlas::FieldSet *) const;
83  void toAtlas(atlas::FieldSet *) const;
84  void fromAtlas(atlas::FieldSet *);
85 
86 /// I/O and diagnostics
87  void read(const eckit::Configuration &);
88  void write(const eckit::Configuration &) const;
89  double norm() const;
90 
91  void updateTime(const util::Duration & dt) {time_ += dt;}
92 
93 /// Other
94  void accumul(const double &, const State &);
95  void jnormgrad(const State &, const eckit::Configuration &);
96 
97 /// Serialize and deserialize
98  size_t serialSize() const;
99  void serialize(std::vector<double> &) const;
100  void deserialize(const std::vector<double> &, size_t &);
101 
102 // Utilities
103  std::shared_ptr<const Geometry> geometry() const {return geom_;}
104 
105  const util::DateTime & time() const {return time_;}
106  util::DateTime & time() {return time_;}
107  const util::DateTime & validTime() const {return time_;}
108  util::DateTime & validTime() {return time_;}
109 
110  int & toFortran() {return keyInc_;}
111  const int & toFortran() const {return keyInc_;}
112 
113 // Private methods and variables
114  private:
115  void print(std::ostream &) const;
117  std::shared_ptr<const Geometry> geom_;
118  oops::Variables vars_;
119  util::DateTime time_;
120 };
121 // -------------------------------------------------------------------------------------------------
122 
123 } // namespace fv3jedi
124 
125 #endif // FV3JEDI_INCREMENT_INCREMENT_H_
fv3jedi::Increment::geom_
std::shared_ptr< const Geometry > geom_
Definition: Increment.h:117
fv3jedi::Increment::keyInc_
F90inc keyInc_
Definition: Increment.h:116
oops
Definition: ErrorCovariance.h:25
fv3jedi::Increment::toFortran
int & toFortran()
Definition: Increment.h:110
fv3jedi::F90inc
int F90inc
Definition: interface.h:44
fv3jedi::Increment::ones
void ones()
Definition: Increment.cc:112
Increment.interface.h
fv3jedi::Increment::write
void write(const eckit::Configuration &) const
Definition: Increment.cc:184
fv3jedi::Increment::time
const util::DateTime & time() const
Definition: Increment.h:105
fv3jedi::Increment::serialSize
size_t serialSize() const
Serialize and deserialize.
Definition: Increment.cc:234
fv3jedi::Increment::jnormgrad
void jnormgrad(const State &, const eckit::Configuration &)
fv3jedi::Increment::operator*=
Increment & operator*=(const double &)
Definition: Increment.cc:98
Geometry.h
fv3jedi::Increment::getLocal
oops::LocalIncrement getLocal(const GeometryIterator &) const
Get/Set increment values at grid points.
Definition: Increment.cc:139
fv3jedi::Increment::classname
static const std::string classname()
Definition: Increment.h:54
fv3jedi::Increment::deserialize
void deserialize(const std::vector< double > &, size_t &)
Definition: Increment.cc:255
fv3jedi::Increment::diff
void diff(const State &, const State &)
Basic operators.
Definition: Increment.cc:70
ufo
Definition: GetValues.h:39
eckit
Definition: FieldsMetadata.h:25
fv3jedi::Increment::setLocal
void setLocal(const oops::LocalIncrement &, const GeometryIterator &)
Definition: Increment.cc:161
fv3jedi::Increment::toAtlas
void toAtlas(atlas::FieldSet *) const
Definition: Increment.cc:170
fv3jedi::Increment::print
void print(std::ostream &) const
Definition: Increment.cc:196
fv3jedi::Increment::operator=
Increment & operator=(const Increment &)
Definition: Increment.cc:80
fv3jedi::Increment::validTime
const util::DateTime & validTime() const
Definition: Increment.h:107
fv3jedi::Increment::~Increment
virtual ~Increment()
Definition: Increment.cc:66
fv3jedi::Increment::Increment
Increment(const Geometry &, const oops::Variables &, const util::DateTime &)
Constructor, destructor.
Definition: Increment.cc:36
fv3jedi::Geometry
Geometry handles geometry for FV3JEDI model.
Definition: Geometry.h:41
fv3jedi::Increment::time_
util::DateTime time_
Definition: Increment.h:119
fv3jedi::Increment::updateTime
void updateTime(const util::Duration &dt)
Definition: Increment.h:91
fv3jedi::Increment::axpy
void axpy(const double &, const Increment &, const bool check=true)
Definition: Increment.cc:116
fv3jedi::Increment::norm
double norm() const
Definition: Increment.cc:190
fv3jedi::Increment
Definition: Increment.h:52
fv3jedi::Increment::geometry
std::shared_ptr< const Geometry > geometry() const
Definition: Increment.h:103
fv3jedi::State
Definition: State.h:45
fv3jedi::Increment::random
void random()
Definition: Increment.cc:135
fv3jedi::Increment::zero
void zero()
Definition: Increment.cc:103
fv3jedi::Increment::schur_product_with
void schur_product_with(const Increment &)
Definition: Increment.cc:125
fv3jedi::GeometryIterator
Definition: GeometryIterator.h:30
fv3jedi::Increment::operator+=
Increment & operator+=(const Increment &)
Definition: Increment.cc:86
fv3jedi::Increment::toFortran
const int & toFortran() const
Definition: Increment.h:111
fv3jedi
Configuration files should be formatted as e.g.
Definition: ErrorCovariance.cc:20
fv3jedi::Increment::accumul
void accumul(const double &, const State &)
Other.
Definition: Increment.cc:121
fv3jedi::Increment::setAtlas
void setAtlas(atlas::FieldSet *) const
ATLAS.
Definition: Increment.cc:166
fv3jedi::Increment::fromAtlas
void fromAtlas(atlas::FieldSet *)
Definition: Increment.cc:174
fv3jedi::Increment::validTime
util::DateTime & validTime()
Definition: Increment.h:108
fv3jedi::Increment::serialize
void serialize(std::vector< double > &) const
Definition: Increment.cc:243
fv3jedi::Increment::time
util::DateTime & time()
Definition: Increment.h:106
fv3jedi::Increment::read
void read(const eckit::Configuration &)
I/O and diagnostics.
Definition: Increment.cc:178
fv3jedi::Increment::dirac
void dirac(const eckit::Configuration &)
Definition: Increment.cc:229
fv3jedi::Increment::vars_
oops::Variables vars_
Definition: Increment.h:118
fv3jedi::Increment::operator-=
Increment & operator-=(const Increment &)
Definition: Increment.cc:92
fv3jedi::Increment::dot_product_with
double dot_product_with(const Increment &) const
Definition: Increment.cc:129
State.h