OOPS
ObsBiasCorrection.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 LORENZ95_OBSBIASCORRECTION_H_
12 #define LORENZ95_OBSBIASCORRECTION_H_
13 
14 #include <cmath>
15 #include <iostream>
16 #include <vector>
17 
18 #include "oops/util/Printable.h"
19 #include "oops/util/Serializable.h"
20 
21 namespace eckit {
22  class Configuration;
23 }
24 
25 namespace lorenz95 {
26  class ObsBias;
27  class ObsTableView;
28 
29 // -----------------------------------------------------------------------------
30 
31 class ObsBiasCorrection : public util::Printable,
32  public util::Serializable {
33  public:
34 /// Constructor, destructor
36  ObsBiasCorrection(const ObsTableView &, const eckit::Configuration &);
37  ObsBiasCorrection(const ObsBiasCorrection &, const bool copy = true);
38  ObsBiasCorrection(const ObsBiasCorrection &, const eckit::Configuration &);
40 
41 /// Linear algebra operators
42  void diff(const ObsBias &, const ObsBias &);
43  void zero();
47  ObsBiasCorrection & operator*=(const double);
48  void axpy(const double, const ObsBiasCorrection &);
49  double dot_product_with(const ObsBiasCorrection &) const;
50 
51 /// I/O and diagnostics
52  void read(const eckit::Configuration &) {}
53  void write(const eckit::Configuration &) const {}
54  double norm() const {return std::abs(bias_);}
55 
56  double & value() {return bias_;}
57  const double & value() const {return bias_;}
58 
59 /// Serialize and deserialize
60  size_t serialSize() const override;
61  void serialize(std::vector<double> &) const override;
62  void deserialize(const std::vector<double> &, size_t &) override;
63 
64  private:
65  void print(std::ostream &) const override;
66  double bias_;
67  bool active_;
68 };
69 
70 // -----------------------------------------------------------------------------
71 
72 } // namespace lorenz95
73 
74 #endif // LORENZ95_OBSBIASCORRECTION_H_
lorenz95::ObsBiasCorrection::value
const double & value() const
Definition: ObsBiasCorrection.h:57
lorenz95::ObsBiasCorrection::serialize
void serialize(std::vector< double > &) const override
Definition: ObsBiasCorrection.cc:94
lorenz95::ObsBias
Class to handle observation bias parameters.
Definition: l95/src/lorenz95/ObsBias.h:36
lorenz95::ObsBiasCorrection::operator-=
ObsBiasCorrection & operator-=(const ObsBiasCorrection &)
Definition: ObsBiasCorrection.cc:70
lorenz95::ObsBiasCorrection::write
void write(const eckit::Configuration &) const
Definition: ObsBiasCorrection.h:53
lorenz95::ObsBiasCorrection::operator+=
ObsBiasCorrection & operator+=(const ObsBiasCorrection &)
Definition: ObsBiasCorrection.cc:65
lorenz95::ObsBiasCorrection::~ObsBiasCorrection
~ObsBiasCorrection()
Definition: ObsBiasCorrection.h:39
eckit
Definition: FieldL95.h:22
lorenz95::ObsBiasCorrection::serialSize
size_t serialSize() const override
Serialize and deserialize.
Definition: ObsBiasCorrection.cc:90
lorenz95::ObsBiasCorrection::read
void read(const eckit::Configuration &)
I/O and diagnostics.
Definition: ObsBiasCorrection.h:52
lorenz95::ObsBiasCorrection::operator=
ObsBiasCorrection & operator=(const ObsBiasCorrection &)
Definition: ObsBiasCorrection.cc:56
lorenz95::ObsBiasCorrection::print
void print(std::ostream &) const override
Definition: ObsBiasCorrection.cc:103
lorenz95::ObsBiasCorrection::diff
void diff(const ObsBias &, const ObsBias &)
Linear algebra operators.
Definition: ObsBiasCorrection.cc:48
lorenz95::ObsBiasCorrection::value
double & value()
Definition: ObsBiasCorrection.h:56
lorenz95::ObsBiasCorrection::dot_product_with
double dot_product_with(const ObsBiasCorrection &) const
Definition: ObsBiasCorrection.cc:84
lorenz95::ObsBiasCorrection::deserialize
void deserialize(const std::vector< double > &, size_t &) override
Definition: ObsBiasCorrection.cc:98
lorenz95::ObsBiasCorrection::active_
bool active_
Definition: ObsBiasCorrection.h:67
lorenz95::ObsTableView
A Simple Observation Data Handler.
Definition: ObsTableView.h:38
lorenz95::ObsBiasCorrection::axpy
void axpy(const double, const ObsBiasCorrection &)
Definition: ObsBiasCorrection.cc:80
lorenz95::ObsBiasCorrection::bias_
double bias_
Definition: ObsBiasCorrection.h:66
lorenz95::ObsBiasCorrection::operator*=
ObsBiasCorrection & operator*=(const double)
Definition: ObsBiasCorrection.cc:75
lorenz95::ObsBiasCorrection::zero
void zero()
Definition: ObsBiasCorrection.cc:52
lorenz95
The namespace for the L95 model.
Definition: l95/src/lorenz95/AnalyticInit.cc:17
lorenz95::ObsBiasCorrection
Definition: ObsBiasCorrection.h:32
lorenz95::ObsBiasCorrection::norm
double norm() const
Definition: ObsBiasCorrection.h:54
lorenz95::ObsBiasCorrection::ObsBiasCorrection
ObsBiasCorrection()
Constructor, destructor.