12 #ifndef OOPS_INTERFACE_OBSSPACE_H_
13 #define OOPS_INTERFACE_OBSSPACE_H_
19 #include "eckit/geometry/Point2.h"
20 #include "eckit/system/ResourceUsage.h"
25 #include "oops/util/Logger.h"
26 #include "oops/util/ObjectCounter.h"
27 #include "oops/util/Printable.h"
28 #include "oops/util/Timer.h"
42 template <
typename OBS>
44 private util::ObjectCounter<ObsSpace<OBS> > {
49 static const std::string
classname() {
return "oops::ObsSpace";}
51 ObsSpace(
const eckit::Configuration &,
const eckit::mpi::Comm &,
52 const util::DateTime &,
const util::DateTime &,
81 void print(std::ostream &)
const;
89 template <
typename OBS>
91 const eckit::mpi::Comm & comm,
92 const util::DateTime & bgn,
93 const util::DateTime & end,
94 const eckit::mpi::Comm &
time) : obsdb_(), time_(
time) {
95 Log::trace() <<
"ObsSpace<OBS>::ObsSpace starting" << std::endl;
96 util::Timer timer(
classname(),
"ObsSpace");
97 size_t init = eckit::system::ResourceUsage().maxResidentSetSize();
99 size_t current = eckit::system::ResourceUsage().maxResidentSetSize();
100 this->setObjectSize(current - init);
101 Log::trace() <<
"ObsSpace<OBS>::ObsSpace done" << std::endl;
106 template <
typename OBS>
108 Log::trace() <<
"ObsSpace<OBS>::~ObsSpace starting" << std::endl;
109 util::Timer timer(classname(),
"~ObsSpace");
111 Log::trace() <<
"ObsSpace<OBS>::~ObsSpace done" << std::endl;
116 template <
typename OBS>
118 Log::trace() <<
"ObsSpace<OBS>::save starting" << std::endl;
119 util::Timer timer(classname(),
"save");
121 Log::trace() <<
"ObsSpace<OBS>::save done" << std::endl;
126 template <
typename OBS>
128 Log::trace() <<
"ObsSpace<OBS>::print starting" << std::endl;
129 util::Timer timer(classname(),
"print");
131 Log::trace() <<
"ObsSpace<OBS>::print done" << std::endl;
136 template <
typename OBS>
138 Log::trace() <<
"ObsSpace<OBS>::obsvariables starting" << std::endl;
139 util::Timer timer(classname(),
"obsvariables");
140 return obsdb_->obsvariables();
145 template <
typename OBS>
147 Log::trace() <<
"ObsSpace<OBS>::begin starting" << std::endl;
148 util::Timer timer(classname(),
"begin");
149 Log::trace() <<
"ObsSpace<OBS>::begin done" << std::endl;
155 template <
typename OBS>
157 Log::trace() <<
"ObsSpace<OBS>::end starting" << std::endl;
158 util::Timer timer(classname(),
"end");
159 Log::trace() <<
"ObsSpace<OBS>::end done" << std::endl;
std::unique_ptr< ObsSpace_ > obsdb_
void print(std::ostream &) const
ObsIterator_ end() const
Iterator to the past-the-end observation (after last)
ObsSpace(const ObsSpace &)=delete
ObsIterator_ begin() const
Iterator to the first observation.
ObsSpace(const eckit::Configuration &, const eckit::mpi::Comm &, const util::DateTime &, const util::DateTime &, const eckit::mpi::Comm &time=oops::mpi::myself())
ObsSpace_ & obsspace() const
Interfacing.
static const std::string classname()
const eckit::mpi::Comm & time_
const std::string & obsname() const
const util::DateTime & windowStart() const
Assimilation window.
const eckit::mpi::Comm & timeComm() const
const Variables & obsvariables() const
GeometryIterator< OBS > ObsIterator_
const util::DateTime & windowEnd() const
const eckit::mpi::Comm & myself()
Default communicator with each MPI task by itself.
The namespace for the main oops code.