OOPS
ObsOpBaseTLAD.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2017-2018 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 QG_MODEL_OBSOPBASETLAD_H_
9 #define QG_MODEL_OBSOPBASETLAD_H_
10 
11 #include <map>
12 #include <string>
13 
14 #include <boost/noncopyable.hpp>
15 
16 #include "eckit/config/Configuration.h"
17 
18 #include "oops/base/Variables.h"
19 #include "oops/util/abor1_cpp.h"
20 #include "oops/util/Logger.h"
21 #include "oops/util/Printable.h"
22 
23 #include "oops/qg/ObsSpaceQG.h"
24 
25 namespace qg {
26 class GomQG;
27 class ObsBias;
28 class ObsBiasIncrement;
29 class ObsVecQG;
30 
31 // -----------------------------------------------------------------------------
32 /// Base class for observation operators
33 
34 class ObsOpBaseTLAD : public util::Printable,
35  private boost::noncopyable {
36  public:
37  ObsOpBaseTLAD() = default;
38 
39 /// Obs Operator
40  virtual void setTrajectory(const GomQG &, const ObsBias &) = 0;
41  virtual void simulateObsTL(const GomQG &, ObsVecQG &, const ObsBiasIncrement &) const = 0;
42  virtual void simulateObsAD(GomQG &, const ObsVecQG &, ObsBiasIncrement &) const = 0;
43 
44 /// Other
45  virtual const oops::Variables & requiredVars() const = 0; // Required from Model
46 
47  private:
48  virtual void print(std::ostream &) const = 0;
49 };
50 
51 // -----------------------------------------------------------------------------
52 
53 /// Obs Operator Factory
55  public:
56  static ObsOpBaseTLAD * create(const ObsSpaceQG &, const eckit::Configuration &);
57  virtual ~ObsOpTLADFactory() = default;
58  protected:
59  explicit ObsOpTLADFactory(const std::string &);
60  private:
61  virtual ObsOpBaseTLAD * make(const ObsSpaceQG &, const eckit::Configuration &) = 0;
62  static std::map < std::string, ObsOpTLADFactory * > & getMakers() {
63  static std::map < std::string, ObsOpTLADFactory * > makers_;
64  return makers_;
65  }
66 };
67 
68 // -----------------------------------------------------------------------------
69 
70 template<class T>
72  virtual ObsOpBaseTLAD * make(const ObsSpaceQG & odb, const eckit::Configuration & conf)
73  { return new T(odb, conf); }
74  public:
75  explicit ObsOpTLADMaker(const std::string & name) : ObsOpTLADFactory(name) {}
76 };
77 
78 // -----------------------------------------------------------------------------
79 
80 } // namespace qg
81 
82 #endif // QG_MODEL_OBSOPBASETLAD_H_
qg
The namespace for the qg model.
Definition: qg/model/AnalyticInit.cc:13
qg::ObsOpBaseTLAD::simulateObsTL
virtual void simulateObsTL(const GomQG &, ObsVecQG &, const ObsBiasIncrement &) const =0
qg::ObsOpBaseTLAD::requiredVars
virtual const oops::Variables & requiredVars() const =0
Other.
qg::ObsOpTLADFactory
Obs Operator Factory.
Definition: ObsOpBaseTLAD.h:54
qg::ObsOpTLADFactory::getMakers
static std::map< std::string, ObsOpTLADFactory * > & getMakers()
Definition: ObsOpBaseTLAD.h:62
qg::ObsOpBaseTLAD::setTrajectory
virtual void setTrajectory(const GomQG &, const ObsBias &)=0
Obs Operator.
qg::ObsBias
Class to handle observation bias parameters.
Definition: qg/model/ObsBias.h:37
qg::ObsOpTLADMaker::make
virtual ObsOpBaseTLAD * make(const ObsSpaceQG &odb, const eckit::Configuration &conf)
Definition: ObsOpBaseTLAD.h:72
qg::ObsSpaceQG
ObsSpace for QG model.
Definition: ObsSpaceQG.h:44
qg::ObsOpTLADFactory::create
static ObsOpBaseTLAD * create(const ObsSpaceQG &, const eckit::Configuration &)
Definition: ObsOpBaseTLAD.cc:28
qg::ObsOpTLADMaker
Definition: ObsOpBaseTLAD.h:71
qg::ObsOpTLADFactory::ObsOpTLADFactory
ObsOpTLADFactory(const std::string &)
Definition: ObsOpBaseTLAD.cc:18
qg::ObsOpTLADMaker::ObsOpTLADMaker
ObsOpTLADMaker(const std::string &name)
Definition: ObsOpBaseTLAD.h:75
qg::GomQG
GomQG class to handle local model values for QG model.
Definition: GomQG.h:33
qg::ObsOpBaseTLAD::print
virtual void print(std::ostream &) const =0
qg::ObsVecQG
ObsVecQG class to handle vectors in observation space for QG model.
Definition: ObsVecQG.h:34
qg::ObsOpBaseTLAD::ObsOpBaseTLAD
ObsOpBaseTLAD()=default
qg::ObsBiasIncrement
Definition: ObsBiasIncrement.h:31
oops::Variables
Definition: oops/base/Variables.h:23
qg::ObsOpTLADFactory::make
virtual ObsOpBaseTLAD * make(const ObsSpaceQG &, const eckit::Configuration &)=0
qg::ObsOpBaseTLAD::simulateObsAD
virtual void simulateObsAD(GomQG &, const ObsVecQG &, ObsBiasIncrement &) const =0
qg::ObsOpBaseTLAD
Base class for observation operators.
Definition: ObsOpBaseTLAD.h:35
Variables.h
qg::ObsOpTLADFactory::~ObsOpTLADFactory
virtual ~ObsOpTLADFactory()=default