11 #ifndef OOPS_RUNS_VARIATIONAL_H_
12 #define OOPS_RUNS_VARIATIONAL_H_
18 #include "eckit/config/LocalConfiguration.h"
38 #include "oops/util/DateTime.h"
39 #include "oops/util/Duration.h"
40 #include "oops/util/Logger.h"
52 instantiateCostFactory<MODEL, OBS>();
53 instantiateCovarFactory<MODEL>();
54 instantiateMinFactory<MODEL, OBS>();
55 instantiateObsErrorFactory<OBS>();
56 instantiateObsFilterFactory<OBS>();
57 instantiateTlmFactory<MODEL>();
58 instantiateVariableChangeFactory<MODEL>();
63 int execute(
const eckit::Configuration & fullConfig)
const {
69 eckit::LocalConfiguration cfConf(fullConfig,
"cost function");
70 std::unique_ptr<CostFunction<MODEL, OBS>>
72 Log::trace() <<
"Variational: cost function has been set up" << std::endl;
76 Log::trace() <<
"Variational: first guess has been set up" << std::endl;
79 eckit::LocalConfiguration varConf(fullConfig,
"variational");
80 int iouter = IncrementalAssimilation<MODEL, OBS>(xx, *J, varConf);
81 Log::info() <<
"Variational: incremental assimilation done "
82 << iouter <<
" iterations." << std::endl;
86 const util::DateTime winbgn(cfConf.getString(
"window begin"));
87 const eckit::LocalConfiguration outConfig(fullConfig,
"output");
90 eckit::LocalConfiguration finalConfig(fullConfig,
"final");
91 finalConfig.set(
"iteration", iouter);
92 if (finalConfig.has(
"prints")) {
93 const eckit::LocalConfiguration prtConfig(finalConfig,
"prints");
97 J->evaluate(xx, finalConfig, post);
100 xx.
obsVar().write(cfConf);
107 return "oops::Variational<" + MODEL::name() +
", " + OBS::name() +
">";
113 #endif // OOPS_RUNS_VARIATIONAL_H_