OOPS
ObsVecQG.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_OBSVECQG_H_
13 #define QG_MODEL_OBSVECQG_H_
14 
15 #include <Eigen/Dense>
16 #include <ostream>
17 #include <string>
18 
19 #include "oops/util/ObjectCounter.h"
20 #include "oops/util/Printable.h"
21 
22 #include "oops/qg/QgFortran.h"
23 
24 namespace qg {
25  class ObsSpaceQG;
26 
27  template<typename DATATYPE>
28  class ObsDataQG;
29 
30 // -----------------------------------------------------------------------------
31 /// ObsVecQG class to handle vectors in observation space for QG model.
32 
33 class ObsVecQG : public util::Printable,
34  private util::ObjectCounter<ObsVecQG> {
35  public:
36  static const std::string classname() {return "qg::ObsVecQG";}
37 
38  ObsVecQG(const ObsSpaceQG &,
39  const std::string & name = "", const bool fail = true);
40  ObsVecQG(const ObsVecQG &);
41  ObsVecQG(const ObsSpaceQG &, const ObsVecQG &);
42  ~ObsVecQG();
43 
44  ObsVecQG & operator = (const ObsVecQG &);
45  ObsVecQG & operator*= (const double &);
46  ObsVecQG & operator+= (const ObsVecQG &);
47  ObsVecQG & operator-= (const ObsVecQG &);
48  ObsVecQG & operator*= (const ObsVecQG &);
49  ObsVecQG & operator/= (const ObsVecQG &);
50  Eigen::VectorXd packEigen() const;
51 
52  void zero();
53  void axpy(const double &, const ObsVecQG &);
54  void invert();
55  void random();
56  double dot_product_with(const ObsVecQG &) const;
57  double rms() const;
58  void mask(const ObsDataQG<int> &) {}
59 
60  unsigned int nobs() const;
61 
62  const int & toFortran() const {return keyOvec_;}
63 
64 // I/O
65  void save(const std::string &) const;
66  void read(const std::string &);
67 
68  private:
69  void print(std::ostream &) const;
70 
71  const ObsSpaceQG & obsdb_;
73 };
74 // -----------------------------------------------------------------------------
75 
76 } // namespace qg
77 
78 #endif // QG_MODEL_OBSVECQG_H_
qg::ObsVecQG::~ObsVecQG
~ObsVecQG()
Definition: ObsVecQG.cc:48
qg::ObsVecQG::read
void read(const std::string &)
Definition: ObsVecQG.cc:143
qg::ObsVecQG::dot_product_with
double dot_product_with(const ObsVecQG &) const
Definition: ObsVecQG.cc:110
qg
The namespace for the qg model.
Definition: qg/model/AnalyticInit.cc:13
qg::ObsVecQG::print
void print(std::ostream &) const
Definition: ObsVecQG.cc:147
qg::ObsVecQG::random
void random()
Definition: ObsVecQG.cc:106
qg::ObsVecQG::obsdb_
const ObsSpaceQG & obsdb_
Definition: ObsVecQG.h:71
qg::ObsVecQG::keyOvec_
F90ovec keyOvec_
Definition: ObsVecQG.h:72
qg::ObsSpaceQG
ObsSpace for QG model.
Definition: ObsSpaceQG.h:44
qg::ObsVecQG::mask
void mask(const ObsDataQG< int > &)
Definition: ObsVecQG.h:58
qg::ObsVecQG::zero
void zero()
Definition: ObsVecQG.cc:92
qg::ObsDataQG
Data in observation space.
Definition: ObsDataQG.h:32
qg::ObsVecQG::nobs
unsigned int nobs() const
Definition: ObsVecQG.cc:159
qg::ObsVecQG::ObsVecQG
ObsVecQG(const ObsSpaceQG &, const std::string &name="", const bool fail=true)
Definition: ObsVecQG.cc:24
qg::ObsVecQG::invert
void invert()
Definition: ObsVecQG.cc:102
qg::ObsVecQG::rms
double rms() const
Definition: ObsVecQG.cc:118
qg::ObsVecQG::axpy
void axpy(const double &, const ObsVecQG &)
Definition: ObsVecQG.cc:96
qg::ObsVecQG::operator+=
ObsVecQG & operator+=(const ObsVecQG &)
Definition: ObsVecQG.cc:64
qg::ObsVecQG::packEigen
Eigen::VectorXd packEigen() const
Definition: ObsVecQG.cc:133
qg::ObsVecQG::save
void save(const std::string &) const
Definition: ObsVecQG.cc:129
qg::ObsVecQG::operator*=
ObsVecQG & operator*=(const double &)
Definition: ObsVecQG.cc:59
qg::ObsVecQG::operator/=
ObsVecQG & operator/=(const ObsVecQG &)
Definition: ObsVecQG.cc:85
qg::ObsVecQG
ObsVecQG class to handle vectors in observation space for QG model.
Definition: ObsVecQG.h:34
qg::F90ovec
int F90ovec
Definition: QgFortran.h:55
qg::ObsVecQG::classname
static const std::string classname()
Definition: ObsVecQG.h:36
qg::ObsVecQG::toFortran
const int & toFortran() const
Definition: ObsVecQG.h:62
qg::ObsVecQG::operator=
ObsVecQG & operator=(const ObsVecQG &)
Definition: ObsVecQG.cc:52
qg::ObsVecQG::operator-=
ObsVecQG & operator-=(const ObsVecQG &)
Definition: ObsVecQG.cc:71