Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/multio/tools/utils/distGrib1ToGrib2ProcessFiles.cc
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ FileOutcome processOneFile(int rank, const std::string& file, const grib2MarsMis
case MessageDisposition::SkipInvalidMessage:
case MessageDisposition::SkipDiscipline192:
case MessageDisposition::SkipTimespanNonPositive:
case MessageDisposition::ComplexExclusion:
bumpOutcome(outcome, extractionOutcome.code);
break;
case MessageDisposition::FailToExtract:
Expand Down
20 changes: 19 additions & 1 deletion src/multio/tools/utils/grib2MarsMisc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -465,7 +465,7 @@ namespace extract {

void handlePackingType(metkit::codes::CodesHandle& h, const std::string& packingType, dm::FullMarsRecord& mars) {
const static std::unordered_map<std::string, std::string> packingMap{
{"grid_simple", "simple"}, {"grid_complex", "complex"}, {"spectral_complex", "complex"},
{"grid_simple", "ccsds"}, {"grid_complex", "complex"}, {"spectral_complex", "complex"},
{"grid_ccsds", "ccsds"}, {"grid_ieee", "ccsds"}, {"grid_second_order", "ccsds"}};

const auto packingTypeVal = packingMap.find(packingType);
Expand Down Expand Up @@ -911,6 +911,12 @@ MessageDisposition classifyTimespanNonPositive(const TimeSpanEqualToZeroHandling
return MessageDisposition::FailToExtract;
}

MessageDisposition classifyComplexExclusion() {
return MessageDisposition::ComplexExclusion;
}



ExtractionOutcome makeOutcome(MessageDisposition disposition, ExtractionOutcomeCode code, std::string reason,
std::string detail = {}) {
return ExtractionOutcome{disposition, code, std::move(reason), std::move(detail)};
Expand Down Expand Up @@ -1222,6 +1228,18 @@ Grib2MarsMiscResult grib2MarsMisc(const eckit::message::Message& msg, const Grib
std::string{"timespan="} + std::to_string(marsConfig.getLong("timespan"))));
}


if (marsConfig.has("param") && marsConfig.has("levtype") && marsConfig.has("levelist") ) {
if ( marsConfig.getLong("param") == 152 && marsConfig.getString("levtype") == "ml" && marsConfig.getLong("levelist") == 100000 ) {
const auto disposition = classifyComplexExclusion();
const auto code = (disposition == MessageDisposition::ComplexExclusion)
? ExtractionOutcomeCode::ExtractFailedComplexExclusion
: ExtractionOutcomeCode::ExtractFailedUnknownException;
return makeResult(makeOutcome(disposition, code, "complex-exclusion",
std::string{"param="} + std::to_string(marsConfig.getLong("param"))));
}
}

return makeResult(
makeOutcome(MessageDisposition::Encode, ExtractionOutcomeCode::ReadyToEncode, "ready-to-encode"),
ExtractedMsg{marsConfig, miscConfig, std::move(values)});
Expand Down
2 changes: 2 additions & 0 deletions src/multio/tools/utils/grib2MarsMisc.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ enum class MessageDisposition
FailToExtract,
FailToEncode,
FailToArchive,
ComplexExclusion,
};

enum class ExtractionOutcomeCode : std::uint8_t
Expand Down Expand Up @@ -126,6 +127,7 @@ enum class ExtractionOutcomeCode : std::uint8_t
EncodeFailedMars2Grib,
ArchiveFailedSinkWrite,
ExtractFailedUnknownException,
ExtractFailedComplexExclusion,
};

struct ExtractionOutcome {
Expand Down
Loading