mirror of https://github.com/ecmwf/eccodes.git
123 lines
3.3 KiB
Bash
Executable File
123 lines
3.3 KiB
Bash
Executable File
#!/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
|
|
|
|
label="grib_mars_keys1_test"
|
|
tempOut=temp.${label}.out
|
|
tempGrib=temp.${label}.grib
|
|
tempRef=temp.${label}.ref
|
|
|
|
if [ $ECCODES_ON_WINDOWS -eq 1 ]; then
|
|
echo "$0: This test is currently disabled on Windows"
|
|
exit 0
|
|
fi
|
|
|
|
grib1_sample=$ECCODES_SAMPLES_PATH/GRIB1.tmpl
|
|
grib2_sample=$ECCODES_SAMPLES_PATH/reduced_gg_pl_32_grib2.tmpl
|
|
types_table=$ECCODES_DEFINITION_PATH/mars/type.table
|
|
classes_table=$ECCODES_DEFINITION_PATH/mars/class.table
|
|
streams_table=$ECCODES_DEFINITION_PATH/mars/stream.table
|
|
|
|
# Set as integers
|
|
${tools_dir}/grib_set -s mars.type=11 $grib2_sample $tempGrib
|
|
grib_check_key_equals $tempGrib type pf
|
|
|
|
${tools_dir}/grib_set -s mars.class=11 $grib2_sample $tempGrib
|
|
grib_check_key_equals $tempGrib class en
|
|
|
|
${tools_dir}/grib_set -s mars.stream=1033 $grib2_sample $tempGrib
|
|
grib_check_key_equals $tempGrib stream enfh
|
|
|
|
# Check basic mars namespace keys
|
|
# --------------------------------
|
|
${tools_dir}/grib_ls -jm $grib2_sample > $tempOut
|
|
cat > $tempRef << EOF
|
|
{ "messages" : [
|
|
{
|
|
"domain": "g",
|
|
"date": 20100912,
|
|
"time": 1200,
|
|
"expver": "0001",
|
|
"class": "od",
|
|
"type": "an",
|
|
"stream": "oper",
|
|
"step": 0,
|
|
"levelist": 1000,
|
|
"levtype": "pl",
|
|
"param": 130
|
|
}
|
|
]}
|
|
EOF
|
|
diff $tempRef $tempOut
|
|
|
|
# Ensemble case
|
|
${tools_dir}/grib_set -s \
|
|
paramId=240018,stream=enfo,type=pf,productDefinitionTemplateNumber=1,perturbationNumber=5 \
|
|
$grib2_sample $tempGrib
|
|
${tools_dir}/grib_ls -jm $tempGrib > $tempOut
|
|
cat > $tempRef << EOF
|
|
{ "messages" : [
|
|
{
|
|
"domain": "g",
|
|
"date": 20100912,
|
|
"time": 1200,
|
|
"expver": "0001",
|
|
"class": "od",
|
|
"type": "pf",
|
|
"stream": "enfo",
|
|
"step": 0,
|
|
"levelist": 1000,
|
|
"levtype": "pl",
|
|
"number": 5,
|
|
"param": 240018
|
|
}
|
|
]}
|
|
EOF
|
|
diff $tempRef $tempOut
|
|
|
|
|
|
# Check numeric codes are unique
|
|
# -------------------------------
|
|
tables="$types_table $classes_table $streams_table"
|
|
for table in $tables; do
|
|
echo "Testing numeric codes in $table ..."
|
|
awk '{print $1}' < $table > $tempOut
|
|
count1=`sort -u $tempOut | wc -l`
|
|
count2=`wc -l $tempOut | awk '{print $1}'`
|
|
[ $count1 = $count2 ]
|
|
done
|
|
|
|
# Check abbreviations are unique
|
|
# -------------------------------
|
|
tables="$types_table $classes_table $streams_table"
|
|
for table in $tables; do
|
|
echo "Testing abbreviations in $table ..."
|
|
awk '{print $2}' < $table > $tempOut
|
|
count1=`sort -u $tempOut | wc -l`
|
|
count2=`wc -l $tempOut | awk '{print $1}'`
|
|
[ $count1 = $count2 ]
|
|
done
|
|
|
|
# Check MARS types
|
|
# ------------------------------
|
|
# Exclude type=34 (go, Gridded observations) as it loads definitions/mars/grib.oper.go.def
|
|
# which requires the key 'N' to exist
|
|
mars_types=`awk '$1 !~ /34/ {print $1}' < $types_table`
|
|
|
|
for t in $mars_types; do
|
|
#echo "Doing MARS type |$t|"
|
|
${tools_dir}/grib_set -s marsType=$t,edition=2 $grib1_sample $tempGrib
|
|
grib_check_key_equals $tempGrib "mars.type:i" $t
|
|
done
|
|
|
|
# Clean up
|
|
rm -f $tempGrib $tempOut $tempRef
|