OOPS
oops/interface/ObsAuxControl.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2009-2016 ECMWF.
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  * In applying this licence, ECMWF does not waive the privileges and immunities
7  * granted to it by virtue of its status as an intergovernmental organisation nor
8  * does it submit to any jurisdiction.
9  */
10 
11 #ifndef OOPS_INTERFACE_OBSAUXCONTROL_H_
12 #define OOPS_INTERFACE_OBSAUXCONTROL_H_
13 
14 #include <iostream>
15 #include <memory>
16 #include <string>
17 
19 #include "oops/util/Logger.h"
20 #include "oops/util/ObjectCounter.h"
21 #include "oops/util/Printable.h"
22 #include "oops/util/Timer.h"
23 
24 namespace eckit {
25  class Configuration;
26 }
27 
28 namespace oops {
29  class Variables;
30 
31 // -----------------------------------------------------------------------------
32 
33 template <typename OBS>
34 class ObsAuxControl : public util::Printable,
35  private util::ObjectCounter<ObsAuxControl<OBS> > {
36  typedef typename OBS::ObsAuxControl ObsAuxControl_;
37 
38  public:
39  static const std::string classname() {return "oops::ObsAuxControl";}
40 
41  ObsAuxControl(const ObsSpace<OBS> &, const eckit::Configuration &);
42  explicit ObsAuxControl(const ObsAuxControl &, const bool copy = true);
44 
45 /// Interfacing
46  const ObsAuxControl_ & obsauxcontrol() const {return *aux_;}
48 
49 /// I/O and diagnostics
50  void read(const eckit::Configuration &);
51  void write(const eckit::Configuration &) const;
52  double norm() const;
53 
54 /// Other
55  const Variables & requiredVars() const;
56  const Variables & requiredHdiagnostics() const;
57 
58 /// Operator
60 
61  private:
62  void print(std::ostream &) const;
63  std::unique_ptr<ObsAuxControl_> aux_;
64 };
65 
66 // =============================================================================
67 
68 template<typename OBS>
70  const eckit::Configuration & conf) : aux_()
71 {
72  Log::trace() << "ObsAuxControl<OBS>::ObsAuxControl starting" << std::endl;
73  util::Timer timer(classname(), "ObsAuxControl");
74  aux_.reset(new ObsAuxControl_(os.obsspace(), conf));
75  Log::trace() << "ObsAuxControl<OBS>::ObsAuxControl done" << std::endl;
76 }
77 
78 // -----------------------------------------------------------------------------
79 
80 template<typename OBS>
81 ObsAuxControl<OBS>::ObsAuxControl(const ObsAuxControl & other, const bool copy) : aux_()
82 {
83  Log::trace() << "ObsAuxControl<OBS>::ObsAuxControl copy starting" << std::endl;
84  util::Timer timer(classname(), "ObsAuxControl");
85  aux_.reset(new ObsAuxControl_(*other.aux_, copy));
86  Log::trace() << "ObsAuxControl<OBS>::ObsAuxControl copy done" << std::endl;
87 }
88 
89 // -----------------------------------------------------------------------------
90 
91 template<typename OBS>
93  Log::trace() << "ObsAuxControl<OBS>::~ObsAuxControl starting" << std::endl;
94  util::Timer timer(classname(), "~ObsAuxControl");
95  aux_.reset();
96  Log::trace() << "ObsAuxControl<OBS>::~ObsAuxControl done" << std::endl;
97 }
98 
99 // -----------------------------------------------------------------------------
100 
101 template<typename OBS>
102 void ObsAuxControl<OBS>::read(const eckit::Configuration & conf) {
103  Log::trace() << "ObsAuxControl<OBS>::read starting" << std::endl;
104  util::Timer timer(classname(), "read");
105  aux_->read(conf);
106  Log::trace() << "ObsAuxControl<OBS>::read done" << std::endl;
107 }
108 
109 // -----------------------------------------------------------------------------
110 
111 template<typename OBS>
112 void ObsAuxControl<OBS>::write(const eckit::Configuration & conf) const {
113  Log::trace() << "ObsAuxControl<OBS>::write starting" << std::endl;
114  util::Timer timer(classname(), "write");
115  aux_->write(conf);
116  Log::trace() << "ObsAuxControl<OBS>::write done" << std::endl;
117 }
118 
119 // -----------------------------------------------------------------------------
120 
121 template<typename OBS>
122 double ObsAuxControl<OBS>::norm() const {
123  Log::trace() << "ObsAuxControl<OBS>::norm starting" << std::endl;
124  util::Timer timer(classname(), "norm");
125  double zz = aux_->norm();
126  Log::trace() << "ObsAuxControl<OBS>::norm done" << std::endl;
127  return zz;
128 }
129 
130 // -----------------------------------------------------------------------------
131 
132 template<typename OBS>
134  Log::trace() << "ObsAuxControl<OBS>::requiredVars starting" << std::endl;
135  util::Timer timer(classname(), "requiredVars");
136  Log::trace() << "ObsAuxControl<OBS>::requiredVars done" << std::endl;
137  return aux_->requiredVars();
138 }
139 
140 // -----------------------------------------------------------------------------
141 
142 template<typename OBS>
144  Log::trace() << "ObsAuxControl<OBS>::requiredHdiagnostics starting" << std::endl;
145  util::Timer timer(classname(), "requiredHdiagnostics");
146  Log::trace() << "ObsAuxControl<OBS>::requiredHdiagnostics done" << std::endl;
147  return aux_->requiredHdiagnostics();
148 }
149 
150 // -----------------------------------------------------------------------------
151 template<typename OBS>
153  Log::trace() << "ObsAuxControl<OBS>::operator= starting" << std::endl;
154  util::Timer timer(classname(), "operator=");
155  *aux_ = *rhs.aux_;
156  Log::trace() << "ObsAuxControl<OBS>::operator= done" << std::endl;
157  return *this;
158 }
159 
160 // -----------------------------------------------------------------------------
161 
162 template<typename OBS>
163 void ObsAuxControl<OBS>::print(std::ostream & os) const {
164  Log::trace() << "ObsAuxControl<OBS>::print starting" << std::endl;
165  util::Timer timer(classname(), "print");
166  os << *aux_;
167  Log::trace() << "ObsAuxControl<OBS>::print done" << std::endl;
168 }
169 
170 // -----------------------------------------------------------------------------
171 
172 } // namespace oops
173 
174 #endif // OOPS_INTERFACE_OBSAUXCONTROL_H_
oops
The namespace for the main oops code.
Definition: ErrorCovarianceL95.cc:22
oops::ObsAuxControl::~ObsAuxControl
~ObsAuxControl()
Definition: oops/interface/ObsAuxControl.h:92
oops::ObsSpace
Definition: oops/interface/ObsSpace.h:42
oops::ObsAuxControl::requiredVars
const Variables & requiredVars() const
Other.
Definition: oops/interface/ObsAuxControl.h:133
oops::ObsSpace::obsspace
ObsSpace_ & obsspace() const
Interfacing.
Definition: oops/interface/ObsSpace.h:61
oops::ObsAuxControl::write
void write(const eckit::Configuration &) const
Definition: oops/interface/ObsAuxControl.h:112
oops::ObsAuxControl
Definition: oops/interface/ObsAuxControl.h:35
oops::ObsAuxControl::print
void print(std::ostream &) const
Definition: oops/interface/ObsAuxControl.h:163
oops::ObsAuxControl::operator=
ObsAuxControl & operator=(const ObsAuxControl &)
Operator.
Definition: oops/interface/ObsAuxControl.h:152
eckit
Definition: FieldL95.h:22
oops::ObsAuxControl::aux_
std::unique_ptr< ObsAuxControl_ > aux_
Definition: oops/interface/ObsAuxControl.h:63
oops::ObsAuxControl::obsauxcontrol
ObsAuxControl_ & obsauxcontrol()
Definition: oops/interface/ObsAuxControl.h:47
oops::ObsAuxControl::norm
double norm() const
Definition: oops/interface/ObsAuxControl.h:122
ObsSpace.h
oops::ObsAuxControl::read
void read(const eckit::Configuration &)
I/O and diagnostics.
Definition: oops/interface/ObsAuxControl.h:102
oops::ObsAuxControl::classname
static const std::string classname()
Definition: oops/interface/ObsAuxControl.h:39
oops::ObsAuxControl::ObsAuxControl
ObsAuxControl(const ObsSpace< OBS > &, const eckit::Configuration &)
Definition: oops/interface/ObsAuxControl.h:69
oops::ObsAuxControl::obsauxcontrol
const ObsAuxControl_ & obsauxcontrol() const
Interfacing.
Definition: oops/interface/ObsAuxControl.h:46
oops::Variables
Definition: oops/base/Variables.h:23
oops::ObsAuxControl::ObsAuxControl_
OBS::ObsAuxControl ObsAuxControl_
Definition: oops/interface/ObsAuxControl.h:36
oops::ObsAuxControl::requiredHdiagnostics
const Variables & requiredHdiagnostics() const
Definition: oops/interface/ObsAuxControl.h:143