8 #ifndef OOPS_RUNS_RTPP_H_
9 #define OOPS_RUNS_RTPP_H_
14 #include "eckit/config/LocalConfiguration.h"
23 #include "oops/util/Logger.h"
45 int execute(
const eckit::Configuration & fullConfig)
const {
47 const eckit::LocalConfiguration geometryConfig(fullConfig,
"geometry");
51 const eckit::LocalConfiguration bgConfig(fullConfig,
"background");
52 const eckit::LocalConfiguration anConfig(fullConfig,
"analysis");
53 const float factor = fullConfig.getFloat(
"factor");
58 const size_t nens = bgens.
size();
59 ASSERT(nens == anens.
size());
62 if (fullConfig.has(
"analysis variables"))
63 anvars =
Variables(fullConfig,
"analysis variables");
69 Log::test() <<
"Background member 1:" << bgens[0] << std::endl;
70 Log::test() <<
"Analysis member 1:" << anens[0] << std::endl;
73 for (
size_t jj = 0; jj < nens; ++jj) {
75 Increment_ pertTot(geometry, anvars, anens[jj].validTime());
80 pert.
diff(bgens[jj], bg_mean);
81 pertTot.
axpy(factor, pert);
83 pert.
diff(anens[jj], an_mean);
84 pertTot.
axpy((1.0 - factor), pert);
90 anens[jj].accumul(1.0, an_mean);
95 Log::test() <<
"Updated Analysis member 1:" << anens[0] << std::endl;
98 an_mean = anens.
mean();
99 Log::test() <<
"Analysis mean:" << an_mean << std::endl;
100 eckit::LocalConfiguration outConfig(fullConfig,
"output");
101 outConfig.set(
"member", 0);
102 an_mean.
write(outConfig);
106 for (
size_t jj=0; jj < nens; ++jj) {
108 outConfig.set(
"member", mymember);
109 anens[jj].write(outConfig);
119 return "oops::RTPP<" + MODEL::name() +
">";
126 #endif // OOPS_RUNS_RTPP_H_