Merge branch 'develop' into convert-to-cpp

This commit is contained in:
Shahram Najm 2023-06-26 12:17:13 +01:00
commit 0d0bb0be56
168 changed files with 3579 additions and 3783 deletions

2
.gitignore vendored
View File

@ -15,6 +15,8 @@ configure
grib_api.spec
grib_api.pc
grib_api_f90.pc
*.analyzerinfo
*.snalyzerinfo
# compiled source #
###################

View File

@ -8,7 +8,7 @@ ecmf 3 pt K Potential temperature
ecmf 60 pv K m**2 kg**-1 s**-1 Potential vorticity
ecmf 235 skt K Skin temperature
ecmf 228141 sd kg m**-2 Snow depth water equivalent
ecmf 228144 sf kg m**-2 Snow Fall water equivalent
ecmf 228144 sf kg m**-2 Snowfall water equivalent
ecmf 228039 sm kg m**-3 Soil moisture
ecmf 228139 st K Soil temperature
ecmf 133 q kg kg**-1 Specific humidity

View File

@ -2,7 +2,7 @@
set -eu
# Usage:
# create_legacy_def.sh $paramId $paramId...
# $0 $paramId $paramId...
#
# This script will insert the local ECMWF GRIB2 representation
# for each paramId into the files:
@ -31,7 +31,7 @@ fi
pids="$@"
sample2=samples/GRIB2.tmpl
temp=$TMPDIR/temp.create_legacy_def.grib
temp=$TMPDIR/temp.create_legacy_ecmf_def.grib
defs=definitions/grib2/localConcepts/ecmf
output_def()

View File

@ -0,0 +1,84 @@
:
set -eu
# Usage:
# create_legacy_def.sh $paramId $paramId...
#
# This script will insert the WMO GRIB2 representation
# for each given paramId into the files:
# definitions/grib2/paramId.legacy.def
# definitions/grib2/shortName.legacy.def
# etc.
# This is run for those GRIB2 parameters which had
# a WMO representation which later became deprecated.
#
# Assumptions:
# The ecCodes tools grib_set and grib_get are available
# TMPDIR is defined and points to a temporary directory
#
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_def.grib
defs=definitions/grib2
create_legacy_def()
{
_name=$1
_dir=$2
_file=$3
_legacy=$(echo $_file | sed -e 's/\.def/.legacy.def/')
#echo "Doing |$dir| f=|$file| l=|$legacy|"
# First check the given name exists in the file
grep -q "^#$_name$" $_dir/$_file
if [ $? -eq 0 ]; then
_name="#$_name"
found=1
# Copy the parameter definition from the file to its legacy version
echo "$_name" >> $_dir/$_legacy
sed -e "1,/^$_name$/d" -e '/#/,$d' $_dir/$_file | tr -d '\t' >> $_dir/$_legacy
fi
}
create_legacy_defs()
{
name="$1"
create_legacy_def "$name" $defs paramId.def
create_legacy_def "$name" $defs shortName.def
create_legacy_def "$name" $defs name.def
create_legacy_def "$name" $defs units.def
create_legacy_def "$name" $defs cfVarName.def
}
# For each paramId, get its full name
count=0
for pid in $pids; do
echo "Doing paramId=$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)
count=$((count+1))
rm -f $temp
create_legacy_defs "$name"
done
echo "Number of legacy parameters added: $count"
if [ $count -gt 0 ]; then
echo "Files updated. Check directory $defs"
fi
rm -f $temp

View File

