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"
36 oops::instantiateObsErrorFactory<OBS>();
38 std::vector<eckit::LocalConfiguration> conf;
41 for (std::size_t jj = 0; jj < Test_::obspace().size(); ++jj) {
42 const eckit::LocalConfiguration rconf(conf[jj],
"obs error");
43 std::unique_ptr<Covar_> R = std::make_unique<Covar_>(rconf, Test_::obspace()[jj]);
58 oops::instantiateObsErrorFactory<OBS>();
60 std::vector<eckit::LocalConfiguration> conf;
63 for (std::size_t jj = 0; jj < Test_::obspace().size(); ++jj) {
64 ObsVector_ obserr(Test_::obspace()[jj],
"ObsError");
66 const eckit::LocalConfiguration rconf(conf[jj],
"obs error");
67 Covar_ R(rconf, Test_::obspace()[jj]);
70 EXPECT(oops::is_close(R.getRMSE(), obserr.rms(), 1.e-10));
73 ObsVector_ dy(Test_::obspace()[jj]);
81 R.inverseMultiply(dy1);
84 EXPECT(oops::is_close(dy1.rms(), dy.rms(), 1.e-10));
86 R.inverseMultiply(dy2);
91 EXPECT(oops::is_close(dy2.rms(), dy.rms(), 1.e-10));
103 oops::instantiateObsErrorFactory<OBS>();
105 std::vector<eckit::LocalConfiguration> conf;
108 for (std::size_t jj = 0; jj < Test_::obspace().size(); ++jj) {
109 ObsVector_ obserr(Test_::obspace()[jj],
"ObsError");
111 const eckit::LocalConfiguration rconf(conf[jj],
"obs error");
112 Covar_ R(rconf, Test_::obspace()[jj]);
114 ObsVector_ dy(R.obserrors());
116 EXPECT(oops::is_close(dy.rms(), obserr.rms(), 1.e-10));
118 ObsVector_ dy1(R.inverseVariance());
122 EXPECT(oops::is_close(dy.rms(), dy1.rms(), 1.e-10));
126 oops::Log::test() <<
"R filled with ones: " << R.obserrors() << std::endl;
127 EXPECT(oops::is_close(R.obserrors().rms(), R.inverseVariance().rms(), 1.e-10));
128 EXPECT(oops::is_close(R.obserrors().rms(), dy.rms(), 1.e-10));
131 ObsVector_ testOnes(Test_::obspace()[jj],
"Ones");
132 EXPECT(oops::is_close(dy.rms(), testOnes.rms(), 1.e-10));
138 template <
typename OBS>
145 std::string
testid()
const override {
return "test::ObsErrorCovariance<" +
OBS::name() +
">";}
148 std::vector<eckit::testing::Test>& ts = eckit::testing::specification();
150 ts.emplace_back(
CASE(
"interface/ObsErrorCovariance/testConstructor")
151 { testConstructor<OBS>(); });
152 ts.emplace_back(
CASE(
"interface/ObsErrorCovariance/testMultiplies")
153 { testMultiplies<OBS>(); });
154 ts.emplace_back(
CASE(
"interface/ObsErrorCovariance/testAccessors")
155 { testAccessors<OBS>(); });
Observation error covariance matrix of observations from a single ObsSpace.
void register_tests() const override
ObsTestsFixture< OBS > Test_
void clear() const override
std::string testid() const override
virtual ~ObsErrorCovariance()
static const eckit::Configuration & config()
void testMultiplies()
Tests that and .
CASE("assimilation/FullGMRES/FullGMRES")
void testConstructor()
Tests creation and destruction of ObsErrorCovariances.