OOPS
ModelBiasCorrection.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_MODELBIASCORRECTION_H_
12 #define LORENZ95_MODELBIASCORRECTION_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 ModelBias;
27  class ModelBiasCovariance;
28  class Resolution;
29 
30 // -----------------------------------------------------------------------------
31 
32 class ModelBiasCorrection : public util::Printable,
33  public util::Serializable {
34  public:
35 /// Constructor, destructor
36  ModelBiasCorrection(const Resolution &, const eckit::Configuration &);
37  ModelBiasCorrection(const ModelBiasCorrection &, const bool);
38  ModelBiasCorrection(const ModelBiasCorrection &, const eckit::Configuration &);
40 
41 /// Linear algebra operators
42  void diff(const ModelBias &, const ModelBias &);
43  void zero();
47  ModelBiasCorrection & operator*=(const double);
48  void axpy(const double, const ModelBiasCorrection &);
49  double dot_product_with(const ModelBiasCorrection &) 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 & bias() {return bias_;}
57  const double & bias() 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:
66  void print(std::ostream &) const override;
67  double bias_;
68  bool active_;
69 };
70 
71 // -----------------------------------------------------------------------------
72 
73 } // namespace lorenz95
74 
75 #endif // LORENZ95_MODELBIASCORRECTION_H_
lorenz95::ModelBiasCorrection::print
void print(std::ostream &) const override
Definition: ModelBiasCorrection.cc:101
lorenz95::ModelBias
Model error for Lorenz 95 model.
Definition: l95/src/lorenz95/ModelBias.h:41
lorenz95::ModelBiasCorrection::operator-=
ModelBiasCorrection & operator-=(const ModelBiasCorrection &)
Definition: ModelBiasCorrection.cc:68
lorenz95::Resolution
Handles resolution.
Definition: Resolution.h:42
lorenz95::ModelBiasCorrection::active_
bool active_
Definition: ModelBiasCorrection.h:68
lorenz95::ModelBiasCorrection::axpy
void axpy(const double, const ModelBiasCorrection &)
Definition: ModelBiasCorrection.cc:78
lorenz95::ModelBiasCorrection::bias
const double & bias() const
Definition: ModelBiasCorrection.h:57
lorenz95::ModelBiasCorrection::serialize
void serialize(std::vector< double > &) const override
Definition: ModelBiasCorrection.cc:92
lorenz95::ModelBiasCorrection::operator*=
ModelBiasCorrection & operator*=(const double)
Definition: ModelBiasCorrection.cc:73
lorenz95::ModelBiasCorrection::operator+=
ModelBiasCorrection & operator+=(const ModelBiasCorrection &)
Definition: ModelBiasCorrection.cc:63
lorenz95::ModelBiasCorrection::norm
double norm() const
Definition: ModelBiasCorrection.h:54
lorenz95::ModelBiasCorrection::ModelBiasCorrection
ModelBiasCorrection(const Resolution &, const eckit::Configuration &)
Constructor, destructor.
Definition: ModelBiasCorrection.cc:24
lorenz95::ModelBiasCorrection::bias_
double bias_
Definition: ModelBiasCorrection.h:67
lorenz95::ModelBiasCorrection::ModelBiasCorrection
ModelBiasCorrection(const ModelBiasCorrection &)
lorenz95::ModelBiasCorrection::bias
double & bias()
Definition: ModelBiasCorrection.h:56
eckit
Definition: FieldL95.h:22
lorenz95::ModelBiasCorrection::write
void write(const eckit::Configuration &) const
Definition: ModelBiasCorrection.h:53
lorenz95::ModelBiasCorrection::zero
void zero()
Definition: ModelBiasCorrection.cc:50
lorenz95::ModelBiasCorrection
Definition: ModelBiasCorrection.h:33
lorenz95::ModelBiasCorrection::diff
void diff(const ModelBias &, const ModelBias &)
Linear algebra operators.
Definition: ModelBiasCorrection.cc:46
lorenz95::ModelBiasCorrection::read
void read(const eckit::Configuration &)
I/O and diagnostics.
Definition: ModelBiasCorrection.h:52
lorenz95::ModelBiasCorrection::dot_product_with
double dot_product_with(const ModelBiasCorrection &) const
Definition: ModelBiasCorrection.cc:82
lorenz95::ModelBiasCorrection::~ModelBiasCorrection
~ModelBiasCorrection()
Definition: ModelBiasCorrection.h:39
lorenz95::ModelBiasCorrection::operator=
ModelBiasCorrection & operator=(const ModelBiasCorrection &)
Definition: ModelBiasCorrection.cc:54
lorenz95::ModelBiasCorrection::deserialize
void deserialize(const std::vector< double > &, size_t &) override
Definition: ModelBiasCorrection.cc:96
lorenz95
The namespace for the L95 model.
Definition: l95/src/lorenz95/AnalyticInit.cc:17
lorenz95::ModelBiasCorrection::serialSize
size_t serialSize() const override
Serialize and deserialize.
Definition: ModelBiasCorrection.cc:88