diff --git a/definitions/mars/grib.mmsf.an.def b/definitions/mars/grib.mmsf.an.def new file mode 100644 index 000000000..0a489319c --- /dev/null +++ b/definitions/mars/grib.mmsf.an.def @@ -0,0 +1,23 @@ +#no step in type an +unalias mars.step; + +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } +if (class is "c3") { alias mars.system = systemNumber; } +if (class is "ci") { alias mars.system = systemNumber; } +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; + +if (!(class is "gw")) { # ECC-1448 + alias mars.origin = centre; +} + +# See ECC-624 +if (centre == 80 && subCentre == 98 && class is "c3") { + constant cnmc_cmcc = 'cmcc'; + alias mars.origin = cnmc_cmcc; +} + +if (class is "ci") { unalias mars.method; } + diff --git a/definitions/mars/grib.oper.efi.def b/definitions/mars/grib.oper.efi.def new file mode 100644 index 000000000..a4cef5d68 --- /dev/null +++ b/definitions/mars/grib.oper.efi.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib.oper.em.def b/definitions/mars/grib.oper.em.def new file mode 100644 index 000000000..a4cef5d68 --- /dev/null +++ b/definitions/mars/grib.oper.em.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib.oper.es.def b/definitions/mars/grib.oper.es.def new file mode 100644 index 000000000..a4cef5d68 --- /dev/null +++ b/definitions/mars/grib.oper.es.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib.oper.pf.def b/definitions/mars/grib.oper.pf.def new file mode 100644 index 000000000..48f64b0d4 --- /dev/null +++ b/definitions/mars/grib.oper.pf.def @@ -0,0 +1,7 @@ +if (levtype is "o2d" || levtype is "o3d") { + alias mars.step = stepRange; +} else { + alias mars.step = endStep; +} + +alias mars.number = perturbationNumber; \ No newline at end of file diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 26592f16c..0c915abeb 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -145,6 +145,7 @@ if( HAVE_BUILD_TOOLS ) grib_ecc-1708 grib_ecc-1691 grib_ecc-1766 + grib_ecc-1829 bufr_ecc-1028 bufr_ecc-1195 bufr_ecc-1259 diff --git a/tests/grib_ecc-1829.sh b/tests/grib_ecc-1829.sh new file mode 100755 index 000000000..9e075e6b8 --- /dev/null +++ b/tests/grib_ecc-1829.sh @@ -0,0 +1,50 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +REDIRECT=/dev/null + +# ECC-1829: Add MARS support for stream & type combinations required for AIFS ensemble + +label="grib_ecc-1829_test" +temp_grib=temp.$label.grib +mars_sample=temp.$label.mars.grib +sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + +# Setup GRIB2 message with MARS keys +${tools_dir}/grib_set -s setLocalDefinition=1,grib2LocalSectionNumber=1 $sample_grib2 $mars_sample + +# Now set ensemble related keys and check number key is present +${tools_dir}/grib_set -s stream=oper,type=pf,productDefinitionTemplateNumber=1 $mars_sample $temp_grib +grib_check_key_exists $temp_grib mars.number + +# Now set keys and check stepRange is used for mars.step for o2d and o3d fields, and that number is still present +${tools_dir}/grib_set -s stream=oper,type=pf,productDefinitionTemplateNumber=11,param=263101,typeOfLevel=oceanSurface,startStep=0,endStep=6 $mars_sample $temp_grib +grib_check_key_exists $temp_grib mars.number +grib_check_key_equals $temp_grib "step" "0-6" +${tools_dir}/grib_set -s stream=oper,type=pf,productDefinitionTemplateNumber=11,param=263501,typeOfLevel=oceanModel,level=1,startStep=0,endStep=6 $mars_sample $temp_grib +grib_check_key_exists $temp_grib mars.number +grib_check_key_equals $temp_grib "step" "0-6" + +# Now set keys and check stepRange is used for type efi data (just need any template with stat proc keys) +${tools_dir}/grib_set -s stream=oper,type=efi,productDefinitionTemplateNumber=12,startStep=0,endStep=6 $mars_sample $temp_grib +grib_check_key_equals $temp_grib "step" "0-6" + +# Now set keys and check stepRange is used for type em data +${tools_dir}/grib_set -s stream=oper,type=em,productDefinitionTemplateNumber=12,startStep=0,endStep=6 $mars_sample $temp_grib +grib_check_key_equals $temp_grib "step" "0-6" + +# Now set keys and check stepRange is used for type es data +${tools_dir}/grib_set -s stream=oper,type=es,productDefinitionTemplateNumber=12,startStep=0,endStep=6 $mars_sample $temp_grib +grib_check_key_equals $temp_grib "step" "0-6" + +# Clean up +rm -f $temp_grib $mars_sample