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
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ constexpr bool needLevel() {
Variant == LevelType::Hybrid || Variant == LevelType::IsobaricInHpa ||
Variant == LevelType::IsobaricInPa || Variant == LevelType::Isothermal ||
Variant == LevelType::PotentialVorticity || Variant == LevelType::Theta ||
Variant == LevelType::OceanModel) {
Variant == LevelType::OceanModel || Variant == LevelType::FlightLevel) {
return true;
}
else {
Expand Down
29 changes: 15 additions & 14 deletions src/metkit/mars2grib/backend/concepts/level/levelEnum.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ enum class LevelType : std::size_t {
HeightAboveSeaAt2M,
HeightAboveGroundAt10M,
HeightAboveGroundAt2M,
FlightLevel,
Default
};

Expand All @@ -145,20 +146,19 @@ enum class LevelType : std::size_t {
/// The order of this list must match the intended iteration order
/// for registry construction and diagnostics.
///
using LevelList =
ValueList<LevelType::Surface, LevelType::EntireAtmosphere, LevelType::EntireLake, LevelType::CloudBase,
LevelType::Tropopause, LevelType::NominalTop, LevelType::MostUnstableParcel, LevelType::MixedLayerParcel,
LevelType::Isothermal, LevelType::IsobaricInPa, LevelType::IsobaricInHpa, LevelType::LowCloudLayer,
LevelType::MediumCloudLayer, LevelType::HighCloudLayer, LevelType::MeanSea, LevelType::HeightAboveSea,
LevelType::HeightAboveGround, LevelType::Hybrid, LevelType::Theta, LevelType::PotentialVorticity,
LevelType::SnowLayer, LevelType::SoilLayer, LevelType::SeaIceLayer, LevelType::OceanSurface,
LevelType::DepthBelowSeaLayer, LevelType::OceanSurfaceToBottom, LevelType::LakeBottom,
LevelType::MixingLayer, LevelType::OceanModel, LevelType::OceanModelLayer,
LevelType::MixedLayerDepthByDensity, LevelType::MixedLayerDepthByTemperature,
LevelType::SnowLayerOverIceOnWater, LevelType::IceTopOnWater, LevelType::IceLayerOnWater,
LevelType::EntireMeltPond, LevelType::WaterSurfaceToIsothermalOceanLayer, LevelType::AbstractSingleLevel,
LevelType::AbstractMultipleLevel, LevelType::HeightAboveSeaAt10M, LevelType::HeightAboveSeaAt2M,
LevelType::HeightAboveGroundAt10M, LevelType::HeightAboveGroundAt2M, LevelType::Default>;
using LevelList = ValueList<
LevelType::Surface, LevelType::EntireAtmosphere, LevelType::EntireLake, LevelType::CloudBase, LevelType::Tropopause,
LevelType::NominalTop, LevelType::MostUnstableParcel, LevelType::MixedLayerParcel, LevelType::Isothermal,
LevelType::IsobaricInPa, LevelType::IsobaricInHpa, LevelType::LowCloudLayer, LevelType::MediumCloudLayer,
LevelType::HighCloudLayer, LevelType::MeanSea, LevelType::HeightAboveSea, LevelType::HeightAboveGround,
LevelType::Hybrid, LevelType::Theta, LevelType::PotentialVorticity, LevelType::SnowLayer, LevelType::SoilLayer,
LevelType::SeaIceLayer, LevelType::OceanSurface, LevelType::DepthBelowSeaLayer, LevelType::OceanSurfaceToBottom,
LevelType::LakeBottom, LevelType::MixingLayer, LevelType::OceanModel, LevelType::OceanModelLayer,
LevelType::MixedLayerDepthByDensity, LevelType::MixedLayerDepthByTemperature, LevelType::SnowLayerOverIceOnWater,
LevelType::IceTopOnWater, LevelType::IceLayerOnWater, LevelType::EntireMeltPond,
LevelType::WaterSurfaceToIsothermalOceanLayer, LevelType::AbstractSingleLevel, LevelType::AbstractMultipleLevel,
LevelType::HeightAboveSeaAt10M, LevelType::HeightAboveSeaAt2M, LevelType::HeightAboveGroundAt10M,
LevelType::HeightAboveGroundAt2M, LevelType::FlightLevel, LevelType::Default>;


///
Expand Down Expand Up @@ -231,6 +231,7 @@ DEF(LevelType::HeightAboveSeaAt10M, "heightAboveSeaAt10m");
DEF(LevelType::HeightAboveSeaAt2M, "heightAboveSeaAt2m");
DEF(LevelType::HeightAboveGroundAt10M, "heightAboveGroundAt10m");
DEF(LevelType::HeightAboveGroundAt2M, "heightAboveGroundAt2m");
DEF(LevelType::FlightLevel, "flightLevel");
DEF(LevelType::Default, "default");

#undef DEF
Expand Down
15 changes: 15 additions & 0 deletions src/metkit/mars2grib/backend/concepts/level/levelMatcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,18 @@ inline std::size_t matchPL(const long param, const long level) {
"No mapping exists for param \"" + std::to_string(param) + "\" on levtype PL", Here());
}

inline std::size_t matchFL(const long param) {
using metkit::mars2grib::util::param_matcher::matchAny;
using metkit::mars2grib::util::param_matcher::range;

if (matchAny(param, 260290)) {
return static_cast<std::size_t>(LevelType::FlightLevel);
}

throw utils::exceptions::Mars2GribMatcherException(
"No mapping exists for param \"" + std::to_string(param) + "\" on levtype FL", Here());
}

inline std::size_t matchPT(const long param) {
using metkit::mars2grib::util::param_matcher::matchAny;
using metkit::mars2grib::util::param_matcher::range;
Expand Down Expand Up @@ -332,6 +344,9 @@ std::size_t levelMatcher(const MarsDict_t& mars, const OptDict_t& opt) {
const auto level = get_or_throw<long>(mars, "levelist");
return impl::matchPL(param, level);
}
if (levtype == "fl") {
return impl::matchFL(param);
}
if (levtype == "pt") {
return impl::matchPT(param);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,10 +118,10 @@ tables::SignificanceOfReferenceTime resolve_SignificanceOfReferenceTime_or_throw
constexpr std::array<std::string_view, 17> analysisTypes = {
{"an", "ia", "oi", "3v", "3g", "4g", "ea", "pa", "tpa", "ga", "gai", "ai", "af", "ab", "oai", "ga", "gai"}};

constexpr std::array<std::string_view, 33> forecastTypes = {
{"fc", "cf", "pf", "cm", "fp", "em", "ep", "es", "fa", "efi", "efic",
"bf", "cd", "wem", "wes", "cr", "ses", "taem", "taes", "sg", "sf", "if",
"fcmean", "fcmax", "fcmin", "fcstdev", "ssd", "tf", "bf", "cd", "hcmean", "s3", "si"}};
constexpr std::array<std::string_view, 35> forecastTypes = {
{"fc", "cf", "pf", "cm", "fp", "em", "ep", "es", "fa", "efi", "efic", "bf",
"cd", "wem", "wes", "cr", "ses", "taem", "taes", "sg", "sf", "if", "fcmean", "fcmax",
"fcmin", "fcstdev", "ssd", "tf", "bf", "cd", "hcmean", "s3", "si", "gbf", "gwt"}};

constexpr std::array<std::string_view, 4> startOfDataAssimilationTypes = {{"4i", "4v", "me", "eme"}};

Expand Down
Loading