8 #ifndef UFO_LINEAROBSOPERATORBASE_H_
9 #define UFO_LINEAROBSOPERATORBASE_H_
16 #include <boost/noncopyable.hpp>
18 #include "eckit/config/Configuration.h"
19 #include "ioda/ObsSpace.h"
20 #include "oops/base/Variables.h"
21 #include "oops/util/AssociativeContainers.h"
22 #include "oops/util/parameters/ConfigurationParameter.h"
23 #include "oops/util/parameters/HasParameters_.h"
24 #include "oops/util/parameters/Parameters.h"
25 #include "oops/util/parameters/ParametersOrConfiguration.h"
26 #include "oops/util/parameters/RequiredPolymorphicParameter.h"
27 #include "oops/util/Printable.h"
55 private boost::noncopyable {
78 virtual void print(std::ostream &)
const = 0;
81 const ioda::ObsSpace &
odb_;
99 oops::RequiredPolymorphicParameter<ObsOperatorParametersBase, LinearObsOperatorFactory>
118 const std::string &name);
137 static std::map < std::string, LinearObsOperatorFactory * > &
getMakers() {
138 static std::map < std::string, LinearObsOperatorFactory * > makers_;
149 typedef oops::TParameters_IfAvailableElseFallbackType_t<T, GenericObsOperatorParameters>
154 const auto &stronglyTypedParams =
dynamic_cast<const Parameters_&
>(params);
156 oops::parametersOrConfiguration<oops::HasParameters_<T>::value>(
157 stronglyTypedParams));
161 return std::make_unique<Parameters_>();
GeoVaLs: geophysical values at locations.
virtual void setTrajectory(const GeoVaLs &, ObsDiagnostics &)=0
Obs Operator.
virtual void simulateObsTL(const GeoVaLs &, ioda::ObsVector &) const =0
virtual oops::Variables simulatedVars() const
List of variables simulated by this operator.
LinearObsOperatorBase(const ioda::ObsSpace &odb)
virtual ~LinearObsOperatorBase()
const ioda::ObsSpace & odb_
const ioda::ObsSpace & obsspace() const
The space containing the observations to be simulated by this operator.
virtual void simulateObsAD(GeoVaLs &, const ioda::ObsVector &) const =0
virtual void print(std::ostream &) const =0
virtual const oops::Variables & requiredVars() const =0
Operator input required from Model.
Linear obs operator factory.
virtual ~LinearObsOperatorFactory()=default
virtual LinearObsOperatorBase * make(const ioda::ObsSpace &, const ObsOperatorParametersBase &)=0
static std::unique_ptr< ObsOperatorParametersBase > createParameters(const std::string &name)
Create and return an instance of the subclass of ObsOperatorParametersBase storing parameters of line...
LinearObsOperatorFactory(const std::string &name)
Register a maker able to create linear observation operators of type name.
static std::vector< std::string > getMakerNames()
Return the names of all operators that can be created by one of the registered makers.
virtual std::unique_ptr< ObsOperatorParametersBase > makeParameters() const =0
static std::map< std::string, LinearObsOperatorFactory * > & getMakers()
static LinearObsOperatorBase * create(const ioda::ObsSpace &, const ObsOperatorParametersBase &)
Create and return a new linear observation operator.
oops::TParameters_IfAvailableElseFallbackType_t< T, GenericObsOperatorParameters > Parameters_
LinearObsOperatorBase * make(const ioda::ObsSpace &odb, const ObsOperatorParametersBase ¶ms) override
LinearObsOperatorMaker(const std::string &name)
std::unique_ptr< ObsOperatorParametersBase > makeParameters() const override
Contains a polymorphic parameter holding an instance of a subclass of ObsOperatorParametersBase.
oops::RequiredPolymorphicParameter< ObsOperatorParametersBase, LinearObsOperatorFactory > operatorParameters
Base class of classes storing configuration parameters of specific observation operators and linear o...