OOPS
LocalObsErrorDiag.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2020 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 OOPS_GENERIC_LOCALOBSERRORDIAG_H_
9 #define OOPS_GENERIC_LOCALOBSERRORDIAG_H_
10 
11 #include <memory>
12 #include <sstream>
13 #include <string>
14 
15 #include "eckit/config/Configuration.h"
16 #include "oops/base/ObsErrorBase.h"
21 #include "oops/util/Logger.h"
22 
23 namespace oops {
24 
25 // -----------------------------------------------------------------------------
26 /// Diagonal observation error covariance matrix with R-localization
27 // localization (inflating observation error variances) is done in the constructor
28 // the rest of the methods are not overriden; ObsErrorDiag methods would be used
29 // instead
30 
31 template<typename OBS>
32 class LocalObsErrorDiag : public ObsErrorDiag<OBS> {
35 
36  public:
37 /// Initialize and inflate local R for obs. localization
38  LocalObsErrorDiag(const eckit::Configuration &, const ObsSpace_ &);
39 
40  private:
41  void print(std::ostream &) const override;
42 };
43 
44 // =============================================================================
45 
46 template<typename OBS>
48  (const eckit::Configuration & conf, const ObsSpace_ & obsdb)
49  : ObsErrorDiag<OBS>(conf, obsdb)
50 {
51 // if Localization section is available; localize covariances
52  if (conf.has("localization")) {
53  eckit::LocalConfiguration locconf(conf, "localization");
54  std::unique_ptr<ObsLocalization_> loc(ObsLocalizationFactory<OBS>::create(locconf, obsdb));
55  loc->multiply(this->inverseVariance_);
56  }
57 }
58 
59 // -----------------------------------------------------------------------------
60 
61 template<typename OBS>
62 void LocalObsErrorDiag<OBS>::print(std::ostream & os) const {
63  os << "Localized diagonal observation error covariance, inverse variances: "
64  << this->inverseVariance_ << std::endl;
65 }
66 
67 
68 // -----------------------------------------------------------------------------
69 
70 
71 } // namespace oops
72 
73 #endif // OOPS_GENERIC_LOCALOBSERRORDIAG_H_
oops::ObsLocalizationBase
Base class for generic localizations.
Definition: ObsLocalizationBase.h:29
oops
The namespace for the main oops code.
Definition: ErrorCovarianceL95.cc:22
oops::LocalObsErrorDiag::ObsLocalization_
ObsLocalizationBase< OBS > ObsLocalization_
Definition: LocalObsErrorDiag.h:33
ObsLocalizationBase.h
ObsErrorDiag.h
oops::ObsSpace
Definition: oops/interface/ObsSpace.h:42
oops::LocalObsErrorDiag
Diagonal observation error covariance matrix with R-localization.
Definition: LocalObsErrorDiag.h:32
oops::LocalObsErrorDiag::print
void print(std::ostream &) const override
Definition: LocalObsErrorDiag.h:62
ObsSpace.h
oops::ObsErrorDiag::inverseVariance_
ObsVector_ inverseVariance_
Definition: ObsErrorDiag.h:61
oops::LocalObsErrorDiag::LocalObsErrorDiag
LocalObsErrorDiag(const eckit::Configuration &, const ObsSpace_ &)
Initialize and inflate local R for obs. localization.
Definition: LocalObsErrorDiag.h:48
oops::ObsLocalizationFactory
ObsLocalizationFactory Factory.
Definition: ObsLocalizationBase.h:42
ObsVector.h
oops::LocalObsErrorDiag::ObsSpace_
ObsSpace< OBS > ObsSpace_
Definition: LocalObsErrorDiag.h:34
ObsErrorBase.h
oops::ObsErrorDiag
Diagonal observation error covariance matrix.
Definition: ObsErrorDiag.h:37