Skip to content

Commit bfa492c

Browse files
committed
MUL-283: Simplify MARS2GRIB mapping
Removed special handling for levtype al and spherical harmonics
1 parent e79b138 commit bfa492c

File tree

2 files changed

+37
-109
lines changed

2 files changed

+37
-109
lines changed

src/multio/mars2grib/Rules.cc

Lines changed: 36 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -181,12 +181,9 @@ auto makeGridRule(dm::Repres repres, std::int64_t num) {
181181
}
182182

183183
auto gridRules() {
184-
return exclusiveRuleList(makeGridRule(dm::Repres::GG, 40), makeGridRule(dm::Repres::LL, 0));
184+
return exclusiveRuleList(makeGridRule(dm::Repres::LL, 0), makeGridRule(dm::Repres::GG, 40),
185+
makeGridRule(dm::Repres::SH, 50));
185186
}
186-
auto gridRuleSH() {
187-
return exclusiveRuleList(makeGridRule(dm::Repres::SH, 50));
188-
}
189-
190187

191188
auto localSectionRules() {
192189
return exclusiveRuleList( //
@@ -199,22 +196,18 @@ auto localSectionRules() {
199196

200197
auto processTypesRules() {
201198
return exclusiveRuleList( //
202-
rule(all(Missing{dm::NUMBER}, Missing{dm::HDATE})), rule(all(Has{dm::NUMBER}, Missing{dm::HDATE}), ensemble()),
203-
rule(all(Has{dm::NUMBER}, Has{dm::HDATE}), reforecast(), ensemble()));
204-
}
205-
206-
auto processTypesRulesAl() {
207-
return exclusiveRuleList( //
208-
rule(all(Has{dm::NUMBER}), largeEnsemble()));
199+
rule(all(NoneOf{dm::LEVTYPE, {dm::LevType::AL}}, Missing{dm::NUMBER}, Missing{dm::HDATE})),
200+
rule(all(NoneOf{dm::LEVTYPE, {dm::LevType::AL}}, Has{dm::NUMBER}, Missing{dm::HDATE}), ensemble()),
201+
rule(all(NoneOf{dm::LEVTYPE, {dm::LevType::AL}}, Has{dm::NUMBER}, Has{dm::HDATE}), reforecast(), ensemble()),
202+
rule(all(matchLevType(dm::LevType::AL), Has{dm::NUMBER}, Missing{dm::HDATE}), largeEnsemble()),
203+
rule(all(matchLevType(dm::LevType::AL), Has{dm::NUMBER}, Has{dm::HDATE}), reforecast(), largeEnsemble()));
209204
}
210205

211206

212207
auto packingRules() {
213-
return exclusiveRuleList( //
214-
rule(OneOf{dm::PACKING, {"simple"}}, dataRepres(0)), rule(OneOf{dm::PACKING, {"ccsds"}}, dataRepres(42)));
215-
}
216-
auto packingRulesSH() {
217-
return exclusiveRuleList( //
208+
return exclusiveRuleList( //
209+
rule(OneOf{dm::PACKING, {"simple"}}, dataRepres(0)), //
210+
rule(OneOf{dm::PACKING, {"ccsds"}}, dataRepres(42)), //
218211
rule(OneOf{dm::PACKING, {"complex"}}, dataRepres(51)));
219212
}
220213

@@ -502,25 +495,16 @@ auto paramHLRules() {
502495
//-----------------------------------------------------------------------------
503496

504497
auto paramMLRules() {
505-
return exclusiveRuleList( //
506-
rule(matchParams(75, 76, 133, 203, 246, 247, 248, 260290), //
507-
pointInTime(), //
508-
typeOfLevel(TOL::Hybrid)), //
509-
rule(matchParams(paramRange(162100, 162113)), //
510-
timeRange(TimeRangeType::SinceLastPostProcessingStep, TOSP::Accumulation), //
511-
typeOfLevel(TOL::Hybrid)) //
512-
);
513-
}
514-
515-
auto paramMLRulesSH() {
516-
return exclusiveRuleList( //
517-
rule(matchParams(77, 129, 130, 131, 132, 135, 138, 152, 155), //
518-
pointInTime(), //
519-
typeOfLevel(TOL::Hybrid)) //
498+
return exclusiveRuleList( //
499+
rule(matchParams(75, 76, 77, paramRange(129, 133), 135, 138, 152, 155, 203, 246, 247, 248, 260290), //
500+
pointInTime(), //
501+
typeOfLevel(TOL::Hybrid)), //
502+
rule(matchParams(paramRange(162100, 162113)), //
503+
timeRange(TimeRangeType::SinceLastPostProcessingStep, TOSP::Accumulation), //
504+
typeOfLevel(TOL::Hybrid)) //
520505
);
521506
}
522507

523-
524508
//-----------------------------------------------------------------------------
525509
// PL
526510
//-----------------------------------------------------------------------------
@@ -543,23 +527,13 @@ auto plLevelRules(MkTail&& mkTail) {
543527

544528
auto paramPLRules() {
545529
return plLevelRules([]() {
546-
return exclusiveRuleList( //
547-
rule(matchParams(60, 75, 76, paramRange(129, 135), 203, 246, 247, 248, 157, 260290), //
548-
pointInTime()), //
549-
rule(matchParams(235100, paramRange(235129, 235133), 235135, 235157, 235203, 235246), //
550-
timeRange(TimeRangeType::SinceLastPostProcessingStep, TOSP::Average)) //
551-
);
552-
});
553-
}
554-
555-
auto paramPLRulesSH() {
556-
return plLevelRules([]() {
557-
return exclusiveRuleList( //
558-
rule(matchParams(1, 2, paramRange(129, 135), 138, 152, 155, 157), //
559-
pointInTime()), //
560-
rule(matchParams(235129, 235130, 235138, 235152, 235155, 263107), //
561-
timeRange(TimeRangeType::SinceLastPostProcessingStep, TOSP::Average)) //
562-
);
530+
return exclusiveRuleList( //
531+
rule(matchParams(1, 2, 60, 75, 76, paramRange(129, 135), 138, 152, 155, 157, 203, 246, 247, 248, 157,
532+
260290),
533+
pointInTime()),
534+
rule(matchParams(235100, paramRange(235129, 235133), 235135, 235138, 235152, 235155, 235157, 235203, 235246,
535+
263107),
536+
timeRange(TimeRangeType::SinceLastPostProcessingStep, TOSP::Average)));
563537
});
564538
}
565539

@@ -589,29 +563,14 @@ auto paramPTRules() {
589563
);
590564
}
591565

592-
auto paramPTRulesSH() {
593-
return exclusiveRuleList( //
594-
rule(matchParams(53, 54, 131, 132, 133, 138, 155), //
595-
pointInTime(), //
596-
typeOfLevel(TOL::Theta)) //
597-
);
598-
}
599566

600567
//-----------------------------------------------------------------------------
601568
// PV
602569
//-----------------------------------------------------------------------------
603570

604571
auto paramPVRules() {
605-
return exclusiveRuleList( //
606-
rule(matchParams(3, 54, 129, 131, 132, 133, 203), //
607-
pointInTime(), //
608-
typeOfLevel(TOL::PotentialVorticity)) //
609-
);
610-
}
611-
612-
auto paramPVRulesSH() {
613572
return exclusiveRuleList( //
614-
rule(matchParams(3, 54, 129), //
573+
rule(matchParams(3, 54, 129, 131, 132, 133, 203), //
615574
pointInTime(), //
616575
typeOfLevel(TOL::PotentialVorticity)), //
617576
rule(matchParams(235098, 235269), //
@@ -678,17 +637,8 @@ auto paramRules() {
678637
chainedRuleList(rule(matchLevType(dm::LevType::PL)), paramPLRules()), //
679638
chainedRuleList(rule(matchLevType(dm::LevType::PT)), paramPTRules()), //
680639
chainedRuleList(rule(matchLevType(dm::LevType::PV)), paramPVRules()), //
681-
chainedRuleList(rule(matchLevType(dm::LevType::SOL)), paramSOLRules()) //
682-
);
683-
}
684-
685-
686-
auto paramRulesSH() {
687-
return exclusiveRuleList( //
688-
chainedRuleList(rule(matchLevType(dm::LevType::ML)), paramMLRulesSH()), //
689-
chainedRuleList(rule(matchLevType(dm::LevType::PL)), paramPLRulesSH()), //
690-
chainedRuleList(rule(matchLevType(dm::LevType::PT)), paramPTRulesSH()), //
691-
chainedRuleList(rule(matchLevType(dm::LevType::PV)), paramPVRulesSH()) //
640+
chainedRuleList(rule(matchLevType(dm::LevType::SOL)), paramSOLRules()), //
641+
chainedRuleList(rule(matchLevType(dm::LevType::AL)), paramAlRules()) //
692642
);
693643
}
694644

@@ -697,37 +647,15 @@ auto paramRulesSH() {
697647
// Big rule tree...
698648
//-----------------------------------------------------------------------------
699649

700-
const ExclusiveRuleList& allRules() {
701-
static auto all_ = exclusiveRuleList(
702-
// Branch for grids
703-
chainedRuleList( //
704-
rule(all(Has{dm::GRID}, NoneOf{dm::LEVTYPE, {dm::LevType::AL}})), //
705-
gridRules(), //
706-
localSectionRules(), //
707-
processTypesRules(), //
708-
paramRules(), //
709-
packingRules() //
710-
),
711-
712-
// Branch for spherical harmonics
713-
chainedRuleList( //
714-
rule(all(Has{dm::TRUNCATION}, NoneOf{dm::LEVTYPE, {dm::LevType::AL}})), //
715-
gridRuleSH(), //
716-
localSectionRules(), //
717-
processTypesRules(), //
718-
paramRulesSH(), //
719-
packingRulesSH() //
720-
),
721-
722-
// Branch for abstract level
723-
chainedRuleList( //
724-
rule(matchLevType(dm::LevType::AL)), //
725-
gridRules(), //
726-
localSectionRules(), //
727-
processTypesRulesAl(), //
728-
paramAlRules(), //
729-
packingRules() //
730-
));
650+
const ChainedRuleList& allRules() {
651+
static auto all_ = chainedRuleList( //
652+
gridRules(), //
653+
localSectionRules(), //
654+
processTypesRules(), //
655+
paramRules(), //
656+
packingRules() //
657+
);
658+
731659
return all_;
732660
}
733661

src/multio/mars2grib/Rules.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
namespace multio::mars2grib::rules {
1919
using namespace rules;
2020

21-
const ExclusiveRuleList& allRules();
21+
const ChainedRuleList& allRules();
2222

2323
SectionsConf buildEncoderConf(const dm::FullMarsRecord&);
2424

0 commit comments

Comments
 (0)