IODA Bundle
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"
21 #include "oops/base/Geometry.h"
22 #include "oops/base/Increment.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 doRandomize(Increment_ &) const override;
40  void doMultiply(Increment_ &) const override;
41 
42  private:
43  void print(std::ostream &) const override;
44 
45  std::unique_ptr<LOC> loc_;
46 };
47 
48 // -----------------------------------------------------------------------------
49 
50 template <typename MODEL, typename LOC>
52  const util::DateTime & time,
53  const eckit::Configuration & conf) {
54  Log::trace() << "Localization<MODEL>::Localization starting" << std::endl;
55  util::Timer timer(classname(), "Localization");
56  loc_.reset(new LOC(geometry.geometry(), conf));
57  Log::trace() << "Localization<MODEL>::Localization done" << std::endl;
58 }
59 
60 // -----------------------------------------------------------------------------
61 
62 template <typename MODEL, typename LOC>
64  Log::trace() << "Localization<MODEL>::~Localization starting" << std::endl;
65  util::Timer timer(classname(), "~Localization");
66  loc_.reset();
67  Log::trace() << "Localization<MODEL>::~Localization done" << std::endl;
68 }
69 
70 // -----------------------------------------------------------------------------
71 
72 template <typename MODEL, typename LOC>
74  Log::trace() << "Localization<MODEL>::doRandomize starting" << std::endl;
75  util::Timer timer(classname(), "doRandomize");
76  loc_->randomize(dx.increment());
77  Log::trace() << "Localization<MODEL>::doRandomize done" << std::endl;
78 }
79 
80 // -----------------------------------------------------------------------------
81 
82 template <typename MODEL, typename LOC>
84  Log::trace() << "Localization<MODEL>::doMultiply starting" << std::endl;
85  util::Timer timer(classname(), "doMultiply");
86  loc_->multiply(dx.increment());
87  Log::trace() << "Localization<MODEL>::doMultiply done" << std::endl;
88 }
89 
90 // -----------------------------------------------------------------------------
91 
92 template <typename MODEL, typename LOC>
93 void Localization<MODEL, LOC>::print(std::ostream & os) const {
94  Log::trace() << "Localization<MODEL>::print starting" << std::endl;
95  util::Timer timer(classname(), "print");
96  os << *loc_;
97  Log::trace() << "Localization<MODEL>::print done" << std::endl;
98 }
99 
100 // -----------------------------------------------------------------------------
101 
102 } // namespace oops
103 
104 #endif // OOPS_INTERFACE_LOCALIZATION_H_
Geometry class used in oops; subclass of interface class interface::Geometry.
Increment class used in oops.
Model-space localization base class.
Model-space localization class: intended for model-specific implementations.
static const std::string classname()
std::unique_ptr< LOC > loc_
void print(std::ostream &) const override
Localization(const Geometry_ &, const util::DateTime &, const eckit::Configuration &)
void doRandomize(Increment_ &) const override
void doMultiply(Increment_ &) const override
const Geometry_ & geometry() const
const Increment_ & increment() const
The namespace for the main oops code.