IODA
timeIodaIO.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2017 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 MAINS_TIMEIODAIO_H_
9 #define MAINS_TIMEIODAIO_H_
10 
11 #include <string>
12 #include <vector>
13 
14 #include "eckit/config/LocalConfiguration.h"
15 
16 #include "oops/base/Observations.h"
17 #include "oops/base/ObsSpaces.h"
18 #include "oops/mpi/mpi.h"
19 #include "oops/runs/Application.h"
20 #include "oops/util/DateTime.h"
21 #include "oops/util/Duration.h"
22 #include "oops/util/Logger.h"
23 
24 #include "ioda/io/IodaIO.h"
25 #include "ioda/io/IodaIOfactory.h"
26 #include "ioda/core/IodaUtils.h"
27 
28 namespace ioda {
29 
30 template <typename MODEL> class TimeIodaIO : public oops::Application {
31  typedef oops::ObsSpaces<MODEL> ObsSpaces_;
32 
33  public:
34 // -----------------------------------------------------------------------------
35  explicit TimeIodaIO(const eckit::mpi::Comm & comm = oops::mpi::world()) : Application(comm) {}
36 // -----------------------------------------------------------------------------
37  virtual ~TimeIodaIO() {}
38 // -----------------------------------------------------------------------------
39  int execute(const eckit::Configuration & fullConfig) const {
40 // Setup observation window
41  const util::DateTime winbgn(fullConfig.getString("window begin"));
42  const util::DateTime winend(fullConfig.getString("window end"));
43  oops::Log::info() << "Observation window begin:" << winbgn << std::endl;
44  oops::Log::info() << "Observation window end:" << winend << std::endl;
45 
46 // Setup observations
47  eckit::LocalConfiguration obsconf(fullConfig, "observations");
48  oops::Log::debug() << "Observations configuration is:" << obsconf << std::endl;
49  ObsSpaces_ obsdb(obsconf, this->getComm(), winbgn, winend);
50 
51  std::vector<eckit::LocalConfiguration> conf;
52  fullConfig.get("observations", conf);
53 
54  for (std::size_t jj = 0; jj < obsdb.size(); ++jj) {
55  oops::Log::info() << "ObsSpace: " << obsdb[jj].obsname() << std::endl;
56  oops::Log::info() << " Number of locations: " << obsdb[jj].obsspace().nlocs()
57  << std::endl;
58  oops::Log::info() << " Number of variables: " << obsdb[jj].obsspace().nvars()
59  << std::endl;
60  oops::Log::info() << " Number of records: " << obsdb[jj].obsspace().nrecs()
61  << std::endl;
62  }
63  return 0;
64  }
65 
66 // -----------------------------------------------------------------------------
67  private:
68  std::string appname() const {
69  return "oops::TimeIodaIO<" + MODEL::name() + ">";
70  }
71 // -----------------------------------------------------------------------------
72 };
73 
74 } // namespace ioda
75 
76 #endif // MAINS_TIMEIODAIO_H_
ioda::TimeIodaIO
Definition: timeIodaIO.h:30
ioda::TimeIodaIO::appname
std::string appname() const
Definition: timeIodaIO.h:68
ioda::TimeIodaIO::TimeIodaIO
TimeIodaIO(const eckit::mpi::Comm &comm=oops::mpi::world())
Definition: timeIodaIO.h:35
ioda
Definition: IodaUtils.cc:13
ioda::TimeIodaIO::~TimeIodaIO
virtual ~TimeIodaIO()
Definition: timeIodaIO.h:37
ioda::TimeIodaIO::ObsSpaces_
oops::ObsSpaces< MODEL > ObsSpaces_
Definition: timeIodaIO.h:31
ioda::TimeIodaIO::execute
int execute(const eckit::Configuration &fullConfig) const
Definition: timeIodaIO.h:39