OOPS
qg/model/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 <random>
16 #include <sstream>
17 #include <string>
18 #include <vector>
19 
20 #include "eckit/config/LocalConfiguration.h"
21 #include "model/ObsBias.h"
22 #include "model/ObsBiasIncrement.h"
23 #include "oops/util/Logger.h"
24 #include "oops/util/Random.h"
25 
26 // -----------------------------------------------------------------------------
27 namespace qg {
28 // -----------------------------------------------------------------------------
29 ObsBiasCovariance::ObsBiasCovariance(const ObsSpaceQG &, const eckit::Configuration & conf)
30  : conf_(conf), variance_(ObsBias::ntypes, 0.0)
31 {
32  std::vector<double> zz(4, 0.0);
33  if (conf.has("obs bias error")) {
34  const eckit::LocalConfiguration covconf(conf, "obs bias error");
35  if (covconf.has("stream")) zz[0] = covconf.getDouble("stream");
36  if (covconf.has("uwind")) zz[1] = covconf.getDouble("uwind");
37  if (covconf.has("vwind")) zz[2] = covconf.getDouble("vwind");
38  if (covconf.has("wspeed")) zz[3] = covconf.getDouble("wspeed");
39  }
40  std::string strn = "";
41  for (unsigned int jj = 0; jj < ObsBias::ntypes; ++jj) {
42  if (jj > 0) strn += ", ";
43  if (std::abs(zz[jj]) > 1.0e-8) {
44  variance_[jj] = zz[jj] * zz[jj];
45  std::ostringstream strs;
46  strs << variance_[jj];
47  strn += strs.str();
48  } else {
49  variance_[jj] = 0.0;
50  strn += "0.0";
51  }
52  }
53  oops::Log::info() << "ObsBiasCovariance created, variances = " << strn << std::endl;
54 // }
55 }
56 // -----------------------------------------------------------------------------
58  ObsBiasIncrement & dxout) const {
59  for (unsigned int jj = 0; jj < ObsBias::ntypes; ++jj) {
60  if (variance_[jj] > 0.0) {
61  dxout[jj] = dxin[jj] * variance_[jj];
62  } else {
63  dxout[jj] = 0.0;
64  }
65  }
66 }
67 // -----------------------------------------------------------------------------
69  ObsBiasIncrement & dxout) const {
70  for (unsigned int jj = 0; jj < ObsBias::ntypes; ++jj) {
71  if (variance_[jj] > 0.0) {
72  dxout[jj] = dxin[jj] / variance_[jj];
73  } else {
74  dxout[jj] = 0.0;
75  }
76  }
77 }
78 // -----------------------------------------------------------------------------
80  static util::NormalDistribution<double> dist(ObsBias::ntypes, 0.0, 1.0, 4);
81  for (unsigned int jj = 0; jj < ObsBias::ntypes; ++jj) {
82  if (variance_[jj] > 0.0) {
83  dx[jj] = dist[jj] * std::sqrt(variance_[jj]);
84  } else {
85  dx[jj] = 0.0;
86  }
87  }
88 }
89 // -----------------------------------------------------------------------------
90 void ObsBiasCovariance::print(std::ostream & os) const {
91  os << "ObsBiasCovariance::print not implemented";
92 }
93 // -----------------------------------------------------------------------------
94 } // namespace qg
qg::ObsBiasCovariance::randomize
void randomize(ObsBiasIncrement &) const
Definition: qg/model/ObsBiasCovariance.cc:79
qg
The namespace for the qg model.
Definition: qg/model/AnalyticInit.cc:13
ObsBiasIncrement.h
qg::ObsBiasCovariance::multiply
void multiply(const ObsBiasIncrement &, ObsBiasIncrement &) const
Definition: qg/model/ObsBiasCovariance.cc:57
qg::ObsBiasCovariance::print
void print(std::ostream &) const
Definition: qg/model/ObsBiasCovariance.cc:90
qg::ObsBias
Class to handle observation bias parameters.
Definition: qg/model/ObsBias.h:37
qg::ObsSpaceQG
ObsSpace for QG model.
Definition: ObsSpaceQG.h:44
qg::ObsBiasCovariance::inverseMultiply
void inverseMultiply(const ObsBiasIncrement &, ObsBiasIncrement &) const
Definition: qg/model/ObsBiasCovariance.cc:68
ObsBias.h
ObsBiasCovariance.h
qg::ObsBias::ntypes
static const unsigned int ntypes
Definition: qg/model/ObsBias.h:39
qg::ObsBiasCovariance::ObsBiasCovariance
ObsBiasCovariance(const ObsSpaceQG &, const eckit::Configuration &)
Constructor, destructor.
Definition: qg/model/ObsBiasCovariance.cc:29
qg::ObsBiasIncrement
Definition: ObsBiasIncrement.h:31
qg::ObsBiasCovariance::variance_
std::vector< double > variance_
Definition: qg/model/ObsBiasCovariance.h:53