From 4317c6067c0cd098a5de793291d31305ec365ab0 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 23 Jan 2025 13:14:51 +0000 Subject: [PATCH] ECC-2010: Merge changes from branch feature/ECC-2010-grib2-activate-the-use-of-model --- .../grib2/local/ecmf/section4_extras.def | 17 ++++++++++------- .../localConcepts/destine/modelNameConcept.def | 18 ++++++++++++++++++ .../modelVersionConcept.AIFS.def} | 0 .../destine/modelVersionConcept.ALARO.def | 3 +++ .../destine/modelVersionConcept.AROME.def | 3 +++ .../modelVersionConcept.HARMONIE-AROME.def | 3 +++ .../destine/modelVersionConcept.IFS.def | 18 ++++++++++++++++++ .../localConcepts/ecmf/modelNameConcept.def | 8 +++++++- .../ecmf/modelVersionConcept.IFS.def | 18 ++++++++++++++++++ .../modelVersionConcept.aifs-ens-crps.def} | 0 .../ecmf/modelVersionConcept.aifs-ens-diff.def | 2 ++ .../modelVersionConcept.aifs-single-mse.def | 2 ++ .../ecmf/modelVersionConcept_IFS.def | 10 ---------- .../era6/modelVersionConcept.AIFS.def | 2 ++ ...ept_IFS.def => modelVersionConcept.IFS.def} | 0 tests/grib_modelName.sh | 16 +++++++++++++++- 16 files changed, 101 insertions(+), 19 deletions(-) create mode 100644 definitions/grib2/localConcepts/destine/modelNameConcept.def rename definitions/grib2/localConcepts/{ecmf/modelVersionConcept_AIFS.def => destine/modelVersionConcept.AIFS.def} (100%) create mode 100644 definitions/grib2/localConcepts/destine/modelVersionConcept.ALARO.def create mode 100644 definitions/grib2/localConcepts/destine/modelVersionConcept.AROME.def create mode 100644 definitions/grib2/localConcepts/destine/modelVersionConcept.HARMONIE-AROME.def create mode 100644 definitions/grib2/localConcepts/destine/modelVersionConcept.IFS.def create mode 100644 definitions/grib2/localConcepts/ecmf/modelVersionConcept.IFS.def rename definitions/grib2/localConcepts/{era6/modelVersionConcept_AIFS.def => ecmf/modelVersionConcept.aifs-ens-crps.def} (100%) create mode 100644 definitions/grib2/localConcepts/ecmf/modelVersionConcept.aifs-ens-diff.def create mode 100644 definitions/grib2/localConcepts/ecmf/modelVersionConcept.aifs-single-mse.def delete mode 100644 definitions/grib2/localConcepts/ecmf/modelVersionConcept_IFS.def create mode 100644 definitions/grib2/localConcepts/era6/modelVersionConcept.AIFS.def rename definitions/grib2/localConcepts/era6/{modelVersionConcept_IFS.def => modelVersionConcept.IFS.def} (100%) diff --git a/definitions/grib2/local/ecmf/section4_extras.def b/definitions/grib2/local/ecmf/section4_extras.def index 0d70c1ac9..685ae5dc2 100644 --- a/definitions/grib2/local/ecmf/section4_extras.def +++ b/definitions/grib2/local/ecmf/section4_extras.def @@ -1,12 +1,15 @@ # (C) Copyright 2005- ECMWF. # See ECC-1846 -if (centre is "ecmf" or datasetForLocal is "era6") { - concept modelName(unknown, "modelNameConcept.def", conceptsMasterDir, conceptsLocalDirAll): no_copy, dump, read_only; +# This is only read when centre=ecmf, so can remove if statement that was here +# This is ecmf local so we shouldnt use MasterDir. Instead we look for pseudocentre (conceptsDir2) then centre (conceptsLocalDirAll) - if (modelName isnot "unknown") { - concept modelVersion(unknown, "modelVersionConcept_[modelName].def", conceptsMasterDir, conceptsLocalDirAll): no_copy, dump, read_only; - # alias ls.model = modelName; - # alias mars.model = modelName; - } +concept modelName(unknown, "modelNameConcept.def", conceptsDir2, conceptsLocalDirAll): no_copy, dump, read_only; + +if (modelName isnot "unknown") { + concept modelVersion(unknown, "modelVersionConcept.[modelName].def", conceptsDir2, conceptsLocalDirAll): no_copy, dump, read_only; + if ( defined(marsClass) && (marsClass is "ai" || marsClass is "ml") ) { + alias ls.model = modelName; + alias mars.model = modelName; + } } diff --git a/definitions/grib2/localConcepts/destine/modelNameConcept.def b/definitions/grib2/localConcepts/destine/modelNameConcept.def new file mode 100644 index 000000000..94f0797e4 --- /dev/null +++ b/definitions/grib2/localConcepts/destine/modelNameConcept.def @@ -0,0 +1,18 @@ +'IFS' = { + backgroundProcess = 255; +} +'AIFS' = { + backgroundProcess = 1; +} +'ICON' = { + backgroundProcess = 2; +} +'ALARO' = { + backgroundProcess = 3; +} +'AROME' = { + backgroundProcess = 4; +} +'HARMONIE-AROME' = { + backgroundProcess = 5; +} \ No newline at end of file diff --git a/definitions/grib2/localConcepts/ecmf/modelVersionConcept_AIFS.def b/definitions/grib2/localConcepts/destine/modelVersionConcept.AIFS.def similarity index 100% rename from definitions/grib2/localConcepts/ecmf/modelVersionConcept_AIFS.def rename to definitions/grib2/localConcepts/destine/modelVersionConcept.AIFS.def diff --git a/definitions/grib2/localConcepts/destine/modelVersionConcept.ALARO.def b/definitions/grib2/localConcepts/destine/modelVersionConcept.ALARO.def new file mode 100644 index 000000000..742d5c1bb --- /dev/null +++ b/definitions/grib2/localConcepts/destine/modelVersionConcept.ALARO.def @@ -0,0 +1,3 @@ +'cy49t2' = { generatingProcessIdentifier = 3; } +'cy48t3' = { generatingProcessIdentifier = 2; } +'cy46h1' = { generatingProcessIdentifier = 1; } diff --git a/definitions/grib2/localConcepts/destine/modelVersionConcept.AROME.def b/definitions/grib2/localConcepts/destine/modelVersionConcept.AROME.def new file mode 100644 index 000000000..742d5c1bb --- /dev/null +++ b/definitions/grib2/localConcepts/destine/modelVersionConcept.AROME.def @@ -0,0 +1,3 @@ +'cy49t2' = { generatingProcessIdentifier = 3; } +'cy48t3' = { generatingProcessIdentifier = 2; } +'cy46h1' = { generatingProcessIdentifier = 1; } diff --git a/definitions/grib2/localConcepts/destine/modelVersionConcept.HARMONIE-AROME.def b/definitions/grib2/localConcepts/destine/modelVersionConcept.HARMONIE-AROME.def new file mode 100644 index 000000000..742d5c1bb --- /dev/null +++ b/definitions/grib2/localConcepts/destine/modelVersionConcept.HARMONIE-AROME.def @@ -0,0 +1,3 @@ +'cy49t2' = { generatingProcessIdentifier = 3; } +'cy48t3' = { generatingProcessIdentifier = 2; } +'cy46h1' = { generatingProcessIdentifier = 1; } diff --git a/definitions/grib2/localConcepts/destine/modelVersionConcept.IFS.def b/definitions/grib2/localConcepts/destine/modelVersionConcept.IFS.def new file mode 100644 index 000000000..2bbe0ee20 --- /dev/null +++ b/definitions/grib2/localConcepts/destine/modelVersionConcept.IFS.def @@ -0,0 +1,18 @@ +'cy50r3' = { generatingProcessIdentifier = 163; } +'cy50r2' = { generatingProcessIdentifier = 162; } +'cy50r1' = { generatingProcessIdentifier = 161; } +'cy49r3' = { generatingProcessIdentifier = 160; } +'cy49r2' = { generatingProcessIdentifier = 159; } +'cy49r1' = { generatingProcessIdentifier = 158; } +'cy48r3' = { generatingProcessIdentifier = 157; } +'climatedt' = { generatingProcessIdentifier = 156; } +'cy48r2' = { generatingProcessIdentifier = 155; } +'cy48r1' = { generatingProcessIdentifier = 154; } +'cy47r3' = { generatingProcessIdentifier = 153; } +'cy47r2' = { generatingProcessIdentifier = 152; } +'cy47r1' = { generatingProcessIdentifier = 151; } +'cy46r1' = { generatingProcessIdentifier = 150; } +'cy45r1' = { generatingProcessIdentifier = 149; } +'cy43r3' = { generatingProcessIdentifier = 148; } +'cy43r1' = { generatingProcessIdentifier = 147; } +'cy41r2' = { generatingProcessIdentifier = 146; } \ No newline at end of file diff --git a/definitions/grib2/localConcepts/ecmf/modelNameConcept.def b/definitions/grib2/localConcepts/ecmf/modelNameConcept.def index 5a7742c41..bda170b5e 100644 --- a/definitions/grib2/localConcepts/ecmf/modelNameConcept.def +++ b/definitions/grib2/localConcepts/ecmf/modelNameConcept.def @@ -1,6 +1,12 @@ 'IFS' = { backgroundProcess = 255; } -'AIFS' = { +'aifs-single-mse' = { backgroundProcess = 1; } +'aifs-ens-crps' = { + backgroundProcess = 2; +} +'aifs-ens-diff' = { + backgroundProcess = 3; +} diff --git a/definitions/grib2/localConcepts/ecmf/modelVersionConcept.IFS.def b/definitions/grib2/localConcepts/ecmf/modelVersionConcept.IFS.def new file mode 100644 index 000000000..2bbe0ee20 --- /dev/null +++ b/definitions/grib2/localConcepts/ecmf/modelVersionConcept.IFS.def @@ -0,0 +1,18 @@ +'cy50r3' = { generatingProcessIdentifier = 163; } +'cy50r2' = { generatingProcessIdentifier = 162; } +'cy50r1' = { generatingProcessIdentifier = 161; } +'cy49r3' = { generatingProcessIdentifier = 160; } +'cy49r2' = { generatingProcessIdentifier = 159; } +'cy49r1' = { generatingProcessIdentifier = 158; } +'cy48r3' = { generatingProcessIdentifier = 157; } +'climatedt' = { generatingProcessIdentifier = 156; } +'cy48r2' = { generatingProcessIdentifier = 155; } +'cy48r1' = { generatingProcessIdentifier = 154; } +'cy47r3' = { generatingProcessIdentifier = 153; } +'cy47r2' = { generatingProcessIdentifier = 152; } +'cy47r1' = { generatingProcessIdentifier = 151; } +'cy46r1' = { generatingProcessIdentifier = 150; } +'cy45r1' = { generatingProcessIdentifier = 149; } +'cy43r3' = { generatingProcessIdentifier = 148; } +'cy43r1' = { generatingProcessIdentifier = 147; } +'cy41r2' = { generatingProcessIdentifier = 146; } \ No newline at end of file diff --git a/definitions/grib2/localConcepts/era6/modelVersionConcept_AIFS.def b/definitions/grib2/localConcepts/ecmf/modelVersionConcept.aifs-ens-crps.def similarity index 100% rename from definitions/grib2/localConcepts/era6/modelVersionConcept_AIFS.def rename to definitions/grib2/localConcepts/ecmf/modelVersionConcept.aifs-ens-crps.def diff --git a/definitions/grib2/localConcepts/ecmf/modelVersionConcept.aifs-ens-diff.def b/definitions/grib2/localConcepts/ecmf/modelVersionConcept.aifs-ens-diff.def new file mode 100644 index 000000000..b06e75f21 --- /dev/null +++ b/definitions/grib2/localConcepts/ecmf/modelVersionConcept.aifs-ens-diff.def @@ -0,0 +1,2 @@ +'v1' = { generatingProcessIdentifier = 1; } +'v2' = { generatingProcessIdentifier = 2; } diff --git a/definitions/grib2/localConcepts/ecmf/modelVersionConcept.aifs-single-mse.def b/definitions/grib2/localConcepts/ecmf/modelVersionConcept.aifs-single-mse.def new file mode 100644 index 000000000..b06e75f21 --- /dev/null +++ b/definitions/grib2/localConcepts/ecmf/modelVersionConcept.aifs-single-mse.def @@ -0,0 +1,2 @@ +'v1' = { generatingProcessIdentifier = 1; } +'v2' = { generatingProcessIdentifier = 2; } diff --git a/definitions/grib2/localConcepts/ecmf/modelVersionConcept_IFS.def b/definitions/grib2/localConcepts/ecmf/modelVersionConcept_IFS.def deleted file mode 100644 index 8445b7489..000000000 --- a/definitions/grib2/localConcepts/ecmf/modelVersionConcept_IFS.def +++ /dev/null @@ -1,10 +0,0 @@ -'cy49r1' = { generatingProcessIdentifier = 155; } -'cy48r1' = { generatingProcessIdentifier = 154; } -'cy47r3' = { generatingProcessIdentifier = 153; } -'cy47r2' = { generatingProcessIdentifier = 152; } -'cy47r1' = { generatingProcessIdentifier = 151; } -'cy46r1' = { generatingProcessIdentifier = 150; } -'cy45r1' = { generatingProcessIdentifier = 149; } -'cy43r3' = { generatingProcessIdentifier = 148; } -'cy43r1' = { generatingProcessIdentifier = 147; } -'cy41r2' = { generatingProcessIdentifier = 146; } diff --git a/definitions/grib2/localConcepts/era6/modelVersionConcept.AIFS.def b/definitions/grib2/localConcepts/era6/modelVersionConcept.AIFS.def new file mode 100644 index 000000000..b06e75f21 --- /dev/null +++ b/definitions/grib2/localConcepts/era6/modelVersionConcept.AIFS.def @@ -0,0 +1,2 @@ +'v1' = { generatingProcessIdentifier = 1; } +'v2' = { generatingProcessIdentifier = 2; } diff --git a/definitions/grib2/localConcepts/era6/modelVersionConcept_IFS.def b/definitions/grib2/localConcepts/era6/modelVersionConcept.IFS.def similarity index 100% rename from definitions/grib2/localConcepts/era6/modelVersionConcept_IFS.def rename to definitions/grib2/localConcepts/era6/modelVersionConcept.IFS.def diff --git a/tests/grib_modelName.sh b/tests/grib_modelName.sh index d0dde3cc4..59f8ada76 100755 --- a/tests/grib_modelName.sh +++ b/tests/grib_modelName.sh @@ -14,6 +14,7 @@ label="grib_modelName_test" tempGrib=temp.$label.grib +temp2Grib=temp2.$label.grib tempFilt=temp.$label.filt tempLog=temp.$label.log tempOut=temp.$label.txt @@ -22,7 +23,7 @@ tempRef=temp.$label.ref sample=$ECCODES_SAMPLES_PATH/GRIB2.tmpl ${tools_dir}/grib_set -s generatingProcessIdentifier=1,backgroundProcess=1 $sample $tempGrib -grib_check_key_equals $tempGrib modelName,modelVersion "AIFS v1" +grib_check_key_equals $tempGrib modelName,modelVersion "aifs-single-mse v1" ${tools_dir}/grib_set -s generatingProcessIdentifier=154 $sample $tempGrib grib_check_key_equals $tempGrib modelName,modelVersion "IFS cy48r1" @@ -30,6 +31,18 @@ grib_check_key_equals $tempGrib modelName,modelVersion "IFS cy48r1" ${tools_dir}/grib_set -s generatingProcessIdentifier=100 $sample $tempGrib grib_check_key_equals $tempGrib modelName,modelVersion "IFS unknown" +# Check that this only works for centre ecmf +${tools_dir}/grib_set -s generatingProcessIdentifier=1,backgroundProcess=1,centre=84 $sample $tempGrib +[ $( ${tools_dir}/grib_get -f -p modelName $tempGrib ) = "not_found" ] +[ $( ${tools_dir}/grib_get -f -p modelVersion $tempGrib ) = "not_found" ] + +# Check that it works for pseudocentres (e.g. DestinE) +${tools_dir}/grib_set -s generatingProcessIdentifier=1,backgroundProcess=3,productionStatusOfProcessedData=13 $sample $tempGrib +grib_check_key_equals $tempGrib modelName,modelVersion "ALARO cy46h1" +${tools_dir}/grib_set -s productionStatusOfProcessedData=0 $tempGrib $temp2Grib +[ $( ${tools_dir}/grib_get -f -p modelName $temp2Grib ) = "aifs-ens-diff" ] +[ $( ${tools_dir}/grib_get -f -p modelVersion $temp2Grib ) = "v1" ] + # Keys are read-only (may change this later) set +e ${tools_dir}/grib_set -s modelName=AIFS $sample $tempGrib 2>$tempLog @@ -48,3 +61,4 @@ grep -q "Value is read only" $tempLog # Clean up rm -f $tempGrib $tempFilt $tempLog $tempOut $tempRef +rm -f $temp2Grib