@ -162,8 +162,8 @@
table2Version = 3 ;
indicatorOfParameter = 10 ;
}
#large scale precipitation
'p3062' = {
#Large-scale precipitation
'lsp' = {
table2Version = 3 ;
indicatorOfParameter = 62 ;
}
@ -532,8 +532,8 @@
table2Version = 3 ;
indicatorOfParameter = 98 ;
}
#Snow melt
'p3099' = {
#Snowmelt
'snom' = {
table2Version = 3 ;
indicatorOfParameter = 99 ;
}
@ -678,7 +678,7 @@
table2Version = 3 ;
indicatorOfParameter = 85 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'sf' = {
table2Version = 3 ;
indicatorOfParameter = 65 ;
@ -858,8 +858,8 @@
table2Version = 2 ;
indicatorOfParameter = 10 ;
}
#large scale precipitation
'p3062' = {
#Large-scale precipitation
'lsp' = {
table2Version = 2 ;
indicatorOfParameter = 62 ;
}
@ -1213,8 +1213,8 @@
table2Version = 2 ;
indicatorOfParameter = 98 ;
}
#Snow melt
'p3099' = {
#Snowmelt
'snom' = {
table2Version = 2 ;
indicatorOfParameter = 99 ;
}
@ -1359,7 +1359,7 @@
table2Version = 2 ;
indicatorOfParameter = 85 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'sf' = {
table2Version = 2 ;
indicatorOfParameter = 65 ;
@ -1539,8 +1539,8 @@
table2Version = 1 ;
indicatorOfParameter = 10 ;
}
#large scale precipitation
'p3062' = {
#Large-scale precipitation
'lsp' = {
table2Version = 1 ;
indicatorOfParameter = 62 ;
}
@ -1894,8 +1894,8 @@
table2Version = 1 ;
indicatorOfParameter = 98 ;
}
#Snow melt
'p3099' = {
#Snowmelt
'snom' = {
table2Version = 1 ;
indicatorOfParameter = 99 ;
}
@ -2040,7 +2040,7 @@
table2Version = 1 ;
indicatorOfParameter = 85 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'sf' = {
table2Version = 1 ;
indicatorOfParameter = 65 ;

View File

@ -17614,7 +17614,7 @@
table2Version = 228 ;
indicatorOfParameter = 141 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'sf' = {
table2Version = 228 ;
indicatorOfParameter = 144 ;

View File

@ -4054,33 +4054,33 @@
table2Version = 210 ;
indicatorOfParameter = 191 ;
}
#UV visible albedo for diffuse radiation, isotropic component
'UV visible albedo for diffuse radiation, isotropic component ' = {
#UV visible albedo for diffuse radiation, isotropic component
'UV visible albedo for diffuse radiation, isotropic component' = {
table2Version = 210 ;
indicatorOfParameter = 192 ;
}
#UV visible albedo for diffuse radiation, volumetric component
'UV visible albedo for diffuse radiation, volumetric component ' = {
#UV visible albedo for diffuse radiation, volumetric component
'UV visible albedo for diffuse radiation, volumetric component' = {
table2Version = 210 ;
indicatorOfParameter = 193 ;
}
#UV visible albedo for diffuse radiation, geometric component
'UV visible albedo for diffuse radiation, geometric component ' = {
#UV visible albedo for diffuse radiation, geometric component
'UV visible albedo for diffuse radiation, geometric component' = {
table2Version = 210 ;
indicatorOfParameter = 194 ;
}
#Near IR albedo for diffuse radiation, isotropic component
'Near IR albedo for diffuse radiation, isotropic component ' = {
#Near IR albedo for diffuse radiation, isotropic component
'Near IR albedo for diffuse radiation, isotropic component' = {
table2Version = 210 ;
indicatorOfParameter = 195 ;
}
#Near IR albedo for diffuse radiation, volumetric component
'Near IR albedo for diffuse radiation, volumetric component ' = {
#Near IR albedo for diffuse radiation, volumetric component
'Near IR albedo for diffuse radiation, volumetric component' = {
table2Version = 210 ;
indicatorOfParameter = 196 ;
}
#Near IR albedo for diffuse radiation, geometric component
'Near IR albedo for diffuse radiation, geometric component ' = {
#Near IR albedo for diffuse radiation, geometric component
'Near IR albedo for diffuse radiation, geometric component' = {
table2Version = 210 ;
indicatorOfParameter = 197 ;
}
@ -17614,8 +17614,8 @@
table2Version = 228 ;
indicatorOfParameter = 141 ;
}
#Snow Fall water equivalent
'Snow Fall water equivalent' = {
#Snowfall water equivalent
'Snowfall water equivalent' = {
table2Version = 228 ;
indicatorOfParameter = 144 ;
}

View File

@ -4054,32 +4054,32 @@
table2Version = 210 ;
indicatorOfParameter = 191 ;
}
#UV visible albedo for diffuse radiation, isotropic component
#UV visible albedo for diffuse radiation, isotropic component
'210192' = {
table2Version = 210 ;
indicatorOfParameter = 192 ;
}
#UV visible albedo for diffuse radiation, volumetric component
#UV visible albedo for diffuse radiation, volumetric component
'210193' = {
table2Version = 210 ;
indicatorOfParameter = 193 ;
}
#UV visible albedo for diffuse radiation, geometric component
#UV visible albedo for diffuse radiation, geometric component
'210194' = {
table2Version = 210 ;
indicatorOfParameter = 194 ;
}
#Near IR albedo for diffuse radiation, isotropic component
#Near IR albedo for diffuse radiation, isotropic component
'210195' = {
table2Version = 210 ;
indicatorOfParameter = 195 ;
}
#Near IR albedo for diffuse radiation, volumetric component
#Near IR albedo for diffuse radiation, volumetric component
'210196' = {
table2Version = 210 ;
indicatorOfParameter = 196 ;
}
#Near IR albedo for diffuse radiation, geometric component
#Near IR albedo for diffuse radiation, geometric component
'210197' = {
table2Version = 210 ;
indicatorOfParameter = 197 ;
@ -17614,7 +17614,7 @@
table2Version = 228 ;
indicatorOfParameter = 141 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'228144' = {
table2Version = 228 ;
indicatorOfParameter = 144 ;

View File

@ -4054,32 +4054,32 @@
table2Version = 210 ;
indicatorOfParameter = 191 ;
}
#UV visible albedo for diffuse radiation, isotropic component
#UV visible albedo for diffuse radiation, isotropic component
'aluvdi' = {
table2Version = 210 ;
indicatorOfParameter = 192 ;
}
#UV visible albedo for diffuse radiation, volumetric component
#UV visible albedo for diffuse radiation, volumetric component
'aluvdv' = {
table2Version = 210 ;
indicatorOfParameter = 193 ;
}
#UV visible albedo for diffuse radiation, geometric component
#UV visible albedo for diffuse radiation, geometric component
'aluvdg' = {
table2Version = 210 ;
indicatorOfParameter = 194 ;
}
#Near IR albedo for diffuse radiation, isotropic component
#Near IR albedo for diffuse radiation, isotropic component
'alnidi' = {
table2Version = 210 ;
indicatorOfParameter = 195 ;
}
#Near IR albedo for diffuse radiation, volumetric component
#Near IR albedo for diffuse radiation, volumetric component
'alnidv' = {
table2Version = 210 ;
indicatorOfParameter = 196 ;
}
#Near IR albedo for diffuse radiation, geometric component
#Near IR albedo for diffuse radiation, geometric component
'alnidg' = {
table2Version = 210 ;
indicatorOfParameter = 197 ;
@ -17614,7 +17614,7 @@
table2Version = 228 ;
indicatorOfParameter = 141 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'sf' = {
table2Version = 228 ;
indicatorOfParameter = 144 ;

View File

@ -4054,32 +4054,32 @@
table2Version = 210 ;
indicatorOfParameter = 191 ;
}
#UV visible albedo for diffuse radiation, isotropic component
#UV visible albedo for diffuse radiation, isotropic component
'(0 - 1)' = {
table2Version = 210 ;
indicatorOfParameter = 192 ;
}
#UV visible albedo for diffuse radiation, volumetric component
#UV visible albedo for diffuse radiation, volumetric component
'(0 - 1)' = {
table2Version = 210 ;
indicatorOfParameter = 193 ;
}
#UV visible albedo for diffuse radiation, geometric component
#UV visible albedo for diffuse radiation, geometric component
'(0 - 1)' = {
table2Version = 210 ;
indicatorOfParameter = 194 ;
}
#Near IR albedo for diffuse radiation, isotropic component
#Near IR albedo for diffuse radiation, isotropic component
'(0 - 1)' = {
table2Version = 210 ;
indicatorOfParameter = 195 ;
}
#Near IR albedo for diffuse radiation, volumetric component
#Near IR albedo for diffuse radiation, volumetric component
'(0 - 1)' = {
table2Version = 210 ;
indicatorOfParameter = 196 ;
}
#Near IR albedo for diffuse radiation, geometric component
#Near IR albedo for diffuse radiation, geometric component
'(0 - 1)' = {
table2Version = 210 ;
indicatorOfParameter = 197 ;
@ -17614,7 +17614,7 @@
table2Version = 228 ;
indicatorOfParameter = 141 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'kg m**-2' = {
table2Version = 228 ;
indicatorOfParameter = 144 ;

View File

@ -785,7 +785,7 @@
table2Version = 200 ;
indicatorOfParameter = 98 ;
}
#Snow melt
#Snowmelt
'snom' = {
table2Version = 200 ;
indicatorOfParameter = 99 ;

View File

@ -665,13 +665,13 @@
table2Version = 200 ;
indicatorOfParameter = 48 ;
}
#U-component of current
'U-component of current ' = {
#U-component of current
'U-component of current' = {
table2Version = 200 ;
indicatorOfParameter = 49 ;
}
#V-component of current
'V-component of current ' = {
#V-component of current
'V-component of current' = {
table2Version = 200 ;
indicatorOfParameter = 50 ;
}
@ -785,8 +785,8 @@
table2Version = 200 ;
indicatorOfParameter = 98 ;
}
#Snow melt
'Snow melt' = {
#Snowmelt
'Snowmelt' = {
table2Version = 200 ;
indicatorOfParameter = 99 ;
}

View File

@ -665,12 +665,12 @@
table2Version = 200 ;
indicatorOfParameter = 48 ;
}
#U-component of current
#U-component of current
'3049' = {
table2Version = 200 ;
indicatorOfParameter = 49 ;
}
#V-component of current
#V-component of current
'3050' = {
table2Version = 200 ;
indicatorOfParameter = 50 ;
@ -785,7 +785,7 @@
table2Version = 200 ;
indicatorOfParameter = 98 ;
}
#Snow melt
#Snowmelt
'3099' = {
table2Version = 200 ;
indicatorOfParameter = 99 ;

View File

@ -665,12 +665,12 @@
table2Version = 200 ;
indicatorOfParameter = 48 ;
}
#U-component of current
#U-component of current
'ucurr' = {
table2Version = 200 ;
indicatorOfParameter = 49 ;
}
#V-component of current
#V-component of current
'vcurr' = {
table2Version = 200 ;
indicatorOfParameter = 50 ;
@ -785,7 +785,7 @@
table2Version = 200 ;
indicatorOfParameter = 98 ;
}
#Snow melt
#Snowmelt
'snom' = {
table2Version = 200 ;
indicatorOfParameter = 99 ;

View File

@ -665,12 +665,12 @@
table2Version = 200 ;
indicatorOfParameter = 48 ;
}
#U-component of current
#U-component of current
'm s**-1' = {
table2Version = 200 ;
indicatorOfParameter = 49 ;
}
#V-component of current
#V-component of current
'm s**-1' = {
table2Version = 200 ;
indicatorOfParameter = 50 ;
@ -785,7 +785,7 @@
table2Version = 200 ;
indicatorOfParameter = 98 ;
}
#Snow melt
#Snowmelt
'kg m**-2' = {
table2Version = 200 ;
indicatorOfParameter = 99 ;

View File

@ -162,8 +162,8 @@
table2Version = 3 ;
indicatorOfParameter = 10 ;
}
#large scale precipitation
'large scale precipitation' = {
#Large-scale precipitation
'Large-scale precipitation' = {
table2Version = 3 ;
indicatorOfParameter = 62 ;
}
@ -392,13 +392,13 @@
table2Version = 3 ;
indicatorOfParameter = 48 ;
}
#U-component of current
'U-component of current ' = {
#U-component of current
'U-component of current' = {
table2Version = 3 ;
indicatorOfParameter = 49 ;
}
#V-component of current
'V-component of current ' = {
#V-component of current
'V-component of current' = {
table2Version = 3 ;
indicatorOfParameter = 50 ;
}
@ -532,8 +532,8 @@
table2Version = 3 ;
indicatorOfParameter = 98 ;
}
#Snow melt
'Snow melt' = {
#Snowmelt
'Snowmelt' = {
table2Version = 3 ;
indicatorOfParameter = 99 ;
}
@ -678,8 +678,8 @@
table2Version = 3 ;
indicatorOfParameter = 85 ;
}
#Snow Fall water equivalent
'Snow Fall water equivalent' = {
#Snowfall water equivalent
'Snowfall water equivalent' = {
table2Version = 3 ;
indicatorOfParameter = 65 ;
}
@ -858,8 +858,8 @@
table2Version = 2 ;
indicatorOfParameter = 10 ;
}
#large scale precipitation
'large scale precipitation' = {
#Large-scale precipitation
'Large-scale precipitation' = {
table2Version = 2 ;
indicatorOfParameter = 62 ;
}
@ -1073,13 +1073,13 @@
table2Version = 2 ;
indicatorOfParameter = 48 ;
}
#U-component of current
'U-component of current ' = {
#U-component of current
'U-component of current' = {
table2Version = 2 ;
indicatorOfParameter = 49 ;
}
#V-component of current
'V-component of current ' = {
#V-component of current
'V-component of current' = {
table2Version = 2 ;
indicatorOfParameter = 50 ;
}
@ -1213,8 +1213,8 @@
table2Version = 2 ;
indicatorOfParameter = 98 ;
}
#Snow melt
'Snow melt' = {
#Snowmelt
'Snowmelt' = {
table2Version = 2 ;
indicatorOfParameter = 99 ;
}
@ -1359,8 +1359,8 @@
table2Version = 2 ;
indicatorOfParameter = 85 ;
}
#Snow Fall water equivalent
'Snow Fall water equivalent' = {
#Snowfall water equivalent
'Snowfall water equivalent' = {
table2Version = 2 ;
indicatorOfParameter = 65 ;
}
@ -1539,8 +1539,8 @@
table2Version = 1 ;
indicatorOfParameter = 10 ;
}
#large scale precipitation
'large scale precipitation' = {
#Large-scale precipitation
'Large-scale precipitation' = {
table2Version = 1 ;
indicatorOfParameter = 62 ;
}
@ -1754,13 +1754,13 @@
table2Version = 1 ;
indicatorOfParameter = 48 ;
}
#U-component of current
'U-component of current ' = {
#U-component of current
'U-component of current' = {
table2Version = 1 ;
indicatorOfParameter = 49 ;
}
#V-component of current
'V-component of current ' = {
#V-component of current
'V-component of current' = {
table2Version = 1 ;
indicatorOfParameter = 50 ;
}
@ -1894,8 +1894,8 @@
table2Version = 1 ;
indicatorOfParameter = 98 ;
}
#Snow melt
'Snow melt' = {
#Snowmelt
'Snowmelt' = {
table2Version = 1 ;
indicatorOfParameter = 99 ;
}
@ -2040,8 +2040,8 @@
table2Version = 1 ;
indicatorOfParameter = 85 ;
}
#Snow Fall water equivalent
'Snow Fall water equivalent' = {
#Snowfall water equivalent
'Snowfall water equivalent' = {
table2Version = 1 ;
indicatorOfParameter = 65 ;
}

View File

@ -162,7 +162,7 @@
table2Version = 3 ;
indicatorOfParameter = 10 ;
}
#large scale precipitation
#Large-scale precipitation
'3062' = {
table2Version = 3 ;
indicatorOfParameter = 62 ;
@ -392,12 +392,12 @@
table2Version = 3 ;
indicatorOfParameter = 48 ;
}
#U-component of current
#U-component of current
'3049' = {
table2Version = 3 ;
indicatorOfParameter = 49 ;
}
#V-component of current
#V-component of current
'3050' = {
table2Version = 3 ;
indicatorOfParameter = 50 ;
@ -532,7 +532,7 @@
table2Version = 3 ;
indicatorOfParameter = 98 ;
}
#Snow melt
#Snowmelt
'3099' = {
table2Version = 3 ;
indicatorOfParameter = 99 ;
@ -678,7 +678,7 @@
table2Version = 3 ;
indicatorOfParameter = 85 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'228144' = {
table2Version = 3 ;
indicatorOfParameter = 65 ;
@ -858,7 +858,7 @@
table2Version = 2 ;
indicatorOfParameter = 10 ;
}
#large scale precipitation
#Large-scale precipitation
'3062' = {
table2Version = 2 ;
indicatorOfParameter = 62 ;
@ -1073,12 +1073,12 @@
table2Version = 2 ;
indicatorOfParameter = 48 ;
}
#U-component of current
#U-component of current
'3049' = {
table2Version = 2 ;
indicatorOfParameter = 49 ;
}
#V-component of current
#V-component of current
'3050' = {
table2Version = 2 ;
indicatorOfParameter = 50 ;
@ -1213,7 +1213,7 @@
table2Version = 2 ;
indicatorOfParameter = 98 ;
}
#Snow melt
#Snowmelt
'3099' = {
table2Version = 2 ;
indicatorOfParameter = 99 ;
@ -1359,7 +1359,7 @@
table2Version = 2 ;
indicatorOfParameter = 85 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'228144' = {
table2Version = 2 ;
indicatorOfParameter = 65 ;
@ -1539,7 +1539,7 @@
table2Version = 1 ;
indicatorOfParameter = 10 ;
}
#large scale precipitation
#Large-scale precipitation
'3062' = {
table2Version = 1 ;
indicatorOfParameter = 62 ;
@ -1754,12 +1754,12 @@
table2Version = 1 ;
indicatorOfParameter = 48 ;
}
#U-component of current
#U-component of current
'3049' = {
table2Version = 1 ;
indicatorOfParameter = 49 ;
}
#V-component of current
#V-component of current
'3050' = {
table2Version = 1 ;
indicatorOfParameter = 50 ;
@ -1894,7 +1894,7 @@
table2Version = 1 ;
indicatorOfParameter = 98 ;
}
#Snow melt
#Snowmelt
'3099' = {
table2Version = 1 ;
indicatorOfParameter = 99 ;
@ -2040,7 +2040,7 @@
table2Version = 1 ;
indicatorOfParameter = 85 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'228144' = {
table2Version = 1 ;
indicatorOfParameter = 65 ;

View File

@ -162,7 +162,7 @@
table2Version = 3 ;
indicatorOfParameter = 10 ;
}
#large scale precipitation
#Large-scale precipitation
'lsp' = {
table2Version = 3 ;
indicatorOfParameter = 62 ;
@ -392,12 +392,12 @@
table2Version = 3 ;
indicatorOfParameter = 48 ;
}
#U-component of current
#U-component of current
'ucurr' = {
table2Version = 3 ;
indicatorOfParameter = 49 ;
}
#V-component of current
#V-component of current
'vcurr' = {
table2Version = 3 ;
indicatorOfParameter = 50 ;
@ -532,7 +532,7 @@
table2Version = 3 ;
indicatorOfParameter = 98 ;
}
#Snow melt
#Snowmelt
'snom' = {
table2Version = 3 ;
indicatorOfParameter = 99 ;
@ -678,7 +678,7 @@
table2Version = 3 ;
indicatorOfParameter = 85 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'sf' = {
table2Version = 3 ;
indicatorOfParameter = 65 ;
@ -858,7 +858,7 @@
table2Version = 2 ;
indicatorOfParameter = 10 ;
}
#large scale precipitation
#Large-scale precipitation
'lsp' = {
table2Version = 2 ;
indicatorOfParameter = 62 ;
@ -1073,12 +1073,12 @@
table2Version = 2 ;
indicatorOfParameter = 48 ;
}
#U-component of current
#U-component of current
'ucurr' = {
table2Version = 2 ;
indicatorOfParameter = 49 ;
}
#V-component of current
#V-component of current
'vcurr' = {
table2Version = 2 ;
indicatorOfParameter = 50 ;
@ -1213,7 +1213,7 @@
table2Version = 2 ;
indicatorOfParameter = 98 ;
}
#Snow melt
#Snowmelt
'snom' = {
table2Version = 2 ;
indicatorOfParameter = 99 ;
@ -1359,7 +1359,7 @@
table2Version = 2 ;
indicatorOfParameter = 85 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'sf' = {
table2Version = 2 ;
indicatorOfParameter = 65 ;
@ -1539,7 +1539,7 @@
table2Version = 1 ;
indicatorOfParameter = 10 ;
}
#large scale precipitation
#Large-scale precipitation
'lsp' = {
table2Version = 1 ;
indicatorOfParameter = 62 ;
@ -1754,12 +1754,12 @@
table2Version = 1 ;
indicatorOfParameter = 48 ;
}
#U-component of current
#U-component of current
'ucurr' = {
table2Version = 1 ;
indicatorOfParameter = 49 ;
}
#V-component of current
#V-component of current
'vcurr' = {
table2Version = 1 ;
indicatorOfParameter = 50 ;
@ -1894,7 +1894,7 @@
table2Version = 1 ;
indicatorOfParameter = 98 ;
}
#Snow melt
#Snowmelt
'snom' = {
table2Version = 1 ;
indicatorOfParameter = 99 ;
@ -2040,7 +2040,7 @@
table2Version = 1 ;
indicatorOfParameter = 85 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'sf' = {
table2Version = 1 ;
indicatorOfParameter = 65 ;

View File

@ -162,7 +162,7 @@
table2Version = 3 ;
indicatorOfParameter = 10 ;
}
#large scale precipitation
#Large-scale precipitation
'kg m**-2' = {
table2Version = 3 ;
indicatorOfParameter = 62 ;
@ -392,12 +392,12 @@
table2Version = 3 ;
indicatorOfParameter = 48 ;
}
#U-component of current
#U-component of current
'm s**-1' = {
table2Version = 3 ;
indicatorOfParameter = 49 ;
}
#V-component of current
#V-component of current
'm s**-1' = {
table2Version = 3 ;
indicatorOfParameter = 50 ;
@ -532,7 +532,7 @@
table2Version = 3 ;
indicatorOfParameter = 98 ;
}
#Snow melt
#Snowmelt
'kg m**-2' = {
table2Version = 3 ;
indicatorOfParameter = 99 ;
@ -678,7 +678,7 @@
table2Version = 3 ;
indicatorOfParameter = 85 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'kg m**-2' = {
table2Version = 3 ;
indicatorOfParameter = 65 ;
@ -858,7 +858,7 @@
table2Version = 2 ;
indicatorOfParameter = 10 ;
}
#large scale precipitation
#Large-scale precipitation
'kg m**-2' = {
table2Version = 2 ;
indicatorOfParameter = 62 ;
@ -1073,12 +1073,12 @@
table2Version = 2 ;
indicatorOfParameter = 48 ;
}
#U-component of current
#U-component of current
'm s**-1' = {
table2Version = 2 ;
indicatorOfParameter = 49 ;
}
#V-component of current
#V-component of current
'm s**-1' = {
table2Version = 2 ;
indicatorOfParameter = 50 ;
@ -1213,7 +1213,7 @@
table2Version = 2 ;
indicatorOfParameter = 98 ;
}
#Snow melt
#Snowmelt
'kg m**-2' = {
table2Version = 2 ;
indicatorOfParameter = 99 ;
@ -1359,7 +1359,7 @@
table2Version = 2 ;
indicatorOfParameter = 85 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'kg m**-2' = {
table2Version = 2 ;
indicatorOfParameter = 65 ;
@ -1539,7 +1539,7 @@
table2Version = 1 ;
indicatorOfParameter = 10 ;
}
#large scale precipitation
#Large-scale precipitation
'kg m**-2' = {
table2Version = 1 ;
indicatorOfParameter = 62 ;
@ -1754,12 +1754,12 @@
table2Version = 1 ;
indicatorOfParameter = 48 ;
}
#U-component of current
#U-component of current
'm s**-1' = {
table2Version = 1 ;
indicatorOfParameter = 49 ;
}
#V-component of current
#V-component of current
'm s**-1' = {
table2Version = 1 ;
indicatorOfParameter = 50 ;
@ -1894,7 +1894,7 @@
table2Version = 1 ;
indicatorOfParameter = 98 ;
}
#Snow melt
#Snowmelt
'kg m**-2' = {
table2Version = 1 ;
indicatorOfParameter = 99 ;
@ -2040,7 +2040,7 @@
table2Version = 1 ;
indicatorOfParameter = 85 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'kg m**-2' = {
table2Version = 1 ;
indicatorOfParameter = 65 ;

View File

@ -508,7 +508,7 @@
parameterCategory = 6 ;
parameterNumber = 32 ;
}
#large scale precipitation
#Large-scale precipitation
'lsp' = {
discipline = 0 ;
parameterCategory = 1 ;
@ -6538,7 +6538,7 @@
parameterCategory = 2 ;
parameterNumber = 0 ;
}
#Snow melt
#Snowmelt
'snom' = {
discipline = 2 ;
parameterCategory = 0 ;
@ -8210,12 +8210,6 @@
parameterCategory = 0 ;
parameterNumber = 8 ;
}
#Volumetric soil moisture content
'soilw' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 9 ;
}
#Ground heat flux
'gflux' = {
discipline = 2 ;
@ -8306,60 +8300,12 @@
parameterCategory = 0 ;
parameterNumber = 27 ;
}
#Upper layer soil temperature
'uplst' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 1 ;
}
#Upper layer soil moisture
'uplsm' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 2 ;
}
#Lower layer soil moisture
'lowlsm' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 3 ;
}
#Bottom layer soil temperature
'botlst' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 4 ;
}
#Liquid volumetric soil moisture (non-frozen)
'soill' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 5 ;
}
#Number of soil layers in root zone
'rlyrs' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 6 ;
}
#Transpiration stress-onset (soil moisture)
'smref' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 7 ;
}
#Direct evaporation cease (soil moisture)
'smdry' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 8 ;
}
#Soil porosity
'poros' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 9 ;
}
#Liquid volumetric soil moisture (non-frozen)
'liqvsm' = {
discipline = 2 ;
@ -8913,7 +8859,7 @@
parameterCategory = 1 ;
parameterNumber = 60 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'sf' = {
discipline = 0 ;
parameterCategory = 1 ;

View File

@ -0,0 +1,54 @@
#Volumetric soil moisture content
'soilw' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 9 ;
}
#Upper layer soil temperature
'uplst' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 1 ;
}
#Upper layer soil moisture
'uplsm' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 2 ;
}
#Lower layer soil moisture
'lowlsm' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 3 ;
}
#Bottom layer soil temperature
'botlst' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 4 ;
}
#Liquid volumetric soil moisture (non-frozen)
'soill' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 5 ;
}
#Transpiration stress-onset (soil moisture)
'smref' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 7 ;
}
#Direct evaporation cease (soil moisture)
'smdry' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 8 ;
}
#Soil porosity
'poros' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 9 ;
}

View File

@ -2804,38 +2804,38 @@
parameterNumber = 194 ;
typeOfGeneratingProcess = 9 ;
}
#UV visible albedo for diffuse radiation, isotropic component
'UV visible albedo for diffuse radiation, isotropic component ' = {
#UV visible albedo for diffuse radiation, isotropic component
'UV visible albedo for diffuse radiation, isotropic component' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 192 ;
}
#UV visible albedo for diffuse radiation, volumetric component
'UV visible albedo for diffuse radiation, volumetric component ' = {
#UV visible albedo for diffuse radiation, volumetric component
'UV visible albedo for diffuse radiation, volumetric component' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 193 ;
}
#UV visible albedo for diffuse radiation, geometric component
'UV visible albedo for diffuse radiation, geometric component ' = {
#UV visible albedo for diffuse radiation, geometric component
'UV visible albedo for diffuse radiation, geometric component' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 194 ;
}
#Near IR albedo for diffuse radiation, isotropic component
'Near IR albedo for diffuse radiation, isotropic component ' = {
#Near IR albedo for diffuse radiation, isotropic component
'Near IR albedo for diffuse radiation, isotropic component' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 195 ;
}
#Near IR albedo for diffuse radiation, volumetric component
'Near IR albedo for diffuse radiation, volumetric component ' = {
#Near IR albedo for diffuse radiation, volumetric component
'Near IR albedo for diffuse radiation, volumetric component' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 196 ;
}
#Near IR albedo for diffuse radiation, geometric component
'Near IR albedo for diffuse radiation, geometric component ' = {
#Near IR albedo for diffuse radiation, geometric component
'Near IR albedo for diffuse radiation, geometric component' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 197 ;
@ -10996,8 +10996,8 @@
parameterCategory = 218 ;
parameterNumber = 206 ;
}
#Column integrated mass density of Anthropogenic volatile organic compounds
'Column integrated mass density of Anthropogenic volatile organic compounds ' = {
#Column integrated mass density of Anthropogenic volatile organic compounds
'Column integrated mass density of Anthropogenic volatile organic compounds' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 20 ;
@ -11005,8 +11005,8 @@
constituentType = 65532 ;
is_chemical = 1 ;
}
#Column integrated mass density of Biomass burning volatile organic compounds
'Column integrated mass density of Biomass burning volatile organic compounds ' = {
#Column integrated mass density of Biomass burning volatile organic compounds
'Column integrated mass density of Biomass burning volatile organic compounds' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 20 ;
@ -12334,8 +12334,8 @@
parameterCategory = 219 ;
parameterNumber = 220 ;
}
#Atmosphere emission mass flux of Anthropogenic volatile organic compounds
'Atmosphere emission mass flux of Anthropogenic volatile organic compounds ' = {
#Atmosphere emission mass flux of Anthropogenic volatile organic compounds
'Atmosphere emission mass flux of Anthropogenic volatile organic compounds' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 20 ;
@ -12343,8 +12343,8 @@
constituentType = 65532 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Biomass burning volatile organic compounds
'Atmosphere emission mass flux of Biomass burning volatile organic compounds ' = {
#Atmosphere emission mass flux of Biomass burning volatile organic compounds
'Atmosphere emission mass flux of Biomass burning volatile organic compounds' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 20 ;
@ -13588,8 +13588,8 @@
parameterCategory = 221 ;
parameterNumber = 206 ;
}
#Dry deposition velocity of Anthropogenic volatile organic compounds
'Dry deposition velocity of Anthropogenic volatile organic compounds ' = {
#Dry deposition velocity of Anthropogenic volatile organic compounds
'Dry deposition velocity of Anthropogenic volatile organic compounds' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 20 ;
@ -13597,8 +13597,8 @@
constituentType = 65532 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Biomass burning volatile organic compounds
'Dry deposition velocity of Biomass burning volatile organic compounds ' = {
#Dry deposition velocity of Biomass burning volatile organic compounds
'Dry deposition velocity of Biomass burning volatile organic compounds' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 20 ;
@ -13656,8 +13656,8 @@
typeOfStatisticalProcessing = 1 ;
is_chemical = 1 ;
}
#Time-integrated wet deposition mass flux of Condensable gas type 1
'Time-integrated wet deposition mass flux of Condensable gas type 1 ' = {
#Time-integrated wet deposition mass flux of Condensable gas type 1
'Time-integrated wet deposition mass flux of Condensable gas type 1' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 20 ;
@ -13666,8 +13666,8 @@
typeOfStatisticalProcessing = 1 ;
is_chemical = 1 ;
}
#Time-integrated wet deposition mass flux of Condensable gas type 2a
'Time-integrated wet deposition mass flux of Condensable gas type 2a ' = {
#Time-integrated wet deposition mass flux of Condensable gas type 2a
'Time-integrated wet deposition mass flux of Condensable gas type 2a' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 20 ;
@ -13676,8 +13676,8 @@
typeOfStatisticalProcessing = 1 ;
is_chemical = 1 ;
}
#Time-integrated wet deposition mass flux of Condensable gas type 2b
'Time-integrated wet deposition mass flux of Condensable gas type 2b ' = {
#Time-integrated wet deposition mass flux of Condensable gas type 2b
'Time-integrated wet deposition mass flux of Condensable gas type 2b' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 20 ;

View File

@ -2804,37 +2804,37 @@
parameterNumber = 194 ;
typeOfGeneratingProcess = 9 ;
}
#UV visible albedo for diffuse radiation, isotropic component
#UV visible albedo for diffuse radiation, isotropic component
'210192' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 192 ;
}
#UV visible albedo for diffuse radiation, volumetric component
#UV visible albedo for diffuse radiation, volumetric component
'210193' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 193 ;
}
#UV visible albedo for diffuse radiation, geometric component
#UV visible albedo for diffuse radiation, geometric component
'210194' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 194 ;
}
#Near IR albedo for diffuse radiation, isotropic component
#Near IR albedo for diffuse radiation, isotropic component
'210195' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 195 ;
}
#Near IR albedo for diffuse radiation, volumetric component
#Near IR albedo for diffuse radiation, volumetric component
'210196' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 196 ;
}
#Near IR albedo for diffuse radiation, geometric component
#Near IR albedo for diffuse radiation, geometric component
'210197' = {
discipline = 192 ;
parameterCategory = 210 ;
@ -10996,7 +10996,7 @@
parameterCategory = 218 ;
parameterNumber = 206 ;
}
#Column integrated mass density of Anthropogenic volatile organic compounds
#Column integrated mass density of Anthropogenic volatile organic compounds
'218231' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -11005,7 +11005,7 @@
constituentType = 65532 ;
is_chemical = 1 ;
}
#Column integrated mass density of Biomass burning volatile organic compounds
#Column integrated mass density of Biomass burning volatile organic compounds
'218232' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -12334,7 +12334,7 @@
parameterCategory = 219 ;
parameterNumber = 220 ;
}
#Atmosphere emission mass flux of Anthropogenic volatile organic compounds
#Atmosphere emission mass flux of Anthropogenic volatile organic compounds
'219231' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -12343,7 +12343,7 @@
constituentType = 65532 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Biomass burning volatile organic compounds
#Atmosphere emission mass flux of Biomass burning volatile organic compounds
'219232' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -13588,7 +13588,7 @@
parameterCategory = 221 ;
parameterNumber = 206 ;
}
#Dry deposition velocity of Anthropogenic volatile organic compounds
#Dry deposition velocity of Anthropogenic volatile organic compounds
'221231' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -13597,7 +13597,7 @@
constituentType = 65532 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Biomass burning volatile organic compounds
#Dry deposition velocity of Biomass burning volatile organic compounds
'221232' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -13656,7 +13656,7 @@
typeOfStatisticalProcessing = 1 ;
is_chemical = 1 ;
}
#Time-integrated wet deposition mass flux of Condensable gas type 1
#Time-integrated wet deposition mass flux of Condensable gas type 1
'223186' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -13666,7 +13666,7 @@
typeOfStatisticalProcessing = 1 ;
is_chemical = 1 ;
}
#Time-integrated wet deposition mass flux of Condensable gas type 2a
#Time-integrated wet deposition mass flux of Condensable gas type 2a
'223187' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -13676,7 +13676,7 @@
typeOfStatisticalProcessing = 1 ;
is_chemical = 1 ;
}
#Time-integrated wet deposition mass flux of Condensable gas type 2b
#Time-integrated wet deposition mass flux of Condensable gas type 2b
'223188' = {
localTablesVersion = 1 ;
discipline = 0 ;

View File

@ -2804,37 +2804,37 @@
parameterNumber = 194 ;
typeOfGeneratingProcess = 9 ;
}
#UV visible albedo for diffuse radiation, isotropic component
#UV visible albedo for diffuse radiation, isotropic component
'aluvdi' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 192 ;
}
#UV visible albedo for diffuse radiation, volumetric component
#UV visible albedo for diffuse radiation, volumetric component
'aluvdv' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 193 ;
}
#UV visible albedo for diffuse radiation, geometric component
#UV visible albedo for diffuse radiation, geometric component
'aluvdg' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 194 ;
}
#Near IR albedo for diffuse radiation, isotropic component
#Near IR albedo for diffuse radiation, isotropic component
'alnidi' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 195 ;
}
#Near IR albedo for diffuse radiation, volumetric component
#Near IR albedo for diffuse radiation, volumetric component
'alnidv' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 196 ;
}
#Near IR albedo for diffuse radiation, geometric component
#Near IR albedo for diffuse radiation, geometric component
'alnidg' = {
discipline = 192 ;
parameterCategory = 210 ;
@ -10996,7 +10996,7 @@
parameterCategory = 218 ;
parameterNumber = 206 ;
}
#Column integrated mass density of Anthropogenic volatile organic compounds
#Column integrated mass density of Anthropogenic volatile organic compounds
'tc_VOCA' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -11005,7 +11005,7 @@
constituentType = 65532 ;
is_chemical = 1 ;
}
#Column integrated mass density of Biomass burning volatile organic compounds
#Column integrated mass density of Biomass burning volatile organic compounds
'tc_VOCBB' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -12334,7 +12334,7 @@
parameterCategory = 219 ;
parameterNumber = 220 ;
}
#Atmosphere emission mass flux of Anthropogenic volatile organic compounds
#Atmosphere emission mass flux of Anthropogenic volatile organic compounds
'e_VOCA' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -12343,7 +12343,7 @@
constituentType = 65532 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Biomass burning volatile organic compounds
#Atmosphere emission mass flux of Biomass burning volatile organic compounds
'e_VOCBB' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -13588,7 +13588,7 @@
parameterCategory = 221 ;
parameterNumber = 206 ;
}
#Dry deposition velocity of Anthropogenic volatile organic compounds
#Dry deposition velocity of Anthropogenic volatile organic compounds
'dv_VOCA' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -13597,7 +13597,7 @@
constituentType = 65532 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Biomass burning volatile organic compounds
#Dry deposition velocity of Biomass burning volatile organic compounds
'dv_VOCBB' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -13656,7 +13656,7 @@
typeOfStatisticalProcessing = 1 ;
is_chemical = 1 ;
}
#Time-integrated wet deposition mass flux of Condensable gas type 1
#Time-integrated wet deposition mass flux of Condensable gas type 1
'acc_wet_depm_SOG1' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -13666,7 +13666,7 @@
typeOfStatisticalProcessing = 1 ;
is_chemical = 1 ;
}
#Time-integrated wet deposition mass flux of Condensable gas type 2a
#Time-integrated wet deposition mass flux of Condensable gas type 2a
'acc_wet_depm_SOG2A' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -13676,7 +13676,7 @@
typeOfStatisticalProcessing = 1 ;
is_chemical = 1 ;
}
#Time-integrated wet deposition mass flux of Condensable gas type 2b
#Time-integrated wet deposition mass flux of Condensable gas type 2b
'acc_wet_depm_SOG2B' = {
localTablesVersion = 1 ;
discipline = 0 ;

View File

@ -2804,37 +2804,37 @@
parameterNumber = 194 ;
typeOfGeneratingProcess = 9 ;
}
#UV visible albedo for diffuse radiation, isotropic component
#UV visible albedo for diffuse radiation, isotropic component
'(0 - 1)' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 192 ;
}
#UV visible albedo for diffuse radiation, volumetric component
#UV visible albedo for diffuse radiation, volumetric component
'(0 - 1)' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 193 ;
}
#UV visible albedo for diffuse radiation, geometric component
#UV visible albedo for diffuse radiation, geometric component
'(0 - 1)' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 194 ;
}
#Near IR albedo for diffuse radiation, isotropic component
#Near IR albedo for diffuse radiation, isotropic component
'(0 - 1)' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 195 ;
}
#Near IR albedo for diffuse radiation, volumetric component
#Near IR albedo for diffuse radiation, volumetric component
'(0 - 1)' = {
discipline = 192 ;
parameterCategory = 210 ;
parameterNumber = 196 ;
}
#Near IR albedo for diffuse radiation, geometric component
#Near IR albedo for diffuse radiation, geometric component
'(0 - 1)' = {
discipline = 192 ;
parameterCategory = 210 ;
@ -10996,7 +10996,7 @@
parameterCategory = 218 ;
parameterNumber = 206 ;
}
#Column integrated mass density of Anthropogenic volatile organic compounds
#Column integrated mass density of Anthropogenic volatile organic compounds
'kg m**-2' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -11005,7 +11005,7 @@
constituentType = 65532 ;
is_chemical = 1 ;
}
#Column integrated mass density of Biomass burning volatile organic compounds
#Column integrated mass density of Biomass burning volatile organic compounds
'kg m**-2' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -12334,7 +12334,7 @@
parameterCategory = 219 ;
parameterNumber = 220 ;
}
#Atmosphere emission mass flux of Anthropogenic volatile organic compounds
#Atmosphere emission mass flux of Anthropogenic volatile organic compounds
'kg m**-2 s**-1' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -12343,7 +12343,7 @@
constituentType = 65532 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Biomass burning volatile organic compounds
#Atmosphere emission mass flux of Biomass burning volatile organic compounds
'kg m**-2 s**-1' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -13588,7 +13588,7 @@
parameterCategory = 221 ;
parameterNumber = 206 ;
}
#Dry deposition velocity of Anthropogenic volatile organic compounds
#Dry deposition velocity of Anthropogenic volatile organic compounds
'm s**-1' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -13597,7 +13597,7 @@
constituentType = 65532 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Biomass burning volatile organic compounds
#Dry deposition velocity of Biomass burning volatile organic compounds
'm s**-1' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -13656,7 +13656,7 @@
typeOfStatisticalProcessing = 1 ;
is_chemical = 1 ;
}
#Time-integrated wet deposition mass flux of Condensable gas type 1
#Time-integrated wet deposition mass flux of Condensable gas type 1
'kg m**-2' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -13666,7 +13666,7 @@
typeOfStatisticalProcessing = 1 ;
is_chemical = 1 ;
}
#Time-integrated wet deposition mass flux of Condensable gas type 2a
#Time-integrated wet deposition mass flux of Condensable gas type 2a
'kg m**-2' = {
localTablesVersion = 1 ;
discipline = 0 ;
@ -13676,7 +13676,7 @@
typeOfStatisticalProcessing = 1 ;
is_chemical = 1 ;
}
#Time-integrated wet deposition mass flux of Condensable gas type 2b
#Time-integrated wet deposition mass flux of Condensable gas type 2b
'kg m**-2' = {
localTablesVersion = 1 ;
discipline = 0 ;

View File

@ -173,8 +173,8 @@
parameterCategory = 4 ;
parameterNumber = 193 ;
}
#UV index
'UV index ' = {
#UV index
'UV index' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 196 ;

View File

@ -173,7 +173,7 @@
parameterCategory = 4 ;
parameterNumber = 193 ;
}
#UV index
#UV index
'260094' = {
discipline = 0 ;
parameterCategory = 7 ;

View File

@ -173,7 +173,7 @@
parameterCategory = 4 ;
parameterNumber = 193 ;
}
#UV index
#UV index
'uvi' = {
discipline = 0 ;
parameterCategory = 7 ;

View File

@ -173,7 +173,7 @@
parameterCategory = 4 ;
parameterNumber = 193 ;
}
#UV index
#UV index
'Numeric' = {
discipline = 0 ;
parameterCategory = 7 ;

View File

@ -201,7 +201,7 @@
scaledValueOfSecondFixedSurface = missing() ;
scaleFactorOfSecondFixedSurface = missing() ;
}
#Snow melt
#Snowmelt
'snom' = {
discipline = 0 ;
parameterCategory = 1 ;

View File

@ -201,8 +201,8 @@
scaledValueOfSecondFixedSurface = missing() ;
scaleFactorOfSecondFixedSurface = missing() ;
}
#Snow melt
'Snow melt' = {
#Snowmelt
'Snowmelt' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 16 ;

View File

@ -201,7 +201,7 @@
scaledValueOfSecondFixedSurface = missing() ;
scaleFactorOfSecondFixedSurface = missing() ;
}
#Snow melt
#Snowmelt
'3099' = {
discipline = 0 ;
parameterCategory = 1 ;

View File

@ -201,7 +201,7 @@
scaledValueOfSecondFixedSurface = missing() ;
scaleFactorOfSecondFixedSurface = missing() ;
}
#Snow melt
#Snowmelt
'snom' = {
discipline = 0 ;
parameterCategory = 1 ;

View File

@ -201,7 +201,7 @@
scaledValueOfSecondFixedSurface = missing() ;
scaleFactorOfSecondFixedSurface = missing() ;
}
#Snow melt
#Snowmelt
'kg m**-2' = {
discipline = 0 ;
parameterCategory = 1 ;

View File

@ -508,8 +508,8 @@
parameterCategory = 6 ;
parameterNumber = 32 ;
}
#large scale precipitation
'large scale precipitation' = {
#Large-scale precipitation
'Large-scale precipitation' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 54 ;
@ -1178,8 +1178,8 @@
constituentType = 60057 ;
is_chemical = 1 ;
}
#Column integrated mass density of Volcanic sulfur dioxide
'Column integrated mass density of Volcanic sulfur dioxide ' = {
#Column integrated mass density of Volcanic sulfur dioxide
'Column integrated mass density of Volcanic sulfur dioxide' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 1 ;
@ -1187,80 +1187,80 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Column integrated mass density of Aromatic peroxy radical
'Column integrated mass density of Aromatic peroxy radical ' = {
#Column integrated mass density of Aromatic peroxy radical
'Column integrated mass density of Aromatic peroxy radical' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 1 ;
constituentType = 60029 ;
is_chemical = 1 ;
}
#Column integrated mass density of Ethyne
'Column integrated mass density of Ethyne ' = {
#Column integrated mass density of Ethyne
'Column integrated mass density of Ethyne' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 1 ;
constituentType = 10010 ;
is_chemical = 1 ;
}
#Column integrated mass density of Acetonitrile
'Column integrated mass density of Acetonitrile ' = {
#Column integrated mass density of Acetonitrile
'Column integrated mass density of Acetonitrile' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 1 ;
constituentType = 10007 ;
is_chemical = 1 ;
}
#Column integrated mass density of Methyl peroxy nitrate
'Column integrated mass density of Methyl peroxy nitrate ' = {
#Column integrated mass density of Methyl peroxy nitrate
'Column integrated mass density of Methyl peroxy nitrate' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 1 ;
constituentType = 10055 ;
is_chemical = 1 ;
}
#Column integrated mass density of Hydrogen cyanide
'Column integrated mass density of Hydrogen cyanide ' = {
#Column integrated mass density of Hydrogen cyanide
'Column integrated mass density of Hydrogen cyanide' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 1 ;
constituentType = 10006 ;
is_chemical = 1 ;
}
#Column integrated mass density of Hydroperoxy aldehydes type 1
'Column integrated mass density of Hydroperoxy aldehydes type 1 ' = {
#Column integrated mass density of Hydroperoxy aldehydes type 1
'Column integrated mass density of Hydroperoxy aldehydes type 1' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 1 ;
constituentType = 60058 ;
is_chemical = 1 ;
}
#Column integrated mass density of Hydroperoxy aldehydes type 2
'Column integrated mass density of Hydroperoxy aldehydes type 2 ' = {
#Column integrated mass density of Hydroperoxy aldehydes type 2
'Column integrated mass density of Hydroperoxy aldehydes type 2' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 1 ;
constituentType = 60059 ;
is_chemical = 1 ;
}
#Column integrated mass density of Isoprene peroxy type B
'Column integrated mass density of Isoprene peroxy type B ' = {
#Column integrated mass density of Isoprene peroxy type B
'Column integrated mass density of Isoprene peroxy type B' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 1 ;
constituentType = 60056 ;
is_chemical = 1 ;
}
#Column integrated mass density of Isoprene peroxy type D
'Column integrated mass density of Isoprene peroxy type D ' = {
#Column integrated mass density of Isoprene peroxy type D
'Column integrated mass density of Isoprene peroxy type D' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 1 ;
constituentType = 60057 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Volcanic sulfur dioxide
'Atmosphere emission mass flux of Volcanic sulfur dioxide ' = {
#Atmosphere emission mass flux of Volcanic sulfur dioxide
'Atmosphere emission mass flux of Volcanic sulfur dioxide' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 3 ;
@ -1268,80 +1268,80 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Atmosphere emission mass flux of Aromatic peroxy radical
'Atmosphere emission mass flux of Aromatic peroxy radical ' = {
#Atmosphere emission mass flux of Aromatic peroxy radical
'Atmosphere emission mass flux of Aromatic peroxy radical' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 3 ;
constituentType = 60029 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Ethyne
'Atmosphere emission mass flux of Ethyne ' = {
#Atmosphere emission mass flux of Ethyne
'Atmosphere emission mass flux of Ethyne' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 3 ;
constituentType = 10010 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Acetonitrile
'Atmosphere emission mass flux of Acetonitrile ' = {
#Atmosphere emission mass flux of Acetonitrile
'Atmosphere emission mass flux of Acetonitrile' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 3 ;
constituentType = 10007 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Methyl peroxy nitrate
'Atmosphere emission mass flux of Methyl peroxy nitrate ' = {
#Atmosphere emission mass flux of Methyl peroxy nitrate
'Atmosphere emission mass flux of Methyl peroxy nitrate' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 3 ;
constituentType = 10055 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Hydrogen cyanide
'Atmosphere emission mass flux of Hydrogen cyanide ' = {
#Atmosphere emission mass flux of Hydrogen cyanide
'Atmosphere emission mass flux of Hydrogen cyanide' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 3 ;
constituentType = 10006 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 1
'Atmosphere emission mass flux of Hydroperoxy aldehydes type 1 ' = {
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 1
'Atmosphere emission mass flux of Hydroperoxy aldehydes type 1' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 3 ;
constituentType = 60058 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 2
'Atmosphere emission mass flux of Hydroperoxy aldehydes type 2 ' = {
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 2
'Atmosphere emission mass flux of Hydroperoxy aldehydes type 2' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 3 ;
constituentType = 60059 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Isoprene peroxy type B
'Atmosphere emission mass flux of Isoprene peroxy type B ' = {
#Atmosphere emission mass flux of Isoprene peroxy type B
'Atmosphere emission mass flux of Isoprene peroxy type B' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 3 ;
constituentType = 60056 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Isoprene peroxy type D
'Atmosphere emission mass flux of Isoprene peroxy type D ' = {
#Atmosphere emission mass flux of Isoprene peroxy type D
'Atmosphere emission mass flux of Isoprene peroxy type D' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 3 ;
constituentType = 60057 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Volcanic sulfur dioxide
'Dry deposition velocity of Volcanic sulfur dioxide ' = {
#Dry deposition velocity of Volcanic sulfur dioxide
'Dry deposition velocity of Volcanic sulfur dioxide' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 15 ;
@ -1349,72 +1349,72 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Dry deposition velocity of Aromatic peroxy radical
'Dry deposition velocity of Aromatic peroxy radical ' = {
#Dry deposition velocity of Aromatic peroxy radical
'Dry deposition velocity of Aromatic peroxy radical' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 15 ;
constituentType = 60029 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Ethyne
'Dry deposition velocity of Ethyne ' = {
#Dry deposition velocity of Ethyne
'Dry deposition velocity of Ethyne' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 15 ;
constituentType = 10010 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Acetonitrile
'Dry deposition velocity of Acetonitrile ' = {
#Dry deposition velocity of Acetonitrile
'Dry deposition velocity of Acetonitrile' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 15 ;
constituentType = 10007 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Methyl peroxy nitrate
'Dry deposition velocity of Methyl peroxy nitrate ' = {
#Dry deposition velocity of Methyl peroxy nitrate
'Dry deposition velocity of Methyl peroxy nitrate' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 15 ;
constituentType = 10055 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Hydrogen cyanide
'Dry deposition velocity of Hydrogen cyanide ' = {
#Dry deposition velocity of Hydrogen cyanide
'Dry deposition velocity of Hydrogen cyanide' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 15 ;
constituentType = 10006 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Hydroperoxy aldehydes type 1
'Dry deposition velocity of Hydroperoxy aldehydes type 1 ' = {
#Dry deposition velocity of Hydroperoxy aldehydes type 1
'Dry deposition velocity of Hydroperoxy aldehydes type 1' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 15 ;
constituentType = 60058 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Hydroperoxy aldehydes type 2
'Dry deposition velocity of Hydroperoxy aldehydes type 2 ' = {
#Dry deposition velocity of Hydroperoxy aldehydes type 2
'Dry deposition velocity of Hydroperoxy aldehydes type 2' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 15 ;
constituentType = 60059 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Isoprene peroxy type B
'Dry deposition velocity of Isoprene peroxy type B ' = {
#Dry deposition velocity of Isoprene peroxy type B
'Dry deposition velocity of Isoprene peroxy type B' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 15 ;
constituentType = 60056 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Isoprene peroxy type D
'Dry deposition velocity of Isoprene peroxy type D ' = {
#Dry deposition velocity of Isoprene peroxy type D
'Dry deposition velocity of Isoprene peroxy type D' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 15 ;
@ -6538,8 +6538,8 @@
parameterCategory = 2 ;
parameterNumber = 0 ;
}
#Snow melt
'Snow melt' = {
#Snowmelt
'Snowmelt' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 41 ;
@ -7676,8 +7676,8 @@
parameterCategory = 4 ;
parameterNumber = 50 ;
}
#UV index
'UV index ' = {
#UV index
'UV index' = {
discipline = 0 ;
parameterCategory = 4 ;
parameterNumber = 51 ;
@ -8210,12 +8210,6 @@
parameterCategory = 0 ;
parameterNumber = 8 ;
}
#Volumetric soil moisture content
'Volumetric soil moisture content' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 9 ;
}
#Ground heat flux
'Ground heat flux' = {
discipline = 2 ;
@ -8306,60 +8300,12 @@
parameterCategory = 0 ;
parameterNumber = 27 ;
}
#Upper layer soil temperature
'Upper layer soil temperature' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 1 ;
}
#Upper layer soil moisture
'Upper layer soil moisture' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 2 ;
}
#Lower layer soil moisture
'Lower layer soil moisture' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 3 ;
}
#Bottom layer soil temperature
'Bottom layer soil temperature' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 4 ;
}
#Liquid volumetric soil moisture (non-frozen)
'Liquid volumetric soil moisture (non-frozen)' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 5 ;
}
#Number of soil layers in root zone
'Number of soil layers in root zone' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 6 ;
}
#Transpiration stress-onset (soil moisture)
'Transpiration stress-onset (soil moisture)' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 7 ;
}
#Direct evaporation cease (soil moisture)
'Direct evaporation cease (soil moisture)' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 8 ;
}
#Soil porosity
'Soil porosity' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 9 ;
}
#Liquid volumetric soil moisture (non-frozen)
'Liquid volumetric soil moisture (non-frozen)' = {
discipline = 2 ;
@ -8432,8 +8378,8 @@
parameterCategory = 1 ;
parameterNumber = 3 ;
}
#Estimated u component of wind
'Estimated u component of wind ' = {
#Estimated u component of wind
'Estimated u component of wind' = {
discipline = 3 ;
parameterCategory = 1 ;
parameterNumber = 4 ;
@ -8696,14 +8642,14 @@
parameterCategory = 2 ;
parameterNumber = 16 ;
}
#U-component of current
'U-component of current ' = {
#U-component of current
'U-component of current' = {
discipline = 10 ;
parameterCategory = 1 ;
parameterNumber = 2 ;
}
#V-component of current
'V-component of current ' = {
#V-component of current
'V-component of current' = {
discipline = 10 ;
parameterCategory = 1 ;
parameterNumber = 3 ;
@ -8913,8 +8859,8 @@
parameterCategory = 1 ;
parameterNumber = 60 ;
}
#Snow Fall water equivalent
'Snow Fall water equivalent' = {
#Snowfall water equivalent
'Snowfall water equivalent' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 53 ;

View File

@ -0,0 +1,54 @@
#Volumetric soil moisture content
'Volumetric soil moisture content' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 9 ;
}
#Upper layer soil temperature
'Upper layer soil temperature' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 1 ;
}
#Upper layer soil moisture
'Upper layer soil moisture' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 2 ;
}
#Lower layer soil moisture
'Lower layer soil moisture' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 3 ;
}
#Bottom layer soil temperature
'Bottom layer soil temperature' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 4 ;
}
#Liquid volumetric soil moisture (non-frozen)
'Liquid volumetric soil moisture (non-frozen)' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 5 ;
}
#Transpiration stress-onset (soil moisture)
'Transpiration stress-onset (soil moisture)' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 7 ;
}
#Direct evaporation cease (soil moisture)
'Direct evaporation cease (soil moisture)' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 8 ;
}
#Soil porosity
'Soil porosity' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 9 ;
}

View File

@ -508,7 +508,7 @@
parameterCategory = 6 ;
parameterNumber = 32 ;
}
#large scale precipitation
#Large-scale precipitation
'3062' = {
discipline = 0 ;
parameterCategory = 1 ;
@ -1178,7 +1178,7 @@
constituentType = 60057 ;
is_chemical = 1 ;
}
#Column integrated mass density of Volcanic sulfur dioxide
#Column integrated mass density of Volcanic sulfur dioxide
'218221' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1187,7 +1187,7 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Column integrated mass density of Aromatic peroxy radical
#Column integrated mass density of Aromatic peroxy radical
'218222' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1195,7 +1195,7 @@
constituentType = 60029 ;
is_chemical = 1 ;
}
#Column integrated mass density of Ethyne
#Column integrated mass density of Ethyne
'218223' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1203,7 +1203,7 @@
constituentType = 10010 ;
is_chemical = 1 ;
}
#Column integrated mass density of Acetonitrile
#Column integrated mass density of Acetonitrile
'218224' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1211,7 +1211,7 @@
constituentType = 10007 ;
is_chemical = 1 ;
}
#Column integrated mass density of Methyl peroxy nitrate
#Column integrated mass density of Methyl peroxy nitrate
'218225' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1219,7 +1219,7 @@
constituentType = 10055 ;
is_chemical = 1 ;
}
#Column integrated mass density of Hydrogen cyanide
#Column integrated mass density of Hydrogen cyanide
'218226' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1227,7 +1227,7 @@
constituentType = 10006 ;
is_chemical = 1 ;
}
#Column integrated mass density of Hydroperoxy aldehydes type 1
#Column integrated mass density of Hydroperoxy aldehydes type 1
'218227' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1235,7 +1235,7 @@
constituentType = 60058 ;
is_chemical = 1 ;
}
#Column integrated mass density of Hydroperoxy aldehydes type 2
#Column integrated mass density of Hydroperoxy aldehydes type 2
'218228' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1243,7 +1243,7 @@
constituentType = 60059 ;
is_chemical = 1 ;
}
#Column integrated mass density of Isoprene peroxy type B
#Column integrated mass density of Isoprene peroxy type B
'218229' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1251,7 +1251,7 @@
constituentType = 60056 ;
is_chemical = 1 ;
}
#Column integrated mass density of Isoprene peroxy type D
#Column integrated mass density of Isoprene peroxy type D
'218230' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1259,7 +1259,7 @@
constituentType = 60057 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Volcanic sulfur dioxide
#Atmosphere emission mass flux of Volcanic sulfur dioxide
'219221' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1268,7 +1268,7 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Atmosphere emission mass flux of Aromatic peroxy radical
#Atmosphere emission mass flux of Aromatic peroxy radical
'219222' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1276,7 +1276,7 @@
constituentType = 60029 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Ethyne
#Atmosphere emission mass flux of Ethyne
'219223' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1284,7 +1284,7 @@
constituentType = 10010 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Acetonitrile
#Atmosphere emission mass flux of Acetonitrile
'219224' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1292,7 +1292,7 @@
constituentType = 10007 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Methyl peroxy nitrate
#Atmosphere emission mass flux of Methyl peroxy nitrate
'219225' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1300,7 +1300,7 @@
constituentType = 10055 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Hydrogen cyanide
#Atmosphere emission mass flux of Hydrogen cyanide
'219226' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1308,7 +1308,7 @@
constituentType = 10006 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 1
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 1
'219227' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1316,7 +1316,7 @@
constituentType = 60058 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 2
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 2
'219228' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1324,7 +1324,7 @@
constituentType = 60059 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Isoprene peroxy type B
#Atmosphere emission mass flux of Isoprene peroxy type B
'219229' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1332,7 +1332,7 @@
constituentType = 60056 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Isoprene peroxy type D
#Atmosphere emission mass flux of Isoprene peroxy type D
'219230' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1340,7 +1340,7 @@
constituentType = 60057 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Volcanic sulfur dioxide
#Dry deposition velocity of Volcanic sulfur dioxide
'221221' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1349,7 +1349,7 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Dry deposition velocity of Aromatic peroxy radical
#Dry deposition velocity of Aromatic peroxy radical
'221222' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1357,7 +1357,7 @@
constituentType = 60029 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Ethyne
#Dry deposition velocity of Ethyne
'221223' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1365,7 +1365,7 @@
constituentType = 10010 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Acetonitrile
#Dry deposition velocity of Acetonitrile
'221224' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1373,7 +1373,7 @@
constituentType = 10007 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Methyl peroxy nitrate
#Dry deposition velocity of Methyl peroxy nitrate
'221225' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1381,7 +1381,7 @@
constituentType = 10055 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Hydrogen cyanide
#Dry deposition velocity of Hydrogen cyanide
'221226' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1389,7 +1389,7 @@
constituentType = 10006 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Hydroperoxy aldehydes type 1
#Dry deposition velocity of Hydroperoxy aldehydes type 1
'221227' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1397,7 +1397,7 @@
constituentType = 60058 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Hydroperoxy aldehydes type 2
#Dry deposition velocity of Hydroperoxy aldehydes type 2
'221228' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1405,7 +1405,7 @@
constituentType = 60059 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Isoprene peroxy type B
#Dry deposition velocity of Isoprene peroxy type B
'221229' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1413,7 +1413,7 @@
constituentType = 60056 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Isoprene peroxy type D
#Dry deposition velocity of Isoprene peroxy type D
'221230' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -6538,7 +6538,7 @@
parameterCategory = 2 ;
parameterNumber = 0 ;
}
#Snow melt
#Snowmelt
'3099' = {
discipline = 2 ;
parameterCategory = 0 ;
@ -7676,7 +7676,7 @@
parameterCategory = 4 ;
parameterNumber = 50 ;
}
#UV index
#UV index
'260094' = {
discipline = 0 ;
parameterCategory = 4 ;
@ -8210,12 +8210,6 @@
parameterCategory = 0 ;
parameterNumber = 8 ;
}
#Volumetric soil moisture content
'260185' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 9 ;
}
#Ground heat flux
'260186' = {
discipline = 2 ;
@ -8306,60 +8300,12 @@
parameterCategory = 0 ;
parameterNumber = 27 ;
}
#Upper layer soil temperature
'260201' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 1 ;
}
#Upper layer soil moisture
'260202' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 2 ;
}
#Lower layer soil moisture
'260203' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 3 ;
}
#Bottom layer soil temperature
'260204' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 4 ;
}
#Liquid volumetric soil moisture (non-frozen)
'260205' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 5 ;
}
#Number of soil layers in root zone
'260206' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 6 ;
}
#Transpiration stress-onset (soil moisture)
'260207' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 7 ;
}
#Direct evaporation cease (soil moisture)
'260208' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 8 ;
}
#Soil porosity
'260209' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 9 ;
}
#Liquid volumetric soil moisture (non-frozen)
'260210' = {
discipline = 2 ;
@ -8432,7 +8378,7 @@
parameterCategory = 1 ;
parameterNumber = 3 ;
}
#Estimated u component of wind
#Estimated u component of wind
'260222' = {
discipline = 3 ;
parameterCategory = 1 ;
@ -8696,13 +8642,13 @@
parameterCategory = 2 ;
parameterNumber = 16 ;
}
#U-component of current
#U-component of current
'3049' = {
discipline = 10 ;
parameterCategory = 1 ;
parameterNumber = 2 ;
}
#V-component of current
#V-component of current
'3050' = {
discipline = 10 ;
parameterCategory = 1 ;
@ -8913,7 +8859,7 @@
parameterCategory = 1 ;
parameterNumber = 60 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'228144' = {
discipline = 0 ;
parameterCategory = 1 ;

View File

@ -0,0 +1,54 @@
#Volumetric soil moisture content
'260185' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 9 ;
}
#Upper layer soil temperature
'260201' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 1 ;
}
#Upper layer soil moisture
'260202' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 2 ;
}
#Lower layer soil moisture
'260203' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 3 ;
}
#Bottom layer soil temperature
'260204' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 4 ;
}
#Liquid volumetric soil moisture (non-frozen)
'260205' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 5 ;
}
#Transpiration stress-onset (soil moisture)
'260207' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 7 ;
}
#Direct evaporation cease (soil moisture)
'260208' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 8 ;
}
#Soil porosity
'260209' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 9 ;
}

