OOPS
ModelQG.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2009-2016 ECMWF.
3  * (C) Copyright 2020-2020 UCAR.
4  *
5  * This software is licensed under the terms of the Apache Licence Version 2.0
6  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
7  * In applying this licence, ECMWF does not waive the privileges and immunities
8  * granted to it by virtue of its status as an intergovernmental organisation nor
9  * does it submit to any jurisdiction.
10  */
11 
12 #ifndef QG_MODEL_MODELQG_H_
13 #define QG_MODEL_MODELQG_H_
14 
15 #include <ostream>
16 #include <string>
17 #include <vector>
18 
19 #include "oops/base/ModelBase.h"
21 #include "oops/base/Variables.h"
22 #include "oops/util/Duration.h"
23 #include "oops/util/ObjectCounter.h"
24 #include "oops/util/parameters/Parameter.h"
25 #include "oops/util/parameters/Parameters.h"
26 #include "oops/util/parameters/RequiredParameter.h"
27 
28 #include "oops/qg/GeometryQG.h"
29 #include "oops/qg/QgFortran.h"
30 #include "oops/qg/QgTraits.h"
31 
32 
33 namespace qg {
34  class ModelBias;
35  class FieldsQG;
36  class StateQG;
37 
38 // -----------------------------------------------------------------------------
39 
41  OOPS_CONCRETE_PARAMETERS(ModelQgParameters, ModelParametersBase)
42 
43  public:
44  /// Model option: using stream function or potential vorticity as variable
45  oops::Parameter<bool> use_vorticity{"use potential vorticity", false, this};
46  /// Model time step
47  oops::RequiredParameter<util::Duration> tstep{"tstep", this};
48 
50  if (use_vorticity) {
51  return oops::Variables({"q"});
52  } else {
53  return oops::Variables({"x"});
54  }
55  }
56 };
57 
58 
59 // -----------------------------------------------------------------------------
60 /// QG model definition.
61 /*!
62  * QG nonlinear model definition and configuration parameters.
63  */
64 
65 class ModelQG: public oops::ModelBase<QgTraits>,
66  private util::ObjectCounter<ModelQG> {
67  public:
69 
70  static const std::string classname() {return "qg::ModelQG";}
71 
72  ModelQG(const GeometryQG &, const ModelQgParameters &);
73  ~ModelQG();
74 
75 /// Prepare model integration
76  void initialize(StateQG &) const;
77 
78 /// Model integration
79  void step(StateQG &, const ModelBias &) const;
80  int saveTrajectory(StateQG &, const ModelBias &) const;
81 
82 /// Finish model integration
83  void finalize(StateQG &) const;
84 
85 /// Utilities
86  const util::Duration & timeResolution() const {return params_.tstep;}
87  const oops::Variables & variables() const {return vars_;}
88 
89  private:
90  void print(std::ostream &) const;
95 };
96 // -----------------------------------------------------------------------------
97 
98 } // namespace qg
99 #endif // QG_MODEL_MODELQG_H_
oops::ModelBase
Base class for the forecasting model Defines the interfaces for a forecast model.
Definition: ModelBase.h:45
qg
The namespace for the qg model.
Definition: qg/model/AnalyticInit.cc:13
qg::StateQG
QG model state.
Definition: StateQG.h:42
qg::ModelBias
Model error for the QG model.
Definition: qg/model/ModelBias.h:43
qg::ModelQG::timeResolution
const util::Duration & timeResolution() const
Utilities.
Definition: ModelQG.h:86
qg::ModelQG::keyConfig_
F90model keyConfig_
Definition: ModelQG.h:91
qg::ModelQgParameters::use_vorticity
oops::Parameter< bool > use_vorticity
Model option: using stream function or potential vorticity as variable.
Definition: ModelQG.h:45
qg::ModelQgParameters::variables
oops::Variables variables() const
Definition: ModelQG.h:49
qg::ModelQG::initialize
void initialize(StateQG &) const
Prepare model integration.
Definition: ModelQG.cc:43
qg::ModelQG
QG model definition.
Definition: ModelQG.h:66
qg::ModelQG::variables
const oops::Variables & variables() const
Definition: ModelQG.h:87
ModelBase.h
qg::ModelQG::Parameters_
ModelQgParameters Parameters_
Definition: ModelQG.h:68
qg::ModelQG::saveTrajectory
int saveTrajectory(StateQG &, const ModelBias &) const
Definition: ModelQG.cc:61
qg::F90model
int F90model
Definition: QgFortran.h:47
qg::ModelQgParameters::tstep
oops::RequiredParameter< util::Duration > tstep
Model time step.
Definition: ModelQG.h:47
qg::ModelQG::geom_
const GeometryQG geom_
Definition: ModelQG.h:93
qg::ModelQG::step
void step(StateQG &, const ModelBias &) const
Model integration.
Definition: ModelQG.cc:48
qg::ModelQG::ModelQG
ModelQG(const GeometryQG &, const ModelQgParameters &)
Definition: ModelQG.cc:29
oops::ModelParametersBase
Base class for classes storing model-specific parameters.
Definition: ModelBase.h:81
qg::ModelQG::finalize
void finalize(StateQG &) const
Finish model integration.
Definition: ModelQG.cc:56
qg::ModelQG::~ModelQG
~ModelQG()
Definition: ModelQG.cc:38
qg::ModelQG::params_
ModelQgParameters params_
Definition: ModelQG.h:92
qg::ModelQG::print
void print(std::ostream &) const
Print; used for logging.
Definition: ModelQG.cc:72
oops::Variables
Definition: oops/base/Variables.h:23
qg::GeometryQG
GeometryQG handles geometry for QG model.
Definition: GeometryQG.h:54
ParameterTraitsVariables.h
qg::ModelQG::classname
static const std::string classname()
Definition: ModelQG.h:70
qg::ModelQG::vars_
const oops::Variables vars_
Definition: ModelQG.h:94
Variables.h
qg::ModelQgParameters
Definition: ModelQG.h:40