OOPS
ModelBiasCorrection.cc
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 
12 
13 #include <iostream>
14 #include <string>
15 
16 #include "eckit/config/Configuration.h"
17 #include "lorenz95/ModelBias.h"
19 #include "oops/util/Logger.h"
20 
21 // -----------------------------------------------------------------------------
22 namespace lorenz95 {
23 // -----------------------------------------------------------------------------
24 ModelBiasCorrection::ModelBiasCorrection(const Resolution &, const eckit::Configuration & conf)
25  : bias_(0.0), active_(conf.has("standard_deviation"))
26 {
27  if (active_) {
28  oops::Log::trace() << "ModelBiasCorrection::ModelBiasCorrection created." << std::endl;
29  }
30 }
31 // -----------------------------------------------------------------------------
33  const bool copy)
34  : bias_(0.0), active_(other.active_)
35 {
36  if (active_ && copy) bias_ = other.bias_;
37 }
38 // -----------------------------------------------------------------------------
40  const eckit::Configuration &)
41  : bias_(0.0), active_(other.active_)
42 {
43  if (active_) bias_ = other.bias_;
44 }
45 // -----------------------------------------------------------------------------
46 void ModelBiasCorrection::diff(const ModelBias & b1, const ModelBias & b2) {
47  if (active_) bias_ = b1.bias() - b2.bias();
48 }
49 // -----------------------------------------------------------------------------
51  bias_ = 0.0;
52 }
53 // -----------------------------------------------------------------------------
55  if (active_) {
56  bias_ = rhs.bias_;
57  } else {
58  bias_ = 0.0;
59  }
60  return *this;
61 }
62 // -----------------------------------------------------------------------------
64  if (active_) bias_ += rhs.bias_;
65  return *this;
66 }
67 // -----------------------------------------------------------------------------
69  if (active_) bias_ -= rhs.bias_;
70  return *this;
71 }
72 // -----------------------------------------------------------------------------
74  if (active_) bias_ *= fact;
75  return *this;
76 }
77 // -----------------------------------------------------------------------------
78 void ModelBiasCorrection::axpy(const double fact, const ModelBiasCorrection & rhs) {
79  if (active_) bias_ += fact * rhs.bias_;
80 }
81 // -----------------------------------------------------------------------------
83  double zz = 0.0;
84  if (active_) zz = bias_ * rhs.bias_;
85  return zz;
86 }
87 // -----------------------------------------------------------------------------
89  return 1;
90 }
91 // -----------------------------------------------------------------------------
92 void ModelBiasCorrection::serialize(std::vector<double> & vect) const {
93  vect.push_back(bias_);
94 }
95 // -----------------------------------------------------------------------------
96 void ModelBiasCorrection::deserialize(const std::vector<double> & vect, size_t & index) {
97  bias_ = vect.at(index);
98  ++index;
99 }
100 // -----------------------------------------------------------------------------
101 void ModelBiasCorrection::print(std::ostream & os) const {
102  if (active_) {os << std::endl << "ModelBiasCorrection = " << bias_;}
103 }
104 // -----------------------------------------------------------------------------
105 } // namespace lorenz95
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::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::ModelBiasCorrection
ModelBiasCorrection(const Resolution &, const eckit::Configuration &)
Constructor, destructor.
Definition: ModelBiasCorrection.cc:24
lorenz95::ModelBiasCorrection::bias_
double bias_
Definition: ModelBiasCorrection.h:67
ModelBiasCorrection.h
ModelBiasCovariance.h
lorenz95::ModelBiasCorrection::zero
void zero()
Definition: ModelBiasCorrection.cc:50
lorenz95::ModelBiasCorrection
Definition: ModelBiasCorrection.h:33
lorenz95::ModelBias::bias
const double & bias() const
Definition: l95/src/lorenz95/ModelBias.h:52
oops_variables_mod::has
logical function has(this, var)
Definition: variables_mod.F90:140
lorenz95::ModelBiasCorrection::diff
void diff(const ModelBias &, const ModelBias &)
Linear algebra operators.
Definition: ModelBiasCorrection.cc:46
lorenz95::ModelBiasCorrection::dot_product_with
double dot_product_with(const ModelBiasCorrection &) const
Definition: ModelBiasCorrection.cc:82
ModelBias.h
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