11 #ifndef OOPS_ASSIMILATION_COSTFCT3DVAR_H_
12 #define OOPS_ASSIMILATION_COSTFCT3DVAR_H_
16 #include "eckit/config/Configuration.h"
17 #include "eckit/mpi/Comm.h"
29 #include "oops/util/DateTime.h"
30 #include "oops/util/Duration.h"
31 #include "oops/util/Logger.h"
53 CostFct3DVar(
const eckit::Configuration &,
const eckit::mpi::Comm &);
87 template<
typename MODEL,
typename OBS>
89 const eckit::mpi::Comm & comm)
91 windowLength_(), windowHalf_(), comm_(comm),
92 resol_(
eckit::LocalConfiguration(config,
"geometry"), comm),
93 ctlvars_(config,
"analysis variables")
95 Log::trace() <<
"CostFct3DVar::CostFct3DVar start" << std::endl;
96 windowLength_ = util::Duration(config.getString(
"window length"));
97 windowBegin_ = util::DateTime(config.getString(
"window begin"));
104 Log::trace() <<
"CostFct3DVar::CostFct3DVar done" << std::endl;
109 template <
typename MODEL,
typename OBS>
113 Log::trace() <<
"CostFct3DVar::newJb" << std::endl;
119 template <
typename MODEL,
typename OBS>
121 Log::trace() <<
"CostFct3DVar::newJo" << std::endl;
127 template <
typename MODEL,
typename OBS>
130 Log::trace() <<
"CostFct3DVar::newJc" << std::endl;
138 template <
typename MODEL,
typename OBS>
140 Log::trace() <<
"CostFct3DVar::runNL start" << std::endl;
148 Log::trace() <<
"CostFct3DVar::runNL done" << std::endl;
153 template<
typename MODEL,
typename OBS>
158 Log::trace() <<
"CostFct3DVar::doLinearize start" << std::endl;
160 Log::trace() <<
"CostFct3DVar::doLinearize done" << std::endl;
165 template <
typename MODEL,
typename OBS>
170 Log::trace() <<
"CostFct3DVar::runTLM start" << std::endl;
183 Log::trace() <<
"CostFct3DVar::runTLM done" << std::endl;
188 template <
typename MODEL,
typename OBS>
190 Log::trace() <<
"CostFct3DVar::zeroAD start" << std::endl;
194 Log::trace() <<
"CostFct3DVar::zeroAD done" << std::endl;
199 template <
typename MODEL,
typename OBS>
204 Log::trace() <<
"CostFct3DVar::runADJ start" << std::endl;
218 Log::trace() <<
"CostFct3DVar::runADJ done" << std::endl;
223 template<
typename MODEL,
typename OBS>
226 Log::trace() <<
"CostFct3DVar::addIncr start" << std::endl;
230 Log::trace() <<
"CostFct3DVar::addIncr done" << std::endl;
ObsAuxIncrs_ & obsVar()
Get augmented observation control variable.
Increment_ & state()
Get state control variable.
ModelAuxIncr_ & modVar()
Get augmented model control variable.
State_ & state()
Get state control variable.
CostFct3DVar(const eckit::Configuration &, const eckit::mpi::Comm &)
void addIncr(CtrlVar_ &, const CtrlInc_ &, PostProcessor< Increment_ > &) const override
void zeroAD(CtrlInc_ &) const override
const eckit::mpi::Comm & comm_
void runTLM(CtrlInc_ &, PostProcessorTLAD< MODEL > &, PostProcessor< Increment_ >, const bool) const override
void doLinearize(const Geometry_ &, const eckit::Configuration &, const CtrlVar_ &, const CtrlVar_ &, PostProcessor< State_ > &, PostProcessorTLAD< MODEL > &) override
ControlIncrement< MODEL, OBS > CtrlInc_
util::DateTime windowEnd_
CostJb3D< MODEL > * newJb(const eckit::Configuration &, const Geometry_ &, const CtrlVar_ &) const override
util::DateTime windowHalf_
Geometry< MODEL > Geometry_
util::Duration windowLength_
Increment< MODEL > Increment_
CostFunction< MODEL, OBS > CostFct_
CostTermBase< MODEL, OBS > * newJc(const eckit::Configuration &, const Geometry_ &) const override
void runNL(CtrlVar_ &, PostProcessor< State_ > &) const override
void runADJ(CtrlInc_ &, PostProcessorTLAD< MODEL > &, PostProcessor< Increment_ >, const bool) const override
util::DateTime windowBegin_
CostJo< MODEL, OBS > * newJo(const eckit::Configuration &) const override
const Geometry_ & geometry() const override
ControlVariable< MODEL, OBS > CtrlVar_
void setupTerms(const eckit::Configuration &)
Base Class for Cost Function Terms.
Geometry class used in oops; subclass of interface class interface::Geometry.
Increment class used in oops.
void zero()
Zero out this ModelAuxIncrement.
Control model post processing.
void enrollProcessor(PostBase_ *pp)
void process(const FLDS &xx)
void finalize(const FLDS &xx)
void initialize(const FLDS &xx, const util::DateTime &end, const util::Duration &step)
Control model post processing.
void finalizeAD(Increment_ &dx)
void processTL(const Increment_ &dx)
void processAD(Increment_ &dx)
void finalizeTL(const Increment_ &dx)
void initializeTL(const Increment_ &dx, const util::DateTime &end, const util::Duration &step)
Tangent linear methods.
void initializeAD(Increment_ &dx, const util::DateTime &bgn, const util::Duration &step)
Adjoint methods.
State class used in oops; subclass of interface class interface::State.
Save trajectory during forecast run.
void zero()
Zero out this Increment.
const util::DateTime validTime() const
Accessor to the time of this Increment.
const util::DateTime validTime() const
Accessor to the time of this State.
The namespace for the main oops code.