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> > {
43 static const std::string
classname() {
return "oops::ObsAuxIncrement";}
66 void read(
const eckit::Configuration &);
67 void write(
const eckit::Configuration &)
const;
72 void serialize(std::vector<double> &)
const override;
73 void deserialize(
const std::vector<double> &,
size_t &)
override;
76 void print(std::ostream &)
const override;
77 std::unique_ptr<ObsAuxIncrement_>
aux_;
82 template <
typename OBS>
84 Log::trace() <<
"operator+=(ObsAuxControl, ObsAuxIncrement) starting" << std::endl;
85 util::Timer timer(
"oops::ObsAuxIncrement",
"operator+=ObsAuxControl");
87 Log::trace() <<
"operator+=(ObsAuxControl, ObsAuxIncrement) done" << std::endl;
93 template<
typename OBS>
95 const eckit::Configuration & conf) : aux_()
97 Log::trace() <<
"ObsAuxIncrement<OBS>::ObsAuxIncrement starting" << std::endl;
98 util::Timer timer(
classname(),
"ObsAuxIncrement");
100 Log::trace() <<
"ObsAuxIncrement<OBS>::ObsAuxIncrement done" << std::endl;
103 template<
typename OBS>
105 const bool copy) : aux_()
107 Log::trace() <<
"ObsAuxIncrement<OBS>::ObsAuxIncrement copy starting" << std::endl;
108 util::Timer timer(
classname(),
"ObsAuxIncrement");
110 Log::trace() <<
"ObsAuxIncrement<OBS>::ObsAuxIncrement copy done" << std::endl;
113 template<
typename OBS>
115 const eckit::Configuration & conf) : aux_()
117 Log::trace() <<
"ObsAuxIncrement<OBS>::ObsAuxIncrement interpolated starting" << std::endl;
118 util::Timer timer(
classname(),
"ObsAuxIncrement");
120 Log::trace() <<
"ObsAuxIncrement<OBS>::ObsAuxIncrement interpolated done" << std::endl;
123 template<
typename OBS>
125 Log::trace() <<
"ObsAuxIncrement<OBS>::~ObsAuxIncrement starting" << std::endl;
126 util::Timer timer(classname(),
"~ObsAuxIncrement");
128 Log::trace() <<
"ObsAuxIncrement<OBS>::~ObsAuxIncrement done" << std::endl;
131 template<
typename OBS>
133 Log::trace() <<
"ObsAuxIncrement<OBS>::diff starting" << std::endl;
134 util::Timer timer(classname(),
"diff");
136 Log::trace() <<
"ObsAuxIncrement<OBS>::diff done" << std::endl;
139 template<
typename OBS>
141 Log::trace() <<
"ObsAuxIncrement<OBS>::zero starting" << std::endl;
142 util::Timer timer(classname(),
"zero");
144 Log::trace() <<
"ObsAuxIncrement<OBS>::zero done" << std::endl;
147 template<
typename OBS>
149 Log::trace() <<
"ObsAuxIncrement<OBS>::operator= starting" << std::endl;
150 util::Timer timer(classname(),
"operator=");
152 Log::trace() <<
"ObsAuxIncrement<OBS>::operator= done" << std::endl;
156 template<
typename OBS>
158 Log::trace() <<
"ObsAuxIncrement<OBS>::operator+= starting" << std::endl;
159 util::Timer timer(classname(),
"operator+=");
161 Log::trace() <<
"ObsAuxIncrement<OBS>::operator+= done" << std::endl;
165 template<
typename OBS>
167 Log::trace() <<
"ObsAuxIncrement<OBS>::operator-= starting" << std::endl;
168 util::Timer timer(classname(),
"operator-=");
170 Log::trace() <<
"ObsAuxIncrement<OBS>::operator-= done" << std::endl;
174 template<
typename OBS>
176 Log::trace() <<
"ObsAuxIncrement<OBS>::operator*= starting" << std::endl;
177 util::Timer timer(classname(),
"operator*=");
179 Log::trace() <<
"ObsAuxIncrement<OBS>::operator*= done" << std::endl;
183 template<
typename OBS>
185 Log::trace() <<
"ObsAuxIncrement<OBS>::axpy starting" << std::endl;
186 util::Timer timer(classname(),
"axpy");
187 aux_->axpy(zz, *dx.
aux_);
188 Log::trace() <<
"ObsAuxIncrement<OBS>::axpy done" << std::endl;
191 template<
typename OBS>
193 Log::trace() <<
"ObsAuxIncrement<OBS>::dot_product_with starting" << std::endl;
194 util::Timer timer(classname(),
"dot_product_with");
195 double zz = aux_->dot_product_with(*dx.
aux_);
196 Log::trace() <<
"ObsAuxIncrement<OBS>::dot_product_with done" << std::endl;
200 template<
typename OBS>
202 Log::trace() <<
"ObsAuxIncrement<OBS>::read starting" << std::endl;
203 util::Timer timer(classname(),
"read");
205 Log::trace() <<
"ObsAuxIncrement<OBS>::read done" << std::endl;
208 template<
typename OBS>
210 Log::trace() <<
"ObsAuxIncrement<OBS>::write starting" << std::endl;
211 util::Timer timer(classname(),
"write");
213 Log::trace() <<
"ObsAuxIncrement<OBS>::write done" << std::endl;
216 template<
typename OBS>
218 Log::trace() <<
"ObsAuxIncrement<OBS>::norm starting" << std::endl;
219 util::Timer timer(classname(),
"norm");
220 double zz = aux_->norm();
221 Log::trace() <<
"ObsAuxIncrement<OBS>::norm done" << std::endl;
225 template<
typename OBS>
227 Log::trace() <<
"ObsAuxIncrement<OBS>::serialSize" << std::endl;
228 util::Timer timer(classname(),
"serialSize");
229 return aux_->serialSize();
232 template<
typename OBS>
234 Log::trace() <<
"ObsAuxIncrement<OBS>::serialize starting" << std::endl;
235 util::Timer timer(classname(),
"serialize");
236 aux_->serialize(vect);
237 Log::trace() <<
"ObsAuxIncrement<OBS>::serialize done" << std::endl;
240 template<
typename OBS>
242 Log::trace() <<
"ObsAuxIncrement<OBS>::deserialize starting" << std::endl;
243 util::Timer timer(classname(),
"deserialize");
244 aux_->deserialize(vect, current);
245 Log::trace() <<
"ObsAuxIncrement<OBS>::deserialize done" << std::endl;
248 template<
typename OBS>
250 Log::trace() <<
"ObsAuxIncrement<OBS>::print starting" << std::endl;
251 util::Timer timer(classname(),
"print");
253 Log::trace() <<
"ObsAuxIncrement<OBS>::print done" << std::endl;
259 #endif // OOPS_INTERFACE_OBSAUXINCREMENT_H_