11 #ifndef OOPS_INTERFACE_MODELAUXINCREMENT_H_
12 #define OOPS_INTERFACE_MODELAUXINCREMENT_H_
22 #include "oops/util/Logger.h"
23 #include "oops/util/ObjectCounter.h"
24 #include "oops/util/Printable.h"
25 #include "oops/util/Serializable.h"
26 #include "oops/util/Timer.h"
36 template <
typename MODEL>
38 public util::Serializable,
39 private util::ObjectCounter<ModelAuxIncrement<MODEL> > {
45 static const std::string
classname() {
return "oops::ModelAuxIncrement";}
68 void read(
const eckit::Configuration &);
69 void write(
const eckit::Configuration &)
const;
74 void serialize(std::vector<double> &)
const override;
75 void deserialize(
const std::vector<double> &,
size_t &)
override;
78 void print(std::ostream &)
const override;
79 std::unique_ptr<ModelAuxIncrement_>
aux_;
84 template <
typename MODEL>
87 Log::trace() <<
"operator+=(ModelAuxControl, ModelAuxIncrement) starting" << std::endl;
88 util::Timer timer(
"oops::ModelAuxIncrement",
"operator+=ModelAuxControl");
90 Log::trace() <<
"operator+=(ModelAuxControl, ModelAuxIncrement) done" << std::endl;
96 template<
typename MODEL>
98 const eckit::Configuration & conf) : aux_()
100 Log::trace() <<
"ModelAuxIncrement<MODEL>::ModelAuxIncrement starting" << std::endl;
101 util::Timer timer(
classname(),
"ModelAuxIncrement");
103 Log::trace() <<
"ModelAuxIncrement<MODEL>::ModelAuxIncrement done" << std::endl;
106 template<
typename MODEL>
108 const bool copy) : aux_()
110 Log::trace() <<
"ModelAuxIncrement<MODEL>::ModelAuxIncrement copy starting" << std::endl;
111 util::Timer timer(
classname(),
"ModelAuxIncrement");
113 Log::trace() <<
"ModelAuxIncrement<MODEL>::ModelAuxIncrement copy done" << std::endl;
116 template<
typename MODEL>
118 const eckit::Configuration & conf) : aux_()
120 Log::trace() <<
"ModelAuxIncrement<MODEL>::ModelAuxIncrement interpolated starting" << std::endl;
121 util::Timer timer(
classname(),
"ModelAuxIncrement");
123 Log::trace() <<
"ModelAuxIncrement<MODEL>::ModelAuxIncrement interpolated done" << std::endl;
126 template<
typename MODEL>
128 Log::trace() <<
"ModelAuxIncrement<MODEL>::~ModelAuxIncrement starting" << std::endl;
129 util::Timer timer(classname(),
"~ModelAuxIncrement");
131 Log::trace() <<
"ModelAuxIncrement<MODEL>::~ModelAuxIncrement done" << std::endl;
134 template<
typename MODEL>
136 Log::trace() <<
"ModelAuxIncrement<MODEL>::diff starting" << std::endl;
137 util::Timer timer(classname(),
"diff");
139 Log::trace() <<
"ModelAuxIncrement<MODEL>::diff done" << std::endl;
142 template<
typename MODEL>
144 Log::trace() <<
"ModelAuxIncrement<MODEL>::zero starting" << std::endl;
145 util::Timer timer(classname(),
"zero");
147 Log::trace() <<
"ModelAuxIncrement<MODEL>::zero done" << std::endl;
150 template<
typename MODEL>
152 Log::trace() <<
"ModelAuxIncrement<MODEL>::operator= starting" << std::endl;
153 util::Timer timer(classname(),
"operator=");
155 Log::trace() <<
"ModelAuxIncrement<MODEL>::operator= done" << std::endl;
159 template<
typename MODEL>
161 Log::trace() <<
"ModelAuxIncrement<MODEL>::operator+= starting" << std::endl;
162 util::Timer timer(classname(),
"operator+=");
164 Log::trace() <<
"ModelAuxIncrement<MODEL>::operator+= done" << std::endl;
168 template<
typename MODEL>
170 Log::trace() <<
"ModelAuxIncrement<MODEL>::operator-= starting" << std::endl;
171 util::Timer timer(classname(),
"operator-=");
173 Log::trace() <<
"ModelAuxIncrement<MODEL>::operator-= done" << std::endl;
177 template<
typename MODEL>
179 Log::trace() <<
"ModelAuxIncrement<MODEL>::operator*= starting" << std::endl;
180 util::Timer timer(classname(),
"operator*=");
182 Log::trace() <<
"ModelAuxIncrement<MODEL>::operator*= done" << std::endl;
186 template<
typename MODEL>
188 Log::trace() <<
"ModelAuxIncrement<MODEL>::axpy starting" << std::endl;
189 util::Timer timer(classname(),
"axpy");
190 aux_->axpy(zz, *dx.
aux_);
191 Log::trace() <<
"ModelAuxIncrement<MODEL>::axpy done" << std::endl;
194 template<
typename MODEL>
196 Log::trace() <<
"ModelAuxIncrement<MODEL>::dot_product_with starting" << std::endl;
197 util::Timer timer(classname(),
"dot_product_with");
198 double zz = aux_->dot_product_with(*dx.
aux_);
199 Log::trace() <<
"ModelAuxIncrement<MODEL>::dot_product_with done" << std::endl;
203 template<
typename MODEL>
205 Log::trace() <<
"ModelAuxIncrement<MODEL>::read starting" << std::endl;
206 util::Timer timer(classname(),
"read");
208 Log::trace() <<
"ModelAuxIncrement<MODEL>::read done" << std::endl;
211 template<
typename MODEL>
213 Log::trace() <<
"ModelAuxIncrement<MODEL>::write starting" << std::endl;
214 util::Timer timer(classname(),
"write");
216 Log::trace() <<
"ModelAuxIncrement<MODEL>::write done" << std::endl;
219 template<
typename MODEL>
221 Log::trace() <<
"ModelAuxIncrement<MODEL>::norm starting" << std::endl;
222 util::Timer timer(classname(),
"norm");
223 double zz = aux_->norm();
224 Log::trace() <<
"ModelAuxIncrement<MODEL>::norm done" << std::endl;
228 template<
typename MODEL>
230 Log::trace() <<
"ModelAuxIncrement<MODEL>::serialSize" << std::endl;
231 util::Timer timer(classname(),
"serialSize");
232 return aux_->serialSize();
235 template<
typename MODEL>
237 Log::trace() <<
"ModelAuxIncrement<MODEL>::serialize starting" << std::endl;
238 util::Timer timer(classname(),
"serialize");
239 aux_->serialize(vect);
240 Log::trace() <<
"ModelAuxIncrement<MODEL>::serialize done" << std::endl;
243 template<
typename MODEL>
245 Log::trace() <<
"ModelAuxIncrement<MODEL>::deserialize starting" << std::endl;
246 util::Timer timer(classname(),
"deserialize");
247 aux_->deserialize(vect, current);
248 Log::trace() <<
"ModelAuxIncrement<MODEL>::deserialize done" << std::endl;
251 template<
typename MODEL>
253 Log::trace() <<
"ModelAuxIncrement<MODEL>::print starting" << std::endl;
254 util::Timer timer(classname(),
"print");
256 Log::trace() <<
"ModelAuxIncrement<MODEL>::print done" << std::endl;
262 #endif // OOPS_INTERFACE_MODELAUXINCREMENT_H_