IODA
src/ObsSpace.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2017-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 OBSSPACE_H_
9 #define OBSSPACE_H_
10 
11 #include <map>
12 #include <memory>
13 #include <ostream>
14 #include <string>
15 #include <vector>
16 
17 #include "eckit/geometry/Point2.h"
18 #include "eckit/mpi/Comm.h"
19 
20 #include "ioda/core/ObsData.h"
21 #include "oops/base/ObsSpaceBase.h"
22 #include "oops/base/Variables.h"
23 #include "oops/util/DateTime.h"
24 
25 // Forward declarations
26 namespace eckit {
27  class Configuration;
28 }
29 
30 namespace ioda {
31  class LocalObsSpaceParameters;
32  class ObsVector;
33 
34 /// Observation Space View
35 class ObsSpace : public oops::ObsSpaceBase {
36  public:
37  static const std::string classname() {return "ioda::ObsSpace";}
38  typedef std::map<std::size_t, std::vector<std::size_t>> RecIdxMap;
39  typedef RecIdxMap::const_iterator RecIdxIter;
40 
41  ObsSpace(const eckit::Configuration &, const eckit::mpi::Comm &,
42  const util::DateTime &, const util::DateTime &, const eckit::mpi::Comm &);
43  ObsSpace(const ObsSpace &, const eckit::geometry::Point2 &,
44  const eckit::Configuration &);
45  /*!
46  * \details Copy constructor for an ObsSpace object.
47  */
48  ObsSpace(const ObsSpace &);
49  ~ObsSpace();
50 
51  std::size_t gnlocs() const;
52  std::size_t nlocs() const;
53  std::size_t nrecs() const;
54  std::size_t nvars() const;
55  const std::vector<std::size_t> & recnum() const;
56  const std::vector<std::size_t> & index() const;
57 
58  bool has(const std::string &, const std::string &) const;
59  ObsDtype dtype(const std::string &, const std::string &) const;
60 
61  std::string obs_group_var() const;
62  std::string obs_sort_var() const;
63  std::string obs_sort_order() const;
64 
65  void get_db(const std::string & group, const std::string & name,
66  std::vector<int> & vdata) const;
67  void get_db(const std::string & group, const std::string & name,
68  std::vector<float> & vdata) const;
69  void get_db(const std::string & group, const std::string & name,
70  std::vector<double> & vdata) const;
71  void get_db(const std::string & group, const std::string & name,
72  std::vector<std::string> & vdata) const;
73  void get_db(const std::string & group, const std::string & name,
74  std::vector<util::DateTime> & vdata) const;
75 
76  void put_db(const std::string & group, const std::string & name,
77  const std::vector<int> & vdata);
78  void put_db(const std::string & group, const std::string & name,
79  const std::vector<float> & vdata);
80  void put_db(const std::string & group, const std::string & name,
81  const std::vector<double> & vdata);
82  void put_db(const std::string & group, const std::string & name,
83  const std::vector<std::string> & vdata);
84  void put_db(const std::string & group, const std::string & name,
85  const std::vector<util::DateTime> & vdata);
86 
87  const RecIdxIter recidx_begin() const;
88  const RecIdxIter recidx_end() const;
89  bool recidx_has(const std::size_t RecNum) const;
90  std::size_t recidx_recnum(const RecIdxIter & Irec) const;
91  const std::vector<std::size_t> & recidx_vector(const RecIdxIter & Irec) const;
92  const std::vector<std::size_t> & recidx_vector(const std::size_t RecNum) const;
93  std::vector<std::size_t> recidx_all_recnums() const;
94  const std::vector<std::size_t> & localobs() const { return localobs_; }
95 
96  /*! \details This method will return the name of the obs type being stored */
97  const std::string & obsname() const {return obsspace_->obsname();}
98  /*! \details This method will return the start of the DA timing window */
99  const util::DateTime & windowStart() const {return obsspace_->windowStart();}
100  /*! \details This method will return the end of the DA timing window */
101  const util::DateTime & windowEnd() const {return obsspace_->windowEnd();}
102  /*! \details This method will return the associated MPI communicator */
103  const eckit::mpi::Comm & comm() const {return obsspace_->comm();}
104 
105  void printJo(const ObsVector &, const ObsVector &); // to be removed
106 
107  const oops::Variables & obsvariables() const {return obsspace_->obsvariables();}
108  const std::vector<double> & obsdist() const {return obsdist_;}
109  bool isDistributed() const { return obsspace_->distribution()->isDistributed(); }
110 
111  private:
112  void print(std::ostream &) const;
113 
114  std::shared_ptr<ObsData> obsspace_;
115  std::unique_ptr<LocalObsSpaceParameters> localopts_;
116  std::vector<std::size_t> localobs_;
117  bool isLocal_;
118  std::vector<double> obsdist_;
119 };
120 
121 } // namespace ioda
122 
123 #endif // OBSSPACE_H_
ioda::ObsSpace::obs_group_var
std::string obs_group_var() const
Definition: ObsSpace.cc:301
ioda::ObsSpace::recnum
const std::vector< std::size_t > & recnum() const
Definition: ObsSpace.cc:377
ioda::ObsSpace::obs_sort_var
std::string obs_sort_var() const
Definition: ObsSpace.cc:310
ioda::ObsSpace::print
void print(std::ostream &) const
Definition: ObsSpace.cc:458
ioda::ObsSpace::get_db
void get_db(const std::string &group, const std::string &name, std::vector< int > &vdata) const
Definition: ObsSpace.cc:167
ioda::ObsSpace::obsspace_
std::shared_ptr< ObsData > obsspace_
Definition: src/ObsSpace.h:114
ioda::ObsSpace::classname
static const std::string classname()
Definition: src/ObsSpace.h:37
ioda::ObsSpace::index
const std::vector< std::size_t > & index() const
Definition: ObsSpace.cc:386
ioda::ObsSpace::nrecs
std::size_t nrecs() const
Definition: ObsSpace.cc:358
ioda::ObsSpace::has
bool has(const std::string &, const std::string &) const
Definition: ObsSpace.cc:282
ioda::ObsSpace::recidx_begin
const RecIdxIter recidx_begin() const
Definition: ObsSpace.cc:395
ioda::ObsSpace::localopts_
std::unique_ptr< LocalObsSpaceParameters > localopts_
Definition: src/ObsSpace.h:115
ioda::ObsSpace::recidx_recnum
std::size_t recidx_recnum(const RecIdxIter &Irec) const
Definition: ObsSpace.cc:422
ioda::ObsSpace::recidx_has
bool recidx_has(const std::size_t RecNum) const
Definition: ObsSpace.cc:413
ioda::ObsSpace::comm
const eckit::mpi::Comm & comm() const
Definition: src/ObsSpace.h:103
ioda::ObsSpace::windowEnd
const util::DateTime & windowEnd() const
Definition: src/ObsSpace.h:101
ioda::ObsSpace::obs_sort_order
std::string obs_sort_order() const
Definition: ObsSpace.cc:319
ioda
Definition: IodaUtils.cc:13
ioda::ObsSpace::obsdist_
std::vector< double > obsdist_
Definition: src/ObsSpace.h:118
ioda::ObsSpace::isLocal_
bool isLocal_
Definition: src/ObsSpace.h:117
ioda::ObsVector
ObsVector class to handle vectors in observation space for IODA.
Definition: src/ObsVector.h:34
ioda::ObsSpace::RecIdxMap
std::map< std::size_t, std::vector< std::size_t > > RecIdxMap
Definition: src/ObsSpace.h:38
ioda::ObsSpace::printJo
void printJo(const ObsVector &, const ObsVector &)
Definition: ObsSpace.cc:468
ioda::ObsSpace::windowStart
const util::DateTime & windowStart() const
Definition: src/ObsSpace.h:99
eckit
Definition: LocalObsSpaceParameters.h:24
ioda::ObsSpace::isDistributed
bool isDistributed() const
Definition: src/ObsSpace.h:109
ioda::ObsSpace::recidx_vector
const std::vector< std::size_t > & recidx_vector(const RecIdxIter &Irec) const
Definition: ObsSpace.cc:431
ioda::ObsSpace::localobs
const std::vector< std::size_t > & localobs() const
Definition: src/ObsSpace.h:94
ioda::ObsSpace::recidx_all_recnums
std::vector< std::size_t > recidx_all_recnums() const
Definition: ObsSpace.cc:449
ioda::ObsSpace::nlocs
std::size_t nlocs() const
Definition: ObsSpace.cc:344
ioda::ObsSpace::dtype
ObsDtype dtype(const std::string &, const std::string &) const
Definition: ObsSpace.cc:292
ioda::ObsSpace::obsname
const std::string & obsname() const
Definition: src/ObsSpace.h:97
ioda::ObsSpace::RecIdxIter
RecIdxMap::const_iterator RecIdxIter
Definition: src/ObsSpace.h:39
ioda::ObsSpace::put_db
void put_db(const std::string &group, const std::string &name, const std::vector< int > &vdata)
Definition: ObsSpace.cc:242
ioda::ObsDtype
ObsDtype
Definition: ObsData.h:63
ioda::ObsSpace::recidx_end
const RecIdxIter recidx_end() const
Definition: ObsSpace.cc:404
ioda::ObsSpace::gnlocs
std::size_t gnlocs() const
Definition: ObsSpace.cc:332
ioda::ObsSpace::obsvariables
const oops::Variables & obsvariables() const
Definition: src/ObsSpace.h:107
ioda::ObsSpace::ObsSpace
ObsSpace(const eckit::Configuration &, const eckit::mpi::Comm &, const util::DateTime &, const util::DateTime &, const eckit::mpi::Comm &)
Definition: ObsSpace.cc:42
ioda::ObsSpace::nvars
std::size_t nvars() const
Definition: ObsSpace.cc:368
ioda::ObsSpace::~ObsSpace
~ObsSpace()
Definition: ObsSpace.cc:161
ioda::ObsSpace
Observation Space View.
Definition: src/ObsSpace.h:35
ioda::ObsSpace::localobs_
std::vector< std::size_t > localobs_
Definition: src/ObsSpace.h:116
ioda::ObsSpace::ObsSpace
ObsSpace(const ObsSpace &)
ioda::ObsSpace::obsdist
const std::vector< double > & obsdist() const
Definition: src/ObsSpace.h:108