UFO
ObsBiasCovariance.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_OBSBIASCOVARIANCE_H_
9 #define UFO_OBSBIASCOVARIANCE_H_
10 
11 #include <map>
12 #include <string>
13 #include <vector>
14 #include <boost/noncopyable.hpp>
15 
16 #include "eckit/config/LocalConfiguration.h"
17 
18 #include "oops/util/ObjectCounter.h"
19 #include "oops/util/Printable.h"
20 
21 namespace eckit {
22  class Configuration;
23 }
24 
25 namespace ioda {
26  class ObsSpace;
27 }
28 
29 namespace ufo {
30  class ObsBias;
31  class ObsBiasIncrement;
32 
33 // -----------------------------------------------------------------------------
34 
35 class ObsBiasCovariance : public util::Printable,
36  private boost::noncopyable,
37  private util::ObjectCounter<ObsBiasCovariance> {
38  public:
39  static const std::string classname() {return "ufo::ObsBiasCovariance";}
40 
41 // Constructor, destructor
42  ObsBiasCovariance(ioda::ObsSpace &, const eckit::Configuration &);
44 
45 // Linear algebra operators
46  void linearize(const ObsBias &, const eckit::Configuration &);
47  void multiply(const ObsBiasIncrement &, ObsBiasIncrement &) const;
48  void inverseMultiply(const ObsBiasIncrement &, ObsBiasIncrement &) const;
49  void randomize(ObsBiasIncrement &) const;
50 
51 // Utilities
52  const eckit::Configuration & config() const {return conf_;}
53  void read(const eckit::Configuration &);
54  void write(const eckit::Configuration &);
55  const std::vector<std::string> predictorNames() const {return prednames_;}
56 
57  private:
58  void print(std::ostream &) const {}
59  const eckit::LocalConfiguration conf_;
60  ioda::ObsSpace & odb_;
61 
62 // Hessian contribution from Jo bias correction terms
63  std::vector<double> ht_rinv_h_;
64 
65 // preconditioner
66  std::vector<double> preconditioner_;
67 
68 // QCed obs numbers <channel>
69  std::vector<std::size_t> obs_num_;
70 
71 // Minimal required QCed obs number to add contribution
73 
74 // Analysis error variances
75  std::vector<double> analysis_variances_;
76 
77 // Error variances
78  std::vector<double> variances_;
79 
80 // Default smallest variance value
81  double smallest_variance_ = 1.0e-6;
82 
83 // Default largest variance value
84  double largest_variance_ = 10.0;
85 
86 // Default largest analysis error variance
87  double largest_analysis_variance_ = 10000.0;
88 
89 // Default stepsize
90  double step_size_ = 1.e-4;
91 
92  std::vector<std::string> prednames_;
93  std::vector<int> jobs_;
94 };
95 
96 // -----------------------------------------------------------------------------
97 
98 } // namespace ufo
99 
100 #endif // UFO_OBSBIASCOVARIANCE_H_
ufo::ObsBiasCovariance::prednames_
std::vector< std::string > prednames_
Definition: ObsBiasCovariance.h:92
ufo::ObsBiasCovariance::randomize
void randomize(ObsBiasIncrement &) const
Definition: ObsBiasCovariance.cc:348
ufo::ObsBiasCovariance::odb_
ioda::ObsSpace & odb_
Definition: ObsBiasCovariance.h:60
ufo::ObsBiasCovariance
Definition: ObsBiasCovariance.h:37
ufo::ObsBiasCovariance::ht_rinv_h_
std::vector< double > ht_rinv_h_
Definition: ObsBiasCovariance.h:63
ufo::ObsBiasCovariance::predictorNames
const std::vector< std::string > predictorNames() const
Definition: ObsBiasCovariance.h:55
ufo::ObsBiasCovariance::print
void print(std::ostream &) const
Definition: ObsBiasCovariance.h:58
ufo::ObsBiasCovariance::smallest_variance_
double smallest_variance_
Definition: ObsBiasCovariance.h:81
ufo::ObsBiasCovariance::obs_num_
std::vector< std::size_t > obs_num_
Definition: ObsBiasCovariance.h:69
ufo::ObsBiasCovariance::minimal_required_obs_number_
std::size_t minimal_required_obs_number_
Definition: ObsBiasCovariance.h:72
ufo::ObsBiasCovariance::write
void write(const eckit::Configuration &)
Definition: ObsBiasCovariance.cc:210
ufo::ObsBiasCovariance::~ObsBiasCovariance
~ObsBiasCovariance()
Definition: ObsBiasCovariance.h:43
ioda
Definition: ObsAtmSfcInterp.h:24
ufo
Definition: RunCRTM.h:27
ufo::ObsBiasCovariance::ObsBiasCovariance
ObsBiasCovariance(ioda::ObsSpace &, const eckit::Configuration &)
Definition: ObsBiasCovariance.cc:32
ufo::ObsBiasCovariance::analysis_variances_
std::vector< double > analysis_variances_
Definition: ObsBiasCovariance.h:75
ufo::ObsBiasCovariance::read
void read(const eckit::Configuration &)
Definition: ObsBiasCovariance.cc:136
ufo::ObsBias
Class to handle observation bias parameters.
Definition: ObsBias.h:44
eckit
Forward declarations.
Definition: ObsAtmSfcInterp.h:20
ufo::ObsBiasCovariance::linearize
void linearize(const ObsBias &, const eckit::Configuration &)
Definition: ObsBiasCovariance.cc:218
ufo::ObsBiasCovariance::largest_analysis_variance_
double largest_analysis_variance_
Definition: ObsBiasCovariance.h:87
ufo::ObsBiasCovariance::variances_
std::vector< double > variances_
Definition: ObsBiasCovariance.h:78
ufo::ObsBiasCovariance::step_size_
double step_size_
Definition: ObsBiasCovariance.h:90
ufo::ObsBiasCovariance::jobs_
std::vector< int > jobs_
Definition: ObsBiasCovariance.h:93
ufo::ObsBiasIncrement
Definition: ObsBiasIncrement.h:39
ufo::ObsBiasCovariance::largest_variance_
double largest_variance_
Definition: ObsBiasCovariance.h:84
ufo::ObsBiasCovariance::multiply
void multiply(const ObsBiasIncrement &, ObsBiasIncrement &) const
Definition: ObsBiasCovariance.cc:322
ufo::ObsBiasCovariance::preconditioner_
std::vector< double > preconditioner_
Definition: ObsBiasCovariance.h:66
ufo::ObsBiasCovariance::classname
static const std::string classname()
Definition: ObsBiasCovariance.h:39
ufo::ObsBiasCovariance::inverseMultiply
void inverseMultiply(const ObsBiasIncrement &, ObsBiasIncrement &) const
Definition: ObsBiasCovariance.cc:335
ufo::ObsBiasCovariance::conf_
const eckit::LocalConfiguration conf_
Definition: ObsBiasCovariance.h:59
ufo::ObsBiasCovariance::config
const eckit::Configuration & config() const
Definition: ObsBiasCovariance.h:52