OOPS
HofXNoModel.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2018-2020 UCAR
3  *
4  * This software is licensed under the terms of the Apache Licence Version 2.0
5  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6  */
7 
8 #ifndef OOPS_RUNS_HOFXNOMODEL_H_
9 #define OOPS_RUNS_HOFXNOMODEL_H_
10 
11 #include <string>
12 
13 #include "eckit/config/LocalConfiguration.h"
17 #include "oops/base/Observations.h"
18 #include "oops/base/ObsSpaces.h"
20 #include "oops/mpi/mpi.h"
21 #include "oops/runs/Application.h"
22 #include "oops/util/DateTime.h"
23 #include "oops/util/Duration.h"
24 #include "oops/util/Logger.h"
25 
26 namespace oops {
27 
28 template <typename MODEL, typename OBS> class HofXNoModel : public Application {
33 
34  public:
35 // -----------------------------------------------------------------------------
36  explicit HofXNoModel(const eckit::mpi::Comm & comm = oops::mpi::world()) : Application(comm) {
37  instantiateObsFilterFactory<OBS>();
38  }
39 // -----------------------------------------------------------------------------
40  virtual ~HofXNoModel() {}
41 // -----------------------------------------------------------------------------
42  int execute(const eckit::Configuration & fullConfig) const {
43 // Setup observation window
44  const util::Duration winlen(fullConfig.getString("window length"));
45  const util::DateTime winbgn(fullConfig.getString("window begin"));
46  const util::DateTime winend(winbgn + winlen);
47  Log::info() << "Observation window from " << winbgn << " to " << winend << std::endl;
48 
49 // Setup geometry
50  const eckit::LocalConfiguration geometryConfig(fullConfig, "geometry");
51  const Geometry_ geometry(geometryConfig, this->getComm());
52 
53 // Setup states for H(x)
54  const eckit::LocalConfiguration stateConfig(fullConfig, "forecasts");
55  Log::info() << "States configuration is:" << stateConfig << std::endl;
56  State4D_ xx(geometry, stateConfig);
57  Log::test() << "Initial state: " << xx[0] << std::endl;
58 
59 // Setup observations
60  ObsSpaces_ obspace(fullConfig, this->getComm(), winbgn, winend);
61 
62 // Setup and run observer
63  CalcHofX<MODEL, OBS> hofx(obspace, geometry, fullConfig);
64  const Observations_ & yobs = hofx.compute(xx);
65  hofx.saveQcFlags("EffectiveQC");
66  hofx.saveObsErrors("EffectiveError");
67  Log::test() << "Final state: " << xx[xx.size()-1] << std::endl;
68 
69 // Save H(x)
70  Log::test() << "H(x): " << std::endl << yobs << "End H(x)" << std::endl;
71  yobs.save("hofx");
72 
73  return 0;
74  }
75 // -----------------------------------------------------------------------------
76  private:
77  std::string appname() const {
78  return "oops::HofXNoModel<" + MODEL::name() + ", " + OBS::name() + ">";
79  }
80 // -----------------------------------------------------------------------------
81 };
82 
83 } // namespace oops
84 
85 #endif // OOPS_RUNS_HOFXNOMODEL_H_
oops
The namespace for the main oops code.
Definition: ErrorCovarianceL95.cc:22
instantiateObsFilterFactory.h
oops::HofXNoModel::HofXNoModel
HofXNoModel(const eckit::mpi::Comm &comm=oops::mpi::world())
Definition: HofXNoModel.h:36
oops::CalcHofX
Computes observation operator (while running model, or with State4D)
Definition: CalcHofX.h:38
ObsSpaces.h
mpi.h
oops::CalcHofX::saveQcFlags
void saveQcFlags(const std::string &) const
saves QC flags to ObsSpaces
Definition: CalcHofX.h:154
oops::HofXNoModel
Definition: HofXNoModel.h:28
oops::HofXNoModel::appname
std::string appname() const
Definition: HofXNoModel.h:77
oops::HofXNoModel::~HofXNoModel
virtual ~HofXNoModel()
Definition: HofXNoModel.h:40
oops::CalcHofX::compute
const Observations_ & compute(const Model_ &, State_ &, PostProcessor_ &, const util::Duration &)
Computes 4D H(x) (running the model)
Definition: CalcHofX.h:105
oops::HofXNoModel::execute
int execute(const eckit::Configuration &fullConfig) const
Definition: HofXNoModel.h:42
Observations.h
oops::HofXNoModel::Observations_
Observations< OBS > Observations_
Definition: HofXNoModel.h:30
Application.h
oops::HofXNoModel::Geometry_
Geometry< MODEL > Geometry_
Definition: HofXNoModel.h:29
oops::Application::getComm
const eckit::mpi::Comm & getComm() const
Definition: Application.h:36
oops::CalcHofX::saveObsErrors
void saveObsErrors(const std::string &) const
saves obs error variances (modified in QC) to ObsSpaces
Definition: CalcHofX.h:163
oops::State4D
Four dimensional state.
Definition: State4D.h:35
oops::Geometry
Geometry class used in oops; subclass of interface class above.
Definition: oops/interface/Geometry.h:189
oops::State4D::size
size_t size() const
Definition: State4D.h:53
oops::HofXNoModel::ObsSpaces_
ObsSpaces< OBS > ObsSpaces_
Definition: HofXNoModel.h:31
State4D.h
oops::Observations
Observations Class.
Definition: oops/base/Departures.h:30
oops::Application
Definition: Application.h:29
oops::mpi::world
const eckit::mpi::Comm & world()
Default communicator with all MPI tasks (ie MPI_COMM_WORLD)
Definition: oops/mpi/mpi.cc:22
oops::ObsSpaces
Definition: ObsSpaces.h:41
CalcHofX.h
oops::HofXNoModel::State4D_
State4D< MODEL > State4D_
Definition: HofXNoModel.h:32
Geometry.h
oops::Observations::save
void save(const std::string &) const
Save/read observations values.
Definition: Observations.h:153