11 #ifndef TEST_BASE_OBSERRORCOVARIANCE_H_
12 #define TEST_BASE_OBSERRORCOVARIANCE_H_
18 #define ECKIT_TESTING_SELF_REGISTER_CASES 0
20 #include "eckit/testing/Test.h"
37 oops::instantiateObsErrorFactory<OBS>();
39 std::vector<eckit::LocalConfiguration> conf;
42 for (std::size_t jj = 0; jj < Test_::obspace().size(); ++jj) {
43 ObsVector_ obserr(Test_::obspace()[jj],
"ObsError");
44 obserr.save(
"EffectiveError");
46 const eckit::LocalConfiguration rconf(conf[jj],
"obs error");
47 std::unique_ptr<Covar_> R(
63 oops::instantiateObsErrorFactory<OBS>();
65 std::vector<eckit::LocalConfiguration> conf;
68 for (std::size_t jj = 0; jj < Test_::obspace().size(); ++jj) {
69 ObsVector_ obserr(Test_::obspace()[jj],
"ObsError");
70 obserr.save(
"EffectiveError");
72 const eckit::LocalConfiguration rconf(conf[jj],
"obs error");
73 std::unique_ptr<Covar_> R(
77 EXPECT(oops::is_close(R->getRMSE(), obserr.rms(), 1.e-10));
80 ObsVector_ dy(Test_::obspace()[jj]);
84 oops::Log::info() <<
"Random vector dy: " << dy << std::endl;
87 R->inverseMultiply(dy1);
89 oops::Log::info() <<
"R^{-1}*R*dy: " << dy1 << std::endl;
90 EXPECT(oops::is_close(dy1.rms(), dy.rms(), 1.e-10));
92 R->inverseMultiply(dy2);
95 oops::Log::info() <<
"R*R^{-1}*dy: " << dy2 << std::endl;
96 EXPECT(oops::is_close(dy2.rms(), dy.rms(), 1.e-10));
103 template <
typename OBS>
110 std::string
testid()
const override {
return "test::ObsErrorCovariance<" + OBS::name() +
">";}
113 std::vector<eckit::testing::Test>& ts = eckit::testing::specification();
115 ts.emplace_back(
CASE(
"interface/ObsErrorCovariance/testConstructor")
116 { testConstructor<OBS>(); });
117 ts.emplace_back(
CASE(
"interface/ObsErrorCovariance/testMultiplies")
118 { testMultiplies<OBS>(); });
130 #endif // TEST_BASE_OBSERRORCOVARIANCE_H_