OOPS
Resolution.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 LORENZ95_RESOLUTION_H_
12 #define LORENZ95_RESOLUTION_H_
13 
14 #include <iostream>
15 #include <string>
16 #include <vector>
17 
18 #include "eckit/config/Configuration.h"
19 #include "lorenz95/Iterator.h"
20 #include "oops/mpi/mpi.h"
21 #include "oops/util/parameters/Parameters.h"
22 #include "oops/util/parameters/RequiredParameter.h"
23 #include "oops/util/Printable.h"
24 
25 namespace lorenz95 {
26 
27 class Iterator;
28 
29 // -----------------------------------------------------------------------------
30 /// \brief Parameters controlling a Lorenz95 model's resolution.
31 class ResolutionParameters : public oops::Parameters {
32  OOPS_CONCRETE_PARAMETERS(ResolutionParameters, Parameters)
33 
34  public:
35  /// \brief Number of gridpoints.
36  oops::RequiredParameter<int> resol{"resol", this};
37 };
38 
39 // -----------------------------------------------------------------------------
40 /// Handles resolution.
41 
42 class Resolution : public util::Printable {
43  public:
45 
46  Resolution(const ResolutionParameters & parameters, const eckit::mpi::Comm & comm)
47  : resol_(parameters.resol), comm_(comm) {}
48  explicit Resolution(const int resol): resol_(resol), comm_(oops::mpi::myself()) {}
49 
50  int npoints() const {return resol_;}
51 
52  Iterator begin() const;
53  Iterator end() const;
54  std::vector<double> verticalCoord(std::string &) const;
55  const eckit::mpi::Comm & getComm() const {return comm_;}
56 
57  private:
58  void print(std::ostream & os) const {os << resol_;}
59  const int resol_;
60  const eckit::mpi::Comm & comm_;
61 };
62 
63 // -----------------------------------------------------------------------------
64 
65 } // namespace lorenz95
66 
67 #endif // LORENZ95_RESOLUTION_H_
lorenz95::ResolutionParameters::resol
oops::RequiredParameter< int > resol
Number of gridpoints.
Definition: Resolution.h:36
oops
The namespace for the main oops code.
Definition: ErrorCovarianceL95.cc:22
lorenz95::Resolution::getComm
const eckit::mpi::Comm & getComm() const
Definition: Resolution.h:55
lorenz95::Resolution
Handles resolution.
Definition: Resolution.h:42
mpi.h
lorenz95::Resolution::Resolution
Resolution(const ResolutionParameters &parameters, const eckit::mpi::Comm &comm)
Definition: Resolution.h:46
lorenz95::Resolution::begin
Iterator begin() const
Definition: Resolution.cc:18
lorenz95::Resolution::comm_
const eckit::mpi::Comm & comm_
Definition: Resolution.h:60
lorenz95::Resolution::print
void print(std::ostream &os) const
Definition: Resolution.h:58
oops::mpi::myself
const eckit::mpi::Comm & myself()
Default communicator with each MPI task by itself.
Definition: oops/mpi/mpi.cc:28
lorenz95::Resolution::Resolution
Resolution(const int resol)
Definition: Resolution.h:48
lorenz95::Resolution::verticalCoord
std::vector< double > verticalCoord(std::string &) const
Definition: Resolution.cc:26
lorenz95::Resolution::resol_
const int resol_
Definition: Resolution.h:59
lorenz95::ResolutionParameters
Parameters controlling a Lorenz95 model's resolution.
Definition: Resolution.h:31
Iterator.h
lorenz95::Resolution::end
Iterator end() const
Definition: Resolution.cc:22
lorenz95::Resolution::npoints
int npoints() const
Definition: Resolution.h:50
lorenz95::Iterator
Definition: Iterator.h:30
lorenz95::Resolution::Parameters_
ResolutionParameters Parameters_
Definition: Resolution.h:44
lorenz95
The namespace for the L95 model.
Definition: l95/src/lorenz95/AnalyticInit.cc:17