View File

@ -508,7 +508,7 @@
parameterCategory = 6 ;
parameterNumber = 32 ;
}
#large scale precipitation
#Large-scale precipitation
'lsp' = {
discipline = 0 ;
parameterCategory = 1 ;
@ -1178,7 +1178,7 @@
constituentType = 60057 ;
is_chemical = 1 ;
}
#Column integrated mass density of Volcanic sulfur dioxide
#Column integrated mass density of Volcanic sulfur dioxide
'tc_VSO2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1187,7 +1187,7 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Column integrated mass density of Aromatic peroxy radical
#Column integrated mass density of Aromatic peroxy radical
'tc_AROO2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1195,7 +1195,7 @@
constituentType = 60029 ;
is_chemical = 1 ;
}
#Column integrated mass density of Ethyne
#Column integrated mass density of Ethyne
'tc_C2H2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1203,7 +1203,7 @@
constituentType = 10010 ;
is_chemical = 1 ;
}
#Column integrated mass density of Acetonitrile
#Column integrated mass density of Acetonitrile
'tc_CH3CN' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1211,7 +1211,7 @@
constituentType = 10007 ;
is_chemical = 1 ;
}
#Column integrated mass density of Methyl peroxy nitrate
#Column integrated mass density of Methyl peroxy nitrate
'tc_CH3O2NO2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1219,7 +1219,7 @@
constituentType = 10055 ;
is_chemical = 1 ;
}
#Column integrated mass density of Hydrogen cyanide
#Column integrated mass density of Hydrogen cyanide
'tc_HCN' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1227,7 +1227,7 @@
constituentType = 10006 ;
is_chemical = 1 ;
}
#Column integrated mass density of Hydroperoxy aldehydes type 1
#Column integrated mass density of Hydroperoxy aldehydes type 1
'tc_HPALD1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1235,7 +1235,7 @@
constituentType = 60058 ;
is_chemical = 1 ;
}
#Column integrated mass density of Hydroperoxy aldehydes type 2
#Column integrated mass density of Hydroperoxy aldehydes type 2
'tc_HPALD2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1243,7 +1243,7 @@
constituentType = 60059 ;
is_chemical = 1 ;
}
#Column integrated mass density of Isoprene peroxy type B
#Column integrated mass density of Isoprene peroxy type B
'tc_ISOPBO2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1251,7 +1251,7 @@
constituentType = 60056 ;
is_chemical = 1 ;
}
#Column integrated mass density of Isoprene peroxy type D
#Column integrated mass density of Isoprene peroxy type D
'tc_ISOPDO2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1259,7 +1259,7 @@
constituentType = 60057 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Volcanic sulfur dioxide
#Atmosphere emission mass flux of Volcanic sulfur dioxide
'e_VSO2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1268,7 +1268,7 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Atmosphere emission mass flux of Aromatic peroxy radical
#Atmosphere emission mass flux of Aromatic peroxy radical
'e_AROO2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1276,7 +1276,7 @@
constituentType = 60029 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Ethyne
#Atmosphere emission mass flux of Ethyne
'e_C2H2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1284,7 +1284,7 @@
constituentType = 10010 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Acetonitrile
#Atmosphere emission mass flux of Acetonitrile
'e_CH3CN' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1292,7 +1292,7 @@
constituentType = 10007 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Methyl peroxy nitrate
#Atmosphere emission mass flux of Methyl peroxy nitrate
'e_CH3O2NO2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1300,7 +1300,7 @@
constituentType = 10055 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Hydrogen cyanide
#Atmosphere emission mass flux of Hydrogen cyanide
'e_HCN' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1308,7 +1308,7 @@
constituentType = 10006 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 1
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 1
'e_HPALD1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1316,7 +1316,7 @@
constituentType = 60058 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 2
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 2
'e_HPALD2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1324,7 +1324,7 @@
constituentType = 60059 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Isoprene peroxy type B
#Atmosphere emission mass flux of Isoprene peroxy type B
'e_ISOPBO2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1332,7 +1332,7 @@
constituentType = 60056 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Isoprene peroxy type D
#Atmosphere emission mass flux of Isoprene peroxy type D
'e_ISOPDO2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1340,7 +1340,7 @@
constituentType = 60057 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Volcanic sulfur dioxide
#Dry deposition velocity of Volcanic sulfur dioxide
'dv_VSO2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1349,7 +1349,7 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Dry deposition velocity of Aromatic peroxy radical
#Dry deposition velocity of Aromatic peroxy radical
'dv_AROO2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1357,7 +1357,7 @@
constituentType = 60029 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Ethyne
#Dry deposition velocity of Ethyne
'dv_C2H2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1365,7 +1365,7 @@
constituentType = 10010 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Acetonitrile
#Dry deposition velocity of Acetonitrile
'dv_CH3CN' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1373,7 +1373,7 @@
constituentType = 10007 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Methyl peroxy nitrate
#Dry deposition velocity of Methyl peroxy nitrate
'dv_CH3O2NO2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1381,7 +1381,7 @@
constituentType = 10055 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Hydrogen cyanide
#Dry deposition velocity of Hydrogen cyanide
'dv_HCN' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1389,7 +1389,7 @@
constituentType = 10006 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Hydroperoxy aldehydes type 1
#Dry deposition velocity of Hydroperoxy aldehydes type 1
'dv_HPALD1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1397,7 +1397,7 @@
constituentType = 60058 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Hydroperoxy aldehydes type 2
#Dry deposition velocity of Hydroperoxy aldehydes type 2
'dv_HPALD2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1405,7 +1405,7 @@
constituentType = 60059 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Isoprene peroxy type B
#Dry deposition velocity of Isoprene peroxy type B
'dv_ISOPBO2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1413,7 +1413,7 @@
constituentType = 60056 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Isoprene peroxy type D
#Dry deposition velocity of Isoprene peroxy type D
'dv_ISOPDO2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -6538,7 +6538,7 @@
parameterCategory = 2 ;
parameterNumber = 0 ;
}
#Snow melt
#Snowmelt
'snom' = {
discipline = 2 ;
parameterCategory = 0 ;
@ -7676,7 +7676,7 @@
parameterCategory = 4 ;
parameterNumber = 50 ;
}
#UV index
#UV index
'uvi' = {
discipline = 0 ;
parameterCategory = 4 ;
@ -8210,12 +8210,6 @@
parameterCategory = 0 ;
parameterNumber = 8 ;
}
#Volumetric soil moisture content
'soilw' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 9 ;
}
#Ground heat flux
'gflux' = {
discipline = 2 ;
@ -8306,60 +8300,12 @@
parameterCategory = 0 ;
parameterNumber = 27 ;
}
#Upper layer soil temperature
'uplst' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 1 ;
}
#Upper layer soil moisture
'uplsm' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 2 ;
}
#Lower layer soil moisture
'lowlsm' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 3 ;
}
#Bottom layer soil temperature
'botlst' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 4 ;
}
#Liquid volumetric soil moisture (non-frozen)
'soill' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 5 ;
}
#Number of soil layers in root zone
'rlyrs' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 6 ;
}
#Transpiration stress-onset (soil moisture)
'smref' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 7 ;
}
#Direct evaporation cease (soil moisture)
'smdry' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 8 ;
}
#Soil porosity
'poros' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 9 ;
}
#Liquid volumetric soil moisture (non-frozen)
'liqvsm' = {
discipline = 2 ;
@ -8432,7 +8378,7 @@
parameterCategory = 1 ;
parameterNumber = 3 ;
}
#Estimated u component of wind
#Estimated u component of wind
'estu' = {
discipline = 3 ;
parameterCategory = 1 ;
@ -8696,13 +8642,13 @@
parameterCategory = 2 ;
parameterNumber = 16 ;
}
#U-component of current
#U-component of current
'ucurr' = {
discipline = 10 ;
parameterCategory = 1 ;
parameterNumber = 2 ;
}
#V-component of current
#V-component of current
'vcurr' = {
discipline = 10 ;
parameterCategory = 1 ;
@ -8913,7 +8859,7 @@
parameterCategory = 1 ;
parameterNumber = 60 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'sf' = {
discipline = 0 ;
parameterCategory = 1 ;

View File

@ -0,0 +1,54 @@
#Volumetric soil moisture content
'soilw' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 9 ;
}
#Upper layer soil temperature
'uplst' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 1 ;
}
#Upper layer soil moisture
'uplsm' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 2 ;
}
#Lower layer soil moisture
'lowlsm' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 3 ;
}
#Bottom layer soil temperature
'botlst' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 4 ;
}
#Liquid volumetric soil moisture (non-frozen)
'soill' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 5 ;
}
#Transpiration stress-onset (soil moisture)
'smref' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 7 ;
}
#Direct evaporation cease (soil moisture)
'smdry' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 8 ;
}
#Soil porosity
'poros' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 9 ;
}

View File

@ -508,7 +508,7 @@
parameterCategory = 6 ;
parameterNumber = 32 ;
}
#large scale precipitation
#Large-scale precipitation
'kg m**-2' = {
discipline = 0 ;
parameterCategory = 1 ;
@ -1178,7 +1178,7 @@
constituentType = 60057 ;
is_chemical = 1 ;
}
#Column integrated mass density of Volcanic sulfur dioxide
#Column integrated mass density of Volcanic sulfur dioxide
'kg m**-2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1187,7 +1187,7 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Column integrated mass density of Aromatic peroxy radical
#Column integrated mass density of Aromatic peroxy radical
'kg m**-2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1195,7 +1195,7 @@
constituentType = 60029 ;
is_chemical = 1 ;
}
#Column integrated mass density of Ethyne
#Column integrated mass density of Ethyne
'kg m**-2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1203,7 +1203,7 @@
constituentType = 10010 ;
is_chemical = 1 ;
}
#Column integrated mass density of Acetonitrile
#Column integrated mass density of Acetonitrile
'kg m**-2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1211,7 +1211,7 @@
constituentType = 10007 ;
is_chemical = 1 ;
}
#Column integrated mass density of Methyl peroxy nitrate
#Column integrated mass density of Methyl peroxy nitrate
'kg m**-2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1219,7 +1219,7 @@
constituentType = 10055 ;
is_chemical = 1 ;
}
#Column integrated mass density of Hydrogen cyanide
#Column integrated mass density of Hydrogen cyanide
'kg m**-2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1227,7 +1227,7 @@
constituentType = 10006 ;
is_chemical = 1 ;
}
#Column integrated mass density of Hydroperoxy aldehydes type 1
#Column integrated mass density of Hydroperoxy aldehydes type 1
'kg m**-2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1235,7 +1235,7 @@
constituentType = 60058 ;
is_chemical = 1 ;
}
#Column integrated mass density of Hydroperoxy aldehydes type 2
#Column integrated mass density of Hydroperoxy aldehydes type 2
'kg m**-2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1243,7 +1243,7 @@
constituentType = 60059 ;
is_chemical = 1 ;
}
#Column integrated mass density of Isoprene peroxy type B
#Column integrated mass density of Isoprene peroxy type B
'kg m**-2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1251,7 +1251,7 @@
constituentType = 60056 ;
is_chemical = 1 ;
}
#Column integrated mass density of Isoprene peroxy type D
#Column integrated mass density of Isoprene peroxy type D
'kg m**-2' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1259,7 +1259,7 @@
constituentType = 60057 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Volcanic sulfur dioxide
#Atmosphere emission mass flux of Volcanic sulfur dioxide
'kg m**-2 s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1268,7 +1268,7 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Atmosphere emission mass flux of Aromatic peroxy radical
#Atmosphere emission mass flux of Aromatic peroxy radical
'kg m**-2 s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1276,7 +1276,7 @@
constituentType = 60029 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Ethyne
#Atmosphere emission mass flux of Ethyne
'kg m**-2 s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1284,7 +1284,7 @@
constituentType = 10010 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Acetonitrile
#Atmosphere emission mass flux of Acetonitrile
'kg m**-2 s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1292,7 +1292,7 @@
constituentType = 10007 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Methyl peroxy nitrate
#Atmosphere emission mass flux of Methyl peroxy nitrate
'kg m**-2 s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1300,7 +1300,7 @@
constituentType = 10055 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Hydrogen cyanide
#Atmosphere emission mass flux of Hydrogen cyanide
'kg m**-2 s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1308,7 +1308,7 @@
constituentType = 10006 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 1
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 1
'kg m**-2 s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1316,7 +1316,7 @@
constituentType = 60058 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 2
#Atmosphere emission mass flux of Hydroperoxy aldehydes type 2
'kg m**-2 s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1324,7 +1324,7 @@
constituentType = 60059 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Isoprene peroxy type B
#Atmosphere emission mass flux of Isoprene peroxy type B
'kg m**-2 s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1332,7 +1332,7 @@
constituentType = 60056 ;
is_chemical = 1 ;
}
#Atmosphere emission mass flux of Isoprene peroxy type D
#Atmosphere emission mass flux of Isoprene peroxy type D
'kg m**-2 s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1340,7 +1340,7 @@
constituentType = 60057 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Volcanic sulfur dioxide
#Dry deposition velocity of Volcanic sulfur dioxide
'm s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1349,7 +1349,7 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Dry deposition velocity of Aromatic peroxy radical
#Dry deposition velocity of Aromatic peroxy radical
'm s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1357,7 +1357,7 @@
constituentType = 60029 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Ethyne
#Dry deposition velocity of Ethyne
'm s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1365,7 +1365,7 @@
constituentType = 10010 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Acetonitrile
#Dry deposition velocity of Acetonitrile
'm s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1373,7 +1373,7 @@
constituentType = 10007 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Methyl peroxy nitrate
#Dry deposition velocity of Methyl peroxy nitrate
'm s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1381,7 +1381,7 @@
constituentType = 10055 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Hydrogen cyanide
#Dry deposition velocity of Hydrogen cyanide
'm s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1389,7 +1389,7 @@
constituentType = 10006 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Hydroperoxy aldehydes type 1
#Dry deposition velocity of Hydroperoxy aldehydes type 1
'm s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1397,7 +1397,7 @@
constituentType = 60058 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Hydroperoxy aldehydes type 2
#Dry deposition velocity of Hydroperoxy aldehydes type 2
'm s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1405,7 +1405,7 @@
constituentType = 60059 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Isoprene peroxy type B
#Dry deposition velocity of Isoprene peroxy type B
'm s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -1413,7 +1413,7 @@
constituentType = 60056 ;
is_chemical = 1 ;
}
#Dry deposition velocity of Isoprene peroxy type D
#Dry deposition velocity of Isoprene peroxy type D
'm s**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
@ -6538,7 +6538,7 @@
parameterCategory = 2 ;
parameterNumber = 0 ;
}
#Snow melt
#Snowmelt
'kg m**-2' = {
discipline = 2 ;
parameterCategory = 0 ;
@ -7676,7 +7676,7 @@
parameterCategory = 4 ;
parameterNumber = 50 ;
}
#UV index
#UV index
'Numeric' = {
discipline = 0 ;
parameterCategory = 4 ;
@ -8210,12 +8210,6 @@
parameterCategory = 0 ;
parameterNumber = 8 ;
}
#Volumetric soil moisture content
'Proportion' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 9 ;
}
#Ground heat flux
'W m**-2' = {
discipline = 2 ;
@ -8306,60 +8300,12 @@
parameterCategory = 0 ;
parameterNumber = 27 ;
}
#Upper layer soil temperature
'K' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 1 ;
}
#Upper layer soil moisture
'kg m**-3' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 2 ;
}
#Lower layer soil moisture
'kg m**-3' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 3 ;
}
#Bottom layer soil temperature
'K' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 4 ;
}
#Liquid volumetric soil moisture (non-frozen)
'Proportion' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 5 ;
}
#Number of soil layers in root zone
'Numeric' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 6 ;
}
#Transpiration stress-onset (soil moisture)
'Proportion' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 7 ;
}
#Direct evaporation cease (soil moisture)
'Proportion' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 8 ;
}
#Soil porosity
'Proportion' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 9 ;
}
#Liquid volumetric soil moisture (non-frozen)
'm**3 m**-3' = {
discipline = 2 ;
@ -8432,7 +8378,7 @@
parameterCategory = 1 ;
parameterNumber = 3 ;
}
#Estimated u component of wind
#Estimated u component of wind
'm s**-1' = {
discipline = 3 ;
parameterCategory = 1 ;
@ -8696,13 +8642,13 @@
parameterCategory = 2 ;
parameterNumber = 16 ;
}
#U-component of current
#U-component of current
'm s**-1' = {
discipline = 10 ;
parameterCategory = 1 ;
parameterNumber = 2 ;
}
#V-component of current
#V-component of current
'm s**-1' = {
discipline = 10 ;
parameterCategory = 1 ;
@ -8913,7 +8859,7 @@
parameterCategory = 1 ;
parameterNumber = 60 ;
}
#Snow Fall water equivalent
#Snowfall water equivalent
'kg m**-2' = {
discipline = 0 ;
parameterCategory = 1 ;

View File

@ -0,0 +1,54 @@
#Volumetric soil moisture content
'Proportion' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 9 ;
}
#Upper layer soil temperature
'K' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 1 ;
}
#Upper layer soil moisture
'kg m**-3' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 2 ;
}
#Lower layer soil moisture
'kg m**-3' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 3 ;
}
#Bottom layer soil temperature
'K' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 4 ;
}
#Liquid volumetric soil moisture (non-frozen)
'Proportion' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 5 ;
}
#Transpiration stress-onset (soil moisture)
'Proportion' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 7 ;
}
#Direct evaporation cease (soil moisture)
'Proportion' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 8 ;
}
#Soil porosity
'Proportion' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 9 ;
}

View File

