8 #ifndef TEST_UFO_PARALLELOBSDISTRIBUTION_H_
9 #define TEST_UFO_PARALLELOBSDISTRIBUTION_H_
16 #include "eckit/config/LocalConfiguration.h"
17 #include "eckit/testing/Test.h"
18 #include "ioda/ObsSpace.h"
19 #include "ioda/ObsVector.h"
20 #include "oops/mpi/mpi.h"
21 #include "oops/runs/Test.h"
22 #include "oops/util/Expect.h"
23 #include "oops/util/parameters/Parameters.h"
24 #include "oops/util/parameters/RequiredParameter.h"
25 #include "test/TestEnvironment.h"
35 template <>
struct VectorPrintSelector<float> {
typedef VectorPrintSimple selector; };
36 template <>
struct VectorPrintSelector<
util::DateTime> {
typedef VectorPrintSimple selector; };
37 template <>
struct VectorPrintSelector<
util::Duration> {
typedef VectorPrintSimple selector; };
48 oops::RequiredParameter<Variable>
variable{
"variable",
this};
49 oops::RequiredParameter<std::vector<T>>
expectedValues{
"expectedValues",
this};
59 x =
static_cast<float>(x);
64 const eckit::Configuration &topConf = ::test::TestEnvironment::config();
66 util::DateTime bgn(topConf.getString(
"window begin"));
67 util::DateTime end(topConf.getString(
"window end"));
69 const eckit::LocalConfiguration obsSpaceConf(topConf,
"obs space");
70 ioda::ObsSpace obsSpace(obsSpaceConf, oops::mpi::world(), bgn, end, oops::mpi::myself());
73 parameters.deserialize(topConf.getSubConfiguration(section));
81 std::vector<T> globalValues = getGlobalVariableValues<T>(
82 obsSpace, obsDistribution,
83 parameters.
variable.value().variable(), parameters.
variable.value().group());
85 EXPECT_EQUAL(globalValues, expectedValues);
88 CASE(
"ufo/ParallelObsDistribution/getGlobalIntVariableValues") {
89 testVariable<int>(
"intTest");
92 CASE(
"ufo/ParallelObsDistribution/getGlobalFloatVariableValues") {
93 testVariable<float>(
"floatOrDoubleTest");
96 CASE(
"ufo/ParallelObsDistribution/getGlobalDoubleVariableValues") {
97 testVariable<double>(
"floatOrDoubleTest");
100 CASE(
"ufo/ParallelObsDistribution/getGlobalDateTimeVariableValues") {
101 testVariable<util::DateTime>(
"dateTimeTest");
104 CASE(
"ufo/ParallelObsDistribution/members") {
105 const eckit::Configuration &topConf = ::test::TestEnvironment::config();
107 util::DateTime bgn(topConf.getString(
"window begin"));
108 util::DateTime end(topConf.getString(
"window end"));
110 const eckit::LocalConfiguration obsSpaceConf(topConf,
"obs space");
111 ioda::ObsSpace obsSpace(obsSpaceConf, oops::mpi::world(), bgn, end, oops::mpi::myself());
114 const size_t gnlocs = obsSpace.gnlocs();
115 EXPECT_EQUAL(obsDistribution.globalObsCount(), gnlocs);
117 const size_t rank = obsSpace.comm().rank();
118 const size_t nlocs = obsSpace.nlocs();
119 EXPECT_EQUAL(obsDistribution.localObsCounts()[rank], nlocs);
124 std::string
testid()
const override {
return "ufo::test::ParallelObsDistribution";}
134 #endif // TEST_UFO_PARALLELOBSDISTRIBUTION_H_