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/base/Variables.h"
19 #include "oops/util/ObjectCounter.h"
20 #include "oops/util/Printable.h"
21 
22 #include "ufo/ObsBiasParameters.h"
23 
24 namespace eckit {
25  class Configuration;
26 }
27 
28 namespace ioda {
29  class ObsSpace;
30 }
31 
32 namespace ufo {
33  class ObsBias;
34  class ObsBiasIncrement;
35 
36 // -----------------------------------------------------------------------------
37 
38 class ObsBiasCovariance : public util::Printable,
39  private boost::noncopyable,
40  private util::ObjectCounter<ObsBiasCovariance> {
41  public:
43 
44  static const std::string classname() {return "ufo::ObsBiasCovariance";}
45 
46 // Constructor, destructor
47  ObsBiasCovariance(ioda::ObsSpace & odb, const Parameters_ & params);
49 
50 // Linear algebra operators
51  void linearize(const ObsBias &, const eckit::Configuration &);
52  void multiply(const ObsBiasIncrement &, ObsBiasIncrement &) const;
53  void inverseMultiply(const ObsBiasIncrement &, ObsBiasIncrement &) const;
54  void randomize(ObsBiasIncrement &) const;
55 
56 // Utilities
58  void write(const eckit::Configuration &);
59  const std::vector<std::string> predictorNames() const {return prednames_;}
60 
61  private:
62  void print(std::ostream &) const {}
63 
64  ioda::ObsSpace & odb_;
65 
66 // Hessian contribution from Jo bias correction terms
67  std::vector<double> ht_rinv_h_;
68 
69 // preconditioner
70  std::vector<double> preconditioner_;
71 
72 // QCed obs numbers <channel>
73  std::vector<std::size_t> obs_num_;
74 
75 // Minimal required QCed obs number to add contribution
77 
78 // Analysis error variances
79  std::vector<double> analysis_variances_;
80 
81 // Error variances
82  Eigen::VectorXd variances_;
83 
84 // Smallest variance value
86 
87 // Largest variance value
89 
90 // Largest analysis error variance
92 
93 // Step size
95 
96  std::vector<std::string> prednames_;
97 
98  /// variables for which bias correction coefficients will be updated
99  oops::Variables vars_;
100 };
101 
102 // -----------------------------------------------------------------------------
103 
104 } // namespace ufo
105 
106 #endif // UFO_OBSBIASCOVARIANCE_H_
std::vector< std::string > prednames_
void print(std::ostream &) const
void read(const ObsBiasCovariancePriorParameters &)
std::size_t minimal_required_obs_number_
Eigen::VectorXd variances_
std::vector< std::size_t > obs_num_
static const std::string classname()
void write(const eckit::Configuration &)
std::vector< double > ht_rinv_h_
void inverseMultiply(const ObsBiasIncrement &, ObsBiasIncrement &) const
void randomize(ObsBiasIncrement &) const
ObsBiasCovariance(ioda::ObsSpace &odb, const Parameters_ &params)
void multiply(const ObsBiasIncrement &, ObsBiasIncrement &) const
std::vector< double > preconditioner_
oops::Variables vars_
variables for which bias correction coefficients will be updated
void linearize(const ObsBias &, const eckit::Configuration &)
const std::vector< std::string > predictorNames() const
std::vector< double > analysis_variances_
ObsBiasParameters Parameters_
static double defaultStepSize()
Default step size.
static double defaultSmallestVariance()
Default smallest variance value.
static double defaultLargestAnalysisVariance()
Default largest analysis error variance.
static double defaultLargestVariance()
Default largest variance value.
Contains increments to bias correction coefficients.
Parameters influencing the bias correction process.
Forward declarations.
Definition: ObsAodExt.h:21
Forward declarations.
Definition: ObsAodExt.h:25
Definition: RunCRTM.h:27