OOPS
IncrementalAssimilation.h
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
#ifndef OOPS_ASSIMILATION_INCREMENTALASSIMILATION_H_
12
#define OOPS_ASSIMILATION_INCREMENTALASSIMILATION_H_
13
14
#include <memory>
15
#include <vector>
16
17
#include "eckit/config/Configuration.h"
18
#include "
oops/assimilation/ControlIncrement.h
"
19
#include "
oops/assimilation/ControlVariable.h
"
20
#include "
oops/assimilation/CostFunction.h
"
21
#include "
oops/assimilation/Minimizer.h
"
22
#include "
oops/base/PostProcessor.h
"
23
#include "
oops/base/StateInfo.h
"
24
#include "
oops/interface/State.h
"
25
#include "oops/util/Logger.h"
26
27
namespace
oops
{
28
29
template
<
typename
MODEL,
typename
OBS>
30
int
IncrementalAssimilation
(
ControlVariable<MODEL, OBS>
& xx,
CostFunction<MODEL, OBS>
& J,
31
const
eckit::Configuration & config) {
32
typedef
ControlIncrement<MODEL, OBS>
CtrlInc_;
33
typedef
Minimizer<MODEL, OBS>
Minimizer_;
34
typedef
State<MODEL>
State_;
35
36
// Setup outer loop
37
std::vector<eckit::LocalConfiguration> iterconfs;
38
config.get(
"iterations"
, iterconfs);
39
const
unsigned
int
nouter = iterconfs.size();
40
Log::info() <<
"Running incremental assimilation with "
<< nouter
41
<<
" outer iterations."
<< std::endl;
42
43
// Setup minimizer
44
eckit::LocalConfiguration minConf(config,
"minimizer"
);
45
minConf.set(
"nouter"
,
static_cast<
const
int
>
(nouter));
46
std::unique_ptr<Minimizer_> minim(
MinFactory<MODEL, OBS>::create
(minConf, J));
47
48
for
(
unsigned
jouter = 0; jouter < nouter; ++jouter) {
49
iterconfs[jouter].set(
"iteration"
,
static_cast<
int
>
(jouter));
50
// Get configuration for current outer iteration
51
Log::info() <<
"IncrementalAssimilation: Configuration for outer iteration "
52
<< jouter <<
":\n"
<< iterconfs[jouter];
53
54
// Setup for the trajectory run
55
PostProcessor<State_>
post;
56
if
(iterconfs[jouter].
has
(
"prints"
)) {
57
const
eckit::LocalConfiguration prtConfig(iterconfs[jouter],
"prints"
);
58
post.
enrollProcessor
(
new
StateInfo<State_>
(
"traj"
, prtConfig));
59
}
60
61
// Setup quadratic problem
62
J.
linearize
(xx, iterconfs[jouter], post);
63
64
// Minimization
65
std::unique_ptr<CtrlInc_> dx(minim->minimize(iterconfs[jouter]));
66
67
// Compute analysis in physical space
68
J.
addIncrement
(xx, *dx);
69
70
// Clean-up trajectory, etc...
71
J.
resetLinearization
();
72
}
73
return
nouter;
74
}
75
76
}
// namespace oops
77
#endif // OOPS_ASSIMILATION_INCREMENTALASSIMILATION_H_
oops
The namespace for the main oops code.
Definition:
ErrorCovarianceL95.cc:22
oops::Minimizer
A Minimizer knows how to minimize a cost function.
Definition:
Minimizer.h:37
oops::CostFunction::linearize
double linearize(const CtrlVar_ &, const eckit::Configuration &, PostProcessor< State_ > post=PostProcessor< State_ >())
Definition:
CostFunction.h:284
oops::ControlVariable
Control variable.
Definition:
ControlVariable.h:41
CostFunction.h
oops::ControlIncrement
Definition:
ControlIncrement.h:46
oops::CostFunction::addIncrement
void addIncrement(CtrlVar_ &, const CtrlInc_ &, PostProcessor< Increment_ > post=PostProcessor< Increment_ >()) const
Definition:
CostFunction.h:338
oops::CostFunction::resetLinearization
void resetLinearization()
Definition:
CostFunction.h:356
oops::IncrementalAssimilation
int IncrementalAssimilation(ControlVariable< MODEL, OBS > &xx, CostFunction< MODEL, OBS > &J, const eckit::Configuration &config)
Definition:
IncrementalAssimilation.h:30
oops::PostProcessor::enrollProcessor
void enrollProcessor(PostBase_ *pp)
Definition:
PostProcessor.h:38
oops::MinFactory
Minimizer Factory.
Definition:
Minimizer.h:367
PostProcessor.h
oops::StateInfo
Handles writing-out of forecast fields.
Definition:
StateInfo.h:28
StateInfo.h
oops_variables_mod::has
logical function has(this, var)
Definition:
variables_mod.F90:140
oops::State
Encapsulates the model state.
Definition:
CostJbState.h:28
Minimizer.h
oops::PostProcessor
Control model post processing.
Definition:
PostProcessor.h:30
State.h
ControlIncrement.h
ControlVariable.h
oops::CostFunction
Cost Function.
Definition:
CostFunction.h:53
fv3-bundle
oops
src
oops
assimilation
IncrementalAssimilation.h
Generated on Sun Oct 25 2020 12:42:57 for OOPS by
1.8.18