OOPS
ObsBiasCorrection.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 "eckit/config/LocalConfiguration.h"
18 #include "lorenz95/ObsBias.h"
19 #include "oops/util/Logger.h"
20 
21 // -----------------------------------------------------------------------------
22 namespace lorenz95 {
23 // -----------------------------------------------------------------------------
24 ObsBiasCorrection::ObsBiasCorrection(const ObsTableView &, const eckit::Configuration & conf)
25  : bias_(0.0), active_(false)
26 {
27  if (conf.has("obs bias error")) {
28  const eckit::LocalConfiguration covconf(conf, "obs bias error");
29  active_ = covconf.has("standard_deviation");
30  }
31  if (active_) {oops::Log::trace() << "ObsBiasCorrection::ObsBiasCorrection created." << std::endl;}
32 }
33 // -----------------------------------------------------------------------------
35  const bool copy)
36  : bias_(0.0), active_(other.active_)
37 {
38  if (active_ && copy) bias_ = other.bias_;
39 }
40 // -----------------------------------------------------------------------------
42  const eckit::Configuration &)
43  : bias_(0.0), active_(other.active_)
44 {
45  if (active_) bias_ = other.bias_;
46 }
47 // -----------------------------------------------------------------------------
48 void ObsBiasCorrection::diff(const ObsBias & b1, const ObsBias & b2) {
49  if (active_) bias_ = b1.value() - b2.value();
50 }
51 // -----------------------------------------------------------------------------
53  bias_ = 0.0;
54 }
55 // -----------------------------------------------------------------------------
57  if (active_) {
58  bias_ = rhs.bias_;
59  } else {
60  bias_ = 0.0;
61  }
62  return *this;
63 }
64 // -----------------------------------------------------------------------------
66  if (active_) bias_ += rhs.bias_;
67  return *this;
68 }
69 // -----------------------------------------------------------------------------
71  if (active_) bias_ -= rhs.bias_;
72  return *this;
73 }
74 // -----------------------------------------------------------------------------
76  if (active_) bias_ *= fact;
77  return *this;
78 }
79 // -----------------------------------------------------------------------------
80 void ObsBiasCorrection::axpy(const double fact, const ObsBiasCorrection & rhs) {
81  if (active_) bias_ += fact * rhs.bias_;
82 }
83 // -----------------------------------------------------------------------------
85  double zz = 0.0;
86  if (active_) zz = bias_ * rhs.bias_;
87  return zz;
88 }
89 // -----------------------------------------------------------------------------
91  return 1;
92 }
93 // -----------------------------------------------------------------------------
94 void ObsBiasCorrection::serialize(std::vector<double> & vect) const {
95  vect.push_back(bias_);
96 }
97 // -----------------------------------------------------------------------------
98 void ObsBiasCorrection::deserialize(const std::vector<double> & vect, size_t & index) {
99  if (!vect.empty()) bias_ = vect.at(index);
100  ++index;
101 }
102 // -----------------------------------------------------------------------------
103 void ObsBiasCorrection::print(std::ostream & os) const {
104  if (active_) {os << std::endl << "ObsBiasCorrection = " << bias_;}
105 }
106 // -----------------------------------------------------------------------------
107 } // namespace lorenz95
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::operator+=
ObsBiasCorrection & operator+=(const ObsBiasCorrection &)
Definition: ObsBiasCorrection.cc:65
lorenz95::ObsBiasCorrection::serialSize
size_t serialSize() const override
Serialize and deserialize.
Definition: ObsBiasCorrection.cc:90
ObsBias.h
lorenz95::ObsBiasCorrection::operator=
ObsBiasCorrection & operator=(const ObsBiasCorrection &)
Definition: ObsBiasCorrection.cc:56
lorenz95::ObsBias::value
const double & value() const
Definition: l95/src/lorenz95/ObsBias.h:47
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::dot_product_with
double dot_product_with(const ObsBiasCorrection &) const
Definition: ObsBiasCorrection.cc:84
ObsBiasCorrection.h
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::ObsBiasCorrection
ObsBiasCorrection()
Constructor, destructor.