OOPS
FieldsQG.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2009-2016 ECMWF.
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  * In applying this licence, ECMWF does not waive the privileges and immunities
7  * granted to it by virtue of its status as an intergovernmental organisation nor
8  * does it submit to any jurisdiction.
9  */
10 
11 #ifndef QG_MODEL_FIELDSQG_H_
12 #define QG_MODEL_FIELDSQG_H_
13 
14 #include <memory>
15 #include <ostream>
16 #include <string>
17 #include <vector>
18 
19 #include "atlas/field.h"
20 
21 #include "eckit/config/LocalConfiguration.h"
22 
24 #include "oops/base/Variables.h"
25 #include "oops/util/DateTime.h"
26 #include "oops/util/Duration.h"
27 #include "oops/util/ObjectCounter.h"
28 #include "oops/util/Printable.h"
29 #include "oops/util/Serializable.h"
30 
31 #include "oops/qg/GeometryQG.h"
32 #include "oops/qg/GeometryQGIterator.h"
33 
34 // Forward declarations
35 namespace eckit {
36  class Configuration;
37 }
38 
39 namespace oops {
40  class Variables;
41  class LocalIncrement;
42 }
43 
44 namespace qg {
45  class LocationsQG;
46  class GomQG;
47 
48 // -----------------------------------------------------------------------------
49 /// Class to represent a Fields for the QG model
50 class FieldsQG : public util::Printable,
51  public util::Serializable,
52  private util::ObjectCounter<FieldsQG> {
53  public:
54  static const std::string classname() {return "qg::FieldsQG";}
55 
56 // Constructors and basic operators
57  FieldsQG(const GeometryQG &, const oops::Variables &, const bool &, const util::DateTime &);
58  FieldsQG(const FieldsQG &, const GeometryQG &);
59  FieldsQG(const FieldsQG &, const oops::Variables &);
60  FieldsQG(const FieldsQG &, const bool);
61  FieldsQG(const FieldsQG &);
62  ~FieldsQG();
63 
64  void zero();
65  void zero(const util::DateTime &);
66  void ones();
67  FieldsQG & operator=(const FieldsQG &);
68  FieldsQG & operator+=(const FieldsQG &);
69  FieldsQG & operator-=(const FieldsQG &);
70  FieldsQG & operator*=(const double &);
71  void axpy(const double &, const FieldsQG &);
72  double dot_product_with(const FieldsQG &) const;
73  void schur_product_with(const FieldsQG &);
74  void dirac(const eckit::Configuration &);
75  void random();
76 
77 // Interpolate full fields
78  void changeResolution(const FieldsQG &);
79  void add(const FieldsQG &);
80  void diff(const FieldsQG &, const FieldsQG &);
81 
82 // ATLAS FieldSet
83  void setAtlas(atlas::FieldSet *) const;
84  void toAtlas(atlas::FieldSet *) const;
85  void fromAtlas(atlas::FieldSet *);
86 
87 // Utilities
88  void read(const eckit::Configuration &);
89  void analytic_init(const eckit::Configuration &);
90  void write(const eckit::Configuration &) const;
91  double norm() const;
92  std::shared_ptr<const GeometryQG> geometry() const {return geom_;}
93  const oops::Variables & variables() const {return vars_;}
94 
95  const util::DateTime & time() const {return time_;}
96  util::DateTime & time() {return time_;}
97  void updateTime(const util::Duration & dt) {time_ += dt;}
98 
99  const int & toFortran() const {return keyFlds_;}
100 
101  bool isForModel(const bool &) const;
102 
104  void setLocal(const oops::LocalIncrement &, const GeometryQGIterator &);
105 
106 /// Serialization
107  size_t serialSize() const override;
108  void serialize(std::vector<double> &) const override;
109  void deserialize(const std::vector<double> &, size_t &) override;
110 
111  private:
112  void print(std::ostream &) const override;
114  std::shared_ptr<const GeometryQG> geom_;
116  const bool lbc_;
117  util::DateTime time_;
118 };
119 // -----------------------------------------------------------------------------
120 
121 } // namespace qg
122 #endif // QG_MODEL_FIELDSQG_H_
oops
The namespace for the main oops code.
Definition: ErrorCovarianceL95.cc:22
qg::F90flds
int F90flds
Definition: QgFortran.h:51
qg::FieldsQG::FieldsQG
FieldsQG(const GeometryQG &, const oops::Variables &, const bool &, const util::DateTime &)
Definition: FieldsQG.cc:36
qg
The namespace for the qg model.
Definition: qg/model/AnalyticInit.cc:13
qg::FieldsQG::fromAtlas
void fromAtlas(atlas::FieldSet *)
Definition: FieldsQG.cc:157
qg::FieldsQG::time
util::DateTime & time()
Definition: FieldsQG.h:96
qg::FieldsQG::dot_product_with
double dot_product_with(const FieldsQG &) const
Definition: FieldsQG.cc:116
qg::FieldsQG::vars_
const oops::Variables vars_
Definition: FieldsQG.h:115
qg::FieldsQG::setAtlas
void setAtlas(atlas::FieldSet *) const
Definition: FieldsQG.cc:149
qg::FieldsQG::variables
const oops::Variables & variables() const
Definition: FieldsQG.h:93
qg::FieldsQG::geometry
std::shared_ptr< const GeometryQG > geometry() const
Definition: FieldsQG.h:92
qg::FieldsQG::dirac
void dirac(const eckit::Configuration &)
Definition: FieldsQG.cc:130
qg::FieldsQG::serialize
void serialize(std::vector< double > &) const override
Definition: FieldsQG.cc:237
LocalIncrement.h
qg::FieldsQG::write
void write(const eckit::Configuration &) const
Definition: FieldsQG.cc:169
qg::FieldsQG::print
void print(std::ostream &) const override
Definition: FieldsQG.cc:179
qg::FieldsQG::isForModel
bool isForModel(const bool &) const
Definition: FieldsQG.cc:206
qg::FieldsQG::setLocal
void setLocal(const oops::LocalIncrement &, const GeometryQGIterator &)
Definition: FieldsQG.cc:223
qg::FieldsQG::operator+=
FieldsQG & operator+=(const FieldsQG &)
Definition: FieldsQG.cc:84
qg::FieldsQG::serialSize
size_t serialSize() const override
Serialization.
Definition: FieldsQG.cc:228
qg::FieldsQG::norm
double norm() const
Definition: FieldsQG.cc:173
qg::FieldsQG::lbc_
const bool lbc_
Definition: FieldsQG.h:116
qg::FieldsQG::analytic_init
void analytic_init(const eckit::Configuration &)
Definition: FieldsQG.cc:165
eckit
Definition: FieldL95.h:22
qg::GeometryQGIterator
Definition: GeometryQGIterator.h:33
qg::FieldsQG::getLocal
oops::LocalIncrement getLocal(const GeometryQGIterator &) const
Definition: FieldsQG.cc:214
qg::FieldsQG::schur_product_with
void schur_product_with(const FieldsQG &)
Definition: FieldsQG.cc:122
qg::FieldsQG::toFortran
const int & toFortran() const
Definition: FieldsQG.h:99
qg::FieldsQG::zero
void zero()
Definition: FieldsQG.cc:99
qg::FieldsQG::add
void add(const FieldsQG &)
Definition: FieldsQG.cc:138
qg::FieldsQG::geom_
std::shared_ptr< const GeometryQG > geom_
Definition: FieldsQG.h:114
qg::FieldsQG::toAtlas
void toAtlas(atlas::FieldSet *) const
Definition: FieldsQG.cc:153
qg::FieldsQG::time_
util::DateTime time_
Definition: FieldsQG.h:117
qg::FieldsQG::changeResolution
void changeResolution(const FieldsQG &)
Definition: FieldsQG.cc:134
qg::FieldsQG::time
const util::DateTime & time() const
Definition: FieldsQG.h:95
oops::LocalIncrement
Definition: LocalIncrement.h:19
qg::FieldsQG::deserialize
void deserialize(const std::vector< double > &, size_t &) override
Definition: FieldsQG.cc:251
qg::FieldsQG::classname
static const std::string classname()
Definition: FieldsQG.h:54
qg::FieldsQG::random
void random()
Definition: FieldsQG.cc:126
qg::FieldsQG::~FieldsQG
~FieldsQG()
Definition: FieldsQG.cc:74
qg::FieldsQG::operator-=
FieldsQG & operator-=(const FieldsQG &)
Definition: FieldsQG.cc:89
qg::FieldsQG::axpy
void axpy(const double &, const FieldsQG &)
Definition: FieldsQG.cc:112
qg::FieldsQG::diff
void diff(const FieldsQG &, const FieldsQG &)
Definition: FieldsQG.cc:143
qg::FieldsQG::operator*=
FieldsQG & operator*=(const double &)
Definition: FieldsQG.cc:94
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::FieldsQG::operator=
FieldsQG & operator=(const FieldsQG &)
Definition: FieldsQG.cc:78
Variables.h
qg::FieldsQG::updateTime
void updateTime(const util::Duration &dt)
Definition: FieldsQG.h:97
qg::FieldsQG::ones
void ones()
Definition: FieldsQG.cc:108
qg::FieldsQG::read
void read(const eckit::Configuration &)
Definition: FieldsQG.cc:161
qg::FieldsQG::keyFlds_
F90flds keyFlds_
Definition: FieldsQG.h:113