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"
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>
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
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...
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