11 #ifndef OOPS_INTERFACE_OBSAUXINCREMENT_H_
12 #define OOPS_INTERFACE_OBSAUXINCREMENT_H_
21 #include "oops/util/Logger.h"
22 #include "oops/util/ObjectCounter.h"
23 #include "oops/util/Printable.h"
24 #include "oops/util/Serializable.h"
25 #include "oops/util/Timer.h"
35 template <
typename OBS>
37 public util::Serializable,
38 private util::ObjectCounter<ObsAuxIncrement<OBS> > {
45 static const std::string
classname() {
return "oops::ObsAuxIncrement";}
69 void read(
const eckit::Configuration &);
70 void write(
const eckit::Configuration &)
const;
75 void serialize(std::vector<double> &)
const override;
76 void deserialize(
const std::vector<double> &,
size_t &)
override;
79 void print(std::ostream &)
const override;
80 std::unique_ptr<ObsAuxIncrement_>
aux_;
85 template <
typename OBS>
87 Log::trace() <<
"operator+=(ObsAuxControl, ObsAuxIncrement) starting" << std::endl;
88 util::Timer timer(
"oops::ObsAuxIncrement",
"operator+=ObsAuxControl");
90 Log::trace() <<
"operator+=(ObsAuxControl, ObsAuxIncrement) done" << std::endl;
96 template<
typename OBS>
100 Log::trace() <<
"ObsAuxIncrement<OBS>::ObsAuxIncrement starting" << std::endl;
101 util::Timer timer(
classname(),
"ObsAuxIncrement");
103 this->setObjectSize(
aux_->serialSize()*
sizeof(
double));
104 Log::trace() <<
"ObsAuxIncrement<OBS>::ObsAuxIncrement done" << std::endl;
107 template<
typename OBS>
109 const bool copy) : aux_()
111 Log::trace() <<
"ObsAuxIncrement<OBS>::ObsAuxIncrement copy starting" << std::endl;
112 util::Timer timer(
classname(),
"ObsAuxIncrement");
114 this->setObjectSize(
aux_->serialSize()*
sizeof(
double));
115 Log::trace() <<
"ObsAuxIncrement<OBS>::ObsAuxIncrement copy done" << std::endl;
118 template<
typename OBS>
120 Log::trace() <<
"ObsAuxIncrement<OBS>::~ObsAuxIncrement starting" << std::endl;
121 util::Timer timer(classname(),
"~ObsAuxIncrement");
123 Log::trace() <<
"ObsAuxIncrement<OBS>::~ObsAuxIncrement done" << std::endl;
126 template<
typename OBS>
128 Log::trace() <<
"ObsAuxIncrement<OBS>::diff starting" << std::endl;
129 util::Timer timer(classname(),
"diff");
131 Log::trace() <<
"ObsAuxIncrement<OBS>::diff done" << std::endl;
134 template<
typename OBS>
136 Log::trace() <<
"ObsAuxIncrement<OBS>::zero starting" << std::endl;
137 util::Timer timer(classname(),
"zero");
139 Log::trace() <<
"ObsAuxIncrement<OBS>::zero done" << std::endl;
142 template<
typename OBS>
144 Log::trace() <<
"ObsAuxIncrement<OBS>::operator= starting" << std::endl;
145 util::Timer timer(classname(),
"operator=");
147 Log::trace() <<
"ObsAuxIncrement<OBS>::operator= done" << std::endl;
151 template<
typename OBS>
153 Log::trace() <<
"ObsAuxIncrement<OBS>::operator+= starting" << std::endl;
154 util::Timer timer(classname(),
"operator+=");
156 Log::trace() <<
"ObsAuxIncrement<OBS>::operator+= done" << std::endl;
160 template<
typename OBS>
162 Log::trace() <<
"ObsAuxIncrement<OBS>::operator-= starting" << std::endl;
163 util::Timer timer(classname(),
"operator-=");
165 Log::trace() <<
"ObsAuxIncrement<OBS>::operator-= done" << std::endl;
169 template<
typename OBS>
171 Log::trace() <<
"ObsAuxIncrement<OBS>::operator*= starting" << std::endl;
172 util::Timer timer(classname(),
"operator*=");
174 Log::trace() <<
"ObsAuxIncrement<OBS>::operator*= done" << std::endl;
178 template<
typename OBS>
180 Log::trace() <<
"ObsAuxIncrement<OBS>::axpy starting" << std::endl;
181 util::Timer timer(classname(),
"axpy");
182 aux_->axpy(zz, *dx.
aux_);
183 Log::trace() <<
"ObsAuxIncrement<OBS>::axpy done" << std::endl;
186 template<
typename OBS>
188 Log::trace() <<
"ObsAuxIncrement<OBS>::dot_product_with starting" << std::endl;
189 util::Timer timer(classname(),
"dot_product_with");
190 double zz = aux_->dot_product_with(*dx.
aux_);
191 Log::trace() <<
"ObsAuxIncrement<OBS>::dot_product_with done" << std::endl;
195 template<
typename OBS>
197 Log::trace() <<
"ObsAuxIncrement<OBS>::read starting" << std::endl;
198 util::Timer timer(classname(),
"read");
200 Log::trace() <<
"ObsAuxIncrement<OBS>::read done" << std::endl;
203 template<
typename OBS>
205 Log::trace() <<
"ObsAuxIncrement<OBS>::write starting" << std::endl;
206 util::Timer timer(classname(),
"write");
208 Log::trace() <<
"ObsAuxIncrement<OBS>::write done" << std::endl;
211 template<
typename OBS>
213 Log::trace() <<
"ObsAuxIncrement<OBS>::norm starting" << std::endl;
214 util::Timer timer(classname(),
"norm");
215 double zz = aux_->norm();
216 Log::trace() <<
"ObsAuxIncrement<OBS>::norm done" << std::endl;
220 template<
typename OBS>
222 Log::trace() <<
"ObsAuxIncrement<OBS>::serialSize" << std::endl;
223 util::Timer timer(classname(),
"serialSize");
224 return aux_->serialSize();
227 template<
typename OBS>
229 Log::trace() <<
"ObsAuxIncrement<OBS>::serialize starting" << std::endl;
230 util::Timer timer(classname(),
"serialize");
231 aux_->serialize(vect);
232 Log::trace() <<
"ObsAuxIncrement<OBS>::serialize done" << std::endl;
235 template<
typename OBS>
237 Log::trace() <<
"ObsAuxIncrement<OBS>::deserialize starting" << std::endl;
238 util::Timer timer(classname(),
"deserialize");
239 aux_->deserialize(vect, current);
240 Log::trace() <<
"ObsAuxIncrement<OBS>::deserialize done" << std::endl;
243 template<
typename OBS>
245 Log::trace() <<
"ObsAuxIncrement<OBS>::print starting" << std::endl;
246 util::Timer timer(classname(),
"print");
248 Log::trace() <<
"ObsAuxIncrement<OBS>::print done" << std::endl;
const ObsAuxControl_ & obsauxcontrol() const
Interfacing.
std::unique_ptr< ObsAuxIncrement_ > aux_
ObsAuxControl< OBS > ObsAuxControl_
OBS::ObsAuxIncrement ObsAuxIncrement_
ObsAuxIncrement_::Parameters_ Parameters_
void axpy(const double &, const ObsAuxIncrement &)
ObsAuxIncrement & operator*=(const double &)
void serialize(std::vector< double > &) const override
void deserialize(const std::vector< double > &, size_t &) override
void read(const eckit::Configuration &)
I/O and diagnostics.
ObsAuxIncrement_ & obsauxincrement()
size_t serialSize() const override
Serialize and deserialize.
void write(const eckit::Configuration &) const
ObsAuxIncrement(const ObsSpace< OBS > &, const Parameters_ &)
Constructor, destructor.
ObsAuxIncrement & operator-=(const ObsAuxIncrement &)
ObsAuxIncrement & operator=(const ObsAuxIncrement &)
void print(std::ostream &) const override
double dot_product_with(const ObsAuxIncrement &) const
const ObsAuxIncrement_ & obsauxincrement() const
Interfacing.
static const std::string classname()
void diff(const ObsAuxControl_ &, const ObsAuxControl_ &)
Linear algebra operators.
ObsAuxIncrement & operator+=(const ObsAuxIncrement &)
ObsSpace_ & obsspace() const
Interfacing.
IODA_DL void copy(const ObjectSelection &from, ObjectSelection &to, const ScaleMapping &scale_map)
Generic data copying function.
The namespace for the main oops code.
State< MODEL > & operator+=(State< MODEL > &xx, const Increment< MODEL > &dx)
Add on dx incrment to model state xx.