11 #ifndef OOPS_INTERFACE_OBSAUXCOVARIANCE_H_
12 #define OOPS_INTERFACE_OBSAUXCOVARIANCE_H_
18 #include <boost/noncopyable.hpp>
20 #include "eckit/config/Configuration.h"
24 #include "oops/util/Logger.h"
25 #include "oops/util/ObjectCounter.h"
26 #include "oops/util/Printable.h"
27 #include "oops/util/Timer.h"
38 template <
typename OBS>
40 private boost::noncopyable,
41 private util::ObjectCounter<ObsAuxCovariance<OBS> > {
49 static const std::string
classname() {
return "oops::ObsAuxCovariance";}
66 void print(std::ostream &)
const;
67 std::unique_ptr<ObsAuxCovariance_>
cov_;
72 template<
typename OBS>
76 Log::trace() <<
"ObsAuxCovariance<OBS>::ObsAuxCovariance starting" << std::endl;
77 util::Timer timer(
classname(),
"ObsAuxCovariance");
79 Log::trace() <<
"ObsAuxCovariance<OBS>::ObsAuxCovariance done" << std::endl;
84 template<
typename OBS>
86 Log::trace() <<
"ObsAuxCovariance<OBS>::~ObsAuxCovariance starting" << std::endl;
87 util::Timer timer(classname(),
"~ObsAuxCovariance");
89 Log::trace() <<
"ObsAuxCovariance<OBS>::~ObsAuxCovariance done" << std::endl;
94 template<
typename OBS>
96 const eckit::Configuration & innerConf) {
97 Log::trace() <<
"ObsAuxCovariance<OBS>::linearize starting" << std::endl;
98 util::Timer timer(classname(),
"linearize");
100 Log::trace() <<
"ObsAuxCovariance<OBS>::linearize done" << std::endl;
105 template<
typename OBS>
107 Log::trace() <<
"ObsAuxCovariance<OBS>::multiply starting" << std::endl;
108 util::Timer timer(classname(),
"multiply");
110 Log::trace() <<
"ObsAuxCovariance<OBS>::multiply done" << std::endl;
115 template<
typename OBS>
118 Log::trace() <<
"ObsAuxCovariance<OBS>::inverseMultiply starting" << std::endl;
119 util::Timer timer(classname(),
"inverseMultiply");
121 Log::trace() <<
"ObsAuxCovariance<OBS>::inverseMultiply done" << std::endl;
126 template<
typename OBS>
128 Log::trace() <<
"ObsAuxCovariance<OBS>::randomize starting" << std::endl;
129 util::Timer timer(classname(),
"randomize");
131 Log::trace() <<
"ObsAuxCovariance<OBS>::randomize done" << std::endl;
136 template<
typename OBS>
138 Log::trace() <<
"ObsAuxCovariance<OBS>::print starting" << std::endl;
139 util::Timer timer(classname(),
"print");
141 Log::trace() <<
"ObsAuxCovariance<OBS>::print done" << std::endl;
Auxiliary state related to observations, templated on <OBS>
const ObsAuxControl_ & obsauxcontrol() const
const Accessor
Auxiliary error covariance related to observations, templated on <OBS>
static const std::string classname()
ObsAuxIncrement< OBS > ObsAuxIncrement_
void linearize(const ObsAuxControl_ &, const eckit::Configuration &)
linearize operator
OBS::ObsAuxCovariance ObsAuxCovariance_
void multiply(const ObsAuxIncrement_ &, ObsAuxIncrement_ &) const
Sets the second parameter to the first multiplied by the covariance matrix.
void print(std::ostream &) const
std::unique_ptr< ObsAuxCovariance_ > cov_
ObsAuxCovariance_::Parameters_ Parameters_
void randomize(ObsAuxIncrement_ &) const
randomize the values in the ObsAuxIncrement
ObsAuxCovariance(const ObsSpace< OBS > &os, const Parameters_ ¶ms)
Constructor for specified ObsSpace os and params.
ObsAuxControl< OBS > ObsAuxControl_
void inverseMultiply(const ObsAuxIncrement_ &, ObsAuxIncrement_ &) const
Sets the second parameter to the first multiplied by the inverse covariance matrix.
~ObsAuxCovariance()
Destructor (defined explicitly for timing and tracing)
Auxiliary increment related to observations, templated on <OBS>
const ObsAuxIncrement_ & obsauxincrement() const
const Accessor
ObsSpace_ & obsspace() const
Interfacing.
The namespace for the main oops code.