OOPS
ObsSpaceQG.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2009-2016 ECMWF.
3  * (C) Copyright 2017-2020 UCAR.
4  *
5  * This software is licensed under the terms of the Apache Licence Version 2.0
6  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
7  * In applying this licence, ECMWF does not waive the privileges and immunities
8  * granted to it by virtue of its status as an intergovernmental organisation nor
9  * does it submit to any jurisdiction.
10  */
11 
12 #ifndef QG_MODEL_OBSSPACEQG_H_
13 #define QG_MODEL_OBSSPACEQG_H_
14 
15 #include <map>
16 #include <memory>
17 #include <ostream>
18 #include <string>
19 #include <vector>
20 
21 #include "eckit/geometry/Point2.h"
22 #include "eckit/mpi/Comm.h"
23 
24 #include "oops/base/ObsSpaceBase.h"
25 #include "oops/base/Variables.h"
26 #include "oops/util/DateTime.h"
27 
28 #include "oops/qg/LocationsQG.h"
29 #include "oops/qg/QgFortran.h"
30 
31 namespace eckit {
32  class Configuration;
33 }
34 
35 namespace qg {
36  class ObsVecQG;
37 
38 /// \brief ObsSpace for QG model
39 // \details ObsSpaceQG is created for each obs type. The underlying Fortran
40 // structure (key_) is created for each matching input-output filename pair
41 // (i.e. different obstypes can be stored in the same Fortran structure).
42 // For mapping between ObsSpaceQG and Fortran structures,
43 // ObsSpaceQG::theObsFileRegister_ map is used
45  public:
46  /// create full ObsSpace (read or generate data)
47  ObsSpaceQG(const eckit::Configuration &, const eckit::mpi::Comm &,
48  const util::DateTime &, const util::DateTime &, const eckit::mpi::Comm &);
49  /// create local ObsSpace
50  ObsSpaceQG(const ObsSpaceQG &, const eckit::geometry::Point2 &,
51  const eckit::Configuration &);
52  ~ObsSpaceQG();
53 
54  /// read data or metadata
55  void getdb(const std::string &, int &) const;
56  /// save data or metadata
57  void putdb(const std::string &, const int &) const;
58 
59  /// check if variable is in ObsSpace
60  bool has(const std::string & col) const;
61 
62  /// create locations between times (\p t1, \p t2]
63  std::unique_ptr<LocationsQG> locations(const util::DateTime & t1,
64  const util::DateTime & t2) const;
65 
66  void printJo(const ObsVecQG &, const ObsVecQG &) const;
67 
68  /// return number of observations (unique locations)
69  int nobs() const;
70 
71  /// return variables simulated by ObsOperators
72  const oops::Variables & obsvariables() const { return obsvars_; }
73 
74  /// observation type
75  const std::string & obsname() const {return obsname_;}
76 
77  /// local observations indices
78  const std::vector<int> & localobs() const { return localobs_;}
79 
80  /// interface with Fortran
81  const F90odb & toFortran() const {return key_;}
82 
83  private:
84  void print(std::ostream &) const;
85 
86  F90odb key_; // pointer to Fortran structure
87  const std::string obsname_; // corresponds with obstype
88  const util::DateTime winbgn_; // window for the observations
89  const util::DateTime winend_;
90  oops::Variables obsvars_; // variables simulated by ObsOperators
91  std::vector<int> localobs_; // indices of local observations
92  bool isLocal_; // true if it's a local subset
93  const eckit::mpi::Comm & comm_; // MPI communicator associated with ObsSpace
94 
95  // defines mapping for Fortran structures
96  static std::map < std::string, F90odb > theObsFileRegister_;
97  static int theObsFileCount_; // number of files used
98 };
99 
100 } // namespace qg
101 
102 #endif // QG_MODEL_OBSSPACEQG_H_
qg::ObsSpaceQG::obsvars_
oops::Variables obsvars_
Definition: ObsSpaceQG.h:90
qg::ObsSpaceQG::key_
F90odb key_
Definition: ObsSpaceQG.h:86
qg
The namespace for the qg model.
Definition: qg/model/AnalyticInit.cc:13
qg::ObsSpaceQG::obsname
const std::string & obsname() const
observation type
Definition: ObsSpaceQG.h:75
qg::ObsSpaceQG::theObsFileCount_
static int theObsFileCount_
Definition: ObsSpaceQG.h:97
qg::ObsSpaceQG::localobs_
std::vector< int > localobs_
Definition: ObsSpaceQG.h:91
qg::ObsSpaceQG::obsvariables
const oops::Variables & obsvariables() const
return variables simulated by ObsOperators
Definition: ObsSpaceQG.h:72
qg::ObsSpaceQG
ObsSpace for QG model.
Definition: ObsSpaceQG.h:44
qg::ObsSpaceQG::winend_
const util::DateTime winend_
Definition: ObsSpaceQG.h:89
qg::F90odb
int F90odb
Definition: QgFortran.h:57
qg::ObsSpaceQG::comm_
const eckit::mpi::Comm & comm_
Definition: ObsSpaceQG.h:93
qg::ObsSpaceQG::nobs
int nobs() const
return number of observations (unique locations)
Definition: ObsSpaceQG.cc:199
eckit
Definition: FieldL95.h:22
qg::ObsSpaceQG::ObsSpaceQG
ObsSpaceQG(const eckit::Configuration &, const eckit::mpi::Comm &, const util::DateTime &, const util::DateTime &, const eckit::mpi::Comm &)
create full ObsSpace (read or generate data)
Definition: ObsSpaceQG.cc:41
qg::ObsSpaceQG::printJo
void printJo(const ObsVecQG &, const ObsVecQG &) const
Definition: ObsSpaceQG.cc:193
qg::ObsSpaceQG::localobs
const std::vector< int > & localobs() const
local observations indices
Definition: ObsSpaceQG.h:78
qg::ObsVecQG
ObsVecQG class to handle vectors in observation space for QG model.
Definition: ObsVecQG.h:34
qg::ObsSpaceQG::print
void print(std::ostream &) const
Definition: ObsSpaceQG.cc:210
qg::ObsSpaceQG::theObsFileRegister_
static std::map< std::string, F90odb > theObsFileRegister_
Definition: ObsSpaceQG.h:96
qg::ObsSpaceQG::winbgn_
const util::DateTime winbgn_
Definition: ObsSpaceQG.h:88
qg::ObsSpaceQG::isLocal_
bool isLocal_
Definition: ObsSpaceQG.h:92
qg::ObsSpaceQG::getdb
void getdb(const std::string &, int &) const
read data or metadata
Definition: ObsSpaceQG.cc:155
qg::ObsSpaceQG::has
bool has(const std::string &col) const
check if variable is in ObsSpace
Definition: ObsSpaceQG.cc:174
qg::ObsSpaceQG::locations
std::unique_ptr< LocationsQG > locations(const util::DateTime &t1, const util::DateTime &t2) const
create locations between times (t1, t2]
Definition: ObsSpaceQG.cc:182
qg::ObsSpaceQG::~ObsSpaceQG
~ObsSpaceQG()
Definition: ObsSpaceQG.cc:142
oops::Variables
Definition: oops/base/Variables.h:23
qg::ObsSpaceQG::obsname_
const std::string obsname_
Definition: ObsSpaceQG.h:87
ObsSpaceBase.h
qg::ObsSpaceQG::toFortran
const F90odb & toFortran() const
interface with Fortran
Definition: ObsSpaceQG.h:81
Variables.h
oops::ObsSpaceBase
Base class for observation spaces.
Definition: ObsSpaceBase.h:31
qg::ObsSpaceQG::putdb
void putdb(const std::string &, const int &) const
save data or metadata
Definition: ObsSpaceQG.cc:166