2013-03-25 12:04:10 +00:00
|
|
|
#!/bin/sh
|
2020-01-28 14:32:34 +00:00
|
|
|
# (C) Copyright 2005- ECMWF.
|
2013-03-25 12:04:10 +00:00
|
|
|
#
|
|
|
|
# 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.
|
2013-03-25 14:23:07 +00:00
|
|
|
#
|
2013-03-25 12:04:10 +00:00
|
|
|
# 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.
|
|
|
|
#
|
|
|
|
|
2022-04-03 22:02:48 +00:00
|
|
|
. ./include.ctest.sh
|
2013-03-25 12:04:10 +00:00
|
|
|
|
2023-12-14 13:35:47 +00:00
|
|
|
label="grib_statistics_test"
|
|
|
|
temp1=temp1.$label.grib
|
|
|
|
temp2=temp2.$label.grib
|
2024-08-03 15:48:50 +00:00
|
|
|
tempFilt=temp2.$label.filt
|
|
|
|
tempText=temp2.$label.txt
|
2023-12-14 13:35:47 +00:00
|
|
|
|
2013-03-25 12:04:10 +00:00
|
|
|
files="regular_latlon_surface.grib2 regular_latlon_surface.grib1"
|
|
|
|
|
2023-12-14 13:35:47 +00:00
|
|
|
for file in $files; do
|
2013-03-25 12:04:10 +00:00
|
|
|
|
2024-07-26 13:19:39 +00:00
|
|
|
# Note: When we get min,max etc for the 1st time, dirty_statistics is 1
|
|
|
|
# so the statistics accessor will decode the data values (because dirty_statistics==1)
|
|
|
|
# Once it is finished, it sets dirty_statistics to 0.
|
|
|
|
# If you get min,max again, no computation is done (because dirty_statistics==0)
|
|
|
|
# But once the data values are changed, then dirty_statistics is once again 1
|
2024-08-03 15:48:50 +00:00
|
|
|
cat > $tempFilt <<EOF
|
2024-07-26 13:19:39 +00:00
|
|
|
set Ni=2;
|
|
|
|
set Nj=2;
|
|
|
|
set decimalPrecision=4;
|
|
|
|
print "Will set values...";
|
|
|
|
set values={2.0,2.0,2.0,2.0};
|
|
|
|
assert(dirty_statistics == 1);
|
|
|
|
print "values=[values]";
|
|
|
|
print "max=[max] min=[min] average=[average]";
|
|
|
|
assert(dirty_statistics == 0);
|
|
|
|
print "max=[max] min=[min] average=[average]";
|
|
|
|
print "Will set values...";
|
|
|
|
set values={2.0,5.0,2.0,2.0};
|
|
|
|
assert(dirty_statistics == 1);
|
|
|
|
print "values=[values]";
|
|
|
|
print "max=[max] min=[min] average=[average]";
|
|
|
|
assert(dirty_statistics == 0);
|
2013-03-25 12:04:10 +00:00
|
|
|
EOF
|
|
|
|
|
2024-08-03 15:48:50 +00:00
|
|
|
${tools_dir}/grib_filter $tempFilt ${data_dir}/$file > $tempText
|
|
|
|
diff ${data_dir}/statistics.out.good $tempText
|
2013-03-25 12:04:10 +00:00
|
|
|
|
|
|
|
done
|
2024-08-03 15:48:50 +00:00
|
|
|
rm -f $tempText $tempFilt
|
2013-03-25 12:04:10 +00:00
|
|
|
|
2017-07-31 14:40:31 +00:00
|
|
|
|
|
|
|
# GRIB with no missing values but some entries = 9999
|
|
|
|
# See ECC-478
|
|
|
|
# ---------------------------------------------------
|
|
|
|
input=${data_dir}/lfpw.grib1
|
|
|
|
stats=`${tools_dir}/grib_get -w count=50 -F%.2f -n statistics $input`
|
2023-02-01 15:52:36 +00:00
|
|
|
[ "$stats" = "10098.00 0.00 1064.19 3066.07 2.57 4.61 0.00" ]
|
2017-07-31 14:40:31 +00:00
|
|
|
|
|
|
|
# Scaling values in presence of real 9999 values
|
|
|
|
${tools_dir}/grib_set -s scaleValuesBy=0.5 $input $temp1
|
|
|
|
${tools_dir}/grib_set -s missingValue=1.0E34,scaleValuesBy=0.5 $input $temp2
|
|
|
|
${tools_dir}/grib_compare $temp1 $temp2
|
|
|
|
|
|
|
|
# Offsetting values in presence of real 9999 values
|
|
|
|
${tools_dir}/grib_set -s offsetValuesBy=0.5 $input $temp1
|
|
|
|
${tools_dir}/grib_set -s missingValue=1.0E34,offsetValuesBy=0.5 $input $temp2
|
|
|
|
${tools_dir}/grib_compare $temp1 $temp2
|
|
|
|
|
2017-08-04 13:20:45 +00:00
|
|
|
# ECC-511
|
|
|
|
# GRIB2 message from NCEP/GFS with grid_complex_spatial_differencing and
|
|
|
|
# missingValueManagementUsed. No bitmap but missing values embedded in data
|
|
|
|
input=${data_dir}/gfs.complex.mvmu.grib2
|
|
|
|
stats=`${tools_dir}/grib_get -F%.2f -p max,min,avg $input`
|
|
|
|
[ "$stats" = "2.81 0.00 0.30" ]
|
|
|
|
|
2024-09-28 12:20:56 +00:00
|
|
|
# ECC-1926
|
|
|
|
# grid_complex_spatial_differencing with bpv=0
|
|
|
|
# Create a data section similar to the attached file dswrf-1.grib2
|
|
|
|
cat >$tempFilt<<EOF
|
|
|
|
set packingType='grid_complex_spatial_differencing';
|
|
|
|
set numberOfGroupsOfDataValues=0;
|
|
|
|
set orderOfSpatialDifferencing=2;
|
|
|
|
set primaryMissingValueSubstitute=0;
|
|
|
|
set referenceForGroupWidths = 64;
|
|
|
|
set numberOfBitsUsedForTheGroupWidths = 4;
|
|
|
|
set referenceForGroupLengths = 203736800;
|
|
|
|
set trueLengthOfLastGroup = 8;
|
|
|
|
set numberOfBitsForScaledGroupLengths = 7;
|
|
|
|
set numberOfOctetsExtraDescriptors = 1;
|
|
|
|
write;
|
|
|
|
EOF
|
|
|
|
input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl
|
|
|
|
${tools_dir}/grib_filter -o $temp1 $tempFilt $input
|
2024-10-03 08:53:17 +00:00
|
|
|
grib_check_key_equals $temp1 packingType,isConstant 'grid_complex_spatial_differencing 1'
|
2024-09-28 12:20:56 +00:00
|
|
|
stats1=`${tools_dir}/grib_get -M -F%.0f -n statistics $input`
|
|
|
|
stats2=`${tools_dir}/grib_get -M -F%.0f -n statistics $temp1`
|
|
|
|
[ "$stats1" = "$stats2" ]
|
2024-10-03 08:53:17 +00:00
|
|
|
${tools_dir}/grib_set -rs packingType=grid_simple $temp1 $temp2
|
|
|
|
grib_check_key_equals $temp2 packingType,isConstant 'grid_simple 1'
|
|
|
|
${tools_dir}/grib_compare -b totalLength,section5Length,dataRepresentationTemplateNumber $temp2 $temp1
|
|
|
|
|
2024-09-28 12:20:56 +00:00
|
|
|
|
2024-08-03 15:48:50 +00:00
|
|
|
# Decode as string - Null op
|
|
|
|
cat >$tempFilt<<EOF
|
|
|
|
print "[computeStatistics:s]";
|
|
|
|
EOF
|
|
|
|
input=$data_dir/sample.grib2
|
|
|
|
${tools_dir}/grib_filter $tempFilt $input
|
|
|
|
|
|
|
|
|
|
|
|
# Clean up
|
|
|
|
rm -f $temp1 $temp2 $tempFilt $tempText
|