OOPS
IncrementQG.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2009-2016 ECMWF.
3  * (C) Copyright 2017-2019 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 QG_MODEL_INCREMENTQG_H_
13 #define QG_MODEL_INCREMENTQG_H_
14 
15 #include <memory>
16 #include <ostream>
17 #include <string>
18 #include <vector>
19 
20 #include "atlas/field.h"
21 
22 #include "eckit/config/LocalConfiguration.h"
23 
26 #include "oops/util/DateTime.h"
27 #include "oops/util/dot_product.h"
28 #include "oops/util/Duration.h"
29 #include "oops/util/ObjectCounter.h"
30 #include "oops/util/Printable.h"
31 #include "oops/util/Serializable.h"
32 
33 #include "oops/qg/FieldsQG.h"
34 #include "oops/qg/GeometryQG.h"
35 #include "oops/qg/GeometryQGIterator.h"
36 
37 namespace eckit {
38  class Configuration;
39 }
40 
41 namespace oops {
42  class LocalIncrement;
43  class Variables;
44 }
45 
46 namespace qg {
47  class GomQG;
48  class LocationsQG;
49  class GeometryQG;
50  class ModelBiasIncrement;
51  class ErrorCovarianceQG;
52  class StateQG;
53 
54 /// Increment Class: Difference between two states
55 /*!
56  * Some fields that are present in a State may not be present in
57  * an Increment. The Increment contains everything that is needed by
58  * the tangent-linear and adjoint models.
59  */
60 
61 // -----------------------------------------------------------------------------
62 
64  public util::Printable,
65  public util::Serializable,
66  private util::ObjectCounter<IncrementQG> {
67  public:
68  static const std::string classname() {return "qg::IncrementQG";}
69 
70 /// Constructor, destructor
71  IncrementQG(const GeometryQG &, const oops::Variables &, const util::DateTime &);
72  IncrementQG(const GeometryQG &, const IncrementQG &);
73  IncrementQG(const IncrementQG &, const bool);
74  IncrementQG(const IncrementQG &);
75  virtual ~IncrementQG();
76 
77 /// Basic operators
78  void diff(const StateQG &, const StateQG &);
79  void zero();
80  void zero(const util::DateTime &);
81  void ones();
85  IncrementQG & operator*=(const double &);
86  void axpy(const double &, const IncrementQG &, const bool check = true);
87  double dot_product_with(const IncrementQG &) const;
88  void schur_product_with(const IncrementQG &);
89  void random();
90  void dirac(const eckit::Configuration &);
91 
92 /// I/O and diagnostics
93  void read(const eckit::Configuration &);
94  void write(const eckit::Configuration &) const;
95  double norm() const {return fields_->norm();}
96  const util::DateTime & validTime() const {return fields_->time();}
97  util::DateTime & validTime() {return fields_->time();}
98  void updateTime(const util::Duration & dt) {fields_->time() += dt;}
99 
100 /// ATLAS FieldSet
101  void setAtlas(atlas::FieldSet *) const;
102  void toAtlas(atlas::FieldSet *) const;
103  void fromAtlas(atlas::FieldSet *);
104 
105 /// Access to fields
106  FieldsQG & fields() {return *fields_;}
107  const FieldsQG & fields() const {return *fields_;}
108 
109  std::shared_ptr<const GeometryQG> geometry() const {
110  return fields_->geometry();
111  }
112 
113 /// Other
114  void accumul(const double &, const StateQG &);
116  void setLocal(const oops::LocalIncrement &, const GeometryQGIterator &);
117 
118 /// Serialization
119  size_t serialSize() const override;
120  void serialize(std::vector<double> &) const override;
121  void deserialize(const std::vector<double> &, size_t &) override;
122 
123 /// Data
124  private:
125  void print(std::ostream &) const override;
126  const bool lbc_ = false;
127  std::unique_ptr<FieldsQG> fields_;
128 };
129 // -----------------------------------------------------------------------------
130 
131 } // namespace qg
132 
133 #endif // QG_MODEL_INCREMENTQG_H_
qg::IncrementQG::serialSize
size_t serialSize() const override
Serialization.
Definition: IncrementQG.cc:168
oops
The namespace for the main oops code.
Definition: ErrorCovarianceL95.cc:22
qg::IncrementQG::validTime
const util::DateTime & validTime() const
Definition: IncrementQG.h:96
oops::GeneralizedDepartures
Abstract base class for quantities.
Definition: GeneralizedDepartures.h:22
qg::IncrementQG::setAtlas
void setAtlas(atlas::FieldSet *) const
ATLAS FieldSet.
Definition: IncrementQG.cc:144
qg::IncrementQG::dot_product_with
double dot_product_with(const IncrementQG &) const
Definition: IncrementQG.cc:128
qg
The namespace for the qg model.
Definition: qg/model/AnalyticInit.cc:13
qg::IncrementQG::geometry
std::shared_ptr< const GeometryQG > geometry() const
Definition: IncrementQG.h:109
qg::StateQG
QG model state.
Definition: StateQG.h:42
qg::IncrementQG::deserialize
void deserialize(const std::vector< double > &, size_t &) override
Definition: IncrementQG.cc:177
qg::IncrementQG::random
void random()
Definition: IncrementQG.cc:132
qg::IncrementQG::getLocal
oops::LocalIncrement getLocal(const GeometryQGIterator &) const
Definition: IncrementQG.cc:186
qg::IncrementQG::lbc_
const bool lbc_
Definition: IncrementQG.h:126
qg::IncrementQG::updateTime
void updateTime(const util::Duration &dt)
Definition: IncrementQG.h:98
qg::IncrementQG::IncrementQG
IncrementQG(const GeometryQG &, const oops::Variables &, const util::DateTime &)
Constructor, destructor.
Definition: IncrementQG.cc:42
LocalIncrement.h
qg::IncrementQG::operator-=
IncrementQG & operator-=(const IncrementQG &)
Definition: IncrementQG.cc:91
qg::IncrementQG::validTime
util::DateTime & validTime()
Definition: IncrementQG.h:97
qg::IncrementQG::zero
void zero()
Definition: IncrementQG.cc:102
qg::IncrementQG::diff
void diff(const StateQG &, const StateQG &)
Basic operators.
Definition: IncrementQG.cc:74
qg::IncrementQG::serialize
void serialize(std::vector< double > &) const override
Definition: IncrementQG.cc:173
qg::IncrementQG::~IncrementQG
virtual ~IncrementQG()
Definition: IncrementQG.cc:68
eckit
Definition: FieldL95.h:22
qg::GeometryQGIterator
Definition: GeometryQGIterator.h:33
qg::IncrementQG::axpy
void axpy(const double &, const IncrementQG &, const bool check=true)
Definition: IncrementQG.cc:114
qg::IncrementQG
Increment Class: Difference between two states.
Definition: IncrementQG.h:66
qg::IncrementQG::ones
void ones()
Definition: IncrementQG.cc:110
qg::IncrementQG::print
void print(std::ostream &) const override
Data.
Definition: IncrementQG.cc:181
qg::IncrementQG::write
void write(const eckit::Configuration &) const
Definition: IncrementQG.cc:162
qg::IncrementQG::setLocal
void setLocal(const oops::LocalIncrement &, const GeometryQGIterator &)
Definition: IncrementQG.cc:190
qg::IncrementQG::dirac
void dirac(const eckit::Configuration &)
Definition: IncrementQG.cc:136
oops::LocalIncrement
Definition: LocalIncrement.h:19
qg::IncrementQG::operator=
IncrementQG & operator=(const IncrementQG &)
Definition: IncrementQG.cc:80
qg::IncrementQG::toAtlas
void toAtlas(atlas::FieldSet *) const
Definition: IncrementQG.cc:148
qg::IncrementQG::operator*=
IncrementQG & operator*=(const double &)
Definition: IncrementQG.cc:97
qg::IncrementQG::norm
double norm() const
Definition: IncrementQG.h:95
qg::IncrementQG::fromAtlas
void fromAtlas(atlas::FieldSet *)
Definition: IncrementQG.cc:152
qg::IncrementQG::classname
static const std::string classname()
Definition: IncrementQG.h:68
qg::IncrementQG::fields
FieldsQG & fields()
Access to fields.
Definition: IncrementQG.h:106
GeneralizedDepartures.h
qg::FieldsQG
Class to represent a Fields for the QG model.
Definition: FieldsQG.h:52
oops::Variables
Definition: oops/base/Variables.h:23
qg::GeometryQG
GeometryQG handles geometry for QG model.
Definition: GeometryQG.h:54
qg::IncrementQG::fields
const FieldsQG & fields() const
Definition: IncrementQG.h:107
qg::IncrementQG::read
void read(const eckit::Configuration &)
I/O and diagnostics.
Definition: IncrementQG.cc:158
qg::IncrementQG::accumul
void accumul(const double &, const StateQG &)
Other.
Definition: IncrementQG.cc:120
qg::IncrementQG::schur_product_with
void schur_product_with(const IncrementQG &)
Definition: IncrementQG.cc:124
qg::IncrementQG::fields_
std::unique_ptr< FieldsQG > fields_
Definition: IncrementQG.h:127
qg::IncrementQG::operator+=
IncrementQG & operator+=(const IncrementQG &)
Definition: IncrementQG.cc:85