2021-11-09 22:11:56 +00:00
|
|
|
:
|
|
|
|
set -eu
|
|
|
|
|
2022-01-13 11:02:45 +00:00
|
|
|
# Usage:
|
2023-06-25 11:17:55 +00:00
|
|
|
# $0 $paramId $paramId...
|
2022-01-13 11:02:45 +00:00
|
|
|
#
|
|
|
|
# This script will insert the local ECMWF GRIB2 representation
|
2022-07-21 11:58:09 +00:00
|
|
|
# for each paramId into the files:
|
2022-01-13 11:02:45 +00:00
|
|
|
# definitions/grib2/localConcepts/ecmf/paramId.legacy.def
|
|
|
|
# definitions/grib2/localConcepts/ecmf/shortName.legacy.def
|
|
|
|
# etc
|
|
|
|
# This is normally run for those GRIB2 parameters which had
|
|
|
|
# a local ECMWF representation which later acquired a standard
|
|
|
|
# WMO one. We want to be able to match the old encoding to the
|
|
|
|
# paramId but when we write out a field, we want to use the new
|
|
|
|
# standard WMO encoding.
|
|
|
|
#
|
|
|
|
# Assumptions:
|
|
|
|
# The ecCodes tools grib_set and grib_get are available
|
|
|
|
# The legacy encoding has discipline = 192
|
|
|
|
# The parameterCategory = $paramId / 1000
|
|
|
|
# The parameterNumber = $paramId - parameterCategory*1000
|
|
|
|
#
|
|
|
|
|
2022-07-21 11:58:09 +00:00
|
|
|
if [ $# -eq 0 ]; then
|
|
|
|
echo "Usage: $0 pid1 pid2 ..." 2>&1
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Input list of paramId values
|
|
|
|
pids="$@"
|
2021-11-09 22:11:56 +00:00
|
|
|
|
|
|
|
sample2=samples/GRIB2.tmpl
|
2023-06-25 11:17:55 +00:00
|
|
|
temp=$TMPDIR/temp.create_legacy_ecmf_def.grib
|
2021-11-09 22:11:56 +00:00
|
|
|
defs=definitions/grib2/localConcepts/ecmf
|
|
|
|
|
|
|
|
output_def()
|
|
|
|
{
|
|
|
|
_name=$1
|
|
|
|
_val=$2
|
|
|
|
_d=$3
|
|
|
|
_c=$4
|
|
|
|
_n=$5
|
|
|
|
|
|
|
|
if [ $_c -eq 0 ]; then
|
|
|
|
_c=128
|
|
|
|
fi
|
|
|
|
if [ "$_val" != "unknown" ]; then
|
|
|
|
echo "#$_name"
|
|
|
|
echo "'$_val' = {"
|
|
|
|
echo " discipline = $_d ;"
|
|
|
|
echo " parameterCategory = $_c ;"
|
|
|
|
echo " parameterNumber = $_n ;"
|
|
|
|
echo "}"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2022-07-21 11:58:09 +00:00
|
|
|
count=0
|
|
|
|
for pid in $pids; do
|
|
|
|
echo "Doing $pid..."
|
|
|
|
set +e
|
|
|
|
grib_set -s paramId=$pid $sample2 $temp 2>/dev/null
|
|
|
|
status=$?
|
|
|
|
set -e
|
|
|
|
if [ $status -ne 0 ]; then
|
|
|
|
grib_set -s stepType=accum,paramId=$pid $sample2 $temp
|
|
|
|
fi
|
|
|
|
name=$(grib_get -p name $temp)
|
|
|
|
shortName=$(grib_get -p shortName $temp)
|
|
|
|
units=$(grib_get -p units $temp)
|
|
|
|
cfName=$(grib_get -p cfName $temp)
|
|
|
|
cfVarName=$(grib_get -p cfVarName $temp)
|
|
|
|
count=$((count+1))
|
|
|
|
|
|
|
|
dis=192
|
|
|
|
cat=$((pid/1000))
|
|
|
|
num=$((pid - cat*1000))
|
2021-11-09 22:11:56 +00:00
|
|
|
|
2022-07-21 11:58:09 +00:00
|
|
|
output_def "$name" "$pid" $dis $cat $num >> $defs/paramId.legacy.def
|
|
|
|
output_def "$name" "$name" $dis $cat $num >> $defs/name.legacy.def
|
|
|
|
output_def "$name" "$shortName" $dis $cat $num >> $defs/shortName.legacy.def
|
|
|
|
output_def "$name" "$units" $dis $cat $num >> $defs/units.legacy.def
|
|
|
|
output_def "$name" "$cfVarName" $dis $cat $num >> $defs/cfVarName.legacy.def
|
|
|
|
output_def "$name" "$cfName" $dis $cat $num >> $defs/cfName.legacy.def
|
2021-11-09 22:11:56 +00:00
|
|
|
|
2022-07-21 11:58:09 +00:00
|
|
|
done
|
2021-11-09 22:11:56 +00:00
|
|
|
|
2022-07-21 11:58:09 +00:00
|
|
|
echo "Number of legacy parameters added: $count"
|
|
|
|
if [ $count -gt 0 ]; then
|
|
|
|
echo "Files updated. Check directory $defs"
|
|
|
|
fi
|
2021-11-09 22:11:56 +00:00
|
|
|
rm -f $temp
|