OOPS
test/base/DeparturesEnsemble.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2020-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 TEST_BASE_DEPARTURESENSEMBLE_H_
9 #define TEST_BASE_DEPARTURESENSEMBLE_H_
10 
11 #include <Eigen/Dense>
12 #include <string>
13 #include <vector>
14 
15 #define ECKIT_TESTING_SELF_REGISTER_CASES 0
16 
17 #include "eckit/config/LocalConfiguration.h"
18 #include "eckit/testing/Test.h"
19 #include "oops/base/Departures.h"
21 #include "oops/base/ObsEnsemble.h"
23 #include "oops/runs/Test.h"
24 #include "oops/util/Logger.h"
26 #include "test/TestEnvironment.h"
27 
28 namespace test {
29 
30 // -----------------------------------------------------------------------------
31 
32 template <typename OBS> void testDeparturesEnsemble() {
33  typedef ObsTestsFixture<OBS> Test_;
34  typedef oops::DeparturesEnsemble<OBS> DeparturesEnsemble_;
35 
36  // tests depaturesEnsemle.packEigen()
37  // test verifies that computing rms by-hand on the packed array agrees with
38  // rms for each ensemble member computed using depatures.rms() method
39  size_t myNens = 5;
40  DeparturesEnsemble_ yens(Test_::obspace(), myNens);
41  size_t myNobs = yens[0].nobs();
42 
43  std::vector<double> rms1(myNens);
44  for (size_t ii=0; ii < myNens; ++ii) {
45  yens[ii].random();
46  rms1[ii] = yens[ii].rms();
47  }
48 
49  Eigen::MatrixXd yEnsPack = yens.packEigen();
50  Eigen::VectorXd rms2 = yEnsPack.rowwise().norm() / sqrt(myNobs);
51  oops::Log::info() << "norm of eigen stuff: " << rms2 << std::endl;
52  for (size_t iens = 0; iens < myNens; ++iens) {
53  oops::Log::test() << "ii=" << iens << " yens[ii].rms=" << rms1[iens]
54  << " rms(ypack[ii,:])=" << rms2[iens] << std::endl;
55  EXPECT(oops::is_close(rms2[iens], rms1[iens], 1.e-14));
56  }
57 }
58 
59 template <typename OBS> class DeparturesEnsemble : public oops::Test {
61  public:
63  virtual ~DeparturesEnsemble() {}
64  private:
65  std::string testid() const override {return "test::DeparturesEnsemble<" + OBS::name() + ">";}
66 
67  void register_tests() const override {
68  std::vector<eckit::testing::Test>& ts = eckit::testing::specification();
69  ts.emplace_back(CASE("base/DeparturesEnsemble/testDeparturesEnsemble")
70  { testDeparturesEnsemble<OBS>(); });
71  }
72 
73  void clear() const override {
74  Test_::reset();
75  }
76 };
77 
78 // =============================================================================
79 
80 } // namespace test
81 
82 #endif // TEST_BASE_DEPARTURESENSEMBLE_H_
test::ObsTestsFixture
Definition: ObsTestsFixture.h:29
test::DeparturesEnsemble::~DeparturesEnsemble
virtual ~DeparturesEnsemble()
Definition: test/base/DeparturesEnsemble.h:63
DeparturesEnsemble.h
test::ObsTestsFixture::reset
static void reset()
Definition: ObsTestsFixture.h:37
test::testDeparturesEnsemble
void testDeparturesEnsemble()
Definition: test/base/DeparturesEnsemble.h:32
test::DeparturesEnsemble::register_tests
void register_tests() const override
Definition: test/base/DeparturesEnsemble.h:67
test::CASE
CASE("test_linearmodelparameterswrapper_valid_name")
Definition: LinearModelFactory.cc:22
test::DeparturesEnsemble
Definition: test/base/DeparturesEnsemble.h:59
instantiateObsErrorFactory.h
test
Definition: LinearModelFactory.cc:20
Departures.h
ObsEnsemble.h
test::DeparturesEnsemble::clear
void clear() const override
Definition: test/base/DeparturesEnsemble.h:73
test::DeparturesEnsemble::testid
std::string testid() const override
Definition: test/base/DeparturesEnsemble.h:65
Test.h
ObsTestsFixture.h
TestEnvironment.h
test::DeparturesEnsemble::Test_
ObsTestsFixture< OBS > Test_
Definition: test/base/DeparturesEnsemble.h:60
oops::DeparturesEnsemble
Ensemble of Departures (can hold ensemble perturbations in the observation space)
Definition: oops/base/DeparturesEnsemble.h:23
oops::Test
Definition: Test.h:39
test::DeparturesEnsemble::DeparturesEnsemble
DeparturesEnsemble()
Definition: test/base/DeparturesEnsemble.h:62