8 #ifndef OOPS_RUNS_CONVERTSTATE_H_
9 #define OOPS_RUNS_CONVERTSTATE_H_
15 #include "eckit/config/LocalConfiguration.h"
22 #include "oops/util/DateTime.h"
23 #include "oops/util/Duration.h"
24 #include "oops/util/Logger.h"
37 instantiateVariableChangeFactory<MODEL>();
42 int execute(
const eckit::Configuration & fullConfig)
const {
44 const eckit::LocalConfiguration inputResolConfig(fullConfig,
"input geometry");
47 const eckit::LocalConfiguration outputResolConfig(fullConfig,
"output geometry");
51 std::vector<std::unique_ptr<VariableChange_>> chvars;
52 std::vector<bool> inverse;
54 std::vector<eckit::LocalConfiguration> chvarconfs;
55 fullConfig.get(
"variable changes", chvarconfs);
56 for (
size_t cv = 0; cv < chvarconfs.size(); ++cv) {
58 inverse.push_back(chvarconfs[cv].getBool(
"do inverse",
false));
62 std::vector<eckit::LocalConfiguration> statesConf;
63 fullConfig.get(
"states", statesConf);
64 int nstates = statesConf.size();
67 for (
int jm = 0; jm < nstates; ++jm) {
69 Log::info() <<
"Converting state " << jm+1 <<
" of " << nstates << std::endl;
72 const eckit::LocalConfiguration inputConfig(statesConf[jm],
"input");
73 State_ xxi(resol1, inputConfig);
74 Log::test() <<
"Input state: " << xxi << std::endl;
77 std::unique_ptr<State_> xx(
new State_(resol2, xxi));
80 for (
size_t cv = 0; cv < chvars.size(); ++cv) {
82 State_ xchvarout = chvars[cv]->changeVar(*xx);
83 xx.reset(
new State_(xchvarout));
85 State_ xchvarout = chvars[cv]->changeVarInverse(*xx);
86 xx.reset(
new State_(xchvarout));
88 Log::test() <<
"State after " << *chvars[cv] <<
" transform: " << *xx << std::endl;
92 const eckit::LocalConfiguration outputConfig(statesConf[jm],
"output");
93 xx->write(outputConfig);
95 Log::test() <<
"Output state: " << *xx << std::endl;
102 return "oops::ConvertState<" + MODEL::name() +
">";
108 #endif // OOPS_RUNS_CONVERTSTATE_H_