OOPS
ModelBiasCovariance.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/ModelBiasCovariance.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/ModelBiasCorrection.h
"
21
#include "oops/util/Logger.h"
22
#include "oops/util/Random.h"
23
24
// -----------------------------------------------------------------------------
25
namespace
lorenz95
{
26
// -----------------------------------------------------------------------------
27
ModelBiasCovariance::ModelBiasCovariance
(
const
eckit::Configuration & conf,
const
Resolution
&)
28
: conf_(conf), variance_(0.0), active_(false)
29
{
30
if
(
conf_
.has(
"standard_deviation"
)) {
31
active_
=
true
;
32
const
double
zz =
conf_
.getDouble(
"standard_deviation"
);
33
variance_
= zz * zz;
34
ASSERT(
variance_
> 0.0);
35
oops::Log::info() <<
"ModelBiasCovariance variance = "
<<
variance_
<< std::endl;
36
}
37
}
38
// -----------------------------------------------------------------------------
39
void
ModelBiasCovariance::multiply
(
const
ModelBiasCorrection
& dxin,
40
ModelBiasCorrection
& dxout)
const
{
41
if
(
active_
) {
42
dxout = dxin;
43
dxout *=
variance_
;
44
}
else
{
45
dxout.
zero
();
46
}
47
}
48
// -----------------------------------------------------------------------------
49
void
ModelBiasCovariance::inverseMultiply
(
const
ModelBiasCorrection
& dxin,
50
ModelBiasCorrection
& dxout)
const
{
51
if
(
active_
) {
52
dxout = dxin;
53
dxout *= 1.0 /
variance_
;
54
}
else
{
55
dxout.
zero
();
56
}
57
}
58
// -----------------------------------------------------------------------------
59
void
ModelBiasCovariance::randomize
(
ModelBiasCorrection
& dx)
const
{
60
const
double
stdev = std::sqrt(
variance_
);
61
util::NormalDistribution<double> x(1, 0.0, stdev, 3);
62
dx.
bias
() = x[0];
63
}
64
// -----------------------------------------------------------------------------
65
void
ModelBiasCovariance::print
(std::ostream & os)
const
{
66
if
(
active_
) {
67
os <<
"ModelBiasCovariance: variance = "
<<
variance_
<< std::endl;
68
}
else
{
69
os <<
"ModelBiasCovariance not active"
<< std::endl;
70
}
71
}
72
// -----------------------------------------------------------------------------
73
}
// namespace lorenz95
lorenz95::Resolution
Handles resolution.
Definition:
Resolution.h:42
lorenz95::ModelBiasCovariance::variance_
double variance_
Definition:
l95/src/lorenz95/ModelBiasCovariance.h:50
lorenz95::ModelBiasCovariance::multiply
void multiply(const ModelBiasCorrection &, ModelBiasCorrection &) const
Definition:
ModelBiasCovariance.cc:39
ModelBiasCorrection.h
lorenz95::ModelBiasCorrection::bias
double & bias()
Definition:
ModelBiasCorrection.h:56
ModelBiasCovariance.h
lorenz95::ModelBiasCovariance::inverseMultiply
void inverseMultiply(const ModelBiasCorrection &, ModelBiasCorrection &) const
Definition:
ModelBiasCovariance.cc:49
lorenz95::ModelBiasCovariance::print
void print(std::ostream &) const
Definition:
ModelBiasCovariance.cc:65
lorenz95::ModelBiasCovariance::randomize
void randomize(ModelBiasCorrection &) const
Definition:
ModelBiasCovariance.cc:59
lorenz95::ModelBiasCovariance::active_
bool active_
Definition:
l95/src/lorenz95/ModelBiasCovariance.h:51
lorenz95::ModelBiasCorrection::zero
void zero()
Definition:
ModelBiasCorrection.cc:50
lorenz95::ModelBiasCorrection
Definition:
ModelBiasCorrection.h:33
lorenz95::ModelBiasCovariance::ModelBiasCovariance
ModelBiasCovariance(const eckit::Configuration &, const Resolution &)
Constructor, destructor.
Definition:
ModelBiasCovariance.cc:27
lorenz95::ModelBiasCovariance::conf_
const eckit::LocalConfiguration conf_
Definition:
l95/src/lorenz95/ModelBiasCovariance.h:49
lorenz95
The namespace for the L95 model.
Definition:
l95/src/lorenz95/AnalyticInit.cc:17
fv3-bundle
oops
l95
src
lorenz95
ModelBiasCovariance.cc
Generated on Sun Oct 25 2020 12:42:57 for OOPS by
1.8.18