UFO
LinearObsOperatorBase.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 UFO_LINEAROBSOPERATORBASE_H_
9 #define UFO_LINEAROBSOPERATORBASE_H_
10 
11 #include <map>
12 #include <string>
13 
14 #include <boost/noncopyable.hpp>
15 
16 #include "eckit/config/Configuration.h"
17 #include "ioda/ObsSpace.h"
18 #include "oops/base/Variables.h"
19 #include "oops/util/abor1_cpp.h"
20 #include "oops/util/Printable.h"
21 
22 namespace ioda {
23 class ObsVector;
24 }
25 
26 namespace ufo {
27 class GeoVaLs;
28 class ObsBias;
29 class ObsDiagnostics;
30 
31 // -----------------------------------------------------------------------------
32 /// Base class for observation operators
33 
34 class LinearObsOperatorBase : public util::Printable,
35  private boost::noncopyable {
36  public:
39 
40 /// Obs Operator
41  virtual void setTrajectory(const GeoVaLs &, const ObsBias &, ObsDiagnostics &) = 0;
42  virtual void simulateObsTL(const GeoVaLs &, ioda::ObsVector &) const = 0;
43  virtual void simulateObsAD(GeoVaLs &, const ioda::ObsVector &) const = 0;
44 
45 /// Operator input required from Model
46  virtual const oops::Variables & requiredVars() const = 0;
47 
48  private:
49  virtual void print(std::ostream &) const = 0;
50 };
51 
52 // -----------------------------------------------------------------------------
53 
54 /// Obs Operator Factory
56  public:
57  static LinearObsOperatorBase * create(const ioda::ObsSpace &, const eckit::Configuration &);
58  virtual ~LinearObsOperatorFactory() = default;
59  protected:
60  explicit LinearObsOperatorFactory(const std::string &);
61  private:
62  virtual LinearObsOperatorBase * make(const ioda::ObsSpace &, const eckit::Configuration &) = 0;
63  static std::map < std::string, LinearObsOperatorFactory * > & getMakers() {
64  static std::map < std::string, LinearObsOperatorFactory * > makers_;
65  return makers_;
66  }
67 };
68 
69 // -----------------------------------------------------------------------------
70 
71 template<class T>
73  virtual LinearObsOperatorBase * make(const ioda::ObsSpace & odb,
74  const eckit::Configuration & conf) {
75  return new T(odb, conf);
76  }
77  public:
78  explicit LinearObsOperatorMaker(const std::string & name) : LinearObsOperatorFactory(name) {}
79 };
80 
81 // -----------------------------------------------------------------------------
82 
83 } // namespace ufo
84 
85 #endif // UFO_LINEAROBSOPERATORBASE_H_
ufo::LinearObsOperatorBase::simulateObsAD
virtual void simulateObsAD(GeoVaLs &, const ioda::ObsVector &) const =0
ufo::LinearObsOperatorFactory::LinearObsOperatorFactory
LinearObsOperatorFactory(const std::string &)
Definition: LinearObsOperatorBase.cc:19
ufo::LinearObsOperatorMaker::make
virtual LinearObsOperatorBase * make(const ioda::ObsSpace &odb, const eckit::Configuration &conf)
Definition: LinearObsOperatorBase.h:73
ufo::LinearObsOperatorBase::LinearObsOperatorBase
LinearObsOperatorBase()
Definition: LinearObsOperatorBase.h:37
ioda
Definition: ObsAtmSfcInterp.h:24
ufo
Definition: RunCRTM.h:27
ufo::LinearObsOperatorBase::print
virtual void print(std::ostream &) const =0
ufo::ObsBias
Class to handle observation bias parameters.
Definition: ObsBias.h:44
ufo::LinearObsOperatorBase::setTrajectory
virtual void setTrajectory(const GeoVaLs &, const ObsBias &, ObsDiagnostics &)=0
Obs Operator.
ufo::ObsDiagnostics
Definition: src/ufo/ObsDiagnostics.h:35
ufo::LinearObsOperatorFactory::make
virtual LinearObsOperatorBase * make(const ioda::ObsSpace &, const eckit::Configuration &)=0
ufo::LinearObsOperatorFactory::create
static LinearObsOperatorBase * create(const ioda::ObsSpace &, const eckit::Configuration &)
Definition: LinearObsOperatorBase.cc:30
ufo::LinearObsOperatorMaker::LinearObsOperatorMaker
LinearObsOperatorMaker(const std::string &name)
Definition: LinearObsOperatorBase.h:78
ufo::GeoVaLs
GeoVaLs: geophysical values at locations.
Definition: src/ufo/GeoVaLs.h:39
ufo::LinearObsOperatorBase::simulateObsTL
virtual void simulateObsTL(const GeoVaLs &, ioda::ObsVector &) const =0
ufo::LinearObsOperatorBase::~LinearObsOperatorBase
virtual ~LinearObsOperatorBase()
Definition: LinearObsOperatorBase.h:38
ufo::LinearObsOperatorBase::requiredVars
virtual const oops::Variables & requiredVars() const =0
Operator input required from Model.
ufo::LinearObsOperatorFactory::~LinearObsOperatorFactory
virtual ~LinearObsOperatorFactory()=default
ufo::LinearObsOperatorFactory
Obs Operator Factory.
Definition: LinearObsOperatorBase.h:55
ufo::LinearObsOperatorBase
Base class for observation operators.
Definition: LinearObsOperatorBase.h:35
conf
Definition: conf.py:1
ufo::LinearObsOperatorFactory::getMakers
static std::map< std::string, LinearObsOperatorFactory * > & getMakers()
Definition: LinearObsOperatorBase.h:63
ufo::LinearObsOperatorMaker
Definition: LinearObsOperatorBase.h:72