8 #ifndef MAINS_RUNCRTM_H_
9 #define MAINS_RUNCRTM_H_
14 #include "eckit/config/LocalConfiguration.h"
16 #include "oops/base/Observations.h"
17 #include "oops/base/ObsSpaces.h"
18 #include "oops/interface/ObsAuxControl.h"
19 #include "oops/interface/ObsOperator.h"
20 #include "oops/interface/ObsVector.h"
21 #include "oops/mpi/mpi.h"
22 #include "oops/runs/Application.h"
23 #include "oops/util/DateTime.h"
24 #include "oops/util/Duration.h"
25 #include "oops/util/Logger.h"
29 template <
typename MODEL>
class RunCRTM :
public oops::Application {
40 explicit RunCRTM(
const eckit::mpi::Comm & comm = oops::mpi::world()) : Application(comm) {}
44 int execute(
const eckit::Configuration & fullConfig)
const {
46 const util::DateTime winbgn(fullConfig.getString(
"window begin"));
47 const util::Duration winlen(fullConfig.getString(
"window length"));
48 const util::DateTime winend(winbgn + winlen);
51 ObsSpaces_ obsdb(fullConfig, this->getComm(), winbgn, winend);
53 oops::Variables diagvars;
55 std::vector<eckit::LocalConfiguration>
conf;
56 fullConfig.get(
"observations",
conf);
58 for (std::size_t jj = 0; jj < obsdb.size(); ++jj) {
59 eckit::LocalConfiguration obsopconf(
conf[jj],
"obs operator");
63 const eckit::LocalConfiguration gconf(
conf[jj],
"geovals");
64 const GeoVaLs_ gval(gconf, obsdb[jj], hop.requiredVars());
70 hop.locations(obsdb[jj].windowStart(), obsdb[jj].windowEnd()),
73 hop.simulateObs(gval, hofx, ybias, diag);
75 const double zz = hofx.rms();
76 const double xx =
conf[jj].getDouble(
"rms ref");
77 const double tol =
conf[jj].getDouble(
"tolerance");
86 return "oops::RunCRTM<" + MODEL::name() +
">";
93 #endif // MAINS_RUNCRTM_H_