From b29afb7b989507238bcbbc306f8ba7533210d477 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 14 Jan 2022 13:32:18 +0000 Subject: [PATCH 01/11] ECC-1329: GRIB: Cannot convert runoff (paramId=205) --- definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def | 3 +++ 1 file changed, 3 insertions(+) diff --git a/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def b/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def index 28115c3aa..4ddc95f31 100644 --- a/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def +++ b/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def @@ -26,3 +26,6 @@ # sund "accum" = {indicatorOfParameter=189;gribTablesVersionNo=128;centre=98;} + +# runoff +"accum" = {indicatorOfParameter=205;gribTablesVersionNo=128;centre=98;} From 67b0097d1125ae6a22973251aa476ce7cb23e9ed Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 14 Jan 2022 14:00:48 +0000 Subject: [PATCH 02/11] ECC-1329: Add test --- tests/grib1to2.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/grib1to2.sh b/tests/grib1to2.sh index 5f98013a4..2c28016c3 100755 --- a/tests/grib1to2.sh +++ b/tests/grib1to2.sh @@ -91,6 +91,18 @@ grib_check_key_equals $sample_g1 shapeOfTheEarth 0 grib_check_key_equals $output shapeOfTheEarth 0 +echo "ECC-1329: GRIB: Cannot convert runoff (paramId=205)" +# -------------------------------------------------------- +temp1="temp1.grib1to2.grib1" +temp2="temp2.grib1to2.grib2" +${tools_dir}/grib_set -s paramId=205,P1=240,marsType=fc $sample_g1 $temp1 +${tools_dir}/grib_set -s edition=2 $temp1 $temp2 +grib_check_key_equals $temp2 discipline,stepType,shortName,paramId '2 accum ro 205' +# Fix the stepRange too - TODO +${tools_dir}/grib_set -s edition=2,startStep=0 $temp1 $temp2 +grib_check_key_equals $temp2 stepType,stepRange 'accum 0-240' +rm -f $temp1 $temp2 + rm -f $output #sed "s:toolsdir:${tools_dir}/:" ${tools_dir}/grib1to2.txt > ${tools_dir}/grib1to2.test From 346c12879b2b14d4cd187a1959e73a745d4b7111 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 9 Feb 2022 11:26:33 +0000 Subject: [PATCH 03/11] Hotfix 2.24.3: ECC-1339, ECC-1340, ECC-1332 --- .appveyor.yml | 2 +- CMakeLists.txt | 2 +- definitions/grib1/data.grid_ieee.def | 21 ++++---- definitions/grib2/marsLevtypeConcept.def | 2 + src/grib_accessor_class_data_apply_bitmap.c | 26 +++++----- ...ib_accessor_class_data_g1complex_packing.c | 13 ++--- ...rib_accessor_class_data_g1simple_packing.c | 6 ++- ...rib_accessor_class_data_g2simple_packing.c | 17 +++++- tests/CMakeLists.txt | 4 +- tests/Makefile.am | 2 +- tests/grib_ecc-1319.sh | 17 ++++++ tests/{ieee.c => grib_ieee.c} | 0 tests/{ieee.sh => grib_ieee.sh} | 52 +++++++++++++++---- 13 files changed, 115 insertions(+), 49 deletions(-) rename tests/{ieee.c => grib_ieee.c} (100%) rename tests/{ieee.sh => grib_ieee.sh} (72%) diff --git a/.appveyor.yml b/.appveyor.yml index 3d9e7bc70..ba5558ca5 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -2,7 +2,7 @@ # general configuration # #---------------------------------# -version: 2.24.2-{build}-{branch} +version: 2.24.3-{build}-{branch} branches: only: diff --git a/CMakeLists.txt b/CMakeLists.txt index 375c0d954..c0dc156d9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ cmake_minimum_required( VERSION 3.12 FATAL_ERROR ) find_package( ecbuild 3.4 REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../ecbuild) # Initialise project -project( eccodes VERSION 2.24.2 LANGUAGES C ) +project( eccodes VERSION 2.24.3 LANGUAGES C ) ############################################################################### # system checks needed for eccodes_config.h and some options like MEMFS diff --git a/definitions/grib1/data.grid_ieee.def b/definitions/grib1/data.grid_ieee.def index be40b7ea5..3b9020394 100644 --- a/definitions/grib1/data.grid_ieee.def +++ b/definitions/grib1/data.grid_ieee.def @@ -13,28 +13,25 @@ position offsetBeforeData; if( bitmapPresent || !GDSPresent ) { # For grib1 -> grib2 constant bitMapIndicator = 0; - meta codedValues data_raw_packing( + meta codedValues data_raw_packing( section4Length, offsetBeforeData, offsetSection4, - numberOfCodedValues, - precision - ); + numberOfValues, + precision); meta values data_apply_bitmap(codedValues, bitmap,missingValue,binaryScaleFactor) : dump; - alias data.packedValues = codedValues; + alias data.packedValues = codedValues; } else { - # For grib1 -> grib2 - constant bitMapIndicator = 255; - - meta values data_raw_packing( + # For grib1 -> grib2 + constant bitMapIndicator = 255; + meta values data_raw_packing( section4Length, offsetBeforeData, offsetSection4, numberOfCodedValues, - precision - ); - alias data.packedValues = values; + precision); + alias data.packedValues = values; } meta numberOfCodedValues number_of_values_data_raw_packing(values,precision); diff --git a/definitions/grib2/marsLevtypeConcept.def b/definitions/grib2/marsLevtypeConcept.def index 67b33b75b..3cbf0de85 100644 --- a/definitions/grib2/marsLevtypeConcept.def +++ b/definitions/grib2/marsLevtypeConcept.def @@ -44,8 +44,10 @@ 'o2d' = {typeOfFirstFixedSurface=170; typeOfSecondFixedSurface=255;} 'o2d' = {typeOfFirstFixedSurface=171; typeOfSecondFixedSurface=255;} 'o2d' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=255; discipline=1;} 'o2d' = {typeOfFirstFixedSurface=175; typeOfSecondFixedSurface=255;} 'o2d' = {typeOfFirstFixedSurface=176; typeOfSecondFixedSurface=255;} 'o2d' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=176;} +'sfc' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=176; discipline=1;} 'o2d' = {typeOfFirstFixedSurface=175; typeOfSecondFixedSurface=176;} 'sfc' = {typeOfFirstFixedSurface=177; typeOfSecondFixedSurface=255;} diff --git a/src/grib_accessor_class_data_apply_bitmap.c b/src/grib_accessor_class_data_apply_bitmap.c index 3b6bb4192..307ae0831 100644 --- a/src/grib_accessor_class_data_apply_bitmap.c +++ b/src/grib_accessor_class_data_apply_bitmap.c @@ -314,32 +314,35 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) long i = 0; long j = 0; double missing_value = 0; + grib_handle* hand = grib_handle_of_accessor(a); + grib_context* ctxt = a->context; if (*len == 0) return GRIB_NO_VALUES; - if (!grib_find_accessor(grib_handle_of_accessor(a), self->bitmap)) { - err = grib_set_double_array_internal(grib_handle_of_accessor(a), self->coded_values, val, *len); + if (!grib_find_accessor(hand, self->bitmap)) { /*printf("SETTING TOTAL number_of_data_points %s %ld\n",self->number_of_data_points,*len);*/ if (self->number_of_data_points) - grib_set_long_internal(grib_handle_of_accessor(a), self->number_of_data_points, *len); + grib_set_long_internal(hand, self->number_of_data_points, *len); + + err = grib_set_double_array_internal(hand, self->coded_values, val, *len); return err; } - if ((err = grib_get_double_internal(grib_handle_of_accessor(a), self->missing_value, &missing_value)) != GRIB_SUCCESS) + if ((err = grib_get_double_internal(hand, self->missing_value, &missing_value)) != GRIB_SUCCESS) return err; - if ((err = grib_set_double_array_internal(grib_handle_of_accessor(a), self->bitmap, val, bmaplen)) != GRIB_SUCCESS) + if ((err = grib_set_double_array_internal(hand, self->bitmap, val, bmaplen)) != GRIB_SUCCESS) return err; coded_n_vals = *len; if (coded_n_vals < 1) { - err = grib_set_double_array_internal(grib_handle_of_accessor(a), self->coded_values, NULL, 0); + err = grib_set_double_array_internal(hand, self->coded_values, NULL, 0); return err; } - coded_vals = (double*)grib_context_malloc_clear(a->context, coded_n_vals * sizeof(double)); + coded_vals = (double*)grib_context_malloc_clear(ctxt, coded_n_vals * sizeof(double)); if (!coded_vals) return GRIB_OUT_OF_MEMORY; @@ -349,16 +352,15 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) } } - err = grib_set_double_array_internal(grib_handle_of_accessor(a), self->coded_values, coded_vals, j); + err = grib_set_double_array_internal(hand, self->coded_values, coded_vals, j); + grib_context_free(ctxt, coded_vals); if (j == 0) { if (self->number_of_values) - err = grib_set_long_internal(grib_handle_of_accessor(a), self->number_of_values, 0); + err = grib_set_long_internal(hand, self->number_of_values, 0); if (self->binary_scale_factor) - err = grib_set_long_internal(grib_handle_of_accessor(a), self->binary_scale_factor, 0); + err = grib_set_long_internal(hand, self->binary_scale_factor, 0); } - grib_context_free(a->context, coded_vals); - return err; } diff --git a/src/grib_accessor_class_data_g1complex_packing.c b/src/grib_accessor_class_data_g1complex_packing.c index 385d5db68..b61344d10 100644 --- a/src/grib_accessor_class_data_g1complex_packing.c +++ b/src/grib_accessor_class_data_g1complex_packing.c @@ -193,18 +193,18 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) long half_byte = 0; long bits_per_value = 0; size_t buflen = 0; - grib_context* c = a->context; - grib_handle* h = grib_handle_of_accessor(a); - char* ieee_packing_s = NULL; - char* packingType_s = NULL; - char* precision_s = NULL; - grib_accessor_class* super = *(a->cclass->super); if (*len == 0) return GRIB_NO_VALUES; +#if 0 + /* TODO: spectral_ieee does not work */ if (c->ieee_packing && self->ieee_packing) { + grib_handle* h = grib_handle_of_accessor(a); + grib_context* c = a->context; + char* packingType_s = NULL; + char* ieee_packing_s = NULL; long precision = c->ieee_packing == 32 ? 1 : 2; size_t lenstr = strlen(self->ieee_packing); @@ -220,6 +220,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) grib_context_free(c, precision_s); return grib_set_double_array(h, "values", val, *len); } +#endif if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_j, &sub_j)) != GRIB_SUCCESS) return ret; diff --git a/src/grib_accessor_class_data_g1simple_packing.c b/src/grib_accessor_class_data_g1simple_packing.c index 0f95d2736..9b92a5da2 100644 --- a/src/grib_accessor_class_data_g1simple_packing.c +++ b/src/grib_accessor_class_data_g1simple_packing.c @@ -243,8 +243,10 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) ieee_packing_s = grib_context_strdup(c, self->ieee_packing); precision_s = grib_context_strdup(c, self->precision); - grib_set_string(h, packingType_s, ieee_packing_s, &lenstr); - grib_set_long(h, precision_s, precision); + if ((ret = grib_set_string(h, packingType_s, ieee_packing_s, &lenstr)) != GRIB_SUCCESS) + return ret; + if ((ret = grib_set_long(h, precision_s, precision)) != GRIB_SUCCESS) + return ret; grib_context_free(c, packingType_s); grib_context_free(c, ieee_packing_s); diff --git a/src/grib_accessor_class_data_g2simple_packing.c b/src/grib_accessor_class_data_g2simple_packing.c index 2f500d4a1..f06f3ec22 100644 --- a/src/grib_accessor_class_data_g2simple_packing.c +++ b/src/grib_accessor_class_data_g2simple_packing.c @@ -182,6 +182,7 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) double units_bias = 0.0; double* val = (double*)cval; int i; + grib_context* c = a->context; if (*len == 0) { grib_buffer_replace(a, NULL, 0, 1, 1); @@ -216,6 +217,19 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) for (i = 0; i < n_vals; i++) val[i] += units_bias; + /* IEEE packing */ + if (c->ieee_packing) { + grib_handle* h = grib_handle_of_accessor(a); + long precision = c->ieee_packing == 32 ? 1 : 2; + size_t lenstr = 10; + if ((ret = grib_set_string(h, "packingType", "grid_ieee", &lenstr)) != GRIB_SUCCESS) + return ret; + if ((ret = grib_set_long(h, "precision", precision)) != GRIB_SUCCESS) + return ret; + + return grib_set_double_array(h, "values", val, *len); + } + if (super != grib_accessor_class_data_g2simple_packing) { /* Normal case: parent not same as me! */ ret = super->pack_double(a, val, len); @@ -244,8 +258,7 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->bits_per_value, &bits_per_value)) != - GRIB_SUCCESS) + if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) return ret; if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 12ec558c2..80767daea 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -37,7 +37,7 @@ list(APPEND test_bins extract_offsets bufr_check_descriptors grib_sh_ieee64 - ieee + grib_ieee grib_set_bytes grib_packing_order grib_sh_imag @@ -189,7 +189,7 @@ if( HAVE_BUILD_TOOLS ) metar_dump metar_compare bufr_set - ieee + grib_ieee grib_sh_ieee64 grib_optimize_scaling grib_optimize_scaling_sh diff --git a/tests/Makefile.am b/tests/Makefile.am index 0b7865b97..cbf17a385 100755 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -42,7 +42,7 @@ TESTS = definitions.sh \ gts_get.sh \ metar_ls.sh \ metar_dump.sh \ - ieee.sh \ + grib_ieee.sh \ grib1to2.sh \ grib1to3.sh \ unit_tests.sh \ diff --git a/tests/grib_ecc-1319.sh b/tests/grib_ecc-1319.sh index 8c1a57f5a..1f0b7e582 100755 --- a/tests/grib_ecc-1319.sh +++ b/tests/grib_ecc-1319.sh @@ -63,5 +63,22 @@ for lt in $lev_types; do check_levtype $ltype done +# Also check specific cases +# -------------------------- +# Sea ice surface temperature +${tools_dir}/grib_set -s paramId=260649 $sample_grib2 $temp +grib_check_key_equals $temp levtype o2d +# Snow on ice total depth +${tools_dir}/grib_set -s paramId=260650 $sample_grib2 $temp +grib_check_key_equals $temp levtype o2d + +# Lake ice surface temperature +${tools_dir}/grib_set -s paramId=228013 $sample_grib2 $temp +grib_check_key_equals $temp levtype sfc +# Lake ice total depth +${tools_dir}/grib_set -s paramId=228014 $sample_grib2 $temp +grib_check_key_equals $temp levtype sfc + + rm -f $temp diff --git a/tests/ieee.c b/tests/grib_ieee.c similarity index 100% rename from tests/ieee.c rename to tests/grib_ieee.c diff --git a/tests/ieee.sh b/tests/grib_ieee.sh similarity index 72% rename from tests/ieee.sh rename to tests/grib_ieee.sh index 77962d844..82f080e37 100755 --- a/tests/ieee.sh +++ b/tests/grib_ieee.sh @@ -10,7 +10,9 @@ . ./include.sh +# This file does not have a bitmap infile=${data_dir}/regular_latlon_surface.grib1 + shdata=${data_dir}/spherical_model_level.grib1 suff=_ieee_test.grib1 outsimple=simple$suff @@ -34,32 +36,32 @@ cat > r.filter < $outsimple.txt diff $outsimple.txt ${data_dir}/ieee_test.good ${tools_dir}/grib_set -r -s packingType=grid_ieee $outsimple $out32 -${tools_dir}/grib_filter r.filter $out32 > $out32.txt +${tools_dir}/grib_filter r.filter $out32 > $out32.txt diff $out32.txt ${data_dir}/ieee_test.good GRIB_IEEE_PACKING=32 export GRIB_IEEE_PACKING -${tools_dir}/grib_filter -o $out32 w.filter $infile -${tools_dir}/grib_filter r.filter $out32 > $out32.txt +${tools_dir}/grib_filter -o $out32 w.filter $infile +${tools_dir}/grib_filter r.filter $out32 > $out32.txt diff $out32.txt ${data_dir}/ieee_test.good grib_check_key_equals $out32 'packingType,precision' 'grid_ieee 1' GRIB_IEEE_PACKING=64 export GRIB_IEEE_PACKING -${tools_dir}/grib_filter -o $out64 w.filter $infile -${tools_dir}/grib_filter r.filter $out64 > $out64.txt +${tools_dir}/grib_filter -o $out64 w.filter $infile +${tools_dir}/grib_filter r.filter $out64 > $out64.txt diff $out64.txt ${data_dir}/ieee_test.good grib_check_key_equals $out64 'packingType,precision' 'grid_ieee 2' rm -f $outsimple $out32 $out64 $out32.txt $out64.txt -rm -f ${data_dir}/$outsimple.txt ${data_dir}/$out32.txt ${data_dir}/$out64.txt +rm -f ${data_dir}/$outsimple.txt ${data_dir}/$out32.txt ${data_dir}/$out64.txt rm -f w.filter $outsimple.txt ${tools_dir}/grib_filter r.filter $shdata > $shdata.txt @@ -97,19 +99,49 @@ stats2=`${tools_dir}/grib_get -M -F%.3f -p min,max,avg $temp` grib_check_key_equals $temp numberOfEffectiveValues,numberOfValues,numberOfMissing '214661 214661 98701' grib_check_key_equals $temp totalLength 899004 +echo "Test ECCODES_GRIB_IEEE_PACKING on GRIB2 with bitmap..." +# ------------------------------------------------------------ +infile=${data_dir}/reduced_latlon_surface.grib2 +grib_check_key_equals $infile bitmapPresent 1 +ECCODES_GRIB_IEEE_PACKING=32 ${tools_dir}/grib_copy -r $infile $temp +grib_check_key_equals $temp packingType grid_ieee +${tools_dir}/grib_compare -c data:n -R all=6e-8 $infile $temp +echo "Test ECCODES_GRIB_IEEE_PACKING on GRIB2 without bitmap..." +# -------------------------------------------------------------- +infile=${data_dir}/regular_latlon_surface.grib2 +grib_check_key_equals $infile bitmapPresent 0 +ECCODES_GRIB_IEEE_PACKING=32 ${tools_dir}/grib_copy -r $infile $temp +grib_check_key_equals $temp packingType grid_ieee +${tools_dir}/grib_compare -c data:n $infile $temp + +#### All combinations: with/without bitmap, grib1/2, 32/64bits +editions="1 2" +precisions="32 64" +inputs="reduced_latlon_surface.grib regular_latlon_surface.grib" +for edition in $editions; do + for prec in $precisions; do + for input in $inputs; do + infile=${data_dir}/$input$edition + ECCODES_GRIB_IEEE_PACKING=$prec ${tools_dir}/grib_copy -r $infile $temp + grib_check_key_equals $temp packingType grid_ieee + ${tools_dir}/grib_compare -c data:n -R all=6e-8 $infile $temp + done + done +done echo "Test raw packing on GRIB1 with bitmap..." # --------------------------------------------- -# TODO: This test is currently failing -# grib1 with a bitmap -> raw packing infile=${data_dir}/reduced_latlon_surface.grib1 grib_check_key_equals $infile numberOfMissing 98701 ${tools_dir}/grib_set -r -s packingType=grid_ieee $infile $temp ${tools_dir}/grib_get -p numberOfEffectiveValues,numberOfValues,numberOfMissing $temp stats1=`${tools_dir}/grib_get -M -F%.3f -p min,max,avg $infile` stats2=`${tools_dir}/grib_get -M -F%.3f -p min,max,avg $temp` -# [ "$stats1" = "$stats2" ] +[ "$stats1" = "$stats2" ] +ECCODES_GRIB_IEEE_PACKING=32 ${tools_dir}/grib_copy -r $infile $temp +stats2=`${tools_dir}/grib_get -M -F%.3f -p min,max,avg $temp` +[ "$stats1" = "$stats2" ] echo "Test changing precision ..." From 3f660a68bbe3e2ccfbde937d9cb2795c76500d62 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 16 Mar 2022 12:34:41 +0000 Subject: [PATCH 04/11] Bump up version --- .appveyor.yml | 2 +- CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 638dece5e..b7da354fe 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -2,7 +2,7 @@ # general configuration # #---------------------------------# -version: 2.25.0-{build}-{branch} +version: 2.25.1-{build}-{branch} branches: only: diff --git a/CMakeLists.txt b/CMakeLists.txt index 726da23ee..92de71b2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ cmake_minimum_required( VERSION 3.12 FATAL_ERROR ) find_package( ecbuild 3.4 REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../ecbuild) # Initialise project -project( eccodes VERSION 2.25.0 LANGUAGES C ) +project( eccodes VERSION 2.25.1 LANGUAGES C ) ############################################################################### # system checks needed for eccodes_config.h and some options like MEMFS From d741fb18751f44052105cfc53bbe49b889e87cae Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 16 Mar 2022 13:03:45 +0000 Subject: [PATCH 05/11] ECC-1370: GRIB2: add the 1.5 metres version of 2t mn2t6 and mx2t6 to pseudocentre S2S --- .../grib2/localConcepts/s2s/cfVarName.def | 85 +++++++++++++------ definitions/grib2/localConcepts/s2s/name.def | 33 +++++++ .../grib2/localConcepts/s2s/paramId.def | 33 +++++++ .../grib2/localConcepts/s2s/shortName.def | 33 +++++++ definitions/grib2/localConcepts/s2s/units.def | 33 +++++++ 5 files changed, 191 insertions(+), 26 deletions(-) diff --git a/definitions/grib2/localConcepts/s2s/cfVarName.def b/definitions/grib2/localConcepts/s2s/cfVarName.def index 399a43830..370f44870 100644 --- a/definitions/grib2/localConcepts/s2s/cfVarName.def +++ b/definitions/grib2/localConcepts/s2s/cfVarName.def @@ -5,6 +5,39 @@ parameterCategory = 2 ; parameterNumber = 0 ; } +#Maximum temperature at 2 metres in the last 6 hours +'mx2t6' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 6 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'mn2t6' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 6 ; + } +#2 metre temperature +'t2m' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + } #2 metre dewpoint temperature 'd2m' = { discipline = 0 ; @@ -27,6 +60,32 @@ scaleFactorOfSecondFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } +#Sea surface practical salinity +'sos' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 160 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Ocean mixed layer thickness defined by sigma theta 0.01 kg/m3 +'mlotst010' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 169 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 1 ; + scaleFactorOfFirstFixedSurface = 2 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } #Sea surface height 'zos' = { discipline = 10 ; @@ -66,32 +125,6 @@ scaleFactorOfSecondFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } -#Sea surface practical salinity -'sos' = { - discipline = 10 ; - parameterCategory = 3 ; - parameterNumber = 3 ; - typeOfFirstFixedSurface = 160 ; - typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = 0 ; - scaleFactorOfFirstFixedSurface = 0 ; - scaledValueOfSecondFixedSurface = missing() ; - scaleFactorOfSecondFixedSurface = missing() ; - typeOfStatisticalProcessing = 0 ; - } -#Ocean mixed layer thickness defined by sigma theta 0.01 kg/m3 -'mlotst010' = { - discipline = 10 ; - parameterCategory = 4 ; - parameterNumber = 14 ; - typeOfFirstFixedSurface = 169 ; - typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = 1 ; - scaleFactorOfFirstFixedSurface = 2 ; - scaledValueOfSecondFixedSurface = missing() ; - scaleFactorOfSecondFixedSurface = missing() ; - typeOfStatisticalProcessing = 0 ; - } #Sea-ice thickness 'sithick' = { discipline = 10 ; diff --git a/definitions/grib2/localConcepts/s2s/name.def b/definitions/grib2/localConcepts/s2s/name.def index c7bf95214..f848a5800 100644 --- a/definitions/grib2/localConcepts/s2s/name.def +++ b/definitions/grib2/localConcepts/s2s/name.def @@ -5,6 +5,39 @@ parameterCategory = 2 ; parameterNumber = 0 ; } +#Maximum temperature at 2 metres in the last 6 hours +'Maximum temperature at 2 metres in the last 6 hours' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 6 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'Minimum temperature at 2 metres in the last 6 hours' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 6 ; + } +#2 metre temperature +'2 metre temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + } #2 metre dewpoint temperature '2 metre dewpoint temperature' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/s2s/paramId.def b/definitions/grib2/localConcepts/s2s/paramId.def index a1a98c391..2571f89c7 100644 --- a/definitions/grib2/localConcepts/s2s/paramId.def +++ b/definitions/grib2/localConcepts/s2s/paramId.def @@ -5,6 +5,39 @@ parameterCategory = 2 ; parameterNumber = 0 ; } +#Maximum temperature at 2 metres in the last 6 hours +'121' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 6 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'122' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 6 ; + } +#2 metre temperature +'167' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + } #2 metre dewpoint temperature '168' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/s2s/shortName.def b/definitions/grib2/localConcepts/s2s/shortName.def index 519e55f29..de1643f06 100644 --- a/definitions/grib2/localConcepts/s2s/shortName.def +++ b/definitions/grib2/localConcepts/s2s/shortName.def @@ -5,6 +5,39 @@ parameterCategory = 2 ; parameterNumber = 0 ; } +#Maximum temperature at 2 metres in the last 6 hours +'mx2t6' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 6 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'mn2t6' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 6 ; + } +#2 metre temperature +'2t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + } #2 metre dewpoint temperature '2d' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/s2s/units.def b/definitions/grib2/localConcepts/s2s/units.def index 6aa3100f0..fc14da967 100644 --- a/definitions/grib2/localConcepts/s2s/units.def +++ b/definitions/grib2/localConcepts/s2s/units.def @@ -5,6 +5,39 @@ parameterCategory = 2 ; parameterNumber = 0 ; } +#Maximum temperature at 2 metres in the last 6 hours +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 6 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 6 ; + } +#2 metre temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + } #2 metre dewpoint temperature 'K' = { discipline = 0 ; From fc03d68bbb09f5da08a915fa9c2e74d75c2ea6d3 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 17 Mar 2022 11:18:29 +0000 Subject: [PATCH 06/11] ECC-1370: Also 2d --- definitions/grib2/localConcepts/s2s/cfVarName.def | 9 +++++++++ definitions/grib2/localConcepts/s2s/name.def | 9 +++++++++ definitions/grib2/localConcepts/s2s/paramId.def | 9 +++++++++ definitions/grib2/localConcepts/s2s/shortName.def | 9 +++++++++ definitions/grib2/localConcepts/s2s/units.def | 9 +++++++++ 5 files changed, 45 insertions(+) diff --git a/definitions/grib2/localConcepts/s2s/cfVarName.def b/definitions/grib2/localConcepts/s2s/cfVarName.def index 370f44870..aac03ffb7 100644 --- a/definitions/grib2/localConcepts/s2s/cfVarName.def +++ b/definitions/grib2/localConcepts/s2s/cfVarName.def @@ -47,6 +47,15 @@ scaledValueOfFirstFixedSurface = 2 ; scaleFactorOfFirstFixedSurface = 0 ; } +#2 metre dewpoint temperature +'d2m' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + } #Mean sea water potential temperature in the upper 300 m 'mswpt300m' = { discipline = 10 ; diff --git a/definitions/grib2/localConcepts/s2s/name.def b/definitions/grib2/localConcepts/s2s/name.def index f848a5800..6d8e9e58a 100644 --- a/definitions/grib2/localConcepts/s2s/name.def +++ b/definitions/grib2/localConcepts/s2s/name.def @@ -47,6 +47,15 @@ scaledValueOfFirstFixedSurface = 2 ; scaleFactorOfFirstFixedSurface = 0 ; } +#2 metre dewpoint temperature +'2 metre dewpoint temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + } #Mean sea water potential temperature in the upper 300 m 'Mean sea water potential temperature in the upper 300 m' = { discipline = 10 ; diff --git a/definitions/grib2/localConcepts/s2s/paramId.def b/definitions/grib2/localConcepts/s2s/paramId.def index 2571f89c7..fba870c2f 100644 --- a/definitions/grib2/localConcepts/s2s/paramId.def +++ b/definitions/grib2/localConcepts/s2s/paramId.def @@ -47,6 +47,15 @@ scaledValueOfFirstFixedSurface = 2 ; scaleFactorOfFirstFixedSurface = 0 ; } +#2 metre dewpoint temperature +'168' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + } #Mean sea water potential temperature in the upper 300 m '151126' = { discipline = 10 ; diff --git a/definitions/grib2/localConcepts/s2s/shortName.def b/definitions/grib2/localConcepts/s2s/shortName.def index de1643f06..d55b41aa3 100644 --- a/definitions/grib2/localConcepts/s2s/shortName.def +++ b/definitions/grib2/localConcepts/s2s/shortName.def @@ -47,6 +47,15 @@ scaledValueOfFirstFixedSurface = 2 ; scaleFactorOfFirstFixedSurface = 0 ; } +#2 metre dewpoint temperature +'2d' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + } #Mean sea water potential temperature in the upper 300 m 'mswpt300m' = { discipline = 10 ; diff --git a/definitions/grib2/localConcepts/s2s/units.def b/definitions/grib2/localConcepts/s2s/units.def index fc14da967..b4587f8f3 100644 --- a/definitions/grib2/localConcepts/s2s/units.def +++ b/definitions/grib2/localConcepts/s2s/units.def @@ -47,6 +47,15 @@ scaledValueOfFirstFixedSurface = 2 ; scaleFactorOfFirstFixedSurface = 0 ; } +#2 metre dewpoint temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; + scaleFactorOfFirstFixedSurface = 1 ; + } #Mean sea water potential temperature in the upper 300 m 'K' = { discipline = 10 ; From d29be5a8ceea88bf8965628538dfa23d153144c7 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Mar 2022 12:21:30 +0000 Subject: [PATCH 07/11] ECC-1371: GRIB2: Fix definitions for CERRA dataset --- .../grib2/localConcepts/uerra/cfVarName.def | 35 +++++++++++++++++++ .../grib2/localConcepts/uerra/name.def | 35 +++++++++++++++++++ .../grib2/localConcepts/uerra/paramId.def | 35 +++++++++++++++++++ .../grib2/localConcepts/uerra/shortName.def | 35 +++++++++++++++++++ .../grib2/localConcepts/uerra/units.def | 35 +++++++++++++++++++ 5 files changed, 175 insertions(+) diff --git a/definitions/grib2/localConcepts/uerra/cfVarName.def b/definitions/grib2/localConcepts/uerra/cfVarName.def index b961d67a1..5b7c9addb 100644 --- a/definitions/grib2/localConcepts/uerra/cfVarName.def +++ b/definitions/grib2/localConcepts/uerra/cfVarName.def @@ -41,6 +41,17 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 1 ; } +#10 metre wind gust since previous post-processing +'fg10' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + } #2 metre temperature 't2m' = { discipline = 0 ; @@ -70,6 +81,18 @@ scaleFactorOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 2 ; } +#Maximum temperature at 2 metres since previous post-processing +'mx2t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 6 ; + } #Minimum temperature at 2 metres since previous post-processing 'mn2t' = { discipline = 0 ; @@ -90,6 +113,18 @@ scaleFactorOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 3 ; } +#Minimum temperature at 2 metres since previous post-processing +'mn2t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 6 ; + } #Total column integrated water vapour 'tciwv' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/uerra/name.def b/definitions/grib2/localConcepts/uerra/name.def index 9a720504b..d6af04ff0 100644 --- a/definitions/grib2/localConcepts/uerra/name.def +++ b/definitions/grib2/localConcepts/uerra/name.def @@ -41,6 +41,17 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 1 ; } +#10 metre wind gust since previous post-processing +'10 metre wind gust since previous post-processing' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + } #2 metre temperature '2 metre temperature' = { discipline = 0 ; @@ -70,6 +81,18 @@ scaleFactorOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 2 ; } +#Maximum temperature at 2 metres since previous post-processing +'Maximum temperature at 2 metres since previous post-processing' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 6 ; + } #Minimum temperature at 2 metres since previous post-processing 'Minimum temperature at 2 metres since previous post-processing' = { discipline = 0 ; @@ -90,6 +113,18 @@ scaleFactorOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 3 ; } +#Minimum temperature at 2 metres since previous post-processing +'Minimum temperature at 2 metres since previous post-processing' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 6 ; + } #Total column integrated water vapour 'Total column integrated water vapour' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/uerra/paramId.def b/definitions/grib2/localConcepts/uerra/paramId.def index b29fc64d6..94355ce36 100644 --- a/definitions/grib2/localConcepts/uerra/paramId.def +++ b/definitions/grib2/localConcepts/uerra/paramId.def @@ -41,6 +41,17 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 1 ; } +#10 metre wind gust since previous post-processing +'49' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + } #2 metre temperature '167' = { discipline = 0 ; @@ -70,6 +81,18 @@ scaleFactorOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 2 ; } +#Maximum temperature at 2 metres since previous post-processing +'201' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 6 ; + } #Minimum temperature at 2 metres since previous post-processing '202' = { discipline = 0 ; @@ -90,6 +113,18 @@ scaleFactorOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 3 ; } +#Minimum temperature at 2 metres since previous post-processing +'202' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 6 ; + } #Total column integrated water vapour '260057' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/uerra/shortName.def b/definitions/grib2/localConcepts/uerra/shortName.def index 0d93f5aab..94e948102 100644 --- a/definitions/grib2/localConcepts/uerra/shortName.def +++ b/definitions/grib2/localConcepts/uerra/shortName.def @@ -41,6 +41,17 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 1 ; } +#10 metre wind gust since previous post-processing +'10fg' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + } #2 metre temperature '2t' = { discipline = 0 ; @@ -70,6 +81,18 @@ scaleFactorOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 2 ; } +#Maximum temperature at 2 metres since previous post-processing +'mx2t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 6 ; + } #Minimum temperature at 2 metres since previous post-processing 'mn2t' = { discipline = 0 ; @@ -90,6 +113,18 @@ scaleFactorOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 3 ; } +#Minimum temperature at 2 metres since previous post-processing +'mn2t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 6 ; + } #Total column integrated water vapour 'tciwv' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/uerra/units.def b/definitions/grib2/localConcepts/uerra/units.def index a2629a2fe..63ab054bd 100644 --- a/definitions/grib2/localConcepts/uerra/units.def +++ b/definitions/grib2/localConcepts/uerra/units.def @@ -41,6 +41,17 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 1 ; } +#10 metre wind gust since previous post-processing +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + } #2 metre temperature 'K' = { discipline = 0 ; @@ -70,6 +81,18 @@ scaleFactorOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 2 ; } +#Maximum temperature at 2 metres since previous post-processing +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 6 ; + } #Minimum temperature at 2 metres since previous post-processing 'K' = { discipline = 0 ; @@ -90,6 +113,18 @@ scaleFactorOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 3 ; } +#Minimum temperature at 2 metres since previous post-processing +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 6 ; + } #Total column integrated water vapour 'kg m**-2' = { discipline = 0 ; From 0fc22dda6381532bdd057b01681efd487c483a96 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Mar 2022 13:56:52 +0000 Subject: [PATCH 08/11] CPack: exclude deprecated stuff --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 92de71b2e..880f5ed20 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -439,8 +439,8 @@ add_subdirectory( ifs_samples ) # must come after samples # ecbuild_dont_pack( DIRS samples DONT_PACK_REGEX "*.grib" ) ecbuild_dont_pack( DIRS - experimental doxygen confluence tests/tests.ecmwf - config m4 examples/F77 + experimental deprecated doxygen confluence tests/tests.ecmwf + config m4 examples/F77 src/deprecated tools/deprecated examples/examples.dev examples/extra examples/deprecated bamboo fortran/fortranCtypes tigge/tools share/eccodes .settings ) #ecbuild_dont_pack( DIRS data/bufr DONT_PACK_REGEX "*.bufr" ) From 1c26d2a4419c644bd77757d85dfe3db8b5c2bfb5 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Mar 2022 15:05:40 +0000 Subject: [PATCH 09/11] ECC-1373: GRIB2: Two CAMS parameters have duplicate encodings --- definitions/grib2/cfVarName.def | 4 ++-- definitions/grib2/name.def | 4 ++-- definitions/grib2/paramId.def | 4 ++-- definitions/grib2/shortName.def | 4 ++-- definitions/grib2/units.def | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index e7b716ae0..d7537b7b5 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -1085,7 +1085,7 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 6 ; - constituentType = 10005 ; + constituentType = 10002 ; typeOfStatisticalProcessing = 1 ; is_chemical = 1 ; } @@ -1409,7 +1409,7 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 7 ; - constituentType = 10005 ; + constituentType = 10002 ; typeOfStatisticalProcessing = 1 ; is_chemical = 1 ; } diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index bac3d88a9..b20646216 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -1085,7 +1085,7 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 6 ; - constituentType = 10005 ; + constituentType = 10002 ; typeOfStatisticalProcessing = 1 ; is_chemical = 1 ; } @@ -1409,7 +1409,7 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 7 ; - constituentType = 10005 ; + constituentType = 10002 ; typeOfStatisticalProcessing = 1 ; is_chemical = 1 ; } diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index c54b229e8..488ccd426 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -1085,7 +1085,7 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 6 ; - constituentType = 10005 ; + constituentType = 10002 ; typeOfStatisticalProcessing = 1 ; is_chemical = 1 ; } @@ -1409,7 +1409,7 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 7 ; - constituentType = 10005 ; + constituentType = 10002 ; typeOfStatisticalProcessing = 1 ; is_chemical = 1 ; } diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index c7c8466dd..8e434fdc8 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -1085,7 +1085,7 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 6 ; - constituentType = 10005 ; + constituentType = 10002 ; typeOfStatisticalProcessing = 1 ; is_chemical = 1 ; } @@ -1409,7 +1409,7 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 7 ; - constituentType = 10005 ; + constituentType = 10002 ; typeOfStatisticalProcessing = 1 ; is_chemical = 1 ; } diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index f5511067b..56c4c1c0d 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -1085,7 +1085,7 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 6 ; - constituentType = 10005 ; + constituentType = 10002 ; typeOfStatisticalProcessing = 1 ; is_chemical = 1 ; } @@ -1409,7 +1409,7 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 7 ; - constituentType = 10005 ; + constituentType = 10002 ; typeOfStatisticalProcessing = 1 ; is_chemical = 1 ; } From acff4739b2dc6396e90dbb94d00b36e9f5fc7fe3 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 6 Apr 2022 19:10:33 +0100 Subject: [PATCH 10/11] Bump up version --- .appveyor.yml | 2 +- CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index b7da354fe..dc9ae21cb 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -2,7 +2,7 @@ # general configuration # #---------------------------------# -version: 2.25.1-{build}-{branch} +version: 2.25.2-{build}-{branch} branches: only: diff --git a/CMakeLists.txt b/CMakeLists.txt index 880f5ed20..30221055b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ cmake_minimum_required( VERSION 3.12 FATAL_ERROR ) find_package( ecbuild 3.4 REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../ecbuild) # Initialise project -project( eccodes VERSION 2.25.1 LANGUAGES C ) +project( eccodes VERSION 2.25.2 LANGUAGES C ) ############################################################################### # system checks needed for eccodes_config.h and some options like MEMFS From 75ae84704b96166912f7fa302cf99bf149936be7 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 6 Apr 2022 20:39:46 +0100 Subject: [PATCH 11/11] ECC-1379: GRIB: Provide GRIB2 IFS samples with CCSDS packing (for grid-point data) --- ifs_samples/CMakeLists.txt | 5 +---- ifs_samples/grib1_mlgrib2_ccsds/CMakeLists.txt | 13 +++++++++++++ ifs_samples/grib1_mlgrib2_ccsds/gg_ml.tmpl | Bin 0 -> 19659 bytes ifs_samples/grib1_mlgrib2_ccsds/gg_sfc.tmpl | Bin 0 -> 26860 bytes .../grib1_mlgrib2_ccsds/gg_sfc_grib2.tmpl | Bin 0 -> 19887 bytes ifs_samples/grib1_mlgrib2_ccsds/sh_ml.tmpl | Bin 0 -> 10146 bytes ifs_samples/grib1_mlgrib2_ccsds/sh_sfc.tmpl | Bin 0 -> 9358 bytes 7 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 ifs_samples/grib1_mlgrib2_ccsds/CMakeLists.txt create mode 100644 ifs_samples/grib1_mlgrib2_ccsds/gg_ml.tmpl create mode 100644 ifs_samples/grib1_mlgrib2_ccsds/gg_sfc.tmpl create mode 100644 ifs_samples/grib1_mlgrib2_ccsds/gg_sfc_grib2.tmpl create mode 100644 ifs_samples/grib1_mlgrib2_ccsds/sh_ml.tmpl create mode 100644 ifs_samples/grib1_mlgrib2_ccsds/sh_sfc.tmpl diff --git a/ifs_samples/CMakeLists.txt b/ifs_samples/CMakeLists.txt index 1e25c2fd4..b8adeac06 100644 --- a/ifs_samples/CMakeLists.txt +++ b/ifs_samples/CMakeLists.txt @@ -20,10 +20,7 @@ function( install_samples samples destination_install destination_build ) endfunction() add_subdirectory( grib1 ) - add_subdirectory( grib1_mlgrib2 ) - # add_subdirectory( grib1_mlgrib2_ieee32 ) - add_subdirectory( grib1_mlgrib2_ieee64 ) - +add_subdirectory( grib1_mlgrib2_ccsds ) diff --git a/ifs_samples/grib1_mlgrib2_ccsds/CMakeLists.txt b/ifs_samples/grib1_mlgrib2_ccsds/CMakeLists.txt new file mode 100644 index 000000000..20ef58074 --- /dev/null +++ b/ifs_samples/grib1_mlgrib2_ccsds/CMakeLists.txt @@ -0,0 +1,13 @@ +set( _basedir grib1_mlgrib2_ccsds ) +set( _destination_install ${ECCODES_IFS_SAMPLES_SUFF}/${_basedir} ) +set( _destination_build ${CMAKE_BINARY_DIR}/${ECCODES_IFS_SAMPLES_SUFF}/${_basedir} ) + +list( APPEND ifs_samples_${_basedir} + ${CMAKE_CURRENT_SOURCE_DIR}/gg_ml.tmpl + ${CMAKE_CURRENT_SOURCE_DIR}/gg_sfc_grib2.tmpl + ${CMAKE_CURRENT_SOURCE_DIR}/gg_sfc.tmpl + ${CMAKE_CURRENT_SOURCE_DIR}/sh_ml.tmpl + ${CMAKE_CURRENT_SOURCE_DIR}/sh_sfc.tmpl + ${ECCODES_SAMPLES_FILES} ) + +install_samples( ifs_samples_${_basedir} ${_destination_install} ${_destination_build} ) diff --git a/ifs_samples/grib1_mlgrib2_ccsds/gg_ml.tmpl b/ifs_samples/grib1_mlgrib2_ccsds/gg_ml.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..805ed81f5902cc4b9f501686b51bf9bfab01cfe5 GIT binary patch literal 19659 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 EH%qYs9RL6T literal 0 HcmV?d00001 diff --git a/ifs_samples/grib1_mlgrib2_ccsds/gg_sfc.tmpl b/ifs_samples/grib1_mlgrib2_ccsds/gg_sfc.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..4f8371064cbadc574de319a6c9e6418c55e59124 GIT binary patch literal 26860 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
    ZR<2P-N@n7kkl3Hbw{=PCz=coDvZ`GeveJYJ8 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 literal 0 HcmV?d00001 diff --git a/ifs_samples/grib1_mlgrib2_ccsds/sh_ml.tmpl b/ifs_samples/grib1_mlgrib2_ccsds/sh_ml.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..52858b87f66e1ce40a34b555eb7c0a0a315df1ef GIT binary patch literal 10146 zcmd6Lk6$CzxpzcFq=<+}ks@UgDI!H=SvH$YLI}walF9GMWM=Yf@;ihOvLTygSr(CH z5fLdxL`o4UMT&@AE~OMn{p{dE~UB1MM}3^N-1|sDN-)JS>Mn5KfLFB&iT&s zoacOJK4;F4=R8HSV)j>GQ9>wRr|Q!73+M^8a6X=phQ_;gC?uWKcn&d{z6^S6>A+6iUg1>Y<<%Ob;Ge z6v`m0=9fpTedB6@sIjWxLvb|w(ch44(OEsaQ?btey;EBlcjhRBew_m;V( z70+>R%Tez4XQ%oDyP#$^5-iD>1wAMgd?k$q*85oC>s_s2OHwr0cI6O!`-^z+2akq> zKYXtfe7DCB_I$YpzSl1S-)nb)Ju_k8yK&KASKB1`&I>JI+vfw|n^T?OYoBFDlt{WlreKVKe#{14z#(d*4<4^iV=A+N-GZVYInYmIbQ>22J z_TSbs>vv?#w`(()KZzY+e(dgHE}Ghy|23A){M#iw|6z+T|M5&ie%$A`@{=tY`7ca_ z=I6{T;<)&WpZ@HmHZ1r|c`B)q68m+gJhb%S zw}gcS7eeZVM+>Qj3lI9t-p+rpk|?YRJ^BDY*(vxM^BEcK4`kopU)y?sGauE>KS1*Q zvEi>}iEH+2c~n~c0GVdX;sf-3@5%J9(ePy61DyWtbFQzkwI%)ml6^h750HMEd-4E* z?EbHL0sl?^1DS-wzP2Z8U;Uad|Jk-m2H#?0+}zlkSz;Z`aICA$z$aA3@#*X*-+A{* z<^lK6_jxsI#%Vwq`w;}=?7|kg_5t7bvzTPx6=@aY+v4B(n*SQkXdXlvfouswH2HV> z7k>%&^=~fw9MfsOZ(sVOuK>RTwEy{#!9oFm{_Zl__3&L%{?A(S@ag8MFB8KUao!R7 z*?TS^^>X+0?2m2JPul=sC~jc7C-t!z&zIr8m9=!Hy_5Gz;>VBAjQ=u{8UGNAG5#`d z=A-YOGBf|Jo!RjF>>0yv>!&}wwa$2L;)MAWyOHtUo7uiUhp~Jv`>z>YPsTGo`1vUL z+xJD})SYv{Hz)&ssd3PMf3eor$ysIq@b}4g+_BTYexs7{gfo=9c@YJE^Abq2x_U_y zw;D(t<^d^hP^PJO9wQ^Vw}Efb!I|=obS6<4O}?Oy^)3HpYo=hToAF$29P=9xYlij1 z%9+s5QH4;k-w^2nR{J3i50e$DvR?*~cW#|H8jDf_-h z*`Ls-ZZ?uXR1MRYpGjxDc&Qh7^CyR7L`FNgwiHiqxkw@FSi}{@qg{;nl>p5l86@BO z-*{4d{~RbbeL>&5U&|a^*&wel)nr2KA|vrk=X*~;Fn;BtGD8JhB%TZVvficwG5^!f zXnlf8`)QQJSNC2#`9Ik+r02u~{PM4BzA)zD)PN8M${vS-g?Kk3^Zi%I_fFmPN1D^= zqZbB&PrtD--Pj*ae)RY{{i~nsPR&jxli@jy^a$Nwr+>WiENTC+it+YHFH@RXNq=i| z!T0VK!D!UX0{>W?#tTxJ#d_y3H;mN3_eq*h2d2`&R~C6 zNJf>jreE)lCWYo*fY&_h`$lFi?H^zC0iz!*lB?zGz?YOPp!>6#Y17n;(@))gmj3qD zLAw4&-GHQIznSO-dTkNR&@Z;g zs+Y!n-1D>PgU1`mzkR@CTqyZ(Amc*6Pu?{}eynPrUP+^pv+}Gff4aHO2o3K8N}n49 z7;%SWQ>7OeOlt+u+-UNnvk>y#PrnZ|)Uy~3CobQ=_JsRFC2fq*(IbXf@WID#KgMF% zwthw*d*zT!2yLGJ!@CRgZ+_?^TN8udS+zTD*ZmK0@cey7_{XK>KhqaU^}kc;oA01x z*Y3*nHy8fKc;s>o`7b+L(`lMFfrekO$wt}4^k=y*(cfgn`#$}%iy^#mL@&Ct=Hp*4 zW&FqNEV($7;)9q<#=LTwRQ){DN3Tf-{=ud(Ui(otH9zBO~3cZI`Gr5yX2EkwE}Ovc24?#**e|v?j$4nZ3t+p zuOegIEL!`|>wQmk$jGAaG&0)6wE)t!;A^wm7!>w(^3o&)$h2pY(jTWzHOx-{Uwk8x z4o`hb$3FT`-?y)wlkZp&7eovi!YB=9F!<5b^| z63L$*h0q4#*U6T&5g&8EX&T;oh75dEcfY?X{{sI_yfDc_tG#(f9hA& zz;-l3{^3t6zJ%{z1TMUQGO}JQAeRc7fs6myOn<8PGqU;1crrXM5qR}&gYWv={S55y z{{nQqWdeToct3FdSs(dX=o;C;kTD*4d6x{C8JxaxtBS$Nd6#_k@c{61tO!X1FYVY)Max(DrKf0&l zo~|Tc@23K_KZpdby;)CQGqsaw!P5Y}``3)*hv~q5XC3*QTPMDnPcrGB zBCiWS2P!Tod@n^j>`VNIg#6D7iy!~uY!dkX8ySo+%tb~&`wZ|7^h0`vwF?+r%^-+}55xkTaV#JSwy}c!N`tzhNGu>dzyh+|Aa9V98^8ii zN$_1kS+N?l4eBHbK~8^=r$wIuhwB`$3+j{hiW~7fycX`jH{mYHxim`-tJAgFTD8<) zREt*1;^93VERUAA3pO!}_ zBM6>RtDV*437XBbnjQI!VO^JD>(V9gt3ccsremAbD6Xtj*Q)MG7ZC`H)qoP#G&^_%L(u#Yqc5FghtG|b*syN79 zEiPxNyA8YAaAHS0594rZ$rP_zKa5718mn6PIg(Y~uC!4yre!JX?L+es_6qQC$8H)BRhqNB)iRM6mpxVc?&^^&M z)}h~0K^S7JxAY(qZWMZ~J~D5~!mt$;B#IH$5Tn{Y&4gh>;@6C55|qPcR6Ju2t*BO} zLTaKG?I&vaJ?bt~h$P*;L9FT~^+)I_0YU*7wT=@M;TYPYvPl!HeezCxLAxz9;X{a< z*f4u#n+7(wA3|}D640IzJ6IkPYdh8un)}9hq7sjRE$mD!Y4zF<2_0+Jj_w>(6>33V#QQ5-cPBj|8>gt`)sl}2cISRLpp^`qov-qm_|$GoCA zLpt?<1S~#>$B+%>vMEZLfhOwD6x+HEd2p5nWeygqY=d*L5bZop6*Tku^@x=xi;%a- zW35%THsKlWH1JEe^`oi<#E)-j5~-umiDtpRUd+OAjIAD!CIQSFh%i%}Zs_B&;D93@ zyZvFo+=uO)bFAcUSjEhcn~6SLS79+vR>nab44<1UBJSv6GpWtV2wap#U48k zUO=g;DY?@u686co8jseY?G;a;Z7>U4MqSXD>I6-Zw#(NnnYw;45AQYAY0q>_#Lvsd z?Z!QeO9yLQGMB}r>?|0CO&C*7ElRMQX?7IV*El9mVTz4stAr;t3)-m?O2Lt`%@n6p zRI^DWZy#cvLhblJAL-{$%Ht0<3vd&tL z_+ur6E=#n6*6DjR?HENBTos#j-e7FC@vO}wbhQ|4eURgS`hdrGrZ5PpxnW=bj{3z3pB z?Y?wfo~P zU8dzw#NtIFhnj9g4L2ym9QU+$;WX?(B~lValUSS9j)ocA&}GNn^5!cO7PpY1$)w-a zEZ{JM!mqPVntO~lzbF=9+Fi*$J;*}>fna)EfNnquqG?iuQ(iNuO- zQ0x-y+ZIfXe3>Fd+^1ZG9K=Xzq9E-Gqz`p^bvZ><#Sjs$(V}_A9(<5z&_(e2+-^Z0 z99P;=vV3`-!#8)Sc}ka}hG#R^DQci(W3+iw3@JBN;iWJdCu=dRz(dwU)wrcYb82#- z6Uq?%7O@Yife4c30g|hdgi*Sa0 z0Y`*Ql7OiZ*)fI_fE>oFb*BguHyKxn9d(Udq=~?Hgwd*MeXKeYk5UuD4Pw9+uWwec zk>z5Cdfjx4)+)#B0DK=B)TeU2`YM%2=d}0p4}#}E3kq-Vfpf*N$GqR!bSW)Z!rPWcHE1xifw z&R+2*94j6&CZUbkmZp)|6eT0A+Pm^G)f~P9_3B5=2WX8Nvd7>#NTagXP)np@iE6bn zN1Z4nv{lZOt8t<*$s|#O#45AIE^$?{Urtk337YdAwm#3KI0dULt#L!Pu*^P9pYrr7 zf`>D9%pB>s;!xcb+!aj9k@9%FkGQL!!<+G8fxj5K8E(UiTCi-xv8`UWLq*^|hnmWQ zHZ?IN)yD2iDF#56z$S5AmBMR<>WMi`jDqi6K-$G_n@77O&4N)ir07=JP%YwD0Jzq+ zZEKKE@G}Jt%T!GdJYSGm$V2Z}pUVBhS$*5hNL7m9oQP&aL;?io8+7$5z}^P|qI4-+ zSub@HfMi4#4X2GRPLXFkzd9`UD_EsF@>S*xXHvIV9w(|ST9==jn=Cu%kvNn$sXTI5m&fUk zH4eOA5UE`UdHmG!(`$Wp3Oj<^f}Yv3G+VkxDN8j{-e4aFLlk`_q@haR$C%d+Sy~j$ z!dzptd)XdY(#;PjM7j-d$#h?B&^avCswH-x*lEtf9kOcJAUhEE<8!x2cs@T+mUMNa zs6jGQnkowcMvNlfj>RI+#m5{TB;!iIYT#xa)>fQRw2W+Bi_q6V@p4z08V!Ni#95hz zx2;HYXJ|bf9-3KKX<2}}iF1CYRc5IbS-=tJ{n8j!4LHaf~Q*ld-7RVwvtIzOG9sU zs?H^L%}NO@iqQx3`$b;;h9)+68@U(sNKBbi9F?p#4ij$ywd1j$wRAud_FeNyWcPzk#( zPj(>m>QjZYJoI{ZS+cI5dWbuX&4xVraj8>J5l4EXYGVi{ZCok4SykD9_g)?(s%ti^ zk&<2gzQKK`6FDs$Q8nr9aGy5APzUF*KwEM(s7iqhrdDF~CdofyWvP~{)MYt%tNxT4 zhu7G~x!GX6j$#}zfaYrXuy9`;ZP`Q(@+s}PC0xprk$9+^V`5q;$}aw>W6u;X^D~@w zwLDcbq)Cu2YZmQW`g2;kqRTO%BT%x?AR=^<(p;_tZqaw;G^1;`n$+zt(hM=pt(KU= z9qXuSf{>Uz?9hB#?LtGU@t89rSt>~`S<{b!quCz)=Bs;%y3mA&Yd0%Rs?7ZD>nB=| z&P|OMf$)N55^wW!Bceq$QCC}c`WBdH3`5iTHalAPnD z?hG4L9bD@om}sp`mvxu%pQ}@9Z;wG1*`V{Vges1OvK5DVKe9?!;~VCsl19ampt3OB zJaoqnY&;=zp5LzFowC-;<}@DTay>1Lm*3F1s#4S2__C{1&5m}<5Et|qGaKf)%`cvM zs!BFJFn%U=AuVdc?gyvjI})cc7fF$A<2+nqy06(L)cCw6rP$3ms_Hel1bs!_7PmRc zK#Eo^G)s(N*TlL(EvN#}n_-F^&@1=5){xA?G&t3>EV~O?1Z)n1HP~|T);t97tErKl zU#S8^^feYOp7X+>BjQG^dW+-ckLse`_e5D(N@Xj&lecd@zQK}o$af`kWzAO;i_-<6 zmhj-nCCIw1v6dBavpQC`S=0c-7pPJ?6QxdAxkc3NIv`u4S*UPoa_&S*(TdA4R$IGjFz zZCHFR-BlkMd71@YJJM>{GWgXjgB_|x2c6aY3BJKNSGljq=4G2^ZOvd?F}1u+ke8ch z472QU`}qm-9#6Ce&u>9(x4fDjU`5b%3nh-_1RP0cYEs^qlcs+wT@v0ks2R<{nJ2uv zwPQEWBrr4nT6|0WrJ1DtvK?=PD2qt7HM^_y_eDb&Gwoybck@DX58!Q8J2qRqq1>=$ zsM*A*qCpozWXa~`E#_!vJPH*DjJd`&)v2@Ip2kmotK8h^;eg?YZy$evhCjD zVJ=|Kc2XAfilM%u(K7tz5oZ*P)o0#LvAFXiF7N1;ZpD;(zkS5$d@HFafo`$HJ2M26 zc)Bh_xo&I%XNp^Hw&`ZmPYU~LBXpG);|lf_sp<|@vZPAluq>JHD;;H{gp9*hgvqH` z%`I&~rX*P_Gsh`o4PFONv7@q^-M2D}&xISV@Y)ep{PTB9dn!kYf#SicQ}+VyFYMHJ zmDWSM9H$JGW>us)TAu5Eez+pJHjfoqpw*t&$5qIrZCs}=4xhPwfG+3mbEiD<%BkWR zC{s0KPSUSxDDp<_QdxrRNFI30)am=^E z-imsxH`nCxR}9=-(^K}Vkv`G+Flt^)F3!u2hS+G0e6)Si`tdxb|y~K@ocLW zFKW;YsvNLI3ROcgYJQ{1rDn-oC0Tg1aQoT_Y%kfh@}67Pwsqy|H=o~-_S6jN;)-e1 z5L45e9`@unhi+!Qjl9sxRM)MS^vWq(l+nu0ywz|Ee4++gZcWwZrFx(=#KqdL0FBG? z3}PO^^$B`sX{P0#^b~2pj(7%B4ALjhmFzm<@>FJ?w9_%A^B8)Fo@AM_stJ^>=_X9+ z`5s;3>ui8^Ii)`ATD7e6QjNZ{B}_0u>rh5nLW&^1zc9xty474%OOG_lUa7qS7macn z2-^?b;<=|c@wpFj@x1I&++8x9zpk#SSl3kICniGQqr5AEH}EtgN*tgop&2gY+9B3YTojDB~MRr9^U z>gv3N%hBGXn<>0pR_xU|&r*Ib=ut+L4cr_P&wqPHjl3BFEoQ`)r`2WIV~INbT4^)J zBa%en+FtF6wAGp|Ug2e$vP|Pdrk5z1=gD-3*HhKIqQv}uV_QX!fJ%pmmQs$Y?WNYs zDNR64&l986j#uVgwu=YMPBgSKO6R%KA=|HNL~FB#%4=WGmN#G<@Gc0IO zKpbO~&TES*775m0+tE|7UU#~+MKgs%Gb0_XQiTQhte!Q)u9gfhXnOcH3rdT3{2n7*6O|>QO*XG*zh9%9Bkc#B$ z51=UrS{={dG;h~?6{$SV9fLAjoLDq&t8w2okFtgt&TwSOz`fX{_^vI{*u$ep zdTxz+HaITsmZ38^v)ftCxxtvMIpq0H6ZJjd7K=7XZv{GD6B*JkI|`!-mZ{N{t2oT@ zNCPGFRbk5c;!G?ZPZe+6w8;{rHQG*56cQziC~Yap6gmq#k(F2ciu2-_QaiGx?=?4} zbCNTAhXGU!i|jWdwCJ<-6}+}HaPQ?1CDG7m?0LSIyJ)o7s>|7i&b(Avz_tj*NXO_) zw2|@-bq4FCqR|qMhN@zV47X!?$w_y#TVrpnOOHy4sl-7=J5p{h;ZQ+ihy&>ky9+~MkI*pEg^Q?W%2#~9CB(Jz(4*a7H9bKTLJ zgzOpHqGd;uO+6|&dwm(}&x)n0Z@SCI!A<_5rKLn9^mDpzpYS(CvDUVVEi46It1?MV z+I6j8xsAK6Gq_(FKz7uA6%*Q!jT)m=j%>D|_6^j1OreOHe|m%t#vRb%ch}VWSuNC) z2HY@Fn1GzPy9#0MuD;*ZfJW<+2?@G_O)5csvV1Qu)zqo-=Py`}P*k;#xr^>{)^5is zLY}n59u|o%uGtTZ`mt>@$Z5%i6qj4`)snEI+^Y9DlsZh;Y$8d7>)Bc8(+RD5E zX*8Om8#E;-(vfDdNx0=0H>ZHvwz+a1PJ@Sp1e#hBrFV+?-eyCFlvDkjhjO{3@B9Vg5Xciy0tY%%LO@awx(!|YXhPnoUUqs+)| zQ4GD|;+!J0>OM&X6tBz`XXxyvMX5s=1D{zSTd3eje%C%woWO{|(#jTiX_*l>2OGzd zw#6)i0e9nGViT7r!bB}WA7lnuFG=K8O5E_S*;#(3Jj}^9c2={92zD;7RVPyC!DCP+ z!NC&YEzz!(b!``Gg{G_njx1Y$FW+N4+@TwxFa23h1BgM;C8$~m^HD|0eSzfPNfcjvn8dmn>i~2NK2h?lr zte`@PB_VhnFVmT0>zAo5bA}bhndzQsUQ!R9I5|2*m}2rOYm^jyuI2>pHdN})Il20K zXuBA%6e-pg?hgy2NnuY^#oa^P|>{U0K(xat4^ literal 0 HcmV?d00001 diff --git a/ifs_samples/grib1_mlgrib2_ccsds/sh_sfc.tmpl b/ifs_samples/grib1_mlgrib2_ccsds/sh_sfc.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..957d49f917675e88ce1bda947a5923f8b5f3cac7 GIT binary patch literal 9358 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 EFW=h0;{X5v literal 0 HcmV?d00001