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");
60 typename ObsOperator_::Parameters_ obsopparams;
61 obsopparams.validateAndDeserialize(obsopconf);
64 const eckit::LocalConfiguration gconf(conf[jj],
"geovals");
65 const GeoVaLs_ gval(gconf, obsdb[jj], hop.requiredVars());
67 eckit::LocalConfiguration biasconf = conf[jj].getSubConfiguration(
"obs bias");
68 typename ObsAuxCtrl_::Parameters_ biasparams;
69 biasparams.validateAndDeserialize(biasconf);
75 ObsDiags_ diag(obsdb[jj], hop.locations(), diagvars);
77 hop.simulateObs(gval, hofx, ybias, bias, diag);
79 const double zz = hofx.rms();
80 const double xx = conf[jj].getDouble(
"rms ref");
81 const double tol = conf[jj].getDouble(
"tolerance");
90 return "oops::RunCRTM<" + MODEL::name() +
">";
int execute(const eckit::Configuration &fullConfig) const
oops::Observations< MODEL > Observations_
std::string appname() const
oops::ObsOperator< MODEL > ObsOperator_
oops::ObsVector< MODEL > ObsVector_
oops::GeoVaLs< MODEL > GeoVaLs_
RunCRTM(const eckit::mpi::Comm &comm=oops::mpi::world())
oops::ObsAuxControl< MODEL > ObsAuxCtrl_
oops::ObsSpaces< MODEL > ObsSpaces_
oops::ObsDiagnostics< MODEL > ObsDiags_