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
11
#include "
lorenz95/ObsBiasCovariance.h
"
12
13
#include <cmath>
14
#include <iostream>
15
#include <string>
16
17
#include "eckit/config/Configuration.h"
18
#include "eckit/exception/Exceptions.h"
19
20
#include "
lorenz95/ObsBiasCorrection.h
"
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
// -----------------------------------------------------------------------------
42
void
ObsBiasCovariance::multiply
(
const
ObsBiasCorrection
& dxin,
43
ObsBiasCorrection
& dxout)
const
{
44
if
(
active_
) {
45
dxout = dxin;
46
dxout *=
variance_
;
47
}
else
{
48
dxout.
zero
();
49
}
50
}
51
// -----------------------------------------------------------------------------
52
void
ObsBiasCovariance::inverseMultiply
(
const
ObsBiasCorrection
& dxin,
53
ObsBiasCorrection
& dxout)
const
{
54
if
(
active_
) {
55
dxout = dxin;
56
dxout *= 1.0 /
variance_
;
57
}
else
{
58
dxout.
zero
();
59
}
60
}
61
// -----------------------------------------------------------------------------
62
void
ObsBiasCovariance::randomize
(
ObsBiasCorrection
& dx)
const
{
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
fv3-bundle
oops
l95
src
lorenz95
ObsBiasCovariance.cc
Generated on Sun Oct 25 2020 12:42:58 for OOPS by
1.8.18