SOCA
Geometry.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_GEOMETRY_GEOMETRY_H_
9 #define SOCA_GEOMETRY_GEOMETRY_H_
10 
11 #include <fstream>
12 #include <memory>
13 #include <ostream>
14 #include <string>
15 #include <vector>
16 
17 #include "eckit/config/Configuration.h"
18 #include "eckit/config/LocalConfiguration.h"
19 #include "eckit/mpi/Comm.h"
20 
21 #include "soca/Fortran.h"
22 #include "soca/Geometry/FmsInput.h"
26 
27 #include "oops/util/ObjectCounter.h"
28 #include "oops/util/Printable.h"
29 
30 // Forward declarations
31 namespace atlas {
32  class FieldSet;
33  class FunctionSpace;
34  namespace functionspace {
35  class PointCloud;
36  }
37 }
38 namespace oops {
39  class Variables;
40 }
41 
42 // -----------------------------------------------------------------------------
43 
44 namespace soca {
45 
46  /// Geometry handles geometry for SOCA model.
47  class Geometry : public util::Printable,
48  private util::ObjectCounter<Geometry> {
49  public:
50  static const std::string classname() {return "soca::Geometry";}
51 
52  explicit Geometry(const eckit::Configuration &, const eckit::mpi::Comm &);
53  Geometry(const Geometry &);
54  ~Geometry();
55 
56  GeometryIterator begin() const;
57  GeometryIterator end() const;
58  std::vector<size_t> variableSizes(const oops::Variables & vars) const;
59  std::vector<double> verticalCoord(std::string &) const {return {};}
60 
61  int& toFortran() {return keyGeom_;}
62  const int& toFortran() const {return keyGeom_;}
63  void gridgen() const;
64  const eckit::mpi::Comm & getComm() const {return comm_;}
65  eckit::LocalConfiguration getAtmConf() const {return atmconf_;}
66  bool getAtmInit() const {return initatm_;}
67  bool initAtm(const eckit::Configuration & conf) const
68  {
69  return conf.getBool("notocean.init", false);
70  }
71 
72  atlas::FunctionSpace * atlasFunctionSpace() const;
73  atlas::FieldSet * atlasFieldSet() const;
74 
75  private:
77  void print(std::ostream &) const;
78  int keyGeom_;
79  const eckit::mpi::Comm & comm_;
80  eckit::LocalConfiguration atmconf_;
81  bool initatm_;
83  std::unique_ptr<atlas::functionspace::PointCloud> atlasFunctionSpace_;
84  std::unique_ptr<atlas::FieldSet> atlasFieldSet_;
85  };
86  // -----------------------------------------------------------------------------
87 
88 } // namespace soca
89 
90 #endif // SOCA_GEOMETRY_GEOMETRY_H_
Geometry handles geometry for SOCA model.
Definition: Geometry.h:48
const eckit::mpi::Comm & comm_
Definition: Geometry.h:79
eckit::LocalConfiguration getAtmConf() const
Definition: Geometry.h:65
Geometry & operator=(const Geometry &)
FmsInput fmsinput_
Definition: Geometry.h:82
bool initatm_
Definition: Geometry.h:81
std::vector< size_t > variableSizes(const oops::Variables &vars) const
Definition: Geometry.cc:87
GeometryIterator begin() const
Definition: Geometry.cc:74
void gridgen() const
Definition: Geometry.cc:70
atlas::FunctionSpace * atlasFunctionSpace() const
Definition: Geometry.cc:98
eckit::LocalConfiguration atmconf_
Definition: Geometry.h:80
const int & toFortran() const
Definition: Geometry.h:62
std::unique_ptr< atlas::FieldSet > atlasFieldSet_
Definition: Geometry.h:84
atlas::FieldSet * atlasFieldSet() const
Definition: Geometry.cc:102
static const std::string classname()
Definition: Geometry.h:50
std::vector< double > verticalCoord(std::string &) const
Definition: Geometry.h:59
bool initAtm(const eckit::Configuration &conf) const
Definition: Geometry.h:67
std::unique_ptr< atlas::functionspace::PointCloud > atlasFunctionSpace_
Definition: Geometry.h:83
const eckit::mpi::Comm & getComm() const
Definition: Geometry.h:64
bool getAtmInit() const
Definition: Geometry.h:66
Geometry(const eckit::Configuration &, const eckit::mpi::Comm &)
Definition: Geometry.cc:20
GeometryIterator end() const
Definition: Geometry.cc:81
int & toFortran()
Definition: Geometry.h:61
void print(std::ostream &) const
Definition: Geometry.cc:94
Definition: Geometry.h:31
Definition: Geometry.h:38
FmsInput handles the hard-coded fms input.nml file.
Definition: FmsInput.h:28