OOPS
oops/base/DeparturesEnsemble.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2018-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_BASE_DEPARTURESENSEMBLE_H_
9 #define OOPS_BASE_DEPARTURESENSEMBLE_H_
10 
11 #include <Eigen/Dense>
12 #include <vector>
13 
14 #include "oops/base/Departures.h"
15 #include "oops/base/ObsSpaces.h"
16 #include "oops/util/Logger.h"
17 
18 namespace oops {
19 
20 // -----------------------------------------------------------------------------
21 
22 /// \brief Ensemble of Departures (can hold ensemble perturbations in the observation space)
23 template<typename OBS> class DeparturesEnsemble {
26  public:
27  /// Creates ensemble of empty Departures size \p nens
28  DeparturesEnsemble(const ObsSpaces_ &, const size_t nens);
29  /// Creates ensemble of local Departures from full Departures \p other based on local
30  /// observations \p local
31  DeparturesEnsemble(const ObsSpaces_ & local, const DeparturesEnsemble & other);
32 
33  /// Accessors and size
34  size_t size() const {return ensemblePerturbs_.size();}
35  Departures_ & operator[](const size_t ii) {return ensemblePerturbs_[ii];}
36  const Departures_ & operator[](const size_t ii) const {return ensemblePerturbs_[ii];}
37 
38 /// pack ensemble of dep. as contiguous block of memory
39  Eigen::MatrixXd packEigen() const;
40 
41  private:
42  std::vector<Departures_> ensemblePerturbs_; // ensemble perturbations
43 };
44 
45 // ====================================================================================
46 
47 template<typename OBS>
49  : ensemblePerturbs_() {
50  ensemblePerturbs_.reserve(nens);
51  for (size_t iens = 0; iens < nens; ++iens) {
52  ensemblePerturbs_.emplace_back(obsdb);
53  }
54  Log::trace() << "DeparturesEnsemble created" << std::endl;
55 }
56 
57 // -----------------------------------------------------------------------------
58 
59 template<typename OBS>
61  const DeparturesEnsemble & other)
62  : ensemblePerturbs_() {
63  ensemblePerturbs_.reserve(other.size());
64  for (const auto & dep : other.ensemblePerturbs_) {
65  ensemblePerturbs_.emplace_back(local, dep);
66  }
67  Log::trace() << "Local DeparturesEnsemble created" << std::endl;
68 }
69 
70 // -----------------------------------------------------------------------------
71 
72 template<typename OBS>
73 Eigen::MatrixXd DeparturesEnsemble<OBS>::packEigen() const {
74  std::size_t myNobs = ensemblePerturbs_[0].nobs();
75  std::size_t myNens = ensemblePerturbs_.size();
76 
77  Eigen::MatrixXd depEns(myNens, myNobs);
78  for (std::size_t iens = 0; iens < myNens; ++iens) {
79  depEns.row(iens) = ensemblePerturbs_[iens].packEigen();
80  }
81  Log::trace() << "DeparturesEnsemble::packEigen() completed" << std::endl;
82  return depEns;
83 }
84 
85 // -----------------------------------------------------------------------------
86 
87 } // namespace oops
88 
89 #endif // OOPS_BASE_DEPARTURESENSEMBLE_H_
oops
The namespace for the main oops code.
Definition: ErrorCovarianceL95.cc:22
oops::DeparturesEnsemble::packEigen
Eigen::MatrixXd packEigen() const
pack ensemble of dep. as contiguous block of memory
Definition: oops/base/DeparturesEnsemble.h:73
ObsSpaces.h
oops::DeparturesEnsemble::ensemblePerturbs_
std::vector< Departures_ > ensemblePerturbs_
Definition: oops/base/DeparturesEnsemble.h:42
oops::DeparturesEnsemble::ObsSpaces_
ObsSpaces< OBS > ObsSpaces_
Definition: oops/base/DeparturesEnsemble.h:25
oops::DeparturesEnsemble::DeparturesEnsemble
DeparturesEnsemble(const ObsSpaces_ &, const size_t nens)
Creates ensemble of empty Departures size nens.
Definition: oops/base/DeparturesEnsemble.h:48
oops::DeparturesEnsemble::operator[]
Departures_ & operator[](const size_t ii)
Definition: oops/base/DeparturesEnsemble.h:35
Departures.h
oops::Departures
Difference between two observation vectors.
Definition: oops/base/Departures.h:44
oops::DeparturesEnsemble::size
size_t size() const
Accessors and size.
Definition: oops/base/DeparturesEnsemble.h:34
oops::DeparturesEnsemble::Departures_
Departures< OBS > Departures_
Definition: oops/base/DeparturesEnsemble.h:24
oops::DeparturesEnsemble
Ensemble of Departures (can hold ensemble perturbations in the observation space)
Definition: oops/base/DeparturesEnsemble.h:23
oops::DeparturesEnsemble::operator[]
const Departures_ & operator[](const size_t ii) const
Definition: oops/base/DeparturesEnsemble.h:36
oops::ObsSpaces
Definition: ObsSpaces.h:41