UFO
src/ufo/GeoVaLs.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2017-2018 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 UFO_GEOVALS_H_
9 #define UFO_GEOVALS_H_
10 
11 #include <ostream>
12 #include <string>
13 #include <vector>
14 
15 #include "eckit/mpi/Comm.h"
16 
17 #include "oops/base/Variables.h"
18 #include "oops/util/ObjectCounter.h"
19 #include "oops/util/Printable.h"
20 
21 #include "ufo/GeoVaLs.interface.h"
22 
23 namespace eckit {
24  class Configuration;
25 }
26 
27 namespace ioda {
28  class ObsSpace;
29 }
30 
31 namespace ufo {
32  class Locations;
33 
34 // -----------------------------------------------------------------------------
35 
36 /// GeoVaLs: geophysical values at locations
37 
38 class GeoVaLs : public util::Printable,
39  private util::ObjectCounter<GeoVaLs> {
40  public:
41  static const std::string classname() {return "ufo::GeoVaLs";}
42 
43  explicit GeoVaLs(const eckit::mpi::Comm &);
44  GeoVaLs(const Locations &, const oops::Variables &);
45  GeoVaLs(const eckit::Configuration &, const ioda::ObsSpace &,
46  const oops::Variables &);
47  GeoVaLs(const GeoVaLs &, const int &);
48  GeoVaLs(const GeoVaLs &);
49 
50  ~GeoVaLs();
51 
52  GeoVaLs & operator = (const GeoVaLs &);
53  GeoVaLs & operator *= (const double);
54  GeoVaLs & operator *= (const std::vector<float> &);
55  GeoVaLs & operator += (const GeoVaLs &);
56  GeoVaLs & operator -= (const GeoVaLs &);
57  GeoVaLs & operator *= (const GeoVaLs &);
58  double dot_product_with(const GeoVaLs &) const;
59  void split(GeoVaLs &, GeoVaLs &) const;
60  void merge(const GeoVaLs &, const GeoVaLs &);
61 
62  void zero();
63  void reorderzdir(const std::string &, const std::string &);
64  void random();
65  double rms() const;
66  double normalizedrms(const GeoVaLs &) const;
67 
68  bool has(const std::string & var) const {return vars_.has(var);}
69  const oops::Variables & getVars() const {return vars_;}
70 
71  size_t nlevs(const std::string & var) const;
72  void get(std::vector<float> &, const std::string &) const;
73  void get(std::vector<float> &, const std::string &, const int) const;
74  void get(std::vector<double> &, const std::string &, const int) const;
75  void put(const std::vector<double> &, const std::string &, const int) const;
76 
77  void read(const eckit::Configuration &, const ioda::ObsSpace &);
78  void write(const eckit::Configuration &) const;
79 
80  int & toFortran() {return keyGVL_;}
81  const int & toFortran() const {return keyGVL_;}
82 
83  private:
84  void print(std::ostream &) const;
85 
87  oops::Variables vars_;
88  const eckit::mpi::Comm & comm_;
89 };
90 
91 // -----------------------------------------------------------------------------
92 
93 } // namespace ufo
94 
95 #endif // UFO_GEOVALS_H_
ufo::F90goms
int F90goms
Definition: Fortran.h:16
ufo::GeoVaLs::split
void split(GeoVaLs &, GeoVaLs &) const
Split two GeoVaLs.
Definition: GeoVaLs.cc:208
ufo::GeoVaLs::random
void random()
Randomize GeoVaLs.
Definition: GeoVaLs.cc:140
ufo::GeoVaLs::getVars
const oops::Variables & getVars() const
Definition: src/ufo/GeoVaLs.h:69
ufo::GeoVaLs::reorderzdir
void reorderzdir(const std::string &, const std::string &)
Reorder GeoVaLs in vertical dimension based on vertical coordinate variable.
Definition: GeoVaLs.cc:113
ufo::GeoVaLs::comm_
const eckit::mpi::Comm & comm_
Definition: src/ufo/GeoVaLs.h:88
ufo::GeoVaLs::zero
void zero()
Zero out the GeoVaLs.
Definition: GeoVaLs.cc:106
ufo::Locations
Locations class to handle locations for UFO.
Definition: src/ufo/Locations.h:32
ufo::GeoVaLs::keyGVL_
F90goms keyGVL_
Definition: src/ufo/GeoVaLs.h:86
ioda
Definition: ObsAtmSfcInterp.h:24
ufo
Definition: RunCRTM.h:27
ufo::GeoVaLs::get
void get(std::vector< float > &, const std::string &) const
Return all values for a specific 2D variable.
Definition: GeoVaLs.cc:268
ufo::GeoVaLs::operator-=
GeoVaLs & operator-=(const GeoVaLs &)
Subtract another GeoVaLs.
Definition: GeoVaLs.cc:183
ufo::GeoVaLs::normalizedrms
double normalizedrms(const GeoVaLs &) const
Calculate normalized rms.
Definition: GeoVaLs.cc:130
ufo::GeoVaLs::toFortran
int & toFortran()
Definition: src/ufo/GeoVaLs.h:80
ufo::GeoVaLs::toFortran
const int & toFortran() const
Definition: src/ufo/GeoVaLs.h:81
ufo::GeoVaLs::operator=
GeoVaLs & operator=(const GeoVaLs &)
Copy operator.
Definition: GeoVaLs.cc:167
eckit
Forward declarations.
Definition: ObsAtmSfcInterp.h:20
ufo::GeoVaLs::GeoVaLs
GeoVaLs(const eckit::mpi::Comm &)
Default constructor - does not allocate fields.
Definition: GeoVaLs.cc:27
ufo::GeoVaLs::classname
static const std::string classname()
Definition: src/ufo/GeoVaLs.h:41
ufo::GeoVaLs::put
void put(const std::vector< double > &, const std::string &, const int) const
Put values for a specific variable and level.
Definition: GeoVaLs.cc:298
ufo::GeoVaLs::operator+=
GeoVaLs & operator+=(const GeoVaLs &)
Add another GeoVaLs.
Definition: GeoVaLs.cc:175
ufo::GeoVaLs
GeoVaLs: geophysical values at locations.
Definition: src/ufo/GeoVaLs.h:39
ufo::GeoVaLs::~GeoVaLs
~GeoVaLs()
Definition: GeoVaLs.cc:99
ufo::GeoVaLs::write
void write(const eckit::Configuration &) const
Write GeoVaLs to the file.
Definition: GeoVaLs.cc:316
ufo::GeoVaLs::vars_
oops::Variables vars_
Definition: src/ufo/GeoVaLs.h:87
GeoVaLs.interface.h
ufo::GeoVaLs::has
bool has(const std::string &var) const
Definition: src/ufo/GeoVaLs.h:68
ufo::GeoVaLs::rms
double rms() const
Calculate rms.
Definition: GeoVaLs.cc:121
ufo::GeoVaLs::print
void print(std::ostream &) const
Output GeoVaLs to a stream.
Definition: GeoVaLs.cc:224
ufo::GeoVaLs::read
void read(const eckit::Configuration &, const ioda::ObsSpace &)
Read GeoVaLs from the file.
Definition: GeoVaLs.cc:308
ufo::GeoVaLs::nlevs
size_t nlevs(const std::string &var) const
Return number of levels for a specified variable.
Definition: GeoVaLs.cc:259
ufo::GeoVaLs::merge
void merge(const GeoVaLs &, const GeoVaLs &)
Merge two GeoVaLs.
Definition: GeoVaLs.cc:216
ufo::GeoVaLs::dot_product_with
double dot_product_with(const GeoVaLs &) const
Scalar product of two GeoVaLs.
Definition: GeoVaLs.cc:199
ufo::GeoVaLs::operator*=
GeoVaLs & operator*=(const double)
Multiply by a constant scalar.
Definition: GeoVaLs.cc:147