OOPS
TrajectorySaver.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_BASE_TRAJECTORYSAVER_H_
12 #define OOPS_BASE_TRAJECTORYSAVER_H_
13 
14 #include <memory>
15 
16 #include "eckit/config/LocalConfiguration.h"
17 #include "oops/base/PostBase.h"
21 #include "oops/interface/State.h"
22 #include "oops/util/DateTime.h"
23 #include "oops/util/Duration.h"
24 
25 namespace oops {
26 
27 /// Save trajectory during forecast run.
28 
29 // -----------------------------------------------------------------------------
30 
31 template <typename MODEL>
32 class TrajectorySaver : public PostBase<State<MODEL> > {
38 
39  public:
40  TrajectorySaver(const eckit::Configuration &, const Geometry_ &,
41  const ModelAux_ &, std::shared_ptr<LinearModel_>, PPTLAD_);
42  TrajectorySaver(const eckit::Configuration &, const Geometry_ &, PPTLAD_);
44 
45  private:
46  const Geometry_ & resol_;
48  std::unique_ptr<const ModelAux_> lrBias_;
49  std::shared_ptr<LinearModel_> tlm_;
50 
51  void doInitialize(const State_ &, const util::DateTime &, const util::Duration &) override;
52  void doProcessing(const State_ &) override;
53  void doFinalize(const State_ &) override;
54 };
55 
56 // -----------------------------------------------------------------------------
57 
58 template <typename MODEL>
59 TrajectorySaver<MODEL>::TrajectorySaver(const eckit::Configuration & conf,
60  const Geometry_ & resol,
61  const ModelAux_ & bias,
62  std::shared_ptr<LinearModel_> tlm,
63  PPTLAD_ pptraj):
64  PostBase<State_>(conf),
65  resol_(resol), pptraj_(pptraj), lrBias_(new ModelAux_(resol, bias)), tlm_(tlm)
66 {
67  Log::trace() << "TrajectorySaver::TrajectorySaver 4D" << std::endl;
68 }
69 // -----------------------------------------------------------------------------
70 template <typename MODEL>
71 TrajectorySaver<MODEL>::TrajectorySaver(const eckit::Configuration & conf,
72  const Geometry_ & resol, PPTLAD_ pptraj):
73  PostBase<State_>(conf),
74  resol_(resol), pptraj_(pptraj), lrBias_(), tlm_()
75 {
76  Log::trace() << "TrajectorySaver::TrajectorySaver 3D" << std::endl;
77 }
78 // -----------------------------------------------------------------------------
79 template <typename MODEL>
81  const util::DateTime & end,
82  const util::Duration & step) {
83  Log::trace() << "TrajectorySaver::doInitialize start" << std::endl;
84  State_ xlr(resol_, x0);
85  pptraj_.initializeTraj(xlr, end, step);
86  Log::trace() << "TrajectorySaver::doInitialize done" << std::endl;
87 }
88 // -----------------------------------------------------------------------------
89 template <typename MODEL>
91  Log::trace() << "TrajectorySaver::doProcessing start" << std::endl;
92  State_ xlr(resol_, xx);
93  if (tlm_) tlm_->setTrajectory(xx, xlr, *lrBias_);
94  pptraj_.processTraj(xlr);
95  Log::trace() << "TrajectorySaver::doProcessing done" << std::endl;
96 }
97 // -----------------------------------------------------------------------------
98 template <typename MODEL>
100  Log::trace() << "TrajectorySaver::doFinalize start" << std::endl;
101  State_ xlr(resol_, xx);
102  pptraj_.finalizeTraj(xlr);
103  Log::trace() << "TrajectorySaver::doFinalize done" << std::endl;
104 }
105 // -----------------------------------------------------------------------------
106 
107 } // namespace oops
108 
109 #endif // OOPS_BASE_TRAJECTORYSAVER_H_
oops::TrajectorySaver::TrajectorySaver
TrajectorySaver(const eckit::Configuration &, const Geometry_ &, const ModelAux_ &, std::shared_ptr< LinearModel_ >, PPTLAD_)
Definition: TrajectorySaver.h:59
oops
The namespace for the main oops code.
Definition: ErrorCovarianceL95.cc:22
oops::TrajectorySaver::PPTLAD_
PostProcessorTLAD< MODEL > PPTLAD_
Definition: TrajectorySaver.h:36
oops::TrajectorySaver::lrBias_
std::unique_ptr< const ModelAux_ > lrBias_
Definition: TrajectorySaver.h:48
oops::TrajectorySaver::State_
State< MODEL > State_
Definition: TrajectorySaver.h:37
oops::ModelAuxControl
Definition: oops/interface/ModelAuxControl.h:35
oops::TrajectorySaver::doProcessing
void doProcessing(const State_ &) override
Actual processing.
Definition: TrajectorySaver.h:90
oops::TrajectorySaver::ModelAux_
ModelAuxControl< MODEL > ModelAux_
Definition: TrajectorySaver.h:35
LinearModel.h
PostBase.h
oops::TrajectorySaver::Geometry_
Geometry< MODEL > Geometry_
Definition: TrajectorySaver.h:33
oops::PostBase
Handles post-processing of model fields.
Definition: PostBase.h:33
oops::PostProcessorTLAD
Control model post processing.
Definition: PostProcessorTLAD.h:33
oops::TrajectorySaver::tlm_
std::shared_ptr< LinearModel_ > tlm_
Definition: TrajectorySaver.h:49
oops::Geometry
Geometry class used in oops; subclass of interface class above.
Definition: oops/interface/Geometry.h:189
oops::TrajectorySaver::~TrajectorySaver
~TrajectorySaver()
Definition: TrajectorySaver.h:43
oops::TrajectorySaver::resol_
const Geometry_ & resol_
Definition: TrajectorySaver.h:46
oops::TrajectorySaver::LinearModel_
LinearModel< MODEL > LinearModel_
Definition: TrajectorySaver.h:34
oops::State
Encapsulates the model state.
Definition: CostJbState.h:28
State.h
oops::TrajectorySaver
Save trajectory during forecast run.
Definition: TrajectorySaver.h:32
oops::TrajectorySaver::doFinalize
void doFinalize(const State_ &) override
Definition: TrajectorySaver.h:99
oops::LinearModel
Encapsulates the linear forecast model.
Definition: oops/interface/LinearModel.h:65
oops::TrajectorySaver::doInitialize
void doInitialize(const State_ &, const util::DateTime &, const util::Duration &) override
Definition: TrajectorySaver.h:80
ModelAuxControl.h
oops::TrajectorySaver::pptraj_
PPTLAD_ pptraj_
Definition: TrajectorySaver.h:47
Geometry.h