UFO
ObsBiasIncrement.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_OBSBIASINCREMENT_H_
9 #define UFO_OBSBIASINCREMENT_H_
10 
11 #include <Eigen/Core>
12 
13 #include <memory>
14 #include <string>
15 #include <vector>
16 
17 #include "eckit/config/LocalConfiguration.h"
18 
19 #include "oops/util/Printable.h"
20 
22 
23 namespace ioda {
24  class ObsSpace;
25  class ObsVector;
26 }
27 
28 namespace ioda {
29  class ObsSpace;
30  class ObsVector;
31 }
32 
33 namespace ufo {
34  class GeoVaLs;
35  class ObsBias;
36 
37 // -----------------------------------------------------------------------------
38 
39 class ObsBiasIncrement : public util::Printable {
40  public:
41 // Constructor, destructor
42  ObsBiasIncrement(const ioda::ObsSpace &, const eckit::Configuration &);
43  ObsBiasIncrement(const ObsBiasIncrement &, const bool = true);
44  ObsBiasIncrement(const ObsBiasIncrement &, const eckit::Configuration &);
46 
47 // Linear algebra operators
48  void diff(const ObsBias &, const ObsBias &);
49  void zero();
53  ObsBiasIncrement & operator*=(const double);
54  void axpy(const double, const ObsBiasIncrement &);
55  double dot_product_with(const ObsBiasIncrement &) const;
56 
57 // I/O and diagnostics
58  void read(const eckit::Configuration &) {}
59  void write(const eckit::Configuration &) const {}
60  double norm() const;
61 
62  double & operator[](const unsigned int ii) {return biascoeffsinc_[ii];}
63  const double & operator[](const unsigned int ii) const {return biascoeffsinc_[ii];}
64 
65 // Linear obs bias model
66  void computeObsBiasTL(const GeoVaLs &,
67  const std::vector<ioda::ObsVector> &,
68  ioda::ObsVector &) const;
69 
71  const std::vector<ioda::ObsVector> &,
72  const ioda::ObsVector &);
73 
74 // Serialize and deserialize
75  std::size_t serialSize() const {return biascoeffsinc_.size();}
76  void serialize(std::vector<double> &) const {}
77  void deserialize(const std::vector<double> &, std::size_t &) {}
78 
79 // Operator
80  operator bool() const {return biascoeffsinc_.size() > 0;}
81 
82  private:
83  void print(std::ostream &) const;
84 
85  const ioda::ObsSpace & odb_;
86  const eckit::LocalConfiguration conf_;
87 
88  std::vector<double> biascoeffsinc_;
89  std::vector<std::shared_ptr<PredictorBase>> predbases_;
90  std::vector<std::string> prednames_;
91  std::vector<int> jobs_;
92 };
93 
94 // -----------------------------------------------------------------------------
95 
96 } // namespace ufo
97 
98 #endif // UFO_OBSBIASINCREMENT_H_
ufo::ObsBiasIncrement::deserialize
void deserialize(const std::vector< double > &, std::size_t &)
Definition: ObsBiasIncrement.h:77
ufo::ObsBiasIncrement::biascoeffsinc_
std::vector< double > biascoeffsinc_
Definition: ObsBiasIncrement.h:88
ufo::ObsBiasIncrement::odb_
const ioda::ObsSpace & odb_
Definition: ObsBiasIncrement.h:85
PredictorBase.h
ufo::ObsBiasIncrement::norm
double norm() const
Definition: ObsBiasIncrement.cc:177
ufo::ObsBiasIncrement::ObsBiasIncrement
ObsBiasIncrement(const ioda::ObsSpace &, const eckit::Configuration &)
Definition: ObsBiasIncrement.cc:28
ufo::ObsBiasIncrement::operator+=
ObsBiasIncrement & operator+=(const ObsBiasIncrement &)
Definition: ObsBiasIncrement.cc:136
ufo::ObsBiasIncrement::read
void read(const eckit::Configuration &)
Definition: ObsBiasIncrement.h:58
ufo::ObsBiasIncrement::operator*=
ObsBiasIncrement & operator*=(const double)
Definition: ObsBiasIncrement.cc:152
ufo::ObsBiasIncrement::serialize
void serialize(std::vector< double > &) const
Definition: ObsBiasIncrement.h:76
ufo::ObsBiasIncrement::print
void print(std::ostream &) const
Definition: ObsBiasIncrement.cc:293
ufo::ObsBiasIncrement::operator[]
const double & operator[](const unsigned int ii) const
Definition: ObsBiasIncrement.h:63
ufo::ObsBiasIncrement::diff
void diff(const ObsBias &, const ObsBias &)
Definition: ObsBiasIncrement.cc:108
ufo::ObsBiasIncrement::axpy
void axpy(const double, const ObsBiasIncrement &)
Definition: ObsBiasIncrement.cc:160
ufo::ObsBiasIncrement::computeObsBiasTL
void computeObsBiasTL(const GeoVaLs &, const std::vector< ioda::ObsVector > &, ioda::ObsVector &) const
Definition: ObsBiasIncrement.cc:188
ioda
Definition: ObsAtmSfcInterp.h:24
ufo
Definition: RunCRTM.h:27
ufo::ObsBiasIncrement::predbases_
std::vector< std::shared_ptr< PredictorBase > > predbases_
Definition: ObsBiasIncrement.h:89
ufo::ObsBias
Class to handle observation bias parameters.
Definition: ObsBias.h:44
ufo::ObsBiasIncrement::jobs_
std::vector< int > jobs_
Definition: ObsBiasIncrement.h:91
ufo::ObsBiasIncrement::operator=
ObsBiasIncrement & operator=(const ObsBiasIncrement &)
Definition: ObsBiasIncrement.cc:122
ufo::ObsBiasIncrement::~ObsBiasIncrement
~ObsBiasIncrement()
Definition: ObsBiasIncrement.h:45
ufo::ObsBiasIncrement::write
void write(const eckit::Configuration &) const
Definition: ObsBiasIncrement.h:59
ufo::ObsBiasIncrement::conf_
const eckit::LocalConfiguration conf_
Definition: ObsBiasIncrement.h:86
ufo::ObsBiasIncrement::operator-=
ObsBiasIncrement & operator-=(const ObsBiasIncrement &)
Definition: ObsBiasIncrement.cc:144
ufo::GeoVaLs
GeoVaLs: geophysical values at locations.
Definition: src/ufo/GeoVaLs.h:39
ufo::ObsBiasIncrement
Definition: ObsBiasIncrement.h:39
ufo::ObsBiasIncrement::operator[]
double & operator[](const unsigned int ii)
Definition: ObsBiasIncrement.h:62
ufo::ObsBiasIncrement::serialSize
std::size_t serialSize() const
Definition: ObsBiasIncrement.h:75
ufo::ObsBiasIncrement::computeObsBiasAD
void computeObsBiasAD(GeoVaLs &, const std::vector< ioda::ObsVector > &, const ioda::ObsVector &)
Definition: ObsBiasIncrement.cc:247
ufo::ObsBiasIncrement::prednames_
std::vector< std::string > prednames_
Definition: ObsBiasIncrement.h:90
ufo::ObsBiasIncrement::dot_product_with
double dot_product_with(const ObsBiasIncrement &) const
Definition: ObsBiasIncrement.cc:167
ufo::ObsBiasIncrement::zero
void zero()
Definition: ObsBiasIncrement.cc:115