OOPS
l95/src/lorenz95/ObsBiasCovariance.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 <cmath>
14 #include <iostream>
15 #include <string>
16 
17 #include "eckit/config/Configuration.h"
18 #include "eckit/exception/Exceptions.h"
19 
21 #include "oops/util/Logger.h"
22 #include "oops/util/Random.h"
23 
24 // -----------------------------------------------------------------------------
25 namespace lorenz95 {
26 // -----------------------------------------------------------------------------
27 ObsBiasCovariance::ObsBiasCovariance(const ObsTableView &, const eckit::Configuration & conf)
28  : conf_(conf), variance_(0.0), active_(false)
29 {
30  if (conf_.has("obs bias error")) {
31  const eckit::LocalConfiguration covconf(conf_, "obs bias error");
32  if (covconf.has("standard_deviation")) {
33  active_ = true;
34  const double zz = covconf.getDouble("standard_deviation");
35  variance_ = zz * zz;
36  ASSERT(variance_ > 0.0);
37  oops::Log::info() << "ObsBiasCovariance variance = " << variance_ << std::endl;
38  }
39  }
40 }
41 // -----------------------------------------------------------------------------
43  ObsBiasCorrection & dxout) const {
44  if (active_) {
45  dxout = dxin;
46  dxout *= variance_;
47  } else {
48  dxout.zero();
49  }
50 }
51 // -----------------------------------------------------------------------------
53  ObsBiasCorrection & dxout) const {
54  if (active_) {
55  dxout = dxin;
56  dxout *= 1.0 / variance_;
57  } else {
58  dxout.zero();
59  }
60 }
61 // -----------------------------------------------------------------------------
63  if (active_) {
64  util::NormalDistribution<double> x(1, 0.0, 1.0, 4);
65  dx.value() = x[0] * std::sqrt(variance_);
66  } else {
67  dx.zero();
68  }
69 }
70 // -----------------------------------------------------------------------------
71 void ObsBiasCovariance::print(std::ostream & os) const {
72  if (active_) {
73  os << "ObsBiasCovariance: variance = " << variance_;
74  } else {
75  os << "ObsBiasCovariance not active";
76  }
77 }
78 // -----------------------------------------------------------------------------
79 } // namespace lorenz95
lorenz95::ObsBiasCovariance::print
void print(std::ostream &) const
Definition: l95/src/lorenz95/ObsBiasCovariance.cc:71
ObsBiasCovariance.h
lorenz95::ObsBiasCovariance::active_
bool active_
Definition: l95/src/lorenz95/ObsBiasCovariance.h:56
lorenz95::ObsBiasCovariance::variance_
double variance_
Definition: l95/src/lorenz95/ObsBiasCovariance.h:55
lorenz95::ObsBiasCovariance::ObsBiasCovariance
ObsBiasCovariance(const ObsTableView &, const eckit::Configuration &)
Constructor, destructor.
Definition: l95/src/lorenz95/ObsBiasCovariance.cc:27
lorenz95::ObsBiasCorrection::value
double & value()
Definition: ObsBiasCorrection.h:56
lorenz95::ObsBiasCovariance::inverseMultiply
void inverseMultiply(const ObsBiasCorrection &, ObsBiasCorrection &) const
Definition: l95/src/lorenz95/ObsBiasCovariance.cc:52
ObsBiasCorrection.h
lorenz95::ObsTableView
A Simple Observation Data Handler.
Definition: ObsTableView.h:38
lorenz95::ObsBiasCovariance::randomize
void randomize(ObsBiasCorrection &) const
Definition: l95/src/lorenz95/ObsBiasCovariance.cc:62
lorenz95::ObsBiasCorrection::zero
void zero()
Definition: ObsBiasCorrection.cc:52
lorenz95::ObsBiasCovariance::multiply
void multiply(const ObsBiasCorrection &, ObsBiasCorrection &) const
Definition: l95/src/lorenz95/ObsBiasCovariance.cc:42
lorenz95
The namespace for the L95 model.
Definition: l95/src/lorenz95/AnalyticInit.cc:17
lorenz95::ObsBiasCorrection
Definition: ObsBiasCorrection.h:32
lorenz95::ObsBiasCovariance::conf_
const eckit::LocalConfiguration conf_
Definition: l95/src/lorenz95/ObsBiasCovariance.h:54