OOPS
oops/interface/Localization.h
Go to the documentation of this file.
1 /*
2 * Copyright 2011 ECMWF
3 * Copyright 2020-2020 UCAR
4 *
5 * This software was developed at ECMWF for evaluation
6 * and may be used for academic and research purposes only.
7 * The software is provided as is without any warranty.
8 *
9 * This software can be used, copied and modified but not
10 * redistributed or sold. This notice must be reproduced
11 * on each copy made.
12 */
13 
14 #ifndef OOPS_INTERFACE_LOCALIZATION_H_
15 #define OOPS_INTERFACE_LOCALIZATION_H_
16 
17 #include <memory>
18 #include <string>
19 
20 #include "eckit/config/Configuration.h"
24 
25 namespace oops {
26 
27 // -----------------------------------------------------------------------------
28 /// \brief Model-space localization class: intended for model-specific implementations
29 template<typename MODEL, typename LOC>
30 class Localization : public LocalizationBase<MODEL> {
33  public:
34  static const std::string classname() {return "oops::Localization";}
35 
36  Localization(const Geometry_ &, const util::DateTime &, const eckit::Configuration &);
37  ~Localization();
38 
39  void multiply(Increment_ &) const override;
40 
41  private:
42  void print(std::ostream &) const override;
43 
44  std::unique_ptr<LOC> loc_;
45 };
46 
47 // -----------------------------------------------------------------------------
48 
49 template <typename MODEL, typename LOC>
51  const util::DateTime & time,
52  const eckit::Configuration & conf) {
53  Log::trace() << "Localization<MODEL>::Localization starting" << std::endl;
54  util::Timer timer(classname(), "Localization");
55  loc_.reset(new LOC(geometry.geometry(), conf));
56  Log::trace() << "Localization<MODEL>::Localization done" << std::endl;
57 }
58 
59 // -----------------------------------------------------------------------------
60 
61 template <typename MODEL, typename LOC>
63  Log::trace() << "Localization<MODEL>::~Localization starting" << std::endl;
64  util::Timer timer(classname(), "~Localization");
65  loc_.reset();
66  Log::trace() << "Localization<MODEL>::~Localization done" << std::endl;
67 }
68 
69 // -----------------------------------------------------------------------------
70 
71 template <typename MODEL, typename LOC>
73  Log::trace() << "Localization<MODEL>::multiply starting" << std::endl;
74  util::Timer timer(classname(), "multiply");
75  loc_->multiply(dx.increment());
76  Log::trace() << "Localization<MODEL>::multiply done" << std::endl;
77 }
78 
79 // -----------------------------------------------------------------------------
80 
81 template <typename MODEL, typename LOC>
82 void Localization<MODEL, LOC>::print(std::ostream & os) const {
83  Log::trace() << "Localization<MODEL>::print starting" << std::endl;
84  util::Timer timer(classname(), "print");
85  os << *loc_;
86  Log::trace() << "Localization<MODEL>::print done" << std::endl;
87 }
88 
89 // -----------------------------------------------------------------------------
90 
91 } // namespace oops
92 
93 #endif // OOPS_INTERFACE_LOCALIZATION_H_
oops::Localization
Model-space localization class: intended for model-specific implementations.
Definition: oops/interface/Localization.h:30
oops
The namespace for the main oops code.
Definition: ErrorCovarianceL95.cc:22
oops::LocalizationBase
Model-space localization base class.
Definition: LocalizationBase.h:38
oops::Localization::classname
static const std::string classname()
Definition: oops/interface/Localization.h:34
oops::Localization::print
void print(std::ostream &) const override
Definition: oops/interface/Localization.h:82
oops::Localization::Increment_
Increment< MODEL > Increment_
Definition: oops/interface/Localization.h:32
oops::Localization::Localization
Localization(const Geometry_ &, const util::DateTime &, const eckit::Configuration &)
Definition: oops/interface/Localization.h:50
oops::Localization::Geometry_
Geometry< MODEL > Geometry_
Definition: oops/interface/Localization.h:31
oops::Localization::multiply
void multiply(Increment_ &) const override
Definition: oops/interface/Localization.h:72
LocalizationBase.h
oops::Increment::increment
Increment_ & increment()
Interfacing.
Definition: oops/interface/Increment.h:65
oops::Geometry
Geometry class used in oops; subclass of interface class above.
Definition: oops/interface/Geometry.h:189
oops::Increment
Increment Class: Difference between two states.
Definition: CostJbState.h:27
oops::Localization::loc_
std::unique_ptr< LOC > loc_
Definition: oops/interface/Localization.h:44
Geometry.h
oops::Geometry::geometry
const Geometry_ & geometry() const
Interfacing with other oops classes.
Definition: oops/interface/Geometry.h:206
Increment.h
oops::Localization::~Localization
~Localization()
Definition: oops/interface/Localization.h:62