diff --git a/src/multio/mars2mars/Rules.cc b/src/multio/mars2mars/Rules.cc index c44ee2a35..8a99c794c 100644 --- a/src/multio/mars2mars/Rules.cc +++ b/src/multio/mars2mars/Rules.cc @@ -173,6 +173,15 @@ auto fixMapToSol() { setKey(&dm::FullMarsRecord::levtype, dm::LevType::SOL)); // } +auto fixSnowMapToSol() { + return rule( + all(OneOf{&dm::FullMarsRecord::levtype, {dm::LevType::SFC}}, Has{&dm::FullMarsRecord::levelist}, + NoneOf{&dm::FullMarsRecord::levelist, {0}}, + matchParams(235078, 237078, 238078, 239078, 235238, 237238, 238238, 239238, + 235406, 237406, 238406, 239406)), // + setKey(&dm::FullMarsRecord::levtype, dm::LevType::SOL)); +} + auto fixRunOffWaterParam205() { return rule(all(matchParams(205)), // @@ -662,6 +671,7 @@ const RuleList& fixIFSOutput() { fixHeightAboveGround10m(), // fixHeightAboveSea(), // fixMapToSol(), // + fixSnowMapToSol(), // fixWindspeedU100m(), // fixWindspeedU200m(), // fixWindspeedV100m(), // diff --git a/tests/multio/mars2mars/test_multio_mars2mars_mappings.cc b/tests/multio/mars2mars/test_multio_mars2mars_mappings.cc index 898db8f44..c8ffabfa1 100644 --- a/tests/multio/mars2mars/test_multio_mars2mars_mappings.cc +++ b/tests/multio/mars2mars/test_multio_mars2mars_mappings.cc @@ -466,7 +466,9 @@ CASE("Test mapToSol") { using namespace multio::mars2mars; using namespace multio::datamod; - std::vector paramIds{{33, 238, 228038, 260360, 262000, 262024, 260199}}; + std::vector paramIds{{33, 238, 228038, 228141, 235078, 237078, 238078, 239078, 235080, 237080, + 238080, 239080, 235238, 237238, 238238, 239238, 235406, 237406, 238406, + 239406, 260360, 262000, 262024, 260199}}; for (auto paramId : paramIds) { FullMarsRecord mars; @@ -481,6 +483,18 @@ CASE("Test mapToSol") { EXPECT(res); EXPECT(mars.levtype.get() == LevType::SOL); } + + FullMarsRecord levelZeroMars; + MiscRecord levelZeroMisc; + + levelZeroMars.param.set(235406); + levelZeroMars.levtype.set(LevType::SFC); + levelZeroMars.levelist.set(0); + + auto levelZeroResult = mars2mars::applyMappings(mars2mars::allRules(), levelZeroMars, levelZeroMisc); + + EXPECT(!levelZeroResult); + EXPECT(levelZeroMars.levtype.get() == LevType::SFC); };