SOCA
Model.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2017-2021 UCAR
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  */
7 
8 #ifndef SOCA_MODEL_MODEL_H_
9 #define SOCA_MODEL_MODEL_H_
10 
11 #include <memory>
12 #include <ostream>
13 #include <string>
14 
15 #include <boost/noncopyable.hpp>
16 #include <boost/scoped_ptr.hpp>
17 
18 #include "oops/base/Variables.h"
19 #include "oops/interface/ModelBase.h"
20 #include "oops/util/Duration.h"
21 #include "oops/util/ObjectCounter.h"
22 #include "oops/util/Printable.h"
23 
24 #include "soca/Fortran.h"
25 
26 // Forward declarations
27 namespace eckit {
28  class Configuration;
29 }
30 namespace soca {
31  class Geometry;
32  class ModelBias;
33  class State;
34  struct Traits;
35 }
36 
37 // -----------------------------------------------------------------------------
38 
39 namespace soca {
40 
41  /// SOCA model definition.
42  /*!
43  * SOCA nonlinear model definition and configuration parameters.
44  */
45 
46  class Model:public oops::interface::ModelBase<Traits>,
47  private util::ObjectCounter<Model>
48  {
49  public:
50  static const std::string classname() {return "soca::Model";}
51 
52  Model(const Geometry &, const eckit::Configuration &);
53  ~Model();
54 
55  /// Prepare model integration
56  void initialize(State &) const;
57 
58  /// Model integration
59  void step(State &, const ModelBias &) const;
60  int saveTrajectory(State &, const ModelBias &) const;
61 
62  /// Finish model integration
63  void finalize(State &) const;
64 
65  /// Utilities
66  const util::Duration & timeResolution() const {return tstep_;}
67  const oops::Variables & variables() const {return vars_;}
68 
69  private:
70  void print(std::ostream &) const;
72  util::Duration tstep_;
74  std::unique_ptr<const Geometry> geom_;
75  const oops::Variables vars_;
76  };
77  // -----------------------------------------------------------------------------
78 
79 } // namespace soca
80 #endif // SOCA_MODEL_MODEL_H_
Geometry handles geometry for SOCA model.
Definition: Geometry.h:48
Model error for the SOCA model.
Definition: ModelBias.h:43
SOCA model definition.
Definition: Model.h:48
static const std::string classname()
Definition: Model.h:50
Model(const Geometry &, const eckit::Configuration &)
Definition: Model.cc:30
~Model()
Definition: Model.cc:49
const util::Duration & timeResolution() const
Utilities.
Definition: Model.h:66
void step(State &, const ModelBias &) const
Model integration.
Definition: Model.cc:62
int keyConfig_
Definition: Model.h:71
int saveTrajectory(State &, const ModelBias &) const
Definition: Model.cc:74
bool setup_mom6_
Definition: Model.h:73
util::Duration tstep_
Definition: Model.h:72
void print(std::ostream &) const
Definition: Model.cc:80
void finalize(State &) const
Finish model integration.
Definition: Model.cc:69
void initialize(State &) const
Prepare model integration.
Definition: Model.cc:57
const oops::Variables & variables() const
Definition: Model.h:67
std::unique_ptr< const Geometry > geom_
Definition: Model.h:74
const oops::Variables vars_
Definition: Model.h:75
SOCA model state.
Definition: State.h:48