eccodes/definitions/create_legacy_ecmf_defs.sh

93 lines
2.5 KiB
Bash
Executable File

:
set -eu
# Usage:
# $0 $paramId $paramId...
#
# This script will insert the local ECMWF GRIB2 representation
# for each paramId into the files:
# 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
#
if [ $# -eq 0 ]; then
echo "Usage: $0 pid1 pid2 ..." 2>&1
exit 1
fi
# Input list of paramId values
pids="$@"
sample2=samples/GRIB2.tmpl
temp=$TMPDIR/temp.create_legacy_ecmf_def.grib
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
}
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))
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
done
echo "Number of legacy parameters added: $count"
if [ $count -gt 0 ]; then
echo "Files updated. Check directory $defs"
fi
rm -f $temp