11 #ifndef OOPS_INTERFACE_GEOMETRY_H_
12 #define OOPS_INTERFACE_GEOMETRY_H_
19 #include "atlas/field.h"
20 #include "atlas/functionspace.h"
24 #include "oops/util/Logger.h"
25 #include "oops/util/ObjectCounter.h"
26 #include "oops/util/parameters/ConfigurationParameter.h"
27 #include "oops/util/parameters/GenericParameters.h"
28 #include "oops/util/parameters/HasParameters_.h"
29 #include "oops/util/parameters/Parameters.h"
30 #include "oops/util/parameters/ParametersOrConfiguration.h"
31 #include "oops/util/Printable.h"
32 #include "oops/util/Timer.h"
58 template <
typename MODEL>
60 private util::ObjectCounter<Geometry<MODEL> > {
67 typedef TParameters_IfAvailableElseFallbackType_t<Geometry_, GenericParameters>
Parameters_;
69 static const std::string
classname() {
return "oops::Geometry";}
73 Geometry(
const eckit::Configuration &,
const eckit::mpi::Comm &);
75 explicit Geometry(std::shared_ptr<const Geometry_>);
87 const eckit::mpi::Comm &
getComm()
const {
return geom_->getComm();}
92 std::shared_ptr<const Geometry_>
geom_;
95 void print(std::ostream &)
const;
100 template <
typename MODEL>
102 const eckit::mpi::Comm & comm)
108 template <
typename MODEL>
110 const eckit::mpi::Comm & comm): geom_() {
111 Log::trace() <<
"Geometry<MODEL>::Geometry starting" << std::endl;
112 util::Timer timer(
classname(),
"Geometry");
114 parametersOrConfiguration<HasParameters_<Geometry_>::value>(parameters),
116 Log::trace() <<
"Geometry<MODEL>::Geometry done" << std::endl;
121 template <
typename MODEL>
125 Log::trace() <<
"Geometry<MODEL>::Geometry shared_ptr done" << std::endl;
130 template <
typename MODEL>
132 Log::trace() <<
"Geometry<MODEL>::~Geometry starting" << std::endl;
133 util::Timer timer(classname(),
"~Geometry");
135 Log::trace() <<
"Geometry<MODEL>::~Geometry done" << std::endl;
140 template <
typename MODEL>
142 Log::trace() <<
"Geometry<MODEL>::begin starting" << std::endl;
143 util::Timer timer(classname(),
"begin");
144 Log::trace() <<
"Geometry<MODEL>::begin done" << std::endl;
150 template <
typename MODEL>
152 Log::trace() <<
"Geometry<MODEL>::verticalCoord starting" << std::endl;
153 util::Timer timer(classname(),
"verticalCoord");
154 Log::trace() <<
"Geometry<MODEL>::verticalCoord done" << std::endl;
155 return geom_->verticalCoord(str);
160 template <
typename MODEL>
162 Log::trace() <<
"Geometry<MODEL>::end starting" << std::endl;
163 util::Timer timer(classname(),
"end");
164 Log::trace() <<
"Geometry<MODEL>::end done" << std::endl;
170 template <
typename MODEL>
172 Log::trace() <<
"Geometry<MODEL>::print starting" << std::endl;
173 util::Timer timer(classname(),
"print");
175 Log::trace() <<
"Geometry<MODEL>::print done" << std::endl;
188 template <
typename MODEL>
197 const eckit::mpi::Comm & time);
203 explicit Geometry(std::shared_ptr<const Geometry_>);
217 template <
typename MODEL>
219 const eckit::mpi::Comm & geometry,
const eckit::mpi::Comm & time):
220 interface::
Geometry<MODEL>(config, geometry), timeComm_(&time)
225 template <
typename MODEL>
227 const eckit::mpi::Comm & geometry,
const eckit::mpi::Comm & time):
228 interface::
Geometry<MODEL>(parameters, geometry), timeComm_(&time)
233 template <
typename MODEL>
240 #endif // OOPS_INTERFACE_GEOMETRY_H_