@ -15,7 +15,6 @@
*/
#include "eccodes.h"
#include <assert.h>
int main(int argc, char* argv[])
{

View File

@ -2781,43 +2781,50 @@ int grib_f_get_real4(int* gid, char* key, float* val, int len){
return grib_f_get_real4_( gid, key, val, len);
}
int grib_f_get_real4_array_(int* gid, char* key, float *val, int* size, int len)
int grib_f_get_real4_array_(int* gid, char* key, float* val, int* size, int len)
{
/* See ECC-1579:
* Ideally we should be calling:
* Ideally we should ALWAYS be calling:
* err = grib_get_float_array(h, cast_char(buf,key,len), val, &lsize);
*
*/
*/
grib_handle *h = get_handle(*gid);
int err = GRIB_SUCCESS;
grib_handle* h = get_handle(*gid);
size_t lsize = *size;
char buf[1024];
size_t lsize = *size;
double* val8 = NULL;
size_t i;
int err = GRIB_SUCCESS;
const int single_precision_mode = (h->context->single_precision != 0);
if(!h) return GRIB_INVALID_GRIB;
if (!h) return GRIB_INVALID_GRIB;
if(*size)
val8 = (double*)grib_context_malloc(h->context,(*size)*(sizeof(double)));
else
val8 = (double*)grib_context_malloc(h->context,sizeof(double));
if (single_precision_mode) {
err = grib_get_float_array(h, cast_char(buf, key, len), val, &lsize);
}
else {
double* val8 = NULL;
size_t i;
if(!val8) return GRIB_OUT_OF_MEMORY;
if (*size)
val8 = (double*)grib_context_malloc(h->context, (*size) * (sizeof(double)));
else
val8 = (double*)grib_context_malloc(h->context, sizeof(double));
err = grib_get_double_array(h, cast_char(buf,key,len), val8, &lsize);
if (err) {
grib_context_free(h->context,val8);
return err;
if (!val8) return GRIB_OUT_OF_MEMORY;
err = grib_get_double_array(h, cast_char(buf, key, len), val8, &lsize);
if (err) {
grib_context_free(h->context, val8);
return err;
}
for (i = 0; i < lsize; i++)
val[i] = val8[i];
grib_context_free(h->context, val8);
}
for(i=0;i<lsize;i++)
val[i] = val8[i];
grib_context_free(h->context,val8);
return err;
return err;
}
int grib_f_get_real4_array__(int* gid, char* key, float* val, int* size, int len){
return grib_f_get_real4_array_( gid, key, val, size, len);
}

View File

@ -137,7 +137,6 @@ list( APPEND eccodes_src_files
grib_accessor_class_scale.cc
grib_accessor_class_from_scale_factor_scaled_value.cc
grib_accessor_class_times.cc
grib_accessor_class_forward.cc
grib_accessor_class_g2bitmap_present.cc
grib_accessor_class_ibmfloat.cc
grib_accessor_class_ieeefloat.cc
@ -292,7 +291,6 @@ list( APPEND eccodes_src_files
grib_filepool.cc
grib_geography.cc
grib_handle.cc
grib_header_compute.cc
grib_hash_keys.cc
grib_io.cc
grib_trie.cc

View File

@ -619,25 +619,25 @@ int codes_bufr_extract_headers_malloc(grib_context* c, const char* filename, cod
if (!c)
c = grib_context_get_default();
if (path_is_directory(filename)) {
grib_context_log(c, GRIB_LOG_ERROR, "codes_bufr_extract_headers_malloc: \"%s\" is a directory", filename);
grib_context_log(c, GRIB_LOG_ERROR, "%s: \"%s\" is a directory", __func__, filename);
return GRIB_IO_PROBLEM;
}
fp = fopen(filename, "rb");
if (!fp) {
grib_context_log(c, GRIB_LOG_ERROR, "codes_bufr_extract_headers_malloc: Unable to read file \"%s\"", filename);
grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to read file \"%s\"", __func__, filename);
perror(filename);
return GRIB_IO_PROBLEM;
}
err = count_bufr_messages(c, fp, num_messages, strict_mode);
if (err) {
grib_context_log(c, GRIB_LOG_ERROR, "codes_bufr_extract_headers_malloc: Unable to count BUFR messages in file \"%s\"", filename);
grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to count BUFR messages in file \"%s\"", __func__, filename);
fclose(fp);
return err;
}
size = *num_messages;
if (size == 0) {
grib_context_log(c, GRIB_LOG_ERROR, "codes_bufr_extract_headers_malloc: No BUFR messages in file \"%s\"", filename);
grib_context_log(c, GRIB_LOG_ERROR, "%s: No BUFR messages in file \"%s\"", __func__, filename);
return GRIB_INVALID_MESSAGE;
}
*result = (codes_bufr_header*)calloc(size, sizeof(codes_bufr_header));
@ -668,7 +668,7 @@ int codes_bufr_extract_headers_malloc(grib_context* c, const char* filename, cod
if (!mesg) {
if (err != GRIB_END_OF_FILE && err != GRIB_PREMATURE_END_OF_FILE) {
// An error occurred
grib_context_log(c, GRIB_LOG_ERROR, "codes_bufr_extract_headers_malloc: Unable to read BUFR message");
grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to read BUFR message", __func__);
if (strict_mode) {
fclose(fp);
return GRIB_DECODING_ERROR;

View File

@ -8,7 +8,7 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
/*
This is used by make_class.pl
@ -423,7 +423,7 @@ Assert(0);
case 7:
if (Y) {
extraScale = Y;
referenceValueFactor = grib_power(Y, 10);
referenceValueFactor = grib_power<double>(Y, 10);
extraWidth = ((10 * Y) + 2) / 3;
}
else {

View File

@ -0,0 +1,604 @@
/* Old implementation. Now superseded. See ECC-441 and ECC-261 */
static int pack_double_old(grib_accessor* a, const double* val, size_t *len)
{
grib_accessor_data_g1second_order_general_extended_packing* self = (grib_accessor_data_g1second_order_general_extended_packing*)a;
int ret=0;
int grib2=0;
long bits_per_value,orderOfSPD,binary_scale_factor;
long numberOfValues;
double max,min;
double decimal,divisor;
double reference_value;
size_t size,sizebits;
long half_byte;
long* X;
long* Xp;
long i;
long incrementGroupLengthA,groupWidthA,prevGroupLength,offsetD,remainingValuesB,groupLengthB;
long maxB,minB,maxAB,minAB;
long offsetBeforeData,offsetSection4;
unsigned char* buffer = NULL;
long maxWidth,maxLength,widthOfWidths,NL,widthOfLengths,N1,N2,extraValues,codedNumberOfGroups,numberOfSecondOrderPackedValues;
long pos;
long numberOfGroups;
long groupLengthC,groupLengthA,remainingValues,count;
long maxA=0,minA=0;
long maxC,minC,offsetC;
long maxAC,minAC;
long range,bias=0,maxSPD;
long firstOrderValuesMax,offset,groupLength,j,groupWidth,firstOrderValue,lengthOfSecondOrderValues;
long *groupLengths,*groupWidths,*firstOrderValues;
/* long groupLengths[MAX_NUMBER_OF_GROUPS],groupWidths[MAX_NUMBER_OF_GROUPS],firstOrderValues[MAX_NUMBER_OF_GROUPS]; */
/* TODO put these parameters in def file */
long startGroupLength=15;
long incrementGroupLength=3;
long minGroupLength=3;
long widthOfSPD=0,widthOfBias=0;
long *offsets;
long widthOfFirstOrderValues;
int computeGroupA=1;
long dataHeadersLength,widthsLength,lengthsLength,firstOrderValuesLength;
long decimal_scale_factor;
grib_handle* handle = grib_handle_of_accessor(a);
self->dirty=1;
numberOfValues=*len;
max = val[0];
min = max;
for(i=1;i< numberOfValues;i++) {
if (val[i] > max ) max = val[i];
else if (val[i] < min ) min = val[i];
}
/* For constant fields set decimal scale factor to 0 (See GRIB-165) */
if (min==max) {
grib_set_long_internal(handle,self->decimal_scale_factor, 0);
}
if((ret = grib_get_long_internal(handle,self->decimal_scale_factor, &decimal_scale_factor))
!= GRIB_SUCCESS)
return ret;
decimal = codes_power<double>(decimal_scale_factor,10);
max*=decimal;
min*=decimal;
if (grib_get_nearest_smaller_value(handle,self->reference_value,min,&reference_value)
!=GRIB_SUCCESS) {
grib_context_log(a->context,GRIB_LOG_ERROR,
"unable to find nearest_smaller_value of %g for %s",min,self->reference_value);
return GRIB_INTERNAL_ERROR;
}
if((ret = grib_set_double_internal(handle,self->reference_value, reference_value)) !=
GRIB_SUCCESS)
return ret;
if((ret=grib_get_long_internal(handle,self->bits_per_value,&bits_per_value)) != GRIB_SUCCESS)
return ret;
if((ret=grib_get_long_internal(handle,self->offsetdata,&offsetBeforeData)) != GRIB_SUCCESS)
return ret;
if((ret=grib_get_long_internal(handle,self->offsetsection,&offsetSection4)) != GRIB_SUCCESS)
return ret;
if((ret=grib_get_long_internal(handle,self->orderOfSPD,&orderOfSPD)) != GRIB_SUCCESS)
return ret;
binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&ret);
if (ret != GRIB_SUCCESS) return ret;
if((ret = grib_set_long_internal(handle,self->binary_scale_factor, binary_scale_factor)) !=
GRIB_SUCCESS)
return ret;
divisor = codes_power<double>(-binary_scale_factor,2);
X=(long*)grib_context_malloc_clear(a->context,sizeof(long)*numberOfValues);
for(i=0;i< numberOfValues;i++){
X[i] = (((val[i]*decimal)-reference_value)*divisor)+0.5;
}
groupLengths=(long*)grib_context_malloc_clear(a->context,sizeof(long)*numberOfValues);
groupWidths=(long*)grib_context_malloc_clear(a->context,sizeof(long)*numberOfValues);
firstOrderValues=(long*)grib_context_malloc_clear(a->context,sizeof(long)*numberOfValues);
/* spatial differencing */
switch (orderOfSPD) {
case 1:
for (i=numberOfValues-1;i>0;i--) {
X[i]-=X[i-1];
}
break;
case 2:
for (i=numberOfValues-1;i>1;i--) {
X[i]-=2*X[i-1]-X[i-2];
}
break;
case 3:
for (i=numberOfValues-1;i>2;i--) {
X[i]-=3*(X[i-1]-X[i-2])+X[i-3];
}
break;
}
if (orderOfSPD) {
Assert(orderOfSPD >=0 && orderOfSPD < numberOfValues);
bias=X[orderOfSPD];
for (i=orderOfSPD+1;i<numberOfValues;i++) {
if ( bias > X[i] ) bias=X[i];
}
for (i=orderOfSPD;i<numberOfValues;i++) {
X[i]-=bias;
}
maxSPD=X[0];
for (i=1;i<orderOfSPD;i++) {
if ( maxSPD < X[i] ) maxSPD=X[i];
}
/* widthOfSPD=(long)ceil(log((double)(maxSPD+1))/log(2.0)); */
widthOfSPD=number_of_bits(handle, maxSPD);
widthOfBias=number_of_bits(handle, labs(bias))+1;
if ( widthOfSPD < widthOfBias ) widthOfSPD=widthOfBias;
}
/* end of spatial differencing */
count=orderOfSPD;
remainingValues=numberOfValues-count;
numberOfGroups=0;
incrementGroupLengthA=startGroupLength;
computeGroupA=1;
while (remainingValues) {
/* group A created with length=incrementGroupLengthA (if enough values remain)
incrementGroupLengthA=startGroupLength always except when coming from an A+C or A+B ok branch
*/
groupLengthA= incrementGroupLengthA < remainingValues ? incrementGroupLengthA : remainingValues ;
if (computeGroupA) {
maxA=X[count];
minA=X[count];
for (i=1;i<groupLengthA;i++) {
DebugAssertAccess(X, count+i, numberOfValues);
if (maxA<X[count+i]) maxA=X[count+i];
if (minA>X[count+i]) minA=X[count+i];
}
}
groupWidthA=number_of_bits(handle, maxA-minA);
range=(long)codes_power<double>(groupWidthA,2)-1;
offsetC=count+groupLengthA;
if (offsetC==numberOfValues) {
/* no more values close group A and end loop */
groupLengths[numberOfGroups]=groupLengthA;
groupWidths[numberOfGroups]=groupWidthA;
/* firstOrderValues[numberOfGroups]=minA; */
/* to optimise the width of first order variable */
firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0;
numberOfGroups++;
break;
}
/* group C created with length=incrementGroupLength (fixed)
or remaining values if close to end
*/
groupLengthC=incrementGroupLength;
if ( groupLengthC + offsetC > numberOfValues - startGroupLength/2) {
groupLengthC=numberOfValues-offsetC;
}
maxC=X[offsetC];
minC=X[offsetC];
for (i=1;i<groupLengthC;i++) {
DebugAssertAccess(X, offsetC+i, numberOfValues);
if (maxC<X[offsetC+i]) maxC=X[offsetC+i];
if (minC>X[offsetC+i]) minC=X[offsetC+i];
}
maxAC= maxA > maxC ? maxA : maxC;
minAC= minA < minC ? minA : minC;
/* check if A+C can be represented with the same width as A*/
if (maxAC-minAC > range) {
/* A could not be expanded adding C. Check if A could be expanded taking
some elements from preceding group. The condition is always that width of
A doesn't increase.
*/
if (numberOfGroups>0 && groupWidths[numberOfGroups-1] > groupWidthA ) {
prevGroupLength=groupLengths[numberOfGroups-1]-incrementGroupLength;
offsetC=count-incrementGroupLength;
/* preceding group length cannot be less than a minimum value */
while (prevGroupLength >= minGroupLength) {
maxAC=maxA;
minAC=minA;
for (i=0;i<incrementGroupLength;i++) {
if (maxAC<X[offsetC+i]) maxAC=X[offsetC+i];
if (minAC>X[offsetC+i]) minAC=X[offsetC+i];
}
/* no more elements can be transfered, exit loop*/
if (maxAC-minAC > range) break;
maxA=maxAC;
minA=minAC;
groupLengths[numberOfGroups-1]-=incrementGroupLength;
groupLengthA+=incrementGroupLength;
count-=incrementGroupLength;
remainingValues+=incrementGroupLength;
offsetC-=incrementGroupLength;
prevGroupLength-=incrementGroupLength;
}
}
/* close group A*/
groupLengths[numberOfGroups]=groupLengthA;
groupWidths[numberOfGroups]=groupWidthA;
/* firstOrderValues[numberOfGroups]=minA; */
/* to optimise the width of first order variable */
firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0;
count+=groupLengthA;
remainingValues-=groupLengthA;
numberOfGroups++;
/* incrementGroupLengthA is reset to the fixed startGroupLength as it
could have been changed after the A+C or A+B ok condition.
*/
incrementGroupLengthA=startGroupLength;
computeGroupA=1;
#if 0
if (numberOfGroups==MAX_NUMBER_OF_GROUPS) {
groupLengthA= remainingValues ;
maxA=X[count];
minA=X[count];
for (i=1;i<groupLengthA;i++) {
if (maxA<X[count+i]) maxA=X[count+i];
if (minA>X[count+i]) minA=X[count+i];
}
groupWidthA=number_of_bits(maxA-minA);
range=(long)codes_power<double>(groupWidthA,2)-1;
groupLengths[numberOfGroups]=groupLengthA;
groupWidths[numberOfGroups]=groupWidthA;
firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0;
break;
}
#endif
continue;
}
/* A+C could be coded with the same width as A*/
offsetD=offsetC+groupLengthC;
if (offsetD==numberOfValues) {
groupLengths[numberOfGroups]=groupLengthA+groupLengthC;
groupWidths[numberOfGroups]=groupWidthA;
/* range of AC is the same as A*/
/* firstOrderValues[numberOfGroups]=minAC; */
/* to optimise the width of first order variable */
firstOrderValues[numberOfGroups] = maxAC-range > 0 ? maxAC-range : 0;
numberOfGroups++;
break;
}
/* group B is created with length startGroupLength, starting at the
same offset as C.
*/
remainingValuesB=numberOfValues-offsetC;
groupLengthB= startGroupLength < remainingValuesB ? startGroupLength : remainingValuesB ;
maxB=maxC;
minB=minC;
for (i=groupLengthC;i<groupLengthB;i++) {
if (maxB<X[offsetC+i]) maxB=X[offsetC+i];
if (minB>X[offsetC+i]) minB=X[offsetC+i];
}
/* check if group B can be coded with a smaller width than A */
if (maxB-minB <= range/2 && range>0 ) {
/* TODO Add code to try if A can be expanded taking some elements
from the left (preceding) group.
A possible variation is to do this left check (and the previous one)
in the final loop when checking that the width of each group.
*/
/* close group A and continue loop*/
groupLengths[numberOfGroups]=groupLengthA;
groupWidths[numberOfGroups]=groupWidthA;
/* firstOrderValues[numberOfGroups]=minA; */
/* to optimise the width of first order variable */
firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0;
count+=groupLengthA;
remainingValues-=groupLengthA;
numberOfGroups++;
#if 0
if (numberOfGroups==MAX_NUMBER_OF_GROUPS) {
groupLengthA= remainingValues ;
maxA=X[count];
minA=X[count];
for (i=1;i<groupLengthA;i++) {
if (maxA<X[count+i]) maxA=X[count+i];
if (minA>X[count+i]) minA=X[count+i];
}
groupWidthA=number_of_bits(maxA-minA);
range=(long)codes_power<double>(groupWidthA,2)-1;
groupLengths[numberOfGroups]=groupLengthA;
groupWidths[numberOfGroups]=groupWidthA;
firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0;
break;
}
#endif
incrementGroupLengthA=startGroupLength;
computeGroupA=1;
continue;
}
/* check if A+B can be coded with same with as A */
maxAB= maxA > maxB ? maxA : maxB;
minAB= minA < minB ? minA : minB;
if (maxAB-minAB <= range) {
/* A+B can be merged. The increment used at the beginning of the loop to
build group C is increased to the size of group B
*/
incrementGroupLengthA+=groupLengthB;
maxA=maxAB;
minA=minAB;
computeGroupA=0;
continue;
}
/* A+B cannot be merged, A+C can be merged*/
incrementGroupLengthA+=groupLengthC;
computeGroupA=1;
} /* end of the while*/
/* computing bitsPerValue as the number of bits needed to represent
the firstOrderValues.
*/
max=firstOrderValues[0];
min=firstOrderValues[0];
for (i=1;i<numberOfGroups;i++) {
if (max<firstOrderValues[i]) max=firstOrderValues[i];
if (min>firstOrderValues[i]) min=firstOrderValues[i];
}
widthOfFirstOrderValues=number_of_bits(handle, max-min);
firstOrderValuesMax=(long)codes_power<double>(widthOfFirstOrderValues,2)-1;
if (numberOfGroups>2) {
/* loop through all the groups except the last in reverse order to
check if each group width is still appropriate for the group.
Focus on groups which have been shrank as left groups of an A group taking
some of their elements.
*/
offsets=(long*)grib_context_malloc_clear(a->context,sizeof(long)*numberOfGroups);
offsets[0]=orderOfSPD;
for (i=1;i<numberOfGroups;i++) offsets[i]=offsets[i-1]+groupLengths[i-1];
for (i=numberOfGroups-2;i>=0;i--) {
offset=offsets[i];
groupLength=groupLengths[i];
if (groupLength >= startGroupLength) continue;
max=X[offset];
min=X[offset];
for (j=1;j<groupLength;j++) {
if (max<X[offset+j]) max=X[offset+j];
if (min>X[offset+j]) min=X[offset+j];
}
groupWidth=number_of_bits(handle, max-min);
range=(long)codes_power<double>(groupWidth,2)-1;
/* width of first order values has to be unchanged.*/
for (j=groupWidth;j<groupWidths[i];j++) {
firstOrderValue= max>range ? max-range : 0;
if (firstOrderValue <= firstOrderValuesMax ) {
groupWidths[i]=j;
firstOrderValues[i]=firstOrderValue;
break;
}
}
offsetC=offset;
/* group width of the current group (i) can have been reduced
and it is worth to try to expand the group to get some elements
from the left group if it has bigger width.
*/
if (i>0 && (groupWidths[i-1] > groupWidths[i]) ) {
prevGroupLength=groupLengths[i-1]-incrementGroupLength;
offsetC-=incrementGroupLength;
while (prevGroupLength >= minGroupLength) {
for (j=0;j<incrementGroupLength;j++) {
if (max<X[offsetC+j]) max=X[offsetC+j];
if (min>X[offsetC+j]) min=X[offsetC+j];
}
/* width of first order values has to be unchanged*/
firstOrderValue=max>range ? max-range : 0;
if (max-min > range || firstOrderValue > firstOrderValuesMax ) break;
groupLengths[i-1]-=incrementGroupLength;
groupLengths[i]+=incrementGroupLength;
firstOrderValues[i]=firstOrderValue;
offsetC-=incrementGroupLength;
prevGroupLength-=incrementGroupLength;
}
}
}
grib_context_free(a->context,offsets);
}
maxWidth=groupWidths[0];
maxLength=groupLengths[0];
for (i=1;i<numberOfGroups;i++) {
if (maxWidth<groupWidths[i]) maxWidth=groupWidths[i];
if (maxLength<groupLengths[i]) maxLength=groupLengths[i];
}
if (maxWidth < 0 || maxLength < 0) {
grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Cannot compute parameters for second order packing.");
return GRIB_ENCODING_ERROR;
}
widthOfWidths=number_of_bits(handle, maxWidth);
widthOfLengths=number_of_bits(handle, maxLength);
lengthOfSecondOrderValues=0;
for ( i=0; i<numberOfGroups;i++) {
lengthOfSecondOrderValues+=groupLengths[i]*groupWidths[i];
}
if (!a->context->no_big_group_split) {
grib_split_long_groups(handle, a->context,&numberOfGroups,&lengthOfSecondOrderValues,
groupLengths,&widthOfLengths,groupWidths,widthOfWidths,
firstOrderValues,widthOfFirstOrderValues);
}
Xp=X+orderOfSPD;
for ( i=0; i<numberOfGroups;i++) {
for (j=0; j<groupLengths[i]; j++) {
*(Xp++)-=firstOrderValues[i];
}
}
/* start writing to message */
/* writing SPD */
if (orderOfSPD) {
if((ret = grib_set_long_internal(handle,self->widthOfSPD, widthOfSPD))
!= GRIB_SUCCESS)
return ret;
}
/* end writing SPD */
if((ret = grib_set_long_internal(handle,self->widthOfFirstOrderValues, widthOfFirstOrderValues))
!= GRIB_SUCCESS)
return ret;
dataHeadersLength=25;
if (orderOfSPD) dataHeadersLength+=1+((orderOfSPD+1)*widthOfSPD+7)/8;
widthsLength=(widthOfWidths*numberOfGroups+7)/8;
lengthsLength=(widthOfLengths*numberOfGroups+7)/8;
firstOrderValuesLength=(widthOfFirstOrderValues*numberOfGroups+7)/8;
NL=widthsLength+dataHeadersLength+1;
N1=NL+lengthsLength;
N2=N1+firstOrderValuesLength;
NL= NL > 65535 ? 65535 : NL;
N2= N2 > 65535 ? 65535 : N2;
N1= N1 > 65535 ? 65535 : N1;
grib_set_long(handle,self->NL, NL);
grib_set_long(handle,self->N1, N1);
grib_set_long(handle,self->N2, N2);
if (numberOfGroups > 65535 ) {
extraValues=numberOfGroups/65536;
codedNumberOfGroups=numberOfGroups%65536;
} else {
extraValues=0;
codedNumberOfGroups=numberOfGroups;
}
/* if no extraValues key present it is a GRIB2*/
grib2=0;
if((ret = grib_set_long(handle,self->extraValues, extraValues)) != GRIB_SUCCESS) {
codedNumberOfGroups=numberOfGroups;
grib2=1;
}
if((ret = grib_set_long_internal(handle,self->codedNumberOfGroups, codedNumberOfGroups)) != GRIB_SUCCESS)
return ret;
numberOfSecondOrderPackedValues=numberOfValues-orderOfSPD;
if (!grib2 && numberOfSecondOrderPackedValues > 65535 )
numberOfSecondOrderPackedValues= 65535;
if((ret = grib_set_long_internal(handle,self->numberOfSecondOrderPackedValues, numberOfSecondOrderPackedValues))
!= GRIB_SUCCESS)
return ret;
if (grib2) {
if((ret = grib_set_long_internal(handle,self->bits_per_value, bits_per_value)) != GRIB_SUCCESS)
return ret;
} else {
if((ret = grib_set_long_internal(handle,self->bits_per_value, 0)) != GRIB_SUCCESS)
return ret;
}
if((ret = grib_set_long_internal(handle,self->widthOfWidths, widthOfWidths)) != GRIB_SUCCESS)
return ret;
if((ret = grib_set_long_internal(handle,self->widthOfLengths, widthOfLengths)) != GRIB_SUCCESS)
return ret;
lengthOfSecondOrderValues=0;
for ( i=0; i<numberOfGroups;i++) {
lengthOfSecondOrderValues+=groupLengths[i]*groupWidths[i];
}
size=(lengthOfSecondOrderValues+7)/8;
sizebits=lengthOfSecondOrderValues;
/* padding section 4 to an even number of octets*/
size = (size+offsetBeforeData-offsetSection4) % 2 ? size+1 : size;
half_byte=8*size-sizebits;
if((ret = grib_set_long_internal(handle,self->half_byte, half_byte)) != GRIB_SUCCESS)
return ret;
buffer=(unsigned char*)grib_context_malloc_clear(a->context,size);
pos=0;
if (orderOfSPD) {
long SPD[4]={0,};
size_t nSPD=orderOfSPD+1;
Assert(orderOfSPD<=3);
for (i=0;i<orderOfSPD;i++) SPD[i]=X[i];
SPD[orderOfSPD]=bias;
ret=grib_set_long_array_internal(handle,self->SPD,SPD,nSPD);
if(ret) return ret;
}
ret=grib_set_long_array_internal(handle,self->groupWidths,groupWidths,(size_t)numberOfGroups);
if(ret) return ret;
ret=grib_set_long_array_internal(handle,self->groupLengths,groupLengths,(size_t)numberOfGroups);
if(ret) return ret;
ret=grib_set_long_array_internal(handle,self->firstOrderValues,firstOrderValues,(size_t)numberOfGroups);
if(ret) return ret;
Xp=X+orderOfSPD;
pos=0;
count=0;
for (i=0;i<numberOfGroups;i++) {
if (groupWidths[i]>0) {
for (j=0;j<groupLengths[i];j++) {
#if EFDEBUG
printf("CXXXXX %ld %ld %ld %ld\n",count,*Xp,groupWidths[i],groupLengths[i]);
count++;
#endif
grib_encode_unsigned_longb(buffer,*(Xp++),&pos,groupWidths[i]);
}
} else {
Xp+=groupLengths[i];
#if EFDEBUG
count+=groupLengths[i];
#endif
}
}
/* ECC-259: Set correct number of values */
ret=grib_set_long_internal(a->parent->h,self->number_of_values, *len);
if(ret) return ret;
grib_buffer_replace(a, buffer, size,1,1);
grib_context_free(a->context,buffer);
grib_context_free(a->context,X);
grib_context_free(a->context,groupLengths);
grib_context_free(a->context,groupWidths);
grib_context_free(a->context,firstOrderValues);
return ret;
}

View File

@ -0,0 +1,73 @@
static int unpack_long(grib_accessor* a, long* val, size_t *len)
{
grib_accessor_g2end_step* self = (grib_accessor_g2end_step*)a;
int err = 0;
long start_step;
long unit;
long coded_unit;
long coded_time_range, typeOfTimeIncrement, numberOfTimeRange;
long coded_time_range_sec=0;
int factor;
long u2sf,u2sf_step_unit;
int add_time_range = 1; /* whether we add lengthOfTimeRange */
grib_handle* h=grib_handle_of_accessor(a);
if((err = grib_get_long_internal(h,self->start_step,&start_step))) return err;
/*point in time */
if (self->year == NULL) {
*val=start_step;
return 0;
}
if((err = grib_get_long_internal(h,self->unit,&unit))) return err;
if((err = grib_get_long_internal(h,self->coded_unit,&coded_unit))) return err;
if((err = grib_get_long_internal(h,self->coded_time_range, &coded_time_range))) return err;
if((err = grib_get_long_internal(h,self->typeOfTimeIncrement, &typeOfTimeIncrement))) return err;
if((err = grib_get_long_internal(h,self->numberOfTimeRange, &numberOfTimeRange))) return err;
Assert(numberOfTimeRange == 1 || numberOfTimeRange == 2);
err = convert_time_range(h, unit, coded_unit, &coded_time_range);
if (err != GRIB_SUCCESS) return err;
#if 0
if (coded_unit!=unit) {
coded_time_range_sec=coded_time_range*u2s2[coded_unit];
if (coded_time_range_sec<0) {
factor=60;
if (u2s2[coded_unit] % factor) return GRIB_DECODING_ERROR;
if (u2s[unit] % factor) return GRIB_DECODING_ERROR;
u2sf=u2s2[coded_unit]/factor;
coded_time_range_sec=coded_time_range*u2sf;
u2sf_step_unit=u2s[unit]/factor;
} else {
u2sf_step_unit=u2s[unit];
}
if (coded_time_range_sec % u2sf_step_unit!=0) {
grib_context_log(h->context,GRIB_LOG_ERROR,"unable to convert endStep in stepUnits");
return GRIB_WRONG_STEP_UNIT;
}
coded_time_range = coded_time_range_sec / u2sf_step_unit;
}
#endif
if (typeOfTimeIncrement == 1) {
/* See GRIB-488 */
/* Note: For this case, lengthOfTimeRange is not related to step and should not be used to calculate step */
add_time_range = 0;
if (is_special_expver(h)) {
add_time_range = 1;
}
}
if (add_time_range) {
*val = start_step + coded_time_range;
} else {
*val = start_step;
}
return GRIB_SUCCESS;
}

View File

@ -0,0 +1,67 @@
#if 0
/*Legacy mode*/
static long num_points_reduced_gauss_old(grib_handle* h, long nj, long pl[],
long max_pl, double lats[],
double angular_precision,
double lat_first, double lat_last,
double lon_first, double lon_last)
{
long result=0;
int is_global=0;
size_t plsize=0;
long ilon_first=0,ilon_last=0;
double lon_first_row=0,lon_last_row=0;
float d = 0;
is_global=is_gaussian_global(lat_first,lat_last,lon_first,lon_last,max_pl,lats,angular_precision);
d=fabs(lats[0]-lats[1]);
if ( !is_global ) {
long j = 0;
/*sub area*/
(void)d;
#if EFDEBUG
printf("-------- subarea fabs(lat_first-lats[0])=%g d=%g\n",fabs(lat_first-lats[0]),d);
printf("-------- subarea fabs(lat_last+lats[0])=%g d=%g\n",fabs(lat_last+lats[0]),d);
printf("-------- subarea lon_last=%g order=%ld 360.0-90.0/order=%g\n",
lon_last,order,360.0-90.0/order);
printf("-------- subarea lon_first=%g fabs(lon_last -( 360.0-90.0/order))=%g 90.0/order=%g\n",
lon_first,fabs(lon_last - (360.0-90.0/order)),90.0/order);
#endif
for (j=0;j<nj;j++) {
long row_count=0;
#if EFDEBUG
printf("-- %d ",j);
#endif
grib_get_reduced_row(pl[j],lon_first,lon_last,&row_count,&ilon_first,&ilon_last);
lon_first_row=((ilon_first)*360.0)/pl[j];
lon_last_row=((ilon_last)*360.0)/pl[j];
result += row_count;
(void)lon_last_row;
(void)lon_first_row;
#if EFDEBUG
printf(" ilon_first=%ld lon_first=%.10e ilon_last=%ld lon_last=%.10e count=%ld row_count=%ld\n",
ilon_first,lon_first_row,ilon_last,lon_last_row,result,row_count);
#endif
}
} else {
int i = 0;
result=0;
for (i=0;i<plsize;i++) result += pl[i];
}
return result;
}
/* New MIR compatible way */
static long num_points_reduced_gauss_new(grib_handle* h, long nj, long pl[], double lon_first, double lon_last)
{
long result = 0;
long j;
/* Always assume sub area */
for (j=0;j<nj;j++) {
long row_count=0;
long ilon_first=0,ilon_last=0;
grib_get_reduced_row2(pl[j], lon_first, lon_last, &row_count, &ilon_first, &ilon_last);
result += row_count;
}
return result;
}
#endif

View File

@ -15,9 +15,9 @@
*/
#include "grib_api_internal.h"
#include <math.h>
#include <cmath>
#include <signal.h>
#include <ctype.h>
#include <cctype>
#include <stdlib.h>
static grib_math* readpower(grib_context* c, char** form, int* err);
@ -48,7 +48,7 @@ static long op_neg(long a) {return -a;}
static double op_neg_d(double a) {return -a;}
static long op_pow(long a, long b) {return grib_power(a,b);}
static long op_pow(long a, long b) {return codes_power<double>(a,b);}
static long op_add(long a, long b) {return a+b;}
static long op_sub(long a, long b) {return a-b;}
static long op_div(long a, long b) {return a/b;}

View File

@ -0,0 +1,109 @@
static int find(grib_nearest* nearest, grib_handle* h,
double inlat, double inlon,unsigned long flags,
double* outlats,double* outlons,
double *values,double *distances,int* indexes, size_t *len) {
grib_nearest_regular* self = (grib_nearest_regular*) nearest;
int ret=0,kk=0,ii=0,jj=0;
size_t nvalues=0;
double radiusInKm;
if ((ret = grib_nearest_get_radius(h, &radiusInKm)) != GRIB_SUCCESS)
return ret;
if (!nearest->h || (flags & GRIB_NEAREST_SAME_DATA)==0 || nearest->h!=h) {
grib_iterator* iter=NULL;
double lat=0,lon=0;
if( (ret = grib_get_size(h,self->values_key,&nvalues))!= GRIB_SUCCESS)
return ret;
nearest->values_count = nvalues;
if (nearest->values) grib_context_free(nearest->context,nearest->values);
nearest->values = grib_context_malloc(h->context,nvalues*sizeof(double));
if (!nearest->values) return GRIB_OUT_OF_MEMORY;
ret=grib_get_double_array_internal( h,self->values_key,
nearest->values,&(nearest->values_count));
if (ret!=GRIB_SUCCESS) grib_context_log(nearest->context,GRIB_LOG_ERROR,
"nearest: unable to get values array");
if (!nearest->h || (flags & GRIB_NEAREST_SAME_GRID)==0) {
double dummy=0;
double olat=1.e10, olon=1.e10;
int ilat=0,ilon=0;
long n=0;
if( (ret = grib_get_long(h,self->Ni,&n))!= GRIB_SUCCESS)
return ret;
self->lons_count=n;
if( (ret = grib_get_long(h,self->Nj,&n))!= GRIB_SUCCESS)
return ret;
self->lats_count=n;
if (self->lats) grib_context_free(nearest->context,self->lats);
self->lats=grib_context_malloc( nearest->context,
self->lats_count* sizeof(double));
if (!self->lats) return GRIB_OUT_OF_MEMORY;
if (self->lons) grib_context_free(nearest->context,self->lons);
self->lons=grib_context_malloc( nearest->context,
self->lons_count*sizeof(double));
if (!self->lons) return GRIB_OUT_OF_MEMORY;
iter=grib_iterator_new(h,0,&ret);
if (ret) {
grib_context_log(nearest->context,GRIB_LOG_ERROR,"unable to create iterator");
return ret;
}
while(grib_iterator_next(iter,&lat,&lon,&dummy)) {
if (olat != lat) {
self->lats[ilat++]=lat;
olat=lat;
}
if (ilon<self->lons_count && olon != lon) {
self->lons[ilon++]=lon;
olon=lon;
}
}
grib_iterator_delete(iter);
}
nearest->h=h;
}
if (!self->distances || (flags & GRIB_NEAREST_SAME_POINT)==0
|| (flags & GRIB_NEAREST_SAME_GRID)==0) {
grib_binary_search(self->lats,self->lats_count-1,inlat,
&(self->j[0]),&(self->j[1]));
grib_binary_search(self->lons,self->lons_count-1,inlon,
&(self->i[0]),&(self->i[1]));
if (!self->distances)
self->distances=(double*)grib_context_malloc( nearest->context,NUM_NEIGHBOURS*sizeof(double));
if (!self->k)
self->k=(int*)grib_context_malloc( nearest->context,NUM_NEIGHBOURS*sizeof(int));
kk=0;
for (ii=0;ii<2;ii++) {
for (jj=0;jj<2;jj++) {
self->k[kk]=self->i[ii]+self->lons_count*self->j[jj]-1;
self->distances[kk]=geographic_distance_spherical(radius,inlon,inlat,
self->lons[self->i[ii]],self->lats[self->j[jj]]);
kk++;
}
}
}
kk=0;
for (ii=0;ii<2;ii++) {
for (jj=0;jj<2;jj++) {
distances[kk]=self->distances[kk];
outlats[kk]=self->lats[self->j[jj]];
outlons[kk]=self->lons[self->i[ii]];
values[kk]=nearest->values[self->k[kk]];
indexes[kk]=self->k[kk];
kk++;
}
}
return GRIB_SUCCESS;
}

View File

@ -267,8 +267,6 @@ grib_viarray* grib_viarray_new(grib_context* c, size_t size, size_t incsize);
grib_viarray* grib_viarray_push(grib_context* c, grib_viarray* v, grib_iarray* val);
void grib_viarray_delete(grib_context* c, grib_viarray* v);
void grib_viarray_delete_content(grib_context* c, grib_viarray* v);
grib_iarray** grib_viarray_get_array(grib_context* c, grib_viarray* v);
size_t grib_viarray_used_size(grib_viarray* v);
/* grib_accessor_class_array.cc*/
@ -488,8 +486,6 @@ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd);
/* grib_accessor_class_times.cc*/
/* grib_accessor_class_forward.cc*/
/* grib_accessor_class_g2bitmap_present.cc*/
/* grib_accessor_class_ibmfloat.cc*/
@ -1072,11 +1068,6 @@ int grib_handle_prepare_action(grib_handle* h, grib_action* a);
void grib_multi_support_reset_file(grib_context* c, FILE* f);
void grib_multi_support_reset(grib_context* c);
/* grib_header_compute.cc*/
void print_math(grib_math* m);
void grib_math_delete(grib_context* c, grib_math* m);
grib_math* grib_math_new(grib_context* c, const char* formula, int* err);
/* grib_hash_keys.cc*/
const struct grib_keys_hash* grib_keys_hash_get(const char* str, size_t len);
grib_itrie* grib_hash_keys_new(grib_context* c, int* count);

View File

@ -8,6 +8,7 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
long grib_op_eq(long a, long b)
@ -69,7 +70,7 @@ double grib_op_neg_d(double a)
long grib_op_pow(long a, long b)
{
/* Note: This is actually 'a' to the power 'b' */
return grib_power(b, a);
return codes_power<double>(b, a);
}
long grib_op_add(long a, long b)

View File

@ -162,11 +162,11 @@ grib_accessor* grib_accessor_factory(grib_section* p, grib_action* creator,
if (p->block->last) {
a->offset = grib_get_next_position_offset(p->block->last);
#if 0
printf("offset: p->block->last %s %s %ld %ld\n",
p->block->last->cclass->name,
p->block->last->name,(long)p->block->last->offset,(long)p->block->last->length);
#endif
//printf("offset: p->block->last %s %s %ld %ld\n",
// p->block->last->cclass->name,
// p->block->last->name,(long)p->block->last->offset,(long)p->block->last->length);
}
else {
if (p->owner) {
@ -354,54 +354,41 @@ int grib_get_block_length(grib_section* s, size_t* l)
{
*l = s->length;
return GRIB_SUCCESS;
#if 0
/* TODO: Because grib_pack_long takes a SIGNED value, we may have problems */
// TODO: Because grib_pack_long takes a SIGNED value, we may have problems
// if(s->aclength) {
// size_t len = 1;
// long plen = 0;
if(s->aclength)
{
size_t len = 1;
long plen = 0;
// int ret = grib_unpack_long(s->aclength, &plen, &len);
// if(ret == GRIB_SUCCESS && plen != 0)
// {
// *l = plen;
// return GRIB_SUCCESS;
// }
// }
int ret = grib_unpack_long(s->aclength, &plen, &len);
if(ret == GRIB_SUCCESS && plen != 0)
{
*l = plen;
return GRIB_SUCCESS;
}
}
// // empty block
// if(s->block->first == NULL) {
// *l = 0;
// return GRIB_SUCCESS;
// }
// // no accessor for block length
// if(s->owner) *l = grib_get_next_position_offset(s->block->last) - s->owner->offset;
// else *l = grib_get_next_position_offset(s->block->last);
/* empty block */
if(s->block->first == NULL)
{
*l = 0;
return GRIB_SUCCESS;
}
/* no accessor for block length */
if(s->owner)
*l = grib_get_next_position_offset(s->block->last) - s->owner->offset;
else
*l = grib_get_next_position_offset(s->block->last);
// if(s->aclength) {
// size_t len = 1;
// long plen = *l;
if(s->aclength)
{
size_t len = 1;
long plen = *l;
int ret = grib_pack_long(s->aclength, &plen, &len);
if(ret != GRIB_SUCCESS)
;
if(s->h->context->debug)
printf("SECTION updating length %ld %s\n",plen,s->owner->name);
}
/*
if(s->aclength)
Assert(*l == plen);*/
return GRIB_SUCCESS;
#endif
// int ret = grib_pack_long(s->aclength, &plen, &len);
// if(ret != GRIB_SUCCESS)
// ;
// if(s->h->context->debug)
// printf("SECTION updating length %ld %s\n",plen,s->owner->name);
// }
// // if(s->aclength) Assert(*l == plen);
// return GRIB_SUCCESS;
}
grib_accessor* find_paddings(grib_section* s)

View File

@ -74,7 +74,6 @@ extern grib_accessor_class* grib_accessor_class_double;
extern grib_accessor_class* grib_accessor_class_element;
extern grib_accessor_class* grib_accessor_class_evaluate;
extern grib_accessor_class* grib_accessor_class_expanded_descriptors;
extern grib_accessor_class* grib_accessor_class_forward;
extern grib_accessor_class* grib_accessor_class_from_scale_factor_scaled_value;
extern grib_accessor_class* grib_accessor_class_g1_half_byte_codeflag;
extern grib_accessor_class* grib_accessor_class_g1_message_length;

View File

@ -8,10 +8,6 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
/******************************************************************
* Enrico Fucile
******************************************************************/
#include "grib_api_internal.h"
/*
This is used by make_class.pl

View File

@ -7,7 +7,7 @@
* 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 "grib_scaling.h"
#include "grib_api_internal.h"
/*
@ -803,7 +803,7 @@ static int encode_double_array(grib_context* c, grib_buffer* buff, long* pos, bu
modifiedReference = bd->reference;
modifiedFactor = bd->factor;
inverseFactor = grib_power(bd->scale, 10);
inverseFactor = codes_power<double>(bd->scale, 10);
modifiedWidth = bd->width;
err = descriptor_get_min_max(bd, modifiedWidth, modifiedReference, modifiedFactor, &minAllowed, &maxAllowed);
@ -945,10 +945,10 @@ static int encode_double_array(grib_context* c, grib_buffer* buff, long* pos, bu
localRange = (max - min) * inverseFactor + 1;
localWidth = ceil(log(localRange) / log(2.0));
lval = round(max * inverseFactor) - reference;
allone = grib_power(localWidth, 2) - 1;
allone = codes_power<double>(localWidth, 2) - 1;
while (allone <= lval) {
localWidth++;
allone = grib_power(localWidth, 2) - 1;
allone = codes_power<double>(localWidth, 2) - 1;
}
if (localWidth == 1)
localWidth++;
@ -3233,7 +3233,7 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st
return err;
}
bd = grib_bufr_descriptor_clone(self->expanded->v[index]);
bd->reference = -grib_power(bd->width, 2);
bd->reference = -codes_power<double>(bd->width, 2);
bd->width++;
err = codec_element(c, self, iss, buffer, data, &pos, index, bd, elementIndex, dval, sval);

View File

@ -12,6 +12,7 @@
* Enrico Fucile
****************************************/
#include "grib_scaling.h"
#include "grib_api_internal.h"
#if GRIB_PTHREADS
@ -350,7 +351,7 @@ static int bufr_get_from_table(grib_accessor* a, bufr_descriptor* v)
/* ECC-985: Scale and reference are often 0 so we can reduce calls to atol */
v->scale = atol_fast(list[5]);
v->factor = grib_power(-v->scale, 10);
v->factor = codes_power<double>(-v->scale, 10);
v->reference = atol_fast(list[6]);
v->width = atol(list[7]);

View File

@ -13,7 +13,7 @@
****************************************/
#include "grib_api_internal.h"
#include <ctype.h>
#include <cctype>
#if GRIB_PTHREADS
static pthread_once_t once = PTHREAD_ONCE_INIT;

View File

@ -8,6 +8,7 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
/*
@ -621,8 +622,8 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
if (boustrophedonic)
reverse_rows(sec_val, n_vals, Ni, bitmap, bitmap_len);
s = grib_power(binary_scale_factor, 2);
d = grib_power(-decimal_scale_factor, 10);
s = codes_power<double>(binary_scale_factor, 2);
d = codes_power<double>(-decimal_scale_factor, 10);
for (i = 0; i < n_vals; i++)
val[i] = (double)((((double)sec_val[i]) * s) + reference_value) * d;
@ -764,7 +765,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
/* calculation of integer array */
sec_val = (unsigned long*)grib_context_malloc(a->context, (n_vals) * sizeof(long));
d = grib_power(decimal_scale_factor, 10);
d = codes_power<double>(decimal_scale_factor, 10);
max = val[0];
min = max;
for (i = 0; i < n_vals; i++) {
@ -786,7 +787,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
/* the scale factor in Grib 1 is adjusted in gribex, for "normalization purpose" ... ?*/
binary_scale_factor = grib_get_binary_scale_fact(max, reference_value, bits_per_value, &err);
divisor = grib_power(-binary_scale_factor, 2);
divisor = codes_power<double>(-binary_scale_factor, 2);
for (i = 0; i < n_vals; i++)

View File

@ -8,7 +8,7 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_api_internal_cpp.h"
#include "grib_value.h"
/*
This is used by make_class.pl

View File

@ -271,13 +271,11 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
return ret;
}
#if 0
if(!grib_find_accessor(grib_handle_of_accessor(a),self->bitmap)){
grib_context_log(a->context, GRIB_LOG_ERROR,
"Accessor %s cannot access bitmap \n", a->name, self->bitmap_present, ret);
return ret;
}
#endif
// if(!grib_find_accessor(grib_handle_of_accessor(a),self->bitmap)){
// grib_context_log(a->context, GRIB_LOG_ERROR,
// "Accessor %s cannot access bitmap \n", a->name, self->bitmap_present, ret);
// return ret;
// }
ret = grib_set_double_array_internal(grib_handle_of_accessor(a), self->coded_values, val, *len);
if (ret) {

View File

@ -8,8 +8,10 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_api_internal_cpp.h"
#include "grib_bits_any_endian_simple.h"
#include "grib_scaling.h"
#include <cstdint>
#include <type_traits>
/*
This is used by make_class.pl
@ -315,7 +317,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
return err;
if (bits_per_value == 0 || (binary_scale_factor == 0 && decimal_scale_factor != 0)) {
d = grib_power(decimal_scale_factor, 10);
d = codes_power<double>(decimal_scale_factor, 10);
min *= d;
max *= d;
@ -345,9 +347,9 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
range = (max - min);
unscaled_min = min;
unscaled_max = max;
f = (grib_power(bits_per_value, 2) - 1);
minrange = grib_power(-last, 2) * f;
maxrange = grib_power(last, 2) * f;
f = (codes_power<double>(bits_per_value, 2) - 1);
minrange = codes_power<double>(-last, 2) * f;
maxrange = codes_power<double>(last, 2) * f;
while (range < minrange) {
decimal_scale_factor += 1;
@ -369,11 +371,11 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
"%s %s: unable to find nearest_smaller_value of %g for %s", cclass_name, __func__, min, self->reference_value);
return GRIB_INTERNAL_ERROR;
}
d = grib_power(decimal_scale_factor, 10);
d = codes_power<double>(decimal_scale_factor, 10);
}
binary_scale_factor = grib_get_binary_scale_fact(max, reference_value, bits_per_value, &err);
divisor = grib_power(-binary_scale_factor, 2);
divisor = codes_power<double>(-binary_scale_factor, 2);
size_t nbytes = (bits_per_value + 7) / 8;
// ECC-1602: use native a data type (4 bytes for uint32_t) for values that require only 3 bytes
@ -565,8 +567,8 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
return GRIB_SUCCESS;
}
bscale = grib_power(binary_scale_factor, 2);
dscale = grib_power(-decimal_scale_factor, 10);
bscale = codes_power<T>(binary_scale_factor, 2);
dscale = codes_power<T>(-decimal_scale_factor, 10);
buflen = grib_byte_count(a);
buf = (unsigned char*)hand->buffer->data;

View File

@ -8,8 +8,9 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_api_internal_cpp.h"
#include <math.h>
#include "grib_ieeefloat.h"
#include "grib_scaling.h"
#include <cmath>
#include <algorithm>
/*
This is used by make_class.pl
@ -446,7 +447,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
if (pen_j == sub_j) {
double* values;
d = grib_power(decimal_scale_factor, 10);
d = codes_power<double>(decimal_scale_factor, 10);
if (d) {
values = (double*)grib_context_malloc_clear(a->context, sizeof(double) * n_vals);
for (i = 0; i < n_vals; i++)
@ -546,10 +547,10 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
"%s: unable to find nearest_smaller_value of %g for %s", cclass_name, min, self->reference_value);
return GRIB_INTERNAL_ERROR;
}
d = grib_power(+decimal_scale_factor, 10);
d = codes_power<double>(+decimal_scale_factor, 10);
}
else {
d = grib_power(+decimal_scale_factor, 10);
d = codes_power<double>(+decimal_scale_factor, 10);
if (grib_get_nearest_smaller_value(gh, self->reference_value, d * min, &reference_value) != GRIB_SUCCESS) {
grib_context_log(gh->context, GRIB_LOG_ERROR,
"%s: unable to find nearest_smaller_value of %g for %s", cclass_name, d * min, self->reference_value);
@ -569,7 +570,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
}
}
}
s = grib_power(-binary_scale_factor, 2);
s = codes_power<double>(-binary_scale_factor, 2);
i = 0;
@ -698,9 +699,9 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
T* scals = NULL;
T* pscals = NULL, *pval = NULL;
double s = 0;
double d = 0;
double laplacianOperator = 0;
T s = 0;
T d = 0;
T laplacianOperator = 0;
unsigned char* buf = NULL;
unsigned char* hres = NULL;
unsigned char* lres = NULL;
@ -713,7 +714,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
long offsetdata = 0;
long bits_per_value = 0;
double reference_value = 0;
T reference_value = 0;
long binary_scale_factor = 0;
long decimal_scale_factor = 0;
@ -727,6 +728,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
T operat = 0;
int bytes;
int err = 0;
double tmp;
decode_float_proc decode_float = NULL;
@ -743,8 +745,9 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
return ret;
if ((ret = grib_get_long_internal(gh, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS)
return ret;
if ((ret = grib_get_double_internal(gh, self->reference_value, &reference_value)) != GRIB_SUCCESS)
if ((ret = grib_get_double_internal(gh, self->reference_value, &tmp)) != GRIB_SUCCESS)
return ret;
reference_value = tmp;
if ((ret = grib_get_long_internal(gh, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS)
return ret;
@ -758,8 +761,10 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
if ((ret = grib_get_long(gh, self->ieee_floats, &ieee_floats)) != GRIB_SUCCESS)
return ret;
if ((ret = grib_get_double_internal(gh, self->laplacianOperator, &laplacianOperator)) != GRIB_SUCCESS)
if ((ret = grib_get_double_internal(gh, self->laplacianOperator, &tmp)) != GRIB_SUCCESS)
return ret;
laplacianOperator = tmp;
if ((ret = grib_get_long_internal(gh, self->sub_j, &sub_j)) != GRIB_SUCCESS)
return ret;
if ((ret = grib_get_long_internal(gh, self->sub_k, &sub_k)) != GRIB_SUCCESS)
@ -807,7 +812,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
if (pen_j == sub_j) {
n_vals = (pen_j + 1) * (pen_j + 2);
d = grib_power(-decimal_scale_factor, 10);
d = codes_power<T>(-decimal_scale_factor, 10);
grib_ieee_decode_array<T>(a->context, buf, n_vals, bytes, val);
if (d) {
@ -821,8 +826,8 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
lpos = 8 * (packed_offset - offsetdata);
s = grib_power(binary_scale_factor, 2);
d = grib_power(-decimal_scale_factor, 10);
s = codes_power<T>(binary_scale_factor, 2);
d = codes_power<T>(-decimal_scale_factor, 10);
scals = (T*)grib_context_malloc(a->context, maxv * sizeof(T));
if (!scals) return GRIB_OUT_OF_MEMORY;

View File

@ -173,29 +173,27 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
if (*len == 0)
return GRIB_NO_VALUES;
#if 0
/* TODO: spectral_ieee does not work */
if (c->ieee_packing && self->ieee_packing) {
grib_handle* h = grib_handle_of_accessor(a);
grib_context* c = a->context;
char* packingType_s = NULL;
char* ieee_packing_s = NULL;
long precision = c->ieee_packing == 32 ? 1 : 2;
size_t lenstr = strlen(self->ieee_packing);
// /* TODO: spectral_ieee does not work */
// if (c->ieee_packing && self->ieee_packing) {
// grib_handle* h = grib_handle_of_accessor(a);
// grib_context* c = a->context;
// char* packingType_s = NULL;
// char* ieee_packing_s = NULL;
// long precision = c->ieee_packing == 32 ? 1 : 2;
// size_t lenstr = strlen(self->ieee_packing);
packingType_s = grib_context_strdup(c, self->packingType);
ieee_packing_s = grib_context_strdup(c, self->ieee_packing);
precision_s = grib_context_strdup(c, self->precision);
// packingType_s = grib_context_strdup(c, self->packingType);
// ieee_packing_s = grib_context_strdup(c, self->ieee_packing);
// precision_s = grib_context_strdup(c, self->precision);
grib_set_string(h, packingType_s, ieee_packing_s, &lenstr);
grib_set_long(h, precision_s, precision);
// grib_set_string(h, packingType_s, ieee_packing_s, &lenstr);
// grib_set_long(h, precision_s, precision);
grib_context_free(c, packingType_s);
grib_context_free(c, ieee_packing_s);
grib_context_free(c, precision_s);
return grib_set_double_array(h, "values", val, *len);
}
#endif
// grib_context_free(c, packingType_s);
// grib_context_free(c, ieee_packing_s);
// grib_context_free(c, precision_s);
// return grib_set_double_array(h, "values", val, *len);
// }
if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_j, &sub_j)) != GRIB_SUCCESS)
return ret;

View File

@ -8,6 +8,7 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
/*
@ -298,8 +299,8 @@ static int unpack_double(grib_accessor* a, double* values, size_t* len)
printf("XXXXXXX extrabits=%ld pos=%ld\n",extrabits,pos);
}*/
s = grib_power(binary_scale_factor, 2);
d = grib_power(-decimal_scale_factor, 10);
s = codes_power<double>(binary_scale_factor, 2);
d = codes_power<double>(-decimal_scale_factor, 10);
for (i = 0; i < numberOfSecondOrderPackedValues; i++) {
values[i] = (double)(((X[i] * s) + reference_value) * d);
}

View File

@ -8,6 +8,7 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
#include "grib_optimize_decimal_factor.h"
@ -364,7 +365,6 @@ static int unpack(grib_accessor* a, double* dvalues, float* fvalues, size_t* len
double reference_value;
long binary_scale_factor;
long decimal_scale_factor;
double s, d;
long j, count = 0;
long *groupWidths = NULL, *groupLengths = NULL;
long orderOfSPD = 0;
@ -465,17 +465,15 @@ static int unpack(grib_accessor* a, double* dvalues, float* fvalues, size_t* len
count++;
n++;
}
#if 0
for (j=0;j<groupLengths[i];j++) {
X[n]=grib_decode_unsigned_long(buf,&pos,groupWidths[i]);
#if EFDEBUG
printf("DXXXXX %ld %ld %ld %ld\n",n,X[n],groupWidths[i],groupLengths[i]);
#endif
X[n]+=firstOrderValues[i];
count++;
n++;
}
#endif
// for (j=0;j<groupLengths[i];j++) {
// X[n]=grib_decode_unsigned_long(buf,&pos,groupWidths[i]);
// //printf("DXXXXX %ld %ld %ld %ld\n",n,X[n],groupWidths[i],groupLengths[i]);
// X[n]+=firstOrderValues[i];
// count++;
// n++;
// }
}
else {
for (j = 0; j < groupLengths[i]; j++) {
@ -532,8 +530,8 @@ static int unpack(grib_accessor* a, double* dvalues, float* fvalues, size_t* len
self->dvalues = (double*)grib_context_malloc_clear(a->context, sizeof(double) * numberOfValues);
}
s = grib_power(binary_scale_factor, 2);
d = grib_power(-decimal_scale_factor, 10);
double s = codes_power<double>(binary_scale_factor, 2);
double d = codes_power<double>(-decimal_scale_factor, 10);
for (i = 0; i < numberOfValues; i++) {
dvalues[i] = (double)(((X[i] * s) + reference_value) * d);
self->dvalues[i] = dvalues[i];
@ -551,8 +549,8 @@ static int unpack(grib_accessor* a, double* dvalues, float* fvalues, size_t* len
self->fvalues = (float*)grib_context_malloc_clear(a->context, sizeof(float) * numberOfValues);
}
s = grib_power(binary_scale_factor, 2);
d = grib_power(-decimal_scale_factor, 10);
float s = codes_power<float>(binary_scale_factor, 2);
float d = codes_power<float>(-decimal_scale_factor, 10);
for (i = 0; i < numberOfValues; i++) {
fvalues[i] = (float)(((X[i] * s) + reference_value) * d);
self->fvalues[i] = fvalues[i];
@ -691,613 +689,6 @@ static void grib_split_long_groups(grib_handle* hand, grib_context* c, long* num
grib_context_free(c, localFirstOrderValues);
}
#if 0
/* Old implementation. Now superseded. See ECC-441 and ECC-261 */
static int pack_double_old(grib_accessor* a, const double* val, size_t *len)
{
grib_accessor_data_g1second_order_general_extended_packing* self = (grib_accessor_data_g1second_order_general_extended_packing*)a;
int ret=0;
int grib2=0;
long bits_per_value,orderOfSPD,binary_scale_factor;
long numberOfValues;
double max,min;
double decimal,divisor;
double reference_value;
size_t size,sizebits;
long half_byte;
long* X;
long* Xp;
long i;
long incrementGroupLengthA,groupWidthA,prevGroupLength,offsetD,remainingValuesB,groupLengthB;
long maxB,minB,maxAB,minAB;
long offsetBeforeData,offsetSection4;
unsigned char* buffer = NULL;
long maxWidth,maxLength,widthOfWidths,NL,widthOfLengths,N1,N2,extraValues,codedNumberOfGroups,numberOfSecondOrderPackedValues;
long pos;
long numberOfGroups;
long groupLengthC,groupLengthA,remainingValues,count;
long maxA=0,minA=0;
long maxC,minC,offsetC;
long maxAC,minAC;
long range,bias=0,maxSPD;
long firstOrderValuesMax,offset,groupLength,j,groupWidth,firstOrderValue,lengthOfSecondOrderValues;
long *groupLengths,*groupWidths,*firstOrderValues;
/* long groupLengths[MAX_NUMBER_OF_GROUPS],groupWidths[MAX_NUMBER_OF_GROUPS],firstOrderValues[MAX_NUMBER_OF_GROUPS]; */
/* TODO put these parameters in def file */
long startGroupLength=15;
long incrementGroupLength=3;
long minGroupLength=3;
long widthOfSPD=0,widthOfBias=0;
long *offsets;
long widthOfFirstOrderValues;
int computeGroupA=1;
long dataHeadersLength,widthsLength,lengthsLength,firstOrderValuesLength;
long decimal_scale_factor;
grib_handle* handle = grib_handle_of_accessor(a);
self->dirty=1;
numberOfValues=*len;
max = val[0];
min = max;
for(i=1;i< numberOfValues;i++) {
if (val[i] > max ) max = val[i];
else if (val[i] < min ) min = val[i];
}
/* For constant fields set decimal scale factor to 0 (See GRIB-165) */
if (min==max) {
grib_set_long_internal(handle,self->decimal_scale_factor, 0);
}
if((ret = grib_get_long_internal(handle,self->decimal_scale_factor, &decimal_scale_factor))
!= GRIB_SUCCESS)
return ret;
decimal = grib_power(decimal_scale_factor,10);
max*=decimal;
min*=decimal;
if (grib_get_nearest_smaller_value(handle,self->reference_value,min,&reference_value)
!=GRIB_SUCCESS) {
grib_context_log(a->context,GRIB_LOG_ERROR,
"unable to find nearest_smaller_value of %g for %s",min,self->reference_value);
return GRIB_INTERNAL_ERROR;
}
if((ret = grib_set_double_internal(handle,self->reference_value, reference_value)) !=
GRIB_SUCCESS)
return ret;
if((ret=grib_get_long_internal(handle,self->bits_per_value,&bits_per_value)) != GRIB_SUCCESS)
return ret;
if((ret=grib_get_long_internal(handle,self->offsetdata,&offsetBeforeData)) != GRIB_SUCCESS)
return ret;
if((ret=grib_get_long_internal(handle,self->offsetsection,&offsetSection4)) != GRIB_SUCCESS)
return ret;
if((ret=grib_get_long_internal(handle,self->orderOfSPD,&orderOfSPD)) != GRIB_SUCCESS)
return ret;
binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&ret);
if (ret != GRIB_SUCCESS) return ret;
if((ret = grib_set_long_internal(handle,self->binary_scale_factor, binary_scale_factor)) !=
GRIB_SUCCESS)
return ret;
divisor = grib_power(-binary_scale_factor,2);
X=(long*)grib_context_malloc_clear(a->context,sizeof(long)*numberOfValues);
for(i=0;i< numberOfValues;i++){
X[i] = (((val[i]*decimal)-reference_value)*divisor)+0.5;
}
groupLengths=(long*)grib_context_malloc_clear(a->context,sizeof(long)*numberOfValues);
groupWidths=(long*)grib_context_malloc_clear(a->context,sizeof(long)*numberOfValues);
firstOrderValues=(long*)grib_context_malloc_clear(a->context,sizeof(long)*numberOfValues);
/* spatial differencing */
switch (orderOfSPD) {
case 1:
for (i=numberOfValues-1;i>0;i--) {
X[i]-=X[i-1];
}
break;
case 2:
for (i=numberOfValues-1;i>1;i--) {
X[i]-=2*X[i-1]-X[i-2];
}
break;
case 3:
for (i=numberOfValues-1;i>2;i--) {
X[i]-=3*(X[i-1]-X[i-2])+X[i-3];
}
break;
}
if (orderOfSPD) {
Assert(orderOfSPD >=0 && orderOfSPD < numberOfValues);
bias=X[orderOfSPD];
for (i=orderOfSPD+1;i<numberOfValues;i++) {
if ( bias > X[i] ) bias=X[i];
}
for (i=orderOfSPD;i<numberOfValues;i++) {
X[i]-=bias;
}
maxSPD=X[0];
for (i=1;i<orderOfSPD;i++) {
if ( maxSPD < X[i] ) maxSPD=X[i];
}
/* widthOfSPD=(long)ceil(log((double)(maxSPD+1))/log(2.0)); */
widthOfSPD=number_of_bits(handle, maxSPD);
widthOfBias=number_of_bits(handle, labs(bias))+1;
if ( widthOfSPD < widthOfBias ) widthOfSPD=widthOfBias;
}
/* end of spatial differencing */
count=orderOfSPD;
remainingValues=numberOfValues-count;
numberOfGroups=0;
incrementGroupLengthA=startGroupLength;
computeGroupA=1;
while (remainingValues) {
/* group A created with length=incrementGroupLengthA (if enough values remain)
incrementGroupLengthA=startGroupLength always except when coming from an A+C or A+B ok branch
*/
groupLengthA= incrementGroupLengthA < remainingValues ? incrementGroupLengthA : remainingValues ;
if (computeGroupA) {
maxA=X[count];
minA=X[count];
for (i=1;i<groupLengthA;i++) {
DebugAssertAccess(X, count+i, numberOfValues);
if (maxA<X[count+i]) maxA=X[count+i];
if (minA>X[count+i]) minA=X[count+i];
}
}
groupWidthA=number_of_bits(handle, maxA-minA);
range=(long)grib_power(groupWidthA,2)-1;
offsetC=count+groupLengthA;
if (offsetC==numberOfValues) {
/* no more values close group A and end loop */
groupLengths[numberOfGroups]=groupLengthA;
groupWidths[numberOfGroups]=groupWidthA;
/* firstOrderValues[numberOfGroups]=minA; */
/* to optimise the width of first order variable */
firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0;
numberOfGroups++;
break;
}
/* group C created with length=incrementGroupLength (fixed)
or remaining values if close to end
*/
groupLengthC=incrementGroupLength;
if ( groupLengthC + offsetC > numberOfValues - startGroupLength/2) {
groupLengthC=numberOfValues-offsetC;
}
maxC=X[offsetC];
minC=X[offsetC];
for (i=1;i<groupLengthC;i++) {
DebugAssertAccess(X, offsetC+i, numberOfValues);
if (maxC<X[offsetC+i]) maxC=X[offsetC+i];
if (minC>X[offsetC+i]) minC=X[offsetC+i];
}
maxAC= maxA > maxC ? maxA : maxC;
minAC= minA < minC ? minA : minC;
/* check if A+C can be represented with the same width as A*/
if (maxAC-minAC > range) {
/* A could not be expanded adding C. Check if A could be expanded taking
some elements from preceding group. The condition is always that width of
A doesn't increase.
*/
if (numberOfGroups>0 && groupWidths[numberOfGroups-1] > groupWidthA ) {
prevGroupLength=groupLengths[numberOfGroups-1]-incrementGroupLength;
offsetC=count-incrementGroupLength;
/* preceding group length cannot be less than a minimum value */
while (prevGroupLength >= minGroupLength) {
maxAC=maxA;
minAC=minA;
for (i=0;i<incrementGroupLength;i++) {
if (maxAC<X[offsetC+i]) maxAC=X[offsetC+i];
if (minAC>X[offsetC+i]) minAC=X[offsetC+i];
}
/* no more elements can be transfered, exit loop*/
if (maxAC-minAC > range) break;
maxA=maxAC;
minA=minAC;
groupLengths[numberOfGroups-1]-=incrementGroupLength;
groupLengthA+=incrementGroupLength;
count-=incrementGroupLength;
remainingValues+=incrementGroupLength;
offsetC-=incrementGroupLength;
prevGroupLength-=incrementGroupLength;
}
}
/* close group A*/
groupLengths[numberOfGroups]=groupLengthA;
groupWidths[numberOfGroups]=groupWidthA;
/* firstOrderValues[numberOfGroups]=minA; */
/* to optimise the width of first order variable */
firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0;
count+=groupLengthA;
remainingValues-=groupLengthA;
numberOfGroups++;
/* incrementGroupLengthA is reset to the fixed startGroupLength as it
could have been changed after the A+C or A+B ok condition.
*/
incrementGroupLengthA=startGroupLength;
computeGroupA=1;
#if 0
if (numberOfGroups==MAX_NUMBER_OF_GROUPS) {
groupLengthA= remainingValues ;
maxA=X[count];
minA=X[count];
for (i=1;i<groupLengthA;i++) {
if (maxA<X[count+i]) maxA=X[count+i];
if (minA>X[count+i]) minA=X[count+i];
}
groupWidthA=number_of_bits(maxA-minA);
range=(long)grib_power(groupWidthA,2)-1;
groupLengths[numberOfGroups]=groupLengthA;
groupWidths[numberOfGroups]=groupWidthA;
firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0;
break;
}
#endif
continue;
}
/* A+C could be coded with the same width as A*/
offsetD=offsetC+groupLengthC;
if (offsetD==numberOfValues) {
groupLengths[numberOfGroups]=groupLengthA+groupLengthC;
groupWidths[numberOfGroups]=groupWidthA;
/* range of AC is the same as A*/
/* firstOrderValues[numberOfGroups]=minAC; */
/* to optimise the width of first order variable */
firstOrderValues[numberOfGroups] = maxAC-range > 0 ? maxAC-range : 0;
numberOfGroups++;
break;
}
/* group B is created with length startGroupLength, starting at the
same offset as C.
*/
remainingValuesB=numberOfValues-offsetC;
groupLengthB= startGroupLength < remainingValuesB ? startGroupLength : remainingValuesB ;
maxB=maxC;
minB=minC;
for (i=groupLengthC;i<groupLengthB;i++) {
if (maxB<X[offsetC+i]) maxB=X[offsetC+i];
if (minB>X[offsetC+i]) minB=X[offsetC+i];
}
/* check if group B can be coded with a smaller width than A */
if (maxB-minB <= range/2 && range>0 ) {
/* TODO Add code to try if A can be expanded taking some elements
from the left (preceding) group.
A possible variation is to do this left check (and the previous one)
in the final loop when checking that the width of each group.
*/
/* close group A and continue loop*/
groupLengths[numberOfGroups]=groupLengthA;
groupWidths[numberOfGroups]=groupWidthA;
/* firstOrderValues[numberOfGroups]=minA; */
/* to optimise the width of first order variable */
firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0;
count+=groupLengthA;
remainingValues-=groupLengthA;
numberOfGroups++;
#if 0
if (numberOfGroups==MAX_NUMBER_OF_GROUPS) {
groupLengthA= remainingValues ;
maxA=X[count];
minA=X[count];
for (i=1;i<groupLengthA;i++) {
if (maxA<X[count+i]) maxA=X[count+i];
if (minA>X[count+i]) minA=X[count+i];
}
groupWidthA=number_of_bits(maxA-minA);
range=(long)grib_power(groupWidthA,2)-1;
groupLengths[numberOfGroups]=groupLengthA;
groupWidths[numberOfGroups]=groupWidthA;
firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0;
break;
}
#endif
incrementGroupLengthA=startGroupLength;
computeGroupA=1;
continue;
}
/* check if A+B can be coded with same with as A */
maxAB= maxA > maxB ? maxA : maxB;
minAB= minA < minB ? minA : minB;
if (maxAB-minAB <= range) {
/* A+B can be merged. The increment used at the beginning of the loop to
build group C is increased to the size of group B
*/
incrementGroupLengthA+=groupLengthB;
maxA=maxAB;
minA=minAB;
computeGroupA=0;
continue;
}
/* A+B cannot be merged, A+C can be merged*/
incrementGroupLengthA+=groupLengthC;
computeGroupA=1;
} /* end of the while*/
/* computing bitsPerValue as the number of bits needed to represent
the firstOrderValues.
*/
max=firstOrderValues[0];
min=firstOrderValues[0];
for (i=1;i<numberOfGroups;i++) {
if (max<firstOrderValues[i]) max=firstOrderValues[i];
if (min>firstOrderValues[i]) min=firstOrderValues[i];
}
widthOfFirstOrderValues=number_of_bits(handle, max-min);
firstOrderValuesMax=(long)grib_power(widthOfFirstOrderValues,2)-1;
if (numberOfGroups>2) {
/* loop through all the groups except the last in reverse order to
check if each group width is still appropriate for the group.
Focus on groups which have been shrank as left groups of an A group taking
some of their elements.
*/
offsets=(long*)grib_context_malloc_clear(a->context,sizeof(long)*numberOfGroups);
offsets[0]=orderOfSPD;
for (i=1;i<numberOfGroups;i++) offsets[i]=offsets[i-1]+groupLengths[i-1];
for (i=numberOfGroups-2;i>=0;i--) {
offset=offsets[i];
groupLength=groupLengths[i];
if (groupLength >= startGroupLength) continue;
max=X[offset];
min=X[offset];
for (j=1;j<groupLength;j++) {
if (max<X[offset+j]) max=X[offset+j];
if (min>X[offset+j]) min=X[offset+j];
}
groupWidth=number_of_bits(handle, max-min);
range=(long)grib_power(groupWidth,2)-1;
/* width of first order values has to be unchanged.*/
for (j=groupWidth;j<groupWidths[i];j++) {
firstOrderValue= max>range ? max-range : 0;
if (firstOrderValue <= firstOrderValuesMax ) {
groupWidths[i]=j;
firstOrderValues[i]=firstOrderValue;
break;
}
}
offsetC=offset;
/* group width of the current group (i) can have been reduced
and it is worth to try to expand the group to get some elements
from the left group if it has bigger width.
*/
if (i>0 && (groupWidths[i-1] > groupWidths[i]) ) {
prevGroupLength=groupLengths[i-1]-incrementGroupLength;
offsetC-=incrementGroupLength;
while (prevGroupLength >= minGroupLength) {
for (j=0;j<incrementGroupLength;j++) {
if (max<X[offsetC+j]) max=X[offsetC+j];
if (min>X[offsetC+j]) min=X[offsetC+j];
}
/* width of first order values has to be unchanged*/
firstOrderValue=max>range ? max-range : 0;
if (max-min > range || firstOrderValue > firstOrderValuesMax ) break;
groupLengths[i-1]-=incrementGroupLength;
groupLengths[i]+=incrementGroupLength;
firstOrderValues[i]=firstOrderValue;
offsetC-=incrementGroupLength;
prevGroupLength-=incrementGroupLength;
}
}
}
grib_context_free(a->context,offsets);
}
maxWidth=groupWidths[0];
maxLength=groupLengths[0];
for (i=1;i<numberOfGroups;i++) {
if (maxWidth<groupWidths[i]) maxWidth=groupWidths[i];
if (maxLength<groupLengths[i]) maxLength=groupLengths[i];
}
if (maxWidth < 0 || maxLength < 0) {
grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Cannot compute parameters for second order packing.");
return GRIB_ENCODING_ERROR;
}
widthOfWidths=number_of_bits(handle, maxWidth);
widthOfLengths=number_of_bits(handle, maxLength);
lengthOfSecondOrderValues=0;
for ( i=0; i<numberOfGroups;i++) {
lengthOfSecondOrderValues+=groupLengths[i]*groupWidths[i];
}
if (!a->context->no_big_group_split) {
grib_split_long_groups(handle, a->context,&numberOfGroups,&lengthOfSecondOrderValues,
groupLengths,&widthOfLengths,groupWidths,widthOfWidths,
firstOrderValues,widthOfFirstOrderValues);
}
Xp=X+orderOfSPD;
for ( i=0; i<numberOfGroups;i++) {
for (j=0; j<groupLengths[i]; j++) {
*(Xp++)-=firstOrderValues[i];
}
}
/* start writing to message */
/* writing SPD */
if (orderOfSPD) {
if((ret = grib_set_long_internal(handle,self->widthOfSPD, widthOfSPD))
!= GRIB_SUCCESS)
return ret;
}
/* end writing SPD */
if((ret = grib_set_long_internal(handle,self->widthOfFirstOrderValues, widthOfFirstOrderValues))
!= GRIB_SUCCESS)
return ret;
dataHeadersLength=25;
if (orderOfSPD) dataHeadersLength+=1+((orderOfSPD+1)*widthOfSPD+7)/8;
widthsLength=(widthOfWidths*numberOfGroups+7)/8;
lengthsLength=(widthOfLengths*numberOfGroups+7)/8;
firstOrderValuesLength=(widthOfFirstOrderValues*numberOfGroups+7)/8;
NL=widthsLength+dataHeadersLength+1;
N1=NL+lengthsLength;
N2=N1+firstOrderValuesLength;
NL= NL > 65535 ? 65535 : NL;
N2= N2 > 65535 ? 65535 : N2;
N1= N1 > 65535 ? 65535 : N1;
grib_set_long(handle,self->NL, NL);
grib_set_long(handle,self->N1, N1);
grib_set_long(handle,self->N2, N2);
if (numberOfGroups > 65535 ) {
extraValues=numberOfGroups/65536;
codedNumberOfGroups=numberOfGroups%65536;
} else {
extraValues=0;
codedNumberOfGroups=numberOfGroups;
}
/* if no extraValues key present it is a GRIB2*/
grib2=0;
if((ret = grib_set_long(handle,self->extraValues, extraValues)) != GRIB_SUCCESS) {
codedNumberOfGroups=numberOfGroups;
grib2=1;
}
if((ret = grib_set_long_internal(handle,self->codedNumberOfGroups, codedNumberOfGroups)) != GRIB_SUCCESS)
return ret;
numberOfSecondOrderPackedValues=numberOfValues-orderOfSPD;
if (!grib2 && numberOfSecondOrderPackedValues > 65535 )
numberOfSecondOrderPackedValues= 65535;
if((ret = grib_set_long_internal(handle,self->numberOfSecondOrderPackedValues, numberOfSecondOrderPackedValues))
!= GRIB_SUCCESS)
return ret;
if (grib2) {
if((ret = grib_set_long_internal(handle,self->bits_per_value, bits_per_value)) != GRIB_SUCCESS)
return ret;
} else {
if((ret = grib_set_long_internal(handle,self->bits_per_value, 0)) != GRIB_SUCCESS)
return ret;
}
if((ret = grib_set_long_internal(handle,self->widthOfWidths, widthOfWidths)) != GRIB_SUCCESS)
return ret;
if((ret = grib_set_long_internal(handle,self->widthOfLengths, widthOfLengths)) != GRIB_SUCCESS)
return ret;
lengthOfSecondOrderValues=0;
for ( i=0; i<numberOfGroups;i++) {
lengthOfSecondOrderValues+=groupLengths[i]*groupWidths[i];
}
size=(lengthOfSecondOrderValues+7)/8;
sizebits=lengthOfSecondOrderValues;
/* padding section 4 to an even number of octets*/
size = (size+offsetBeforeData-offsetSection4) % 2 ? size+1 : size;
half_byte=8*size-sizebits;
if((ret = grib_set_long_internal(handle,self->half_byte, half_byte)) != GRIB_SUCCESS)
return ret;
buffer=(unsigned char*)grib_context_malloc_clear(a->context,size);
pos=0;
if (orderOfSPD) {
long SPD[4]={0,};
size_t nSPD=orderOfSPD+1;
Assert(orderOfSPD<=3);
for (i=0;i<orderOfSPD;i++) SPD[i]=X[i];
SPD[orderOfSPD]=bias;
ret=grib_set_long_array_internal(handle,self->SPD,SPD,nSPD);
if(ret) return ret;
}
ret=grib_set_long_array_internal(handle,self->groupWidths,groupWidths,(size_t)numberOfGroups);
if(ret) return ret;
ret=grib_set_long_array_internal(handle,self->groupLengths,groupLengths,(size_t)numberOfGroups);
if(ret) return ret;
ret=grib_set_long_array_internal(handle,self->firstOrderValues,firstOrderValues,(size_t)numberOfGroups);
if(ret) return ret;
Xp=X+orderOfSPD;
pos=0;
count=0;
for (i=0;i<numberOfGroups;i++) {
if (groupWidths[i]>0) {
for (j=0;j<groupLengths[i];j++) {
#if EFDEBUG
printf("CXXXXX %ld %ld %ld %ld\n",count,*Xp,groupWidths[i],groupLengths[i]);
count++;
#endif
grib_encode_unsigned_longb(buffer,*(Xp++),&pos,groupWidths[i]);
}
} else {
Xp+=groupLengths[i];
#if EFDEBUG
count+=groupLengths[i];
#endif
}
}
/* ECC-259: Set correct number of values */
ret=grib_set_long_internal(a->parent->h,self->number_of_values, *len);
if(ret) return ret;
grib_buffer_replace(a, buffer, size,1,1);
grib_context_free(a->context,buffer);
grib_context_free(a->context,X);
grib_context_free(a->context,groupLengths);
grib_context_free(a->context,groupWidths);
grib_context_free(a->context,firstOrderValues);
return ret;
}
#endif
static int get_bits_per_value(grib_handle* h, const char* bits_per_value_str, long* bits_per_value)
{
int err = 0;
@ -1319,6 +710,9 @@ static int get_bits_per_value(grib_handle* h, const char* bits_per_value_str, lo
return err;
}
// For the old implementation of pack_double, see
// src/deprecated/grib_accessor_class_data_g1second_order_general_extended_packing.pack_double.cc
// See ECC-441 and ECC-261
static int pack_double(grib_accessor* a, const double* val, size_t* len)
{
grib_accessor_data_g1second_order_general_extended_packing* self = (grib_accessor_data_g1second_order_general_extended_packing*)a;
@ -1392,8 +786,8 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
&decimal_scale_factor, &binary_scale_factor, &reference_value)) != GRIB_SUCCESS)
return ret;
decimal = grib_power(decimal_scale_factor, 10);
divisor = grib_power(-binary_scale_factor, 2);
decimal = codes_power<double>(decimal_scale_factor, 10);
divisor = codes_power<double>(-binary_scale_factor, 2);
/*min = min * decimal;*/
/*max = max * decimal;*/
@ -1410,7 +804,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
if ((ret = grib_get_long_internal(handle, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS)
return ret;
decimal = grib_power(decimal_scale_factor, 10);
decimal = codes_power<double>(decimal_scale_factor, 10);
min = min * decimal;
max = max * decimal;
@ -1421,7 +815,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
}
binary_scale_factor = grib_get_binary_scale_fact(max, reference_value, bits_per_value, &ret);
divisor = grib_power(-binary_scale_factor, 2);
divisor = codes_power<double>(-binary_scale_factor, 2);
}
if ((ret = grib_set_long_internal(handle, self->binary_scale_factor, binary_scale_factor)) !=
@ -1515,7 +909,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
}
}
groupWidthA = number_of_bits(handle, maxA - minA);
range = (long)grib_power(groupWidthA, 2) - 1;
range = (long)codes_power<double>(groupWidthA, 2) - 1;
offsetC = count + groupLengthA;
if (offsetC == numberOfValues) {
@ -1598,23 +992,23 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
*/
incrementGroupLengthA = startGroupLength;
computeGroupA = 1;
#if 0
if (numberOfGroups==MAX_NUMBER_OF_GROUPS) {
groupLengthA= remainingValues ;
maxA=X[count];
minA=X[count];
for (i=1;i<groupLengthA;i++) {
if (maxA<X[count+i]) maxA=X[count+i];
if (minA>X[count+i]) minA=X[count+i];
}
groupWidthA=number_of_bits(maxA-minA);
range=(long)grib_power(groupWidthA,2)-1;
groupLengths[numberOfGroups]=groupLengthA;
groupWidths[numberOfGroups]=groupWidthA;
firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0;
break;
}
#endif
// if (numberOfGroups==MAX_NUMBER_OF_GROUPS) {
// groupLengthA= remainingValues ;
// maxA=X[count];
// minA=X[count];
// for (i=1;i<groupLengthA;i++) {
// if (maxA<X[count+i]) maxA=X[count+i];
// if (minA>X[count+i]) minA=X[count+i];
// }
// groupWidthA=number_of_bits(maxA-minA);
// range=(long)codes_power<double>(groupWidthA,2)-1;
// groupLengths[numberOfGroups]=groupLengthA;
// groupWidths[numberOfGroups]=groupWidthA;
// firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0;
// break;
// }
continue;
}
@ -1663,23 +1057,23 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
count += groupLengthA;
remainingValues -= groupLengthA;
numberOfGroups++;
#if 0
if (numberOfGroups==MAX_NUMBER_OF_GROUPS) {
groupLengthA= remainingValues ;
maxA=X[count];
minA=X[count];
for (i=1;i<groupLengthA;i++) {
if (maxA<X[count+i]) maxA=X[count+i];
if (minA>X[count+i]) minA=X[count+i];
}
groupWidthA=number_of_bits(maxA-minA);
range=(long)grib_power(groupWidthA,2)-1;
groupLengths[numberOfGroups]=groupLengthA;
groupWidths[numberOfGroups]=groupWidthA;
firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0;
break;
}
#endif
// if (numberOfGroups==MAX_NUMBER_OF_GROUPS) {
// groupLengthA= remainingValues ;
// maxA=X[count];
// minA=X[count];
// for (i=1;i<groupLengthA;i++) {
// if (maxA<X[count+i]) maxA=X[count+i];
// if (minA>X[count+i]) minA=X[count+i];
// }
// groupWidthA=number_of_bits(maxA-minA);
// range=(long)codes_power<double>(groupWidthA,2)-1;
// groupLengths[numberOfGroups]=groupLengthA;
// groupWidths[numberOfGroups]=groupWidthA;
// firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0;
// break;
// }
incrementGroupLengthA = startGroupLength;
computeGroupA = 1;
continue;
@ -1717,7 +1111,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
min = firstOrderValues[i];
}
widthOfFirstOrderValues = number_of_bits(handle, max - min);
firstOrderValuesMax = (long)grib_power(widthOfFirstOrderValues, 2) - 1;
firstOrderValuesMax = (long)codes_power<double>(widthOfFirstOrderValues, 2) - 1;
if (numberOfGroups > 2) {
/* loop through all the groups except the last in reverse order to
@ -1745,7 +1139,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
min = X[offset + j];
}
groupWidth = number_of_bits(handle, max - min);
range = (long)grib_power(groupWidth, 2) - 1;
range = (long)codes_power<double>(groupWidth, 2) - 1;
/* width of first order values has to be unchanged.*/
for (j = groupWidth; j < groupWidths[i]; j++) {
@ -1937,8 +1331,8 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
if (ret)
return ret;
Xp = X + orderOfSPD;
pos = 0;
Xp = X + orderOfSPD;
pos = 0;
#if EFDEBUG
count = 0;
#endif

View File

@ -8,6 +8,7 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
#include <type_traits>
@ -287,8 +288,8 @@ static int unpack(grib_accessor* a, T* values, size_t* len)
}
}
s = grib_power(binary_scale_factor, 2);
d = grib_power(-decimal_scale_factor, 10);
s = codes_power<T>(binary_scale_factor, 2);
d = codes_power<T>(-decimal_scale_factor, 10);
for (i = 0; i < numberOfSecondOrderPackedValues; i++) {
values[i] = (T)(((X[i] * s) + reference_value) * d);
}

View File

@ -8,6 +8,7 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
/*
@ -411,8 +412,8 @@ static int unpack(grib_accessor* a, T* values, size_t* len)
k++;
}
s = grib_power(binary_scale_factor, 2);
d = grib_power(-decimal_scale_factor, 10);
s = codes_power<T>(binary_scale_factor, 2);
d = codes_power<T>(-decimal_scale_factor, 10);
for (i = 0; i < n; i++) {
values[i] = (T)(((X[i] * s) + reference_value) * d);
}

View File

@ -8,6 +8,7 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
/*
@ -290,8 +291,8 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len)
if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->offsetsection, &offsetsection)) != GRIB_SUCCESS)
return ret;
decimal = grib_power(decimal_scale_factor, 10);
divisor = grib_power(-binary_scale_factor, 2);
decimal = codes_power<double>(decimal_scale_factor, 10);
divisor = codes_power<double>(-binary_scale_factor, 2);
buflen = (((bits_per_value * n_vals) + 7) / 8) * sizeof(unsigned char);
if ((buflen + (offsetdata - offsetsection)) % 2) {

View File

@ -9,6 +9,7 @@
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
#include <type_traits>
@ -383,77 +384,75 @@ static int min_max_array(double* data, unsigned int n, double* min, double* max)
return GRIB_SUCCESS;
}
#if 0
static void uint_char(unsigned int i, unsigned char* p)
{
p[0] = (i >> 24) & 255;
p[1] = (i >> 16) & 255;
p[2] = (i >> 8) & 255;
p[3] = (i)&255;
}
// static void uint_char(unsigned int i, unsigned char* p)
// {
// p[0] = (i >> 24) & 255;
// p[1] = (i >> 16) & 255;
// p[2] = (i >> 8) & 255;
// p[3] = (i)&255;
// }
static unsigned char* mk_bms(grib_accessor* a, double* data, unsigned int* ndata)
{
int bms_size;
unsigned char *bms, *cbits;
unsigned int nn, i, start, c, imask, i0;
// static unsigned char* mk_bms(grib_accessor* a, double* data, unsigned int* ndata)
// {
// int bms_size;
// unsigned char *bms, *cbits;
// unsigned int nn, i, start, c, imask, i0;
nn = *ndata;
// nn = *ndata;
/* find first grid point with undefined data */
for (i = 0; i < nn; i++) {
if (UNDEFINED_VAL(data[i])) break;
}
// /* find first grid point with undefined data */
// for (i = 0; i < nn; i++) {
// if (UNDEFINED_VAL(data[i])) break;
// }
if (i == nn) { /* all defined values, no need for bms */
bms = reinterpret_cast<unsigned char*>(grib_context_malloc(a->context, 6));
if (bms == NULL)
grib_context_log(a->context, GRIB_LOG_ERROR, "mk_bms: memory allocation problem", "");
uint_char(6, bms); // length of section 6
bms[4] = 6; // section 6
bms[5] = 255; // no bitmap
return bms;
}
// if (i == nn) { /* all defined values, no need for bms */
// bms = reinterpret_cast<unsigned char*>(grib_context_malloc(a->context, 6));
// if (bms == NULL)
// grib_context_log(a->context, GRIB_LOG_ERROR, "mk_bms: memory allocation problem", "");
// uint_char(6, bms); // length of section 6
// bms[4] = 6; // section 6
// bms[5] = 255; // no bitmap
// return bms;
// }
bms_size = 6 + (nn + 7) / 8;
bms = reinterpret_cast<unsigned char*>(grib_context_malloc(a->context, bms_size));
if (bms == NULL)
grib_context_log(a->context, GRIB_LOG_ERROR, "mk_bms: memory allocation problem", "");
// bms_size = 6 + (nn + 7) / 8;
// bms = reinterpret_cast<unsigned char*>(grib_context_malloc(a->context, bms_size));
// if (bms == NULL)
// grib_context_log(a->context, GRIB_LOG_ERROR, "mk_bms: memory allocation problem", "");
uint_char(bms_size, bms); // length of section 6
bms[4] = 6; // section 6
bms[5] = 0; // has bitmap
// uint_char(bms_size, bms); // length of section 6
// bms[4] = 6; // section 6
// bms[5] = 0; // has bitmap
/* bitmap is accessed by bytes, make i0=i/8 bytes of bitmap */
cbits = bms + 6;
i0 = i >> 3; // Number of bytes, required to store the bitmap
for (i = 0; i < i0; i++) {
// Set all bits in the bitmap to 1
*cbits++ = 255;
}
// /* bitmap is accessed by bytes, make i0=i/8 bytes of bitmap */
// cbits = bms + 6;
// i0 = i >> 3; // Number of bytes, required to store the bitmap
// for (i = 0; i < i0; i++) {
// // Set all bits in the bitmap to 1
// *cbits++ = 255;
// }
/* start processing data, skip i0*8 */
// /* start processing data, skip i0*8 */
c = 0; // counter: c += imask
imask = 128; // 100.0000
i0 = i0 << 3; // Number of bits in the bitmap
start = i0;
for (i = i0; i < nn; i++) {
if (DEFINED_VAL(data[i])) {
c += imask;
data[start++] = data[i];
}
if ((imask >>= 1) == 0) {
*cbits++ = c;
c = 0;
imask = 128;
}
}
if (imask != 128) *cbits = c;
*ndata = start;
return bms;
}
#endif
// c = 0; // counter: c += imask
// imask = 128; // 100.0000
// i0 = i0 << 3; // Number of bits in the bitmap
// start = i0;
// for (i = i0; i < nn; i++) {
// if (DEFINED_VAL(data[i])) {
// c += imask;
// data[start++] = data[i];
// }
// if ((imask >>= 1) == 0) {
// *cbits++ = c;
// c = 0;
// imask = 128;
// }
// }
// if (imask != 128) *cbits = c;
// *ndata = start;
// return bms;
// }
static int post_process(grib_context* c, long* vals, long len, long order, long bias, const unsigned long extras[2])
{
@ -749,8 +748,8 @@ static int unpack(grib_accessor* a, T* val, const size_t* len)
// de_spatial_difference (a->context, sec_val, n_vals, orderOfSpatialDifferencing, bias);
}
binary_s = (T)grib_power(binary_scale_factor, 2);
decimal_s = (T)grib_power(-decimal_scale_factor, 10);
binary_s = (T)codes_power<T>(binary_scale_factor, 2);
decimal_s = (T)codes_power<T>(-decimal_scale_factor, 10);
for (i = 0; i < n_vals; i++) {
if (sec_val[i] == LONG_MAX) {

View File

@ -12,9 +12,10 @@
* philippe.marguinaud@meteo.fr
*******************************/
#include "grib_scaling.h"
#include "grib_api_internal.h"
#include "grib_optimize_decimal_factor.h"
#include <math.h>
#include <cmath>
#include <algorithm>
/*
@ -665,8 +666,8 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
buf = (unsigned char*)gh->buffer->data;
buf += grib_byte_offset(a);
s = grib_power(bt->binary_scale_factor, 2);
d = grib_power(-bt->decimal_scale_factor, 10);
s = codes_power<double>(bt->binary_scale_factor, 2);
d = codes_power<double>(-bt->decimal_scale_factor, 10);
/*
* Decode data
@ -815,8 +816,8 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
if (ret != GRIB_SUCCESS)
goto cleanup;
s = grib_power(-bt->binary_scale_factor, 2);
d = grib_power(+bt->decimal_scale_factor, 10);
s = codes_power<double>(-bt->binary_scale_factor, 2);
d = codes_power<double>(+bt->decimal_scale_factor, 10);
}
else {
bt->decimal_scale_factor = 0;

View File

@ -8,6 +8,7 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
/*
@ -244,8 +245,8 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len)
if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS)
return ret;
decimal = grib_power(decimal_scale_factor, 10);
divisor = grib_power(-binary_scale_factor, 2);
decimal = codes_power<double>(decimal_scale_factor, 10);
divisor = codes_power<double>(-binary_scale_factor, 2);
buflen = (((bits_per_value * n_vals) + 7) / 8) * sizeof(unsigned char);
buf = (unsigned char*)grib_context_buffer_malloc_clear(a->context, buflen);

View File

@ -8,6 +8,7 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
/*
@ -271,8 +272,8 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
self->dirty = 0;
bscale = grib_power(binary_scale_factor, 2);
dscale = grib_power(-decimal_scale_factor, 10);
bscale = codes_power<double>(binary_scale_factor, 2);
dscale = codes_power<double>(-decimal_scale_factor, 10);
/* TODO: This should be called upstream */
if (*len < n_vals)
@ -411,8 +412,8 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len)
if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS)
return ret;
decimal = grib_power(decimal_scale_factor, 10);
divisor = grib_power(-binary_scale_factor, 2);
decimal = codes_power<double>(decimal_scale_factor, 10);
divisor = codes_power<double>(-binary_scale_factor, 2);
simple_packing_size = (((bits_per_value * n_vals) + 7) / 8) * sizeof(unsigned char);
buf = (unsigned char*)grib_context_malloc_clear(a->context, simple_packing_size + EXTRA_BUFFER_SIZE);

View File

@ -8,6 +8,7 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
#define PNG_ANYBITS
@ -248,8 +249,8 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
if ((err = grib_get_long_internal(grib_handle_of_accessor(a), self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS)
return err;
bscale = grib_power(binary_scale_factor, 2);
dscale = grib_power(-decimal_scale_factor, 10);
bscale = codes_power<double>(binary_scale_factor, 2);
dscale = codes_power<double>(-decimal_scale_factor, 10);
/* TODO: This should be called upstream */
if (*len < n_vals)
@ -502,7 +503,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
return GRIB_SUCCESS;
}
d = grib_power(decimal_scale_factor, 10);
d = codes_power<double>(decimal_scale_factor, 10);
max = val[0];
min = max;
@ -526,7 +527,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
}
binary_scale_factor = grib_get_binary_scale_fact(max, reference_value, bits_per_value, &err);
divisor = grib_power(-binary_scale_factor, 2);
divisor = codes_power<double>(-binary_scale_factor, 2);
#ifndef PNG_ANYBITS
Assert(bits_per_value % 8 == 0);

View File

@ -11,7 +11,7 @@
* Enrico Fucile
****************************/
#include "grib_api_internal_cpp.h"
#include "grib_ieeefloat.h"
#define PRE_PROCESSING_NONE 0
#define PRE_PROCESSING_DIFFERENCE 1

View File

@ -8,6 +8,7 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
/*
@ -203,7 +204,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
if (decimal_scale_factor > 127) {
decimal_scale_factor = -(decimal_scale_factor - 128);
}
level_scale_factor = grib_power(-decimal_scale_factor, 10.0);
level_scale_factor = codes_power<double>(-decimal_scale_factor, 10.0);
levels = (double*)grib_context_malloc_clear(a->context, sizeof(double) * (number_of_level_values + 1));
levels[0] = missingValue;
for (i = 0; i < number_of_level_values; i++) {

View File

@ -8,8 +8,9 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
#include <math.h>
#include <cmath>
/*
This is used by make_class.pl
@ -328,8 +329,8 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
lpos = 8 * (packed_offset - offsetdata);
s = grib_power(binary_scale_factor, 2);
d = grib_power(-decimal_scale_factor, 10);
s = codes_power<double>(binary_scale_factor, 2);
d = codes_power<double>(-decimal_scale_factor, 10);
scals = (double*)grib_context_malloc(a->context, maxv * sizeof(double));
Assert(scals);

View File

@ -8,8 +8,9 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
#include <math.h>
#include <cmath>
/*
This is used by make_class.pl
@ -307,8 +308,8 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
lpos = 8 * (packed_offset - offsetdata);
s = grib_power(binary_scale_factor, 2);
d = grib_power(-decimal_scale_factor, 10);
s = codes_power<double>(binary_scale_factor, 2);
d = codes_power<double>(-decimal_scale_factor, 10);
scals = (double*)grib_context_malloc(a->context, maxv * sizeof(double));
Assert(scals);

View File

@ -8,9 +8,11 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_api_internal_cpp.h"
#include "grib_scaling.h"
#include "grib_bits_any_endian_simple.h"
#include "grib_optimize_decimal_factor.h"
#include <float.h>
#include <type_traits>
/*
This is used by make_class.pl
@ -235,8 +237,8 @@ static int unpack_double_element(grib_accessor* a, size_t idx, double* val)
}
Assert(idx < n_vals);
s = grib_power(binary_scale_factor, 2);
d = grib_power(-decimal_scale_factor, 10);
s = codes_power<double>(binary_scale_factor, 2);
d = codes_power<double>(-decimal_scale_factor, 10);
grib_context_log(a->context, GRIB_LOG_DEBUG,
"%s: %s: creating %s, %ld values (idx=%zu)",
@ -368,8 +370,8 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
return GRIB_SUCCESS;
}
s = grib_power(binary_scale_factor, 2);
d = grib_power(-decimal_scale_factor, 10);
s = codes_power<T>(binary_scale_factor, 2);
d = codes_power<T>(-decimal_scale_factor, 10);
grib_context_log(a->context, GRIB_LOG_DEBUG,
"%s %s: Creating %s, %zu values", cclass_name, __func__, a->name, n_vals);
@ -394,15 +396,13 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
return GRIB_DECODING_ERROR;
}
}
#if 0
if (offsetBeforeData == offsetAfterData) {
/* Crazy case: Constant field with bitsPerValue > 0 */
for (i = 0; i < n_vals; i++)
val[i] = reference_value;
*len = n_vals;
return GRIB_SUCCESS;
}
#endif
// if (offsetBeforeData == offsetAfterData) {
// /* Crazy case: Constant field with bitsPerValue > 0 */
// for (i = 0; i < n_vals; i++)
// val[i] = reference_value;
// *len = n_vals;
// return GRIB_SUCCESS;
// }
}
grib_context_log(a->context, GRIB_LOG_DEBUG,
@ -506,8 +506,8 @@ static int _unpack_double(grib_accessor* a, double* val, size_t* len, unsigned c
return GRIB_SUCCESS;
}
s = grib_power(binary_scale_factor, 2);
d = grib_power(-decimal_scale_factor, 10);
s = codes_power<double>(binary_scale_factor, 2);
d = codes_power<double>(-decimal_scale_factor, 10);
grib_context_log(a->context, GRIB_LOG_DEBUG,
"%s %s: Creating %s, %zu values", cclass_name, __func__, a->name, n_vals);
@ -531,15 +531,14 @@ static int _unpack_double(grib_accessor* a, double* val, size_t* len, unsigned c
return GRIB_DECODING_ERROR;
}
}
#if 0
if (offsetBeforeData == offsetAfterData) {
/* Crazy case: Constant field with bitsPerValue > 0 */
for (i = 0; i < n_vals; i++)
val[i] = reference_value;
*len = n_vals;
return GRIB_SUCCESS;
}
#endif
// if (offsetBeforeData == offsetAfterData) {
// /* Crazy case: Constant field with bitsPerValue > 0 */
// for (i = 0; i < n_vals; i++)
// val[i] = reference_value;
// *len = n_vals;
// return GRIB_SUCCESS;
// }
}
grib_context_log(a->context, GRIB_LOG_DEBUG,
@ -589,27 +588,24 @@ static int unpack_double_subarray(grib_accessor* a, double* val, size_t start, s
#undef restrict
#endif
#if 0
static int grib_producing_large_constant_fields(const grib_context* c, grib_handle* h, int edition)
{
/* GRIB-802: If override key is set, ignore env. var and produce compressed fields */
if (c->large_constant_fields) { /* This is set by the environment variable */
/* check the override key */
int err = 0;
long override_large_constant_fields = 0;
err = grib_get_long_internal(h, "override_large_constant_fields", &override_large_constant_fields);
if (err == GRIB_SUCCESS && override_large_constant_fields) {
return 0;
}
return 1;
}
if (c->gribex_mode_on==1 && edition==1) {
return 1;
}
return 0;
}
#endif
// static int grib_producing_large_constant_fields(const grib_context* c, grib_handle* h, int edition)
// {
// /* GRIB-802: If override key is set, ignore env. var and produce compressed fields */
// if (c->large_constant_fields) { /* This is set by the environment variable */
// /* check the override key */
// int err = 0;
// long override_large_constant_fields = 0;
// err = grib_get_long_internal(h, "override_large_constant_fields", &override_large_constant_fields);
// if (err == GRIB_SUCCESS && override_large_constant_fields) {
// return 0;
// }
// return 1;
// }
// if (c->gribex_mode_on==1 && edition==1) {
// return 1;
// }
// return 0;
// }
static int pack_double(grib_accessor* a, const double* val, size_t* len)
{
@ -743,7 +739,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
/* decimal_scale_factor is given, binary_scale_factor=0 and bits_per_value is computed */
binary_scale_factor = 0;
decimal_scale_factor = decimal_scale_factor_get;
decimal = grib_power(decimal_scale_factor, 10);
decimal = codes_power<double>(decimal_scale_factor, 10);
min *= decimal;
max *= decimal;
@ -789,14 +785,14 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
return err;
}
else {
/* printf("max=%g reference_value=%g grib_power(-last,2)=%g decimal_scale_factor=%ld bits_per_value=%ld\n",
max,reference_value,grib_power(-last,2),decimal_scale_factor,bits_per_value);*/
/* printf("max=%g reference_value=%g codes_power<double>(-last,2)=%g decimal_scale_factor=%ld bits_per_value=%ld\n",
max,reference_value,codes_power<double>(-last,2),decimal_scale_factor,bits_per_value);*/
range = (max - min);
unscaled_min = min;
unscaled_max = max;
f = (grib_power(bits_per_value, 2) - 1);
minrange = grib_power(-last, 2) * f;
maxrange = grib_power(last, 2) * f;
f = (codes_power<double>(bits_per_value, 2) - 1);
minrange = codes_power<double>(-last, 2) * f;
maxrange = codes_power<double>(last, 2) * f;
while (range < minrange) {
decimal_scale_factor += 1;

View File

@ -15,6 +15,7 @@
can appear
*/
#include "grib_scaling.h"
#include "grib_api_internal.h"
/*
This is used by make_class.pl
@ -483,7 +484,7 @@ static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_
case 7:
if (us->Y) {
ccp->extraScale = us->Y;
ccp->referenceFactor = grib_power(us->Y, 10);
ccp->referenceFactor = codes_power<double>(us->Y, 10);
ccp->extraWidth = ((10 * us->Y) + 2) / 3;
}
else {

View File

@ -1,116 +0,0 @@
/*
* (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 "grib_api_internal.h"
/*
This is used by make_class.pl
START_CLASS_DEF
SUPER= grib_accessor_class_gen
CLASS = accessor
IMPLEMENTS = dump
END_CLASS_DEF
*/
/* START_CLASS_IMP */
/*
Don't edit anything between START_CLASS_IMP and END_CLASS_IMP
Instead edit values between START_CLASS_DEF and END_CLASS_DEF
or edit "accessor.class" and rerun ./make_class.pl
*/
static void dump(grib_accessor*, grib_dumper*);
//static void init_class(grib_accessor_class*);
typedef struct grib_accessor_forward
{
grib_accessor att;
/* Members defined in gen */
/* Members defined in forward */
} grib_accessor_forward;
extern grib_accessor_class* grib_accessor_class_gen;
static grib_accessor_class _grib_accessor_class_forward = {
&grib_accessor_class_gen, /* super */
"forward", /* name */
sizeof(grib_accessor_forward), /* size */
0, /* inited */
0, /* init_class */
0, /* init */
0, /* post_init */
0, /* destroy */
&dump, /* dump */
0, /* next_offset */
0, /* get length of string */
0, /* get number of values */
0, /* get number of bytes */
0, /* get offset to bytes */
0, /* get native type */
0, /* get sub_section */
0, /* pack_missing */
0, /* is_missing */
0, /* pack_long */
0, /* unpack_long */
0, /* pack_double */
0, /* pack_float */
0, /* unpack_double */
0, /* unpack_float */
0, /* pack_string */
0, /* unpack_string */
0, /* pack_string_array */
0, /* unpack_string_array */
0, /* pack_bytes */
0, /* unpack_bytes */
0, /* pack_expression */
0, /* notify_change */
0, /* update_size */
0, /* preferred_size */
0, /* resize */
0, /* nearest_smaller_value */
0, /* next accessor */
0, /* compare vs. another accessor */
0, /* unpack only ith value (double) */
0, /* unpack only ith value (float) */
0, /* unpack a given set of elements (double) */
0, /* unpack a given set of elements (float) */
0, /* unpack a subarray */
0, /* clear */
0, /* clone accessor */
};
grib_accessor_class* grib_accessor_class_forward = &_grib_accessor_class_forward;
//static void init_class(grib_accessor_class* c)
//{
// INIT
//}
/* END_CLASS_IMP */
static void dump(grib_accessor* a, grib_dumper* dumper)
{
// grib_accessor *target = grib_find_accessor(grib_handle_of_accessor(a),a->alias);
// if(target) {
// grib_dump_label(dumper,a,"is:");
// dumper->depth += 2;
// grib_accessor_dump(target, dumper);
// dumper->depth -= 2;
// }
// else grib_dump_label(dumper,a," undefined ");
}

View File

@ -9,7 +9,7 @@
*/
#include "grib_api_internal.h"
#include <math.h>
#include <cmath>
#ifdef ECCODES_ON_WINDOWS
#include <stdint.h>
#endif

View File

@ -365,6 +365,9 @@ static int unpack_multiple_time_ranges(grib_accessor* a, long* val, size_t* len)
return GRIB_DECODING_ERROR;
}
// For the old implementation of unpack_long, see
// src/deprecated/grib_accessor_class_g2end_step.unpack_long.cc
//
static int unpack_long(grib_accessor* a, long* val, size_t* len)
{
grib_accessor_g2end_step* self = (grib_accessor_g2end_step*)a;
@ -395,80 +398,6 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len)
}
}
#if 0
static int unpack_long(grib_accessor* a, long* val, size_t *len)
{
grib_accessor_g2end_step* self = (grib_accessor_g2end_step*)a;
int err = 0;
long start_step;
long unit;
long coded_unit;
long coded_time_range, typeOfTimeIncrement, numberOfTimeRange;
long coded_time_range_sec=0;
int factor;
long u2sf,u2sf_step_unit;
int add_time_range = 1; /* whether we add lengthOfTimeRange */
grib_handle* h=grib_handle_of_accessor(a);
if((err = grib_get_long_internal(h,self->start_step,&start_step))) return err;
/*point in time */
if (self->year == NULL) {
*val=start_step;
return 0;
}
if((err = grib_get_long_internal(h,self->unit,&unit))) return err;
if((err = grib_get_long_internal(h,self->coded_unit,&coded_unit))) return err;
if((err = grib_get_long_internal(h,self->coded_time_range, &coded_time_range))) return err;
if((err = grib_get_long_internal(h,self->typeOfTimeIncrement, &typeOfTimeIncrement))) return err;
if((err = grib_get_long_internal(h,self->numberOfTimeRange, &numberOfTimeRange))) return err;
Assert(numberOfTimeRange == 1 || numberOfTimeRange == 2);
err = convert_time_range(h, unit, coded_unit, &coded_time_range);
if (err != GRIB_SUCCESS) return err;
#if 0
if (coded_unit!=unit) {
coded_time_range_sec=coded_time_range*u2s2[coded_unit];
if (coded_time_range_sec<0) {
factor=60;
if (u2s2[coded_unit] % factor) return GRIB_DECODING_ERROR;
if (u2s[unit] % factor) return GRIB_DECODING_ERROR;
u2sf=u2s2[coded_unit]/factor;
coded_time_range_sec=coded_time_range*u2sf;
u2sf_step_unit=u2s[unit]/factor;
} else {
u2sf_step_unit=u2s[unit];
}
if (coded_time_range_sec % u2sf_step_unit!=0) {
grib_context_log(h->context,GRIB_LOG_ERROR,"unable to convert endStep in stepUnits");
return GRIB_WRONG_STEP_UNIT;
}
coded_time_range = coded_time_range_sec / u2sf_step_unit;
}
#endif
if (typeOfTimeIncrement == 1) {
/* See GRIB-488 */
/* Note: For this case, lengthOfTimeRange is not related to step and should not be used to calculate step */
add_time_range = 0;
if (is_special_expver(h)) {
add_time_range = 1;
}
}
if (add_time_range) {
*val = start_step + coded_time_range;
} else {
*val = start_step;
}
return GRIB_SUCCESS;
}
#endif
static int pack_long(grib_accessor* a, const long* val, size_t* len)
{
grib_accessor_g2end_step* self = (grib_accessor_g2end_step*)a;

View File

@ -8,12 +8,8 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
/*************************************************
* Enrico Fucile
***********************************************/
#include "grib_api_internal.h"
#include <math.h>
#include <cmath>
/*
This is used by make_class.pl
@ -275,11 +271,9 @@ static int trial(const double* val, long v[6], long* basic_angle, long* sub_divi
*basic_angle = 360;
*sub_division = lcm(ni, nj);
#if 0
printf("ni = %ld, nj = %ld , basic_angle=%ld sub_division = %ld\n",
ni,nj,
*basic_angle,*sub_division);
#endif
// printf("ni = %ld, nj = %ld , basic_angle=%ld sub_division = %ld\n",
// ni, nj, *basic_angle,*sub_division);
if (*sub_division < 0)
return 0;

View File

@ -353,11 +353,10 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
// In this scenario we do not want to change the scale/value.
// However when the user directly sets the level or when we are changing edition, then
// we do want to change the scale/value.
#if 0
if (hand->loader && hand->loader->changing_edition==0) {
change_scale_and_value = 0;
}
#endif
// if (hand->loader && hand->loader->changing_edition==0) {
// change_scale_and_value = 0;
// }
if (change_scale_and_value) {
if (type_first > 9) {
if ((ret = grib_set_long_internal(hand, self->scale_first, scale_first)) != GRIB_SUCCESS)

View File

@ -14,9 +14,9 @@
* Shahram Najm *
***************************************************************************/
#include "grib_api_internal.h"
#include "grib_value.h"
#include <limits>
#include <cassert>
#include "grib_api_internal_cpp.h"
/*
This is used by make_class.pl

View File

@ -143,13 +143,13 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len)
expver[2] = *pTemp++;
expver[3] = *pTemp++;
expver[4] = 0;
#if 0
expver[0] = intc[0];
expver[1] = intc[1];
expver[2] = intc[2];
expver[3] = intc[3];
expver[4] = 0;
#endif
// expver[0] = intc[0];
// expver[1] = intc[1];
// expver[2] = intc[2];
// expver[3] = intc[3];
// expver[4] = 0;
/* if there is a difference, have to reverse*/
if (strcmp(refexpver, expver)) {
intc[0] = expver[3];

View File

@ -8,11 +8,6 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
/**************************************
* Enrico Fucile
**************************************/
#include "grib_api_internal.h"
/*
This is used by make_class.pl
@ -242,18 +237,15 @@ static int is_missing(grib_accessor* a)
if (!av)
return GRIB_NOT_FOUND;
return grib_is_missing_internal(av);
#if 0
int ret=0;
long value=0;
if((ret = grib_get_long_internal(grib_handle_of_accessor(a),self->value,
&value) ) != GRIB_SUCCESS){
grib_context_log(a->context, GRIB_LOG_ERROR,
"Accessor %s cannot gather value for %s error %d", a->name,
self->value, ret);
return 0;
}
return (value == GRIB_MISSING_LONG);
#endif
// int ret=0;
// long value=0;
// if((ret = grib_get_long_internal(grib_handle_of_accessor(a),self->value,
// &value) ) != GRIB_SUCCESS){
// grib_context_log(a->context, GRIB_LOG_ERROR,
// "Accessor %s cannot gather value for %s error %d", a->name,
// self->value, ret);
// return 0;
// }
// return (value == GRIB_MISSING_LONG);
}

View File

@ -9,7 +9,7 @@
*/
#include "grib_api_internal.h"
#include <ctype.h>
#include <cctype>
/*
This is used by make_class.pl

View File

@ -150,73 +150,10 @@ static void init(grib_accessor* a, const long l, grib_arguments* c)
a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION;
a->length = 0;
}
#if 0
/*Legacy mode*/
static long num_points_reduced_gauss_old(grib_handle* h, long nj, long pl[],
long max_pl, double lats[],
double angular_precision,
double lat_first, double lat_last,
double lon_first, double lon_last)
{
long result=0;
int is_global=0;
size_t plsize=0;
long ilon_first=0,ilon_last=0;
double lon_first_row=0,lon_last_row=0;
float d = 0;
is_global=is_gaussian_global(lat_first,lat_last,lon_first,lon_last,max_pl,lats,angular_precision);
d=fabs(lats[0]-lats[1]);
if ( !is_global ) {
long j = 0;
/*sub area*/
(void)d;
#if EFDEBUG
printf("-------- subarea fabs(lat_first-lats[0])=%g d=%g\n",fabs(lat_first-lats[0]),d);
printf("-------- subarea fabs(lat_last+lats[0])=%g d=%g\n",fabs(lat_last+lats[0]),d);
printf("-------- subarea lon_last=%g order=%ld 360.0-90.0/order=%g\n",
lon_last,order,360.0-90.0/order);
printf("-------- subarea lon_first=%g fabs(lon_last -( 360.0-90.0/order))=%g 90.0/order=%g\n",
lon_first,fabs(lon_last - (360.0-90.0/order)),90.0/order);
#endif
for (j=0;j<nj;j++) {
long row_count=0;
#if EFDEBUG
printf("-- %d ",j);
#endif
grib_get_reduced_row(pl[j],lon_first,lon_last,&row_count,&ilon_first,&ilon_last);
lon_first_row=((ilon_first)*360.0)/pl[j];
lon_last_row=((ilon_last)*360.0)/pl[j];
result += row_count;
(void)lon_last_row;
(void)lon_first_row;
#if EFDEBUG
printf(" ilon_first=%ld lon_first=%.10e ilon_last=%ld lon_last=%.10e count=%ld row_count=%ld\n",
ilon_first,lon_first_row,ilon_last,lon_last_row,result,row_count);
#endif
}
} else {
int i = 0;
result=0;
for (i=0;i<plsize;i++) result += pl[i];
}
return result;
}
/* New MIR compatible way */
static long num_points_reduced_gauss_new(grib_handle* h, long nj, long pl[], double lon_first, double lon_last)
{
long result = 0;
long j;
/* Always assume sub area */
for (j=0;j<nj;j++) {
long row_count=0;
long ilon_first=0,ilon_last=0;
grib_get_reduced_row2(pl[j], lon_first, lon_last, &row_count, &ilon_first, &ilon_last);
result += row_count;
}
return result;
}
#endif
// Old implementation of num_points_reduced_gauss_old
// See src/deprecated/grib_accessor_class_number_of_points_gaussian.cc
//
static int angleApproximatelyEqual(double A, double B, double angular_precision)
{
@ -518,11 +455,10 @@ static int unpack_long_with_legacy_support(grib_accessor* a, long* val, size_t*
return GRIB_GEOCALCULUS_PROBLEM;
}
grib_get_reduced_row_wrapper(h, pl[j], lon_first, lon_last, &row_count, &ilon_first, &ilon_last);
#if 0
if ( row_count != pl[j] ) {
printf("oops...... rc=%ld but pl[%d]=%ld\n", row_count, j,pl[j]);
}
#endif
// if ( row_count != pl[j] ) {
// printf("oops...... rc=%ld but pl[%d]=%ld\n", row_count, j,pl[j]);
// }
lon_first_row = ((ilon_first)*360.0) / pl[j];
lon_last_row = ((ilon_last)*360.0) / pl[j];
*val += row_count;

View File

@ -167,24 +167,18 @@ static int get_earth_shape(grib_handle* h, char* result)
static int proj_space_view(grib_handle* h, char* result)
{
return GRIB_NOT_IMPLEMENTED;
#if 0
int err = 0;
char shape[64] = {0,};
double latOfSubSatellitePointInDegrees, lonOfSubSatellitePointInDegrees;
if ((err = get_earth_shape(h, shape)) != GRIB_SUCCESS)
return err;
if ((err = grib_get_double_internal(h, "longitudeOfSubSatellitePointInDegrees", &lonOfSubSatellitePointInDegrees)) != GRIB_SUCCESS)
return err;
snprintf(result, 526, "+proj=geos +lon_0=%lf +h=35785831 +x_0=0 +y_0=0 %s", lonOfSubSatellitePointInDegrees, shape);
return err;
/* Experimental: For now do the same as gdalsrsinfo - hard coded values! */
snprintf(result, 526, "+proj=geos +lon_0=0 +h=35785831 +x_0=0 +y_0=0 %s", shape);
return err;
#endif
// int err = 0;
// char shape[64] = {0,};
// double latOfSubSatellitePointInDegrees, lonOfSubSatellitePointInDegrees;
// if ((err = get_earth_shape(h, shape)) != GRIB_SUCCESS)
// return err;
// if ((err = grib_get_double_internal(h, "longitudeOfSubSatellitePointInDegrees", &lonOfSubSatellitePointInDegrees)) != GRIB_SUCCESS)
// return err;
// snprintf(result, 526, "+proj=geos +lon_0=%lf +h=35785831 +x_0=0 +y_0=0 %s", lonOfSubSatellitePointInDegrees, shape);
// return err;
// /* Experimental: For now do the same as gdalsrsinfo - hard coded values! */
// snprintf(result, 526, "+proj=geos +lon_0=0 +h=35785831 +x_0=0 +y_0=0 %s", shape);
// return err;
}
static int proj_albers(grib_handle* h, char* result)

View File

@ -143,8 +143,8 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
if (*len < 1) {
ret = GRIB_ARRAY_TOO_SMALL;
grib_context_log(a->context, GRIB_LOG_ERROR,
"Accessor %s cannot gather value for %s and/or %s error %d",
a->name, self->multiplier, self->divisor, ret);
"Accessor %s cannot gather value for %s and/or %s",
a->name, self->multiplier, self->divisor);
return ret;
}
@ -161,7 +161,6 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
*val = GRIB_MISSING_DOUBLE;
else
*val = ((double)(value * multiplier)) / divisor;
/*printf("unpack_double: divisor=%ld multiplier=%ld long_value=%ld scaled_value=%.30f\n",(double)divisor,(double)multiplier,value,*val);*/
if (ret == GRIB_SUCCESS)
*len = 1;
@ -187,25 +186,19 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
double x;
ret = grib_get_long_internal(grib_handle_of_accessor(a), self->divisor, &divisor);
if (ret != GRIB_SUCCESS) {
grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannot gather value for %s error %d \n", a->name, self->divisor, ret);
return ret;
}
if (ret != GRIB_SUCCESS) return ret;
ret = grib_get_long_internal(grib_handle_of_accessor(a), self->multiplier, &multiplier);
if (ret != GRIB_SUCCESS) {
grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannot gather value for %s error %d \n", a->name, self->divisor, ret);
return ret;
}
if (ret != GRIB_SUCCESS) return ret;
if (self->truncating) {
ret = grib_get_long_internal(grib_handle_of_accessor(a), self->truncating, &truncating);
if (ret != GRIB_SUCCESS) {
grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannot gather value for %s error %d \n", a->name, self->truncating, ret);
return ret;
}
if (ret != GRIB_SUCCESS) return ret;
}
if (multiplier == 0) {
grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannot divide by a zero multiplier %s error %d \n", a->name, self->multiplier, ret);
grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s: cannot divide by a zero multiplier %s",
a->name, self->multiplier);
return GRIB_ENCODING_ERROR;
}
@ -239,17 +232,13 @@ static int is_missing(grib_accessor* a)
if (!av)
return GRIB_NOT_FOUND;
return grib_is_missing_internal(av);
#if 0
int ret=0;
long value=0;
if((ret = grib_get_long_internal(grib_handle_of_accessor(a),self->value, &value))!= GRIB_SUCCESS){
grib_context_log(a->context, GRIB_LOG_ERROR,
"Accessor %s cannot gather value for %s error %d \n", a->name,
self->value, ret);
return 0;
}
return (value == GRIB_MISSING_LONG);
#endif
// int ret=0;
// long value=0;
// if((ret = grib_get_long_internal(grib_handle_of_accessor(a),self->value, &value))!= GRIB_SUCCESS){
// grib_context_log(a->context, GRIB_LOG_ERROR,
// "Accessor %s cannot gather value for %s error %d \n", a->name,
// self->value, ret);
// return 0;
// }
// return (value == GRIB_MISSING_LONG);
}

View File

@ -12,6 +12,7 @@
* Enrico Fucile
**********************************/
#include "grib_scaling.h"
#include "grib_api_internal.h"
/*
This is used by make_class.pl
@ -225,8 +226,8 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len)
min = values[i];
}
d = grib_power(decimalScaleFactor, 10);
b = grib_power(-binaryScaleFactor, 2);
d = codes_power<double>(decimalScaleFactor, 10);
b = codes_power<double>(-binaryScaleFactor, 2);
/* self->bitsPerValue=(long)ceil(log((double)((max-min)*d+1))/log(2.0))-binaryScaleFactor; */
/* See GRIB-540 for why we use ceil */

View File

@ -13,6 +13,7 @@
**************************************/
#include "grib_scaling.h"
#include "grib_api_internal.h"
/*
This is used by make_class.pl
@ -166,7 +167,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
Assert(1 == 0);
if (bitsPerValue != 0)
*val = (*val + grib_power(binaryScaleFactor, 2)) * grib_power(-decimalScaleFactor, 10) * 0.5;
*val = (*val + codes_power<double>(binaryScaleFactor, 2)) * codes_power<double>(-decimalScaleFactor, 10) * 0.5;
if (ret == GRIB_SUCCESS)
*len = 1;

View File

@ -13,7 +13,7 @@
****************************************/
#include "grib_api_internal.h"
#include <ctype.h>
#include <cctype>
/*
This is used by make_class.pl

View File

@ -179,15 +179,13 @@ static int get_native_type(grib_accessor* a)
return GRIB_TYPE_LONG;
}
#if 0
static const char* mode_to_str(int p)
{
if (p==CODES_BUFR_UNPACK_STRUCTURE) return "CODES_BUFR_UNPACK_STRUCTURE";
if (p==CODES_BUFR_UNPACK_FLAT) return "CODES_BUFR_UNPACK_FLAT";
if (p==CODES_BUFR_NEW_DATA) return "CODES_BUFR_NEW_DATA";
return "unknown proc flag";
}
#endif
// static const char* mode_to_str(int p)
// {
// if (p==CODES_BUFR_UNPACK_STRUCTURE) return "CODES_BUFR_UNPACK_STRUCTURE";
// if (p==CODES_BUFR_UNPACK_FLAT) return "CODES_BUFR_UNPACK_FLAT";
// if (p==CODES_BUFR_NEW_DATA) return "CODES_BUFR_NEW_DATA";
// return "unknown proc flag";
// }
static int pack_long(grib_accessor* a, const long* val, size_t* len)
{

View File

@ -37,7 +37,7 @@
#line 6 "accessor_class_list.gperf"
struct accessor_class_hash { char *name; grib_accessor_class **cclass;};
#define TOTAL_KEYWORDS 219
#define TOTAL_KEYWORDS 218
#define MIN_WORD_LENGTH 1
#define MAX_WORD_LENGTH 44
#define MIN_HASH_VALUE 1
@ -61,7 +61,7 @@ grib_accessor_classes_get_id (const char *str, size_t len)
680, 680, 680, 680, 680, 680, 680, 680, 680, 680,
680, 680, 0, 680, 680, 680, 680, 680, 680, 680,
680, 680, 680, 680, 680, 680, 680, 680, 0, 162,
41, 7, 0, 680, 34, 680, 7, 680, 680, 680,
41, 6, 0, 680, 34, 680, 8, 680, 680, 680,
680, 680, 680, 680, 680, 680, 680, 680, 680, 680,
680, 680, 680, 680, 680, 680, 680, 680, 680, 680,
680, 680, 680, 680, 680, 680, 680, 680, 680, 680,
@ -118,59 +118,59 @@ static const struct accessor_class_hash classes[] =
#line 9 "accessor_class_list.gperf"
{" "},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 156 "accessor_class_list.gperf"
#line 155 "accessor_class_list.gperf"
{"nearest", &grib_accessor_class_nearest},
{""}, {""}, {""}, {""}, {""}, {""},
#line 118 "accessor_class_list.gperf"
#line 117 "accessor_class_list.gperf"
{"gen", &grib_accessor_class_gen},
{""}, {""},
#line 119 "accessor_class_list.gperf"
#line 118 "accessor_class_list.gperf"
{"getenv", &grib_accessor_class_getenv},
#line 84 "accessor_class_list.gperf"
{"expanded_descriptors", &grib_accessor_class_expanded_descriptors},
{""}, {""}, {""}, {""}, {""},
#line 134 "accessor_class_list.gperf"
#line 133 "accessor_class_list.gperf"
{"int8", &grib_accessor_class_int8},
#line 132 "accessor_class_list.gperf"
#line 131 "accessor_class_list.gperf"
{"int64", &grib_accessor_class_int64},
#line 72 "accessor_class_list.gperf"
{"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap},
#line 203 "accessor_class_list.gperf"
#line 202 "accessor_class_list.gperf"
{"time", &grib_accessor_class_time},
#line 69 "accessor_class_list.gperf"
{"data_png_packing", &grib_accessor_class_data_png_packing},
{""},
#line 191 "accessor_class_list.gperf"
#line 190 "accessor_class_list.gperf"
{"size", &grib_accessor_class_size},
#line 181 "accessor_class_list.gperf"
#line 180 "accessor_class_list.gperf"
{"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value},
#line 188 "accessor_class_list.gperf"
#line 187 "accessor_class_list.gperf"
{"signed", &grib_accessor_class_signed},
#line 182 "accessor_class_list.gperf"
#line 181 "accessor_class_list.gperf"
{"section", &grib_accessor_class_section},
#line 204 "accessor_class_list.gperf"
#line 203 "accessor_class_list.gperf"
{"times", &grib_accessor_class_times},
#line 70 "accessor_class_list.gperf"
{"data_raw_packing", &grib_accessor_class_data_raw_packing},
#line 117 "accessor_class_list.gperf"
#line 116 "accessor_class_list.gperf"
{"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap},
{""},
#line 13 "accessor_class_list.gperf"
{"ascii", &grib_accessor_class_ascii},
{""},
#line 183 "accessor_class_list.gperf"
#line 182 "accessor_class_list.gperf"
{"section_length", &grib_accessor_class_section_length},
#line 184 "accessor_class_list.gperf"
#line 183 "accessor_class_list.gperf"
{"section_padding", &grib_accessor_class_section_padding},
#line 197 "accessor_class_list.gperf"
#line 196 "accessor_class_list.gperf"
{"statistics", &grib_accessor_class_statistics},
#line 200 "accessor_class_list.gperf"
#line 199 "accessor_class_list.gperf"
{"step_in_units", &grib_accessor_class_step_in_units},
#line 189 "accessor_class_list.gperf"
#line 188 "accessor_class_list.gperf"
{"signed_bits", &grib_accessor_class_signed_bits},
#line 194 "accessor_class_list.gperf"
#line 193 "accessor_class_list.gperf"
{"spd", &grib_accessor_class_spd},
#line 168 "accessor_class_list.gperf"
#line 167 "accessor_class_list.gperf"
{"pad", &grib_accessor_class_pad},
#line 76 "accessor_class_list.gperf"
{"data_simple_packing", &grib_accessor_class_data_simple_packing},
@ -178,39 +178,39 @@ static const struct accessor_class_hash classes[] =
#line 79 "accessor_class_list.gperf"
{"dirty", &grib_accessor_class_dirty},
{""}, {""},
#line 198 "accessor_class_list.gperf"
#line 197 "accessor_class_list.gperf"
{"statistics_spectral", &grib_accessor_class_statistics_spectral},
#line 78 "accessor_class_list.gperf"
{"dictionary", &grib_accessor_class_dictionary},
{""},
#line 116 "accessor_class_list.gperf"
#line 115 "accessor_class_list.gperf"
{"gds_is_present", &grib_accessor_class_gds_is_present},
{""},
#line 113 "accessor_class_list.gperf"
#line 112 "accessor_class_list.gperf"
{"g2lon", &grib_accessor_class_g2lon},
#line 206 "accessor_class_list.gperf"
#line 205 "accessor_class_list.gperf"
{"to_integer", &grib_accessor_class_to_integer},
#line 128 "accessor_class_list.gperf"
#line 127 "accessor_class_list.gperf"
{"int16", &grib_accessor_class_int16},
{""},
#line 108 "accessor_class_list.gperf"
#line 107 "accessor_class_list.gperf"
{"g2date", &grib_accessor_class_g2date},
#line 46 "accessor_class_list.gperf"
{"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap},
{""},
#line 185 "accessor_class_list.gperf"
#line 184 "accessor_class_list.gperf"
{"section_pointer", &grib_accessor_class_section_pointer},
#line 68 "accessor_class_list.gperf"
{"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing},
#line 130 "accessor_class_list.gperf"
#line 129 "accessor_class_list.gperf"
{"int32", &grib_accessor_class_int32},
#line 61 "accessor_class_list.gperf"
{"data_g22order_packing", &grib_accessor_class_data_g22order_packing},
#line 109 "accessor_class_list.gperf"
#line 108 "accessor_class_list.gperf"
{"g2end_step", &grib_accessor_class_g2end_step},
#line 49 "accessor_class_list.gperf"
{"data_apply_gdsnotpresent", &grib_accessor_class_data_apply_gdsnotpresent},
#line 106 "accessor_class_list.gperf"
#line 105 "accessor_class_list.gperf"
{"g2bitmap", &grib_accessor_class_g2bitmap},
#line 47 "accessor_class_list.gperf"
{"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic},
@ -220,55 +220,55 @@ static const struct accessor_class_hash classes[] =
{""}, {""}, {""}, {""},
#line 48 "accessor_class_list.gperf"
{"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap},
#line 114 "accessor_class_list.gperf"
#line 113 "accessor_class_list.gperf"
{"g2step_range", &grib_accessor_class_g2step_range},
{""},
#line 110 "accessor_class_list.gperf"
#line 109 "accessor_class_list.gperf"
{"g2grid", &grib_accessor_class_g2grid},
{""},
#line 207 "accessor_class_list.gperf"
#line 206 "accessor_class_list.gperf"
{"to_string", &grib_accessor_class_to_string},
{""}, {""},
#line 135 "accessor_class_list.gperf"
#line 134 "accessor_class_list.gperf"
{"iterator", &grib_accessor_class_iterator},
#line 169 "accessor_class_list.gperf"
#line 168 "accessor_class_list.gperf"
{"padding", &grib_accessor_class_padding},
{""}, {""},
#line 210 "accessor_class_list.gperf"
#line 209 "accessor_class_list.gperf"
{"trim", &grib_accessor_class_trim},
{""},
#line 65 "accessor_class_list.gperf"
{"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing},
#line 175 "accessor_class_list.gperf"
#line 174 "accessor_class_list.gperf"
{"raw", &grib_accessor_class_raw},
{""},
#line 82 "accessor_class_list.gperf"
{"element", &grib_accessor_class_element},
#line 170 "accessor_class_list.gperf"
#line 169 "accessor_class_list.gperf"
{"padto", &grib_accessor_class_padto},
#line 104 "accessor_class_list.gperf"
#line 103 "accessor_class_list.gperf"
{"g2_eps", &grib_accessor_class_g2_eps},
{""}, {""},
#line 157 "accessor_class_list.gperf"
#line 156 "accessor_class_list.gperf"
{"non_alpha", &grib_accessor_class_non_alpha},
#line 208 "accessor_class_list.gperf"
#line 207 "accessor_class_list.gperf"
{"transient", &grib_accessor_class_transient},
#line 14 "accessor_class_list.gperf"
{"assert", &grib_accessor_class_assert},
{""},
#line 141 "accessor_class_list.gperf"
#line 140 "accessor_class_list.gperf"
{"latitudes", &grib_accessor_class_latitudes},
{""},
#line 66 "accessor_class_list.gperf"
{"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing},
#line 63 "accessor_class_list.gperf"
{"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing},
#line 209 "accessor_class_list.gperf"
#line 208 "accessor_class_list.gperf"
{"transient_darray", &grib_accessor_class_transient_darray},
{""},
#line 102 "accessor_class_list.gperf"
#line 101 "accessor_class_list.gperf"
{"g2_aerosol", &grib_accessor_class_g2_aerosol},
#line 111 "accessor_class_list.gperf"
#line 110 "accessor_class_list.gperf"
{"g2latlon", &grib_accessor_class_g2latlon},
{""}, {""}, {""}, {""}, {""},
#line 64 "accessor_class_list.gperf"
@ -278,77 +278,77 @@ static const struct accessor_class_hash classes[] =
#line 12 "accessor_class_list.gperf"
{"array", &grib_accessor_class_array},
{""}, {""}, {""}, {""},
#line 176 "accessor_class_list.gperf"
#line 175 "accessor_class_list.gperf"
{"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date},
#line 67 "accessor_class_list.gperf"
{"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing},
{""}, {""},
#line 120 "accessor_class_list.gperf"
#line 119 "accessor_class_list.gperf"
{"global_gaussian", &grib_accessor_class_global_gaussian},
{""},
#line 187 "accessor_class_list.gperf"
#line 186 "accessor_class_list.gperf"
{"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal},
#line 140 "accessor_class_list.gperf"
#line 139 "accessor_class_list.gperf"
{"laplacian", &grib_accessor_class_laplacian},
{""},
#line 201 "accessor_class_list.gperf"
#line 200 "accessor_class_list.gperf"
{"sum", &grib_accessor_class_sum},
{""},
#line 115 "accessor_class_list.gperf"
#line 114 "accessor_class_list.gperf"
{"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name},
#line 178 "accessor_class_list.gperf"
#line 177 "accessor_class_list.gperf"
{"round", &grib_accessor_class_round},
#line 146 "accessor_class_list.gperf"
#line 145 "accessor_class_list.gperf"
{"long", &grib_accessor_class_long},
{""},
#line 81 "accessor_class_list.gperf"
{"double", &grib_accessor_class_double},
#line 190 "accessor_class_list.gperf"
#line 189 "accessor_class_list.gperf"
{"simple_packing_error", &grib_accessor_class_simple_packing_error},
#line 121 "accessor_class_list.gperf"
#line 120 "accessor_class_list.gperf"
{"group", &grib_accessor_class_group},
{""},
#line 173 "accessor_class_list.gperf"
#line 172 "accessor_class_list.gperf"
{"position", &grib_accessor_class_position},
#line 137 "accessor_class_list.gperf"
{"julian_day", &grib_accessor_class_julian_day},
#line 136 "accessor_class_list.gperf"
{"julian_day", &grib_accessor_class_julian_day},
#line 135 "accessor_class_list.gperf"
{"julian_date", &grib_accessor_class_julian_date},
#line 220 "accessor_class_list.gperf"
#line 219 "accessor_class_list.gperf"
{"unsigned", &grib_accessor_class_unsigned},
{""}, {""},
#line 52 "accessor_class_list.gperf"
{"data_dummy_field", &grib_accessor_class_data_dummy_field},
{""},
#line 174 "accessor_class_list.gperf"
#line 173 "accessor_class_list.gperf"
{"proj_string", &grib_accessor_class_proj_string},
#line 15 "accessor_class_list.gperf"
{"bit", &grib_accessor_class_bit},
#line 17 "accessor_class_list.gperf"
{"bits", &grib_accessor_class_bits},
#line 199 "accessor_class_list.gperf"
#line 198 "accessor_class_list.gperf"
{"step_human_readable", &grib_accessor_class_step_human_readable},
#line 71 "accessor_class_list.gperf"
{"data_run_length_packing", &grib_accessor_class_data_run_length_packing},
#line 179 "accessor_class_list.gperf"
#line 178 "accessor_class_list.gperf"
{"scale", &grib_accessor_class_scale},
#line 195 "accessor_class_list.gperf"
#line 194 "accessor_class_list.gperf"
{"spectral_truncation", &grib_accessor_class_spectral_truncation},
#line 45 "accessor_class_list.gperf"
{"data_2order_packing", &grib_accessor_class_data_2order_packing},
#line 217 "accessor_class_list.gperf"
{"uint8", &grib_accessor_class_uint8},
#line 213 "accessor_class_list.gperf"
#line 212 "accessor_class_list.gperf"
{"uint32", &grib_accessor_class_uint32},
#line 216 "accessor_class_list.gperf"
{"uint8", &grib_accessor_class_uint8},
#line 31 "accessor_class_list.gperf"
{"bytes", &grib_accessor_class_bytes},
#line 16 "accessor_class_list.gperf"
{"bitmap", &grib_accessor_class_bitmap},
{""},
#line 107 "accessor_class_list.gperf"
#line 106 "accessor_class_list.gperf"
{"g2bitmap_present", &grib_accessor_class_g2bitmap_present},
{""}, {""},
#line 196 "accessor_class_list.gperf"
#line 195 "accessor_class_list.gperf"
{"sprintf", &grib_accessor_class_sprintf},
{""}, {""}, {""},
#line 18 "accessor_class_list.gperf"
@ -356,75 +356,74 @@ static const struct accessor_class_hash classes[] =
#line 50 "accessor_class_list.gperf"
{"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing},
{""},
#line 221 "accessor_class_list.gperf"
#line 220 "accessor_class_list.gperf"
{"unsigned_bits", &grib_accessor_class_unsigned_bits},
#line 165 "accessor_class_list.gperf"
#line 164 "accessor_class_list.gperf"
{"offset_file", &grib_accessor_class_offset_file},
{""},
#line 85 "accessor_class_list.gperf"
{"forward", &grib_accessor_class_forward},
#line 214 "accessor_class_list.gperf"
#line 213 "accessor_class_list.gperf"
{"uint32_little_endian", &grib_accessor_class_uint32_little_endian},
#line 90 "accessor_class_list.gperf"
{""},
#line 89 "accessor_class_list.gperf"
{"g1area", &grib_accessor_class_g1area},
#line 159 "accessor_class_list.gperf"
#line 158 "accessor_class_list.gperf"
{"number_of_points", &grib_accessor_class_number_of_points},
{""},
#line 92 "accessor_class_list.gperf"
#line 91 "accessor_class_list.gperf"
{"g1date", &grib_accessor_class_g1date},
{""}, {""},
#line 139 "accessor_class_list.gperf"
#line 138 "accessor_class_list.gperf"
{"label", &grib_accessor_class_label},
#line 218 "accessor_class_list.gperf"
#line 217 "accessor_class_list.gperf"
{"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors},
#line 215 "accessor_class_list.gperf"
#line 214 "accessor_class_list.gperf"
{"uint64", &grib_accessor_class_uint64},
{""},
#line 160 "accessor_class_list.gperf"
#line 159 "accessor_class_list.gperf"
{"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian},
{""},
#line 91 "accessor_class_list.gperf"
#line 90 "accessor_class_list.gperf"
{"g1bitmap", &grib_accessor_class_g1bitmap},
{""}, {""},
#line 89 "accessor_class_list.gperf"
#line 88 "accessor_class_list.gperf"
{"g1_section4_length", &grib_accessor_class_g1_section4_length},
#line 126 "accessor_class_list.gperf"
#line 125 "accessor_class_list.gperf"
{"ieeefloat", &grib_accessor_class_ieeefloat},
{""},
#line 88 "accessor_class_list.gperf"
#line 87 "accessor_class_list.gperf"
{"g1_message_length", &grib_accessor_class_g1_message_length},
{""}, {""},
#line 100 "accessor_class_list.gperf"
#line 99 "accessor_class_list.gperf"
{"g1step_range", &grib_accessor_class_g1step_range},
{""}, {""},
#line 40 "accessor_class_list.gperf"
{"concept", &grib_accessor_class_concept},
#line 41 "accessor_class_list.gperf"
{"constant", &grib_accessor_class_constant},
#line 216 "accessor_class_list.gperf"
#line 215 "accessor_class_list.gperf"
{"uint64_little_endian", &grib_accessor_class_uint64_little_endian},
#line 80 "accessor_class_list.gperf"
{"divdouble", &grib_accessor_class_divdouble},
#line 227 "accessor_class_list.gperf"
#line 226 "accessor_class_list.gperf"
{"when", &grib_accessor_class_when},
#line 164 "accessor_class_list.gperf"
#line 163 "accessor_class_list.gperf"
{"octet_number", &grib_accessor_class_octet_number},
{""},
#line 105 "accessor_class_list.gperf"
#line 104 "accessor_class_list.gperf"
{"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling},
#line 186 "accessor_class_list.gperf"
#line 185 "accessor_class_list.gperf"
{"select_step_template", &grib_accessor_class_select_step_template},
{""},
#line 59 "accessor_class_list.gperf"
{"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing},
{""},
#line 133 "accessor_class_list.gperf"
#line 132 "accessor_class_list.gperf"
{"int64_little_endian", &grib_accessor_class_int64_little_endian},
{""}, {""},
#line 19 "accessor_class_list.gperf"
{"blob", &grib_accessor_class_blob},
{""}, {""}, {""},
#line 224 "accessor_class_list.gperf"
#line 223 "accessor_class_list.gperf"
{"values", &grib_accessor_class_values},
{""}, {""}, {""}, {""},
#line 60 "accessor_class_list.gperf"
@ -432,45 +431,45 @@ static const struct accessor_class_hash classes[] =
#line 53 "accessor_class_list.gperf"
{"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing},
{""}, {""},
#line 147 "accessor_class_list.gperf"
#line 146 "accessor_class_list.gperf"
{"long_vector", &grib_accessor_class_long_vector},
#line 202 "accessor_class_list.gperf"
#line 201 "accessor_class_list.gperf"
{"suppressed", &grib_accessor_class_suppressed},
#line 122 "accessor_class_list.gperf"
#line 121 "accessor_class_list.gperf"
{"gts_header", &grib_accessor_class_gts_header},
#line 205 "accessor_class_list.gperf"
#line 204 "accessor_class_list.gperf"
{"to_double", &grib_accessor_class_to_double},
{""}, {""},
#line 145 "accessor_class_list.gperf"
#line 144 "accessor_class_list.gperf"
{"local_definition", &grib_accessor_class_local_definition},
#line 58 "accessor_class_list.gperf"
{"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap},
#line 222 "accessor_class_list.gperf"
#line 221 "accessor_class_list.gperf"
{"validity_date", &grib_accessor_class_validity_date},
#line 144 "accessor_class_list.gperf"
#line 143 "accessor_class_list.gperf"
{"library_version", &grib_accessor_class_library_version},
{""}, {""},
#line 142 "accessor_class_list.gperf"
#line 141 "accessor_class_list.gperf"
{"latlon_increment", &grib_accessor_class_latlon_increment},
{""}, {""},
#line 94 "accessor_class_list.gperf"
#line 93 "accessor_class_list.gperf"
{"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly},
{""}, {""},
#line 129 "accessor_class_list.gperf"
#line 128 "accessor_class_list.gperf"
{"int16_little_endian", &grib_accessor_class_int16_little_endian},
#line 56 "accessor_class_list.gperf"
{"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing},
#line 35 "accessor_class_list.gperf"
{"closest_date", &grib_accessor_class_closest_date},
#line 125 "accessor_class_list.gperf"
#line 124 "accessor_class_list.gperf"
{"ibmfloat", &grib_accessor_class_ibmfloat},
#line 57 "accessor_class_list.gperf"
{"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing},
#line 152 "accessor_class_list.gperf"
#line 151 "accessor_class_list.gperf"
{"md5", &grib_accessor_class_md5},
#line 223 "accessor_class_list.gperf"
#line 222 "accessor_class_list.gperf"
{"validity_time", &grib_accessor_class_validity_time},
#line 131 "accessor_class_list.gperf"
#line 130 "accessor_class_list.gperf"
{"int32_little_endian", &grib_accessor_class_int32_little_endian},
#line 54 "accessor_class_list.gperf"
{"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing},
@ -480,36 +479,36 @@ static const struct accessor_class_hash classes[] =
{""}, {""},
#line 74 "accessor_class_list.gperf"
{"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked},
#line 226 "accessor_class_list.gperf"
#line 225 "accessor_class_list.gperf"
{"vector", &grib_accessor_class_vector},
#line 20 "accessor_class_list.gperf"
{"budgdate", &grib_accessor_class_budgdate},
#line 153 "accessor_class_list.gperf"
#line 152 "accessor_class_list.gperf"
{"message", &grib_accessor_class_message},
#line 149 "accessor_class_list.gperf"
#line 148 "accessor_class_list.gperf"
{"lookup", &grib_accessor_class_lookup},
#line 75 "accessor_class_list.gperf"
{"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing},
#line 138 "accessor_class_list.gperf"
#line 137 "accessor_class_list.gperf"
{"ksec1expver", &grib_accessor_class_ksec1expver},
{""},
#line 172 "accessor_class_list.gperf"
#line 171 "accessor_class_list.gperf"
{"padtomultiple", &grib_accessor_class_padtomultiple},
#line 151 "accessor_class_list.gperf"
#line 150 "accessor_class_list.gperf"
{"mars_step", &grib_accessor_class_mars_step},
#line 127 "accessor_class_list.gperf"
#line 126 "accessor_class_list.gperf"
{"ifs_param", &grib_accessor_class_ifs_param},
{""},
#line 192 "accessor_class_list.gperf"
#line 191 "accessor_class_list.gperf"
{"smart_table", &grib_accessor_class_smart_table},
{""},
#line 150 "accessor_class_list.gperf"
#line 149 "accessor_class_list.gperf"
{"mars_param", &grib_accessor_class_mars_param},
{""},
#line 22 "accessor_class_list.gperf"
{"bufr_data_element", &grib_accessor_class_bufr_data_element},
{""}, {""},
#line 193 "accessor_class_list.gperf"
#line 192 "accessor_class_list.gperf"
{"smart_table_column", &grib_accessor_class_smart_table_column},
{""},
#line 21 "accessor_class_list.gperf"
@ -520,10 +519,10 @@ static const struct accessor_class_hash classes[] =
#line 29 "accessor_class_list.gperf"
{"bufr_string_values", &grib_accessor_class_bufr_string_values},
{""}, {""}, {""},
#line 148 "accessor_class_list.gperf"
#line 147 "accessor_class_list.gperf"
{"longitudes", &grib_accessor_class_longitudes},
{""},
#line 158 "accessor_class_list.gperf"
#line 157 "accessor_class_list.gperf"
{"number_of_coded_values", &grib_accessor_class_number_of_coded_values},
{""},
#line 28 "accessor_class_list.gperf"
@ -531,30 +530,30 @@ static const struct accessor_class_hash classes[] =
#line 44 "accessor_class_list.gperf"
{"count_total", &grib_accessor_class_count_total},
{""}, {""}, {""}, {""},
#line 123 "accessor_class_list.gperf"
#line 122 "accessor_class_list.gperf"
{"hash_array", &grib_accessor_class_hash_array},
#line 166 "accessor_class_list.gperf"
#line 165 "accessor_class_list.gperf"
{"offset_values", &grib_accessor_class_offset_values},
#line 124 "accessor_class_list.gperf"
#line 123 "accessor_class_list.gperf"
{"headers_only", &grib_accessor_class_headers_only},
{""}, {""},
#line 95 "accessor_class_list.gperf"
#line 94 "accessor_class_list.gperf"
{"g1fcperiod", &grib_accessor_class_g1fcperiod},
#line 154 "accessor_class_list.gperf"
#line 153 "accessor_class_list.gperf"
{"message_copy", &grib_accessor_class_message_copy},
{""}, {""},
#line 171 "accessor_class_list.gperf"
#line 170 "accessor_class_list.gperf"
{"padtoeven", &grib_accessor_class_padtoeven},
{""}, {""},
#line 211 "accessor_class_list.gperf"
#line 210 "accessor_class_list.gperf"
{"uint16", &grib_accessor_class_uint16},
{""}, {""},
#line 155 "accessor_class_list.gperf"
#line 154 "accessor_class_list.gperf"
{"missing", &grib_accessor_class_missing},
#line 225 "accessor_class_list.gperf"
#line 224 "accessor_class_list.gperf"
{"variable", &grib_accessor_class_variable},
{""}, {""},
#line 87 "accessor_class_list.gperf"
#line 86 "accessor_class_list.gperf"
{"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag},
{""},
#line 42 "accessor_class_list.gperf"
@ -563,7 +562,7 @@ static const struct accessor_class_hash classes[] =
#line 36 "accessor_class_list.gperf"
{"codeflag", &grib_accessor_class_codeflag},
{""}, {""}, {""}, {""}, {""}, {""},
#line 212 "accessor_class_list.gperf"
#line 211 "accessor_class_list.gperf"
{"uint16_little_endian", &grib_accessor_class_uint16_little_endian},
#line 37 "accessor_class_list.gperf"
{"codetable", &grib_accessor_class_codetable},
@ -577,33 +576,33 @@ static const struct accessor_class_hash classes[] =
#line 27 "accessor_class_list.gperf"
{"bufr_group", &grib_accessor_class_bufr_group},
{""}, {""},
#line 161 "accessor_class_list.gperf"
#line 160 "accessor_class_list.gperf"
{"number_of_values", &grib_accessor_class_number_of_values},
{""}, {""},
#line 77 "accessor_class_list.gperf"
{"decimal_precision", &grib_accessor_class_decimal_precision},
{""}, {""},
#line 112 "accessor_class_list.gperf"
#line 111 "accessor_class_list.gperf"
{"g2level", &grib_accessor_class_g2level},
{""},
#line 23 "accessor_class_list.gperf"
{"bufr_elements_table", &grib_accessor_class_bufr_elements_table},
{""}, {""},
#line 143 "accessor_class_list.gperf"
#line 142 "accessor_class_list.gperf"
{"latlonvalues", &grib_accessor_class_latlonvalues},
{""}, {""}, {""}, {""},
#line 73 "accessor_class_list.gperf"
{"data_sh_packed", &grib_accessor_class_data_sh_packed},
#line 162 "accessor_class_list.gperf"
#line 161 "accessor_class_list.gperf"
{"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing},
{""}, {""}, {""}, {""},
#line 180 "accessor_class_list.gperf"
#line 179 "accessor_class_list.gperf"
{"scale_values", &grib_accessor_class_scale_values},
{""},
#line 219 "accessor_class_list.gperf"
#line 218 "accessor_class_list.gperf"
{"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values},
{""}, {""}, {""},
#line 86 "accessor_class_list.gperf"
#line 85 "accessor_class_list.gperf"
{"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value},
#line 11 "accessor_class_list.gperf"
{"abstract_vector", &grib_accessor_class_abstract_vector},
@ -614,19 +613,19 @@ static const struct accessor_class_hash classes[] =
#line 32 "accessor_class_list.gperf"
{"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning},
{""},
#line 97 "accessor_class_list.gperf"
#line 96 "accessor_class_list.gperf"
{"g1monthlydate", &grib_accessor_class_g1monthlydate},
{""}, {""},
#line 101 "accessor_class_list.gperf"
#line 100 "accessor_class_list.gperf"
{"g1verificationdate", &grib_accessor_class_g1verificationdate},
#line 167 "accessor_class_list.gperf"
#line 166 "accessor_class_list.gperf"
{"pack_bufr_values", &grib_accessor_class_pack_bufr_values},
{""}, {""},
#line 177 "accessor_class_list.gperf"
#line 176 "accessor_class_list.gperf"
{"reference_value_error", &grib_accessor_class_reference_value_error},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""},
#line 163 "accessor_class_list.gperf"
#line 162 "accessor_class_list.gperf"
{"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian},
{""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 26 "accessor_class_list.gperf"
@ -647,7 +646,7 @@ static const struct accessor_class_hash classes[] =
#line 39 "accessor_class_list.gperf"
{"codetable_units", &grib_accessor_class_codetable_units},
{""},
#line 93 "accessor_class_list.gperf"
#line 92 "accessor_class_list.gperf"
{"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""},
@ -667,14 +666,14 @@ static const struct accessor_class_hash classes[] =
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""},
#line 99 "accessor_class_list.gperf"
{"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple},
#line 98 "accessor_class_list.gperf"
{"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple},
#line 97 "accessor_class_list.gperf"
{"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 103 "accessor_class_list.gperf"
#line 102 "accessor_class_list.gperf"
{"g2_chemical", &grib_accessor_class_g2_chemical},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
@ -684,7 +683,7 @@ static const struct accessor_class_hash classes[] =
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""},
#line 96 "accessor_class_list.gperf"
#line 95 "accessor_class_list.gperf"
{"g1forecastmonth", &grib_accessor_class_g1forecastmonth}
};

View File

@ -74,7 +74,6 @@
{ "element", &grib_accessor_class_element, },
{ "evaluate", &grib_accessor_class_evaluate, },
{ "expanded_descriptors", &grib_accessor_class_expanded_descriptors, },
{ "forward", &grib_accessor_class_forward, },
{ "from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value, },
{ "g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag, },
{ "g1_message_length", &grib_accessor_class_g1_message_length, },

Some files were not shown because too many files have changed in this diff Show More