From e3266a772c471f2c7b6fa9c4ed26178d26900384 Mon Sep 17 00:00:00 2001 From: Robert Osinski Date: Fri, 16 Jun 2023 08:37:06 +0000 Subject: [PATCH 001/372] ecPoint definitions --- definitions/grib2/boot.def | 2 +- definitions/grib2/postProcessingConcept.def | 1 + definitions/grib2/tables/33/4.0.table | 111 ++++++++++++++++++++ definitions/grib2/template.4.121.def | 11 ++ definitions/grib2/template.4.122.def | 11 ++ definitions/mars/grib.eefo.gbf.def | 9 ++ definitions/mars/grib.eefo.gwt.def | 9 ++ definitions/mars/grib.eefo.pfc.def | 10 ++ definitions/mars/grib.eefo.ppm.def | 11 ++ definitions/mars/grib.enfo.gbf.def | 9 ++ definitions/mars/grib.enfo.gwt.def | 9 ++ definitions/mars/grib.enfo.pfc.def | 10 ++ definitions/mars/grib.enfo.ppm.def | 11 ++ definitions/mars/grib.mmsf.gbf.def | 24 +++++ definitions/mars/grib.mmsf.gwt.def | 24 +++++ definitions/mars/grib.mmsf.pfc.def | 27 +++++ definitions/mars/grib.oper.gbf.def | 5 + definitions/mars/grib.oper.gwt.def | 5 + definitions/mars/grib.oper.pfc.def | 9 ++ definitions/mars/type.table | 4 + 20 files changed, 311 insertions(+), 1 deletion(-) create mode 100644 definitions/grib2/tables/33/4.0.table create mode 100644 definitions/grib2/template.4.121.def create mode 100644 definitions/grib2/template.4.122.def create mode 100644 definitions/mars/grib.eefo.gbf.def create mode 100644 definitions/mars/grib.eefo.gwt.def create mode 100644 definitions/mars/grib.eefo.pfc.def create mode 100644 definitions/mars/grib.eefo.ppm.def create mode 100644 definitions/mars/grib.enfo.gbf.def create mode 100644 definitions/mars/grib.enfo.gwt.def create mode 100644 definitions/mars/grib.enfo.pfc.def create mode 100644 definitions/mars/grib.enfo.ppm.def create mode 100644 definitions/mars/grib.mmsf.gbf.def create mode 100644 definitions/mars/grib.mmsf.gwt.def create mode 100644 definitions/mars/grib.mmsf.pfc.def create mode 100644 definitions/mars/grib.oper.gbf.def create mode 100644 definitions/mars/grib.oper.gwt.def create mode 100644 definitions/mars/grib.oper.pfc.def diff --git a/definitions/grib2/boot.def b/definitions/grib2/boot.def index 32f262bef..57f7c65e5 100644 --- a/definitions/grib2/boot.def +++ b/definitions/grib2/boot.def @@ -11,7 +11,7 @@ # See https://community.wmo.int/activity-areas/wmo-codes/manual-codes/latest-version constant tablesVersionLatestOfficial = 31 : edition_specific; # If this is different from the official version, then it is the pre-operational version -constant tablesVersionLatest = 31 : edition_specific; +constant tablesVersionLatest = 33 : edition_specific; constant million = 1000000 : hidden; constant grib2divider = 1000000; diff --git a/definitions/grib2/postProcessingConcept.def b/definitions/grib2/postProcessingConcept.def index e61d4b343..cfd5c0031 100644 --- a/definitions/grib2/postProcessingConcept.def +++ b/definitions/grib2/postProcessingConcept.def @@ -16,3 +16,4 @@ "mhm_mrm" = { typeOfPostProcessing = 203; } "pcrg_mrm" = { typeOfPostProcessing = 204; } "meteogrid" = { typeOfPostProcessing = 205; } +"ecPoint" = { typeOfPostProcessing = 206; } diff --git a/definitions/grib2/tables/33/4.0.table b/definitions/grib2/tables/33/4.0.table new file mode 100644 index 000000000..b2abf24b3 --- /dev/null +++ b/definitions/grib2/tables/33/4.0.table @@ -0,0 +1,111 @@ +# Code table 4.0 - Product definition template number +0 0 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time +1 1 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time +2 2 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer at a point in time +3 3 Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time +4 4 Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time +5 5 Probability forecasts at a horizontal level or in a horizontal layer at a point in time +6 6 Percentile forecasts at a horizontal level or in a horizontal layer at a point in time +7 7 Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time +8 8 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +9 9 Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +10 10 Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +11 11 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +12 12 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +15 15 Average, accumulation, extreme values or other statistically processed values over a spatial area at a horizontal level or in a horizontal layer at a point in time +# 16-19 Reserved +20 20 Radar product +# 21-29 Reserved +30 30 Satellite product (deprecated) +31 31 Satellite product +32 32 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data +33 33 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data +34 34 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for simulated (synthetic) satellite data +35 35 Satellite product with or without associated quality values +# 36-39 Reserved +40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +42 42 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents +43 43 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents +44 44 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for aerosol +45 45 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for aerosol +46 46 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol +47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol +48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol +49 49 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol +# 50 Reserved +51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time +# 52 Reserved +53 53 Partitioned parameters at a horizontal level or in a horizontal layer at a point in time +54 54 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for partitioned parameters +55 55 Spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time +56 56 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters (deprecated) +57 57 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function +58 58 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function +59 59 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters (corrected version of template 4.56) +60 60 Individual ensemble reforecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time +61 61 Individual ensemble reforecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval +62 62 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time +63 63 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for spatio-temporal changing tiles +# 64-66 Reserved +67 67 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents based on a distribution function +68 68 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents based on a distribution function +# 69 Reserved +70 70 Post-processing analysis or forecast at a horizontal level or in a horizontal layer at a point in time +71 71 Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time +72 72 Post-processing average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +73 73 Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval +# 74-75 Reserved +76 76 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents with source or sink +77 77 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents with source or sink +78 78 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents with source or sink +79 79 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents with source or sink +80 80 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol with source or sink +81 81 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol with source or sink +82 82 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol with source or sink +83 83 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol with source or sink +84 84 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol with source or sink +85 85 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol +86 86 Quantile forecasts at a horizontal level or in a horizontal layer at a point in time +87 87 Quantile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +88 88 Analysis or forecast at a horizontal level or in a horizontal layer at a specified local time +# 89-90 Reserved +91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +92 92 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a specified local time +93 93 Post-processing analysis or forecast at a horizontal level or in a horizontal layer at a specified local time +94 94 Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a specified local time +95 95 Average, accumulation, extreme values or other statiscally processed value at a horizontal level or in a horizontal layer at a specified local time +96 96 Average, accumulation, extreme values or other statistically processed values of an individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a specified local time +97 97 Average, accumulation, extreme values or other statistically processed values of post-processing analysis or forecast at a horizontal level or in a horizontal layer at a specified local time +98 98 Average, accumulation, extreme values or other statistically processed values of a post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a specified local time +99 99 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for wave 2D spectra with explicit list of frequencies and directions +100 100 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for wave 2D spectra with explicit list of frequencies and directions +101 101 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for wave 2D spectra with frequencies and directions defined by formulae +102 102 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for wave 2D spectra with frequencies and directions defined by formulae +103 103 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for waves selected by period range +104 104 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for waves selected by period range +105 105 Anomalies, significance and other derived products from an analysis or forecast in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +106 106 Anomalies, significance and other derived products from an individual ensemble forecast, control and perturbed in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +107 107 Anomalies, significance and other derived products from derived forecasts based on all ensemble members in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +108 108 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for generic optical products +109 109 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for generic optical products +110 110 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for generic optical products +111 111 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for generic optical products +112 112 Anomalies, significance and other derived products as probability forecasts in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +# 113-120 Reserved +121 121 Post-processed quantile forecasts at a horizontal level or in a horizontal layer at a point in time +122 122, Post-processed quantile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +# 123-254 Reserved +254 254 CCITT IA5 character string +# 255-999 Reserved +1000 1000 Cross-section of analysis and forecast at a point in time +1001 1001 Cross-section of averaged or otherwise statistically processed analysis or forecast over a range of time +1002 1002 Cross-section of analysis and forecast, averaged or otherwise statistically processed over latitude or longitude +# 1003-1099 Reserved +1100 1100 Hovmoller-type grid with no averaging or other statistical processing +1101 1101 Hovmoller-type grid with averaging or other statistical processing +# 1102-32767 Reserved +# 32768-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/template.4.121.def b/definitions/grib2/template.4.121.def new file mode 100644 index 000000000..2a33f049f --- /dev/null +++ b/definitions/grib2/template.4.121.def @@ -0,0 +1,11 @@ +# (C) Copyright 2005- ECMWF. + +# TEMPLATE 4.121, Post-processed quantile forecasts at a horizontal level or in a horizontal layer at a point in time + +include "grib2/template.4.parameter.def" +include "grib2/template.4.postproc.def" +include "grib2/template.4.generating_process.def" +include "grib2/template.4.forecast_time.def" +include "grib2/template.4.point_in_time.def" +include "grib2/template.4.horizontal.def" +include "grib2/template.4.quantile.def" diff --git a/definitions/grib2/template.4.122.def b/definitions/grib2/template.4.122.def new file mode 100644 index 000000000..c6d1f2676 --- /dev/null +++ b/definitions/grib2/template.4.122.def @@ -0,0 +1,11 @@ +# (C) Copyright 2005- ECMWF. + +# TEMPLATE 4.122, Post-processed quantile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval + +include "grib2/template.4.parameter.def" +include "grib2/template.4.postproc.def" +include "grib2/template.4.generating_process.def" +include "grib2/template.4.forecast_time.def" +include "grib2/template.4.horizontal.def" +include "grib2/template.4.quantile.def" +include "grib2/template.4.statistical.def" diff --git a/definitions/mars/grib.eefo.gbf.def b/definitions/mars/grib.eefo.gbf.def new file mode 100644 index 000000000..e84a28568 --- /dev/null +++ b/definitions/mars/grib.eefo.gbf.def @@ -0,0 +1,9 @@ +alias mars.number = perturbationNumber; + +alias mars.step = stepRange; + +# We need this because 'postProcessing' is defined later +meta ecpt_model sprintf("%s", postProcessing) : no_copy; +alias mars.model = ecpt_model; + + diff --git a/definitions/mars/grib.eefo.gwt.def b/definitions/mars/grib.eefo.gwt.def new file mode 100644 index 000000000..e84a28568 --- /dev/null +++ b/definitions/mars/grib.eefo.gwt.def @@ -0,0 +1,9 @@ +alias mars.number = perturbationNumber; + +alias mars.step = stepRange; + +# We need this because 'postProcessing' is defined later +meta ecpt_model sprintf("%s", postProcessing) : no_copy; +alias mars.model = ecpt_model; + + diff --git a/definitions/mars/grib.eefo.pfc.def b/definitions/mars/grib.eefo.pfc.def new file mode 100644 index 000000000..04adb5a22 --- /dev/null +++ b/definitions/mars/grib.eefo.pfc.def @@ -0,0 +1,10 @@ +alias mars.number = perturbationNumber; + +alias mars.step = stepRange; + +# We need this because 'postProcessing' is defined later +meta ecpt_model sprintf("%s", postProcessing) : no_copy; +alias mars.model = ecpt_model; + +meta marsQuantile sprintf("%d:%d",quantileValue,totalNumberOfQuantiles); +alias mars.quantile = marsQuantile; diff --git a/definitions/mars/grib.eefo.ppm.def b/definitions/mars/grib.eefo.ppm.def new file mode 100644 index 000000000..9129cbcd8 --- /dev/null +++ b/definitions/mars/grib.eefo.ppm.def @@ -0,0 +1,11 @@ +alias mars.number = perturbationNumber; + +alias mars.step = stepRange; + +# We need this because 'postProcessing' is defined later +meta ecpt_model sprintf("%s", postProcessing) : no_copy; +alias mars.model = ecpt_model; + +meta marsQuantile sprintf("%d:%d",quantileValue,totalNumberOfQuantiles); +alias mars.quantile = marsQuantile; + diff --git a/definitions/mars/grib.enfo.gbf.def b/definitions/mars/grib.enfo.gbf.def new file mode 100644 index 000000000..e84a28568 --- /dev/null +++ b/definitions/mars/grib.enfo.gbf.def @@ -0,0 +1,9 @@ +alias mars.number = perturbationNumber; + +alias mars.step = stepRange; + +# We need this because 'postProcessing' is defined later +meta ecpt_model sprintf("%s", postProcessing) : no_copy; +alias mars.model = ecpt_model; + + diff --git a/definitions/mars/grib.enfo.gwt.def b/definitions/mars/grib.enfo.gwt.def new file mode 100644 index 000000000..e84a28568 --- /dev/null +++ b/definitions/mars/grib.enfo.gwt.def @@ -0,0 +1,9 @@ +alias mars.number = perturbationNumber; + +alias mars.step = stepRange; + +# We need this because 'postProcessing' is defined later +meta ecpt_model sprintf("%s", postProcessing) : no_copy; +alias mars.model = ecpt_model; + + diff --git a/definitions/mars/grib.enfo.pfc.def b/definitions/mars/grib.enfo.pfc.def new file mode 100644 index 000000000..04adb5a22 --- /dev/null +++ b/definitions/mars/grib.enfo.pfc.def @@ -0,0 +1,10 @@ +alias mars.number = perturbationNumber; + +alias mars.step = stepRange; + +# We need this because 'postProcessing' is defined later +meta ecpt_model sprintf("%s", postProcessing) : no_copy; +alias mars.model = ecpt_model; + +meta marsQuantile sprintf("%d:%d",quantileValue,totalNumberOfQuantiles); +alias mars.quantile = marsQuantile; diff --git a/definitions/mars/grib.enfo.ppm.def b/definitions/mars/grib.enfo.ppm.def new file mode 100644 index 000000000..9129cbcd8 --- /dev/null +++ b/definitions/mars/grib.enfo.ppm.def @@ -0,0 +1,11 @@ +alias mars.number = perturbationNumber; + +alias mars.step = stepRange; + +# We need this because 'postProcessing' is defined later +meta ecpt_model sprintf("%s", postProcessing) : no_copy; +alias mars.model = ecpt_model; + +meta marsQuantile sprintf("%d:%d",quantileValue,totalNumberOfQuantiles); +alias mars.quantile = marsQuantile; + diff --git a/definitions/mars/grib.mmsf.gbf.def b/definitions/mars/grib.mmsf.gbf.def new file mode 100644 index 000000000..f4adf1dc1 --- /dev/null +++ b/definitions/mars/grib.mmsf.gbf.def @@ -0,0 +1,24 @@ +#alias mars.step = endStep; + +alias mars.step = stepRange; + +# We need this because 'postProcessing' is defined later +meta ecpt_model sprintf("%s", postProcessing) : no_copy; +alias mars.model = ecpt_model; + +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } +if (class is "c3") { alias mars.system = systemNumber; } +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; + +if (!(class is "gw")) { # ECC-1448 + alias mars.origin = centre; +} + +# See ECC-624 +if (centre == 80 && subCentre == 98 && class is "c3") { + constant cnmc_cmcc = 'cmcc'; + alias mars.origin = cnmc_cmcc; +} diff --git a/definitions/mars/grib.mmsf.gwt.def b/definitions/mars/grib.mmsf.gwt.def new file mode 100644 index 000000000..f4adf1dc1 --- /dev/null +++ b/definitions/mars/grib.mmsf.gwt.def @@ -0,0 +1,24 @@ +#alias mars.step = endStep; + +alias mars.step = stepRange; + +# We need this because 'postProcessing' is defined later +meta ecpt_model sprintf("%s", postProcessing) : no_copy; +alias mars.model = ecpt_model; + +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } +if (class is "c3") { alias mars.system = systemNumber; } +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; + +if (!(class is "gw")) { # ECC-1448 + alias mars.origin = centre; +} + +# See ECC-624 +if (centre == 80 && subCentre == 98 && class is "c3") { + constant cnmc_cmcc = 'cmcc'; + alias mars.origin = cnmc_cmcc; +} diff --git a/definitions/mars/grib.mmsf.pfc.def b/definitions/mars/grib.mmsf.pfc.def new file mode 100644 index 000000000..a05a78ca1 --- /dev/null +++ b/definitions/mars/grib.mmsf.pfc.def @@ -0,0 +1,27 @@ +#alias mars.step = endStep; + +alias mars.step = stepRange; + +# We need this because 'postProcessing' is defined later +meta ecpt_model sprintf("%s", postProcessing) : no_copy; +alias mars.model = ecpt_model; + +meta marsQuantile sprintf("%d:%d",quantileValue,totalNumberOfQuantiles); +alias mars.quantile = marsQuantile; + +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } +if (class is "c3") { alias mars.system = systemNumber; } +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; + +if (!(class is "gw")) { # ECC-1448 + alias mars.origin = centre; +} + +# See ECC-624 +if (centre == 80 && subCentre == 98 && class is "c3") { + constant cnmc_cmcc = 'cmcc'; + alias mars.origin = cnmc_cmcc; +} diff --git a/definitions/mars/grib.oper.gbf.def b/definitions/mars/grib.oper.gbf.def new file mode 100644 index 000000000..2797330c8 --- /dev/null +++ b/definitions/mars/grib.oper.gbf.def @@ -0,0 +1,5 @@ +alias mars.step = stepRange; + +# We need this because 'postProcessing' is defined later +meta ecpt_model sprintf("%s", postProcessing) : no_copy; +alias mars.model = ecpt_model; diff --git a/definitions/mars/grib.oper.gwt.def b/definitions/mars/grib.oper.gwt.def new file mode 100644 index 000000000..2797330c8 --- /dev/null +++ b/definitions/mars/grib.oper.gwt.def @@ -0,0 +1,5 @@ +alias mars.step = stepRange; + +# We need this because 'postProcessing' is defined later +meta ecpt_model sprintf("%s", postProcessing) : no_copy; +alias mars.model = ecpt_model; diff --git a/definitions/mars/grib.oper.pfc.def b/definitions/mars/grib.oper.pfc.def new file mode 100644 index 000000000..a8c09a96e --- /dev/null +++ b/definitions/mars/grib.oper.pfc.def @@ -0,0 +1,9 @@ +alias mars.step = stepRange; + +# We need this because 'postProcessing' is defined later +meta ecpt_model sprintf("%s", postProcessing) : no_copy; +alias mars.model = ecpt_model; + +meta marsQuantile sprintf("%d:%d",quantileValue,totalNumberOfQuantiles); +alias mars.quantile = marsQuantile; + diff --git a/definitions/mars/type.table b/definitions/mars/type.table index 94001b890..8af0982bd 100644 --- a/definitions/mars/type.table +++ b/definitions/mars/type.table @@ -69,3 +69,7 @@ 88 gsd Gridded satellite data 89 ga GFAS analysis 90 gai Gridded analysis input +91 gbf ecPoint bias-corrected gridbox +92 pfc ecPoint point values +93 ppm ecPoint point value metrics +94 gwt ecPoint weather types From 98eabe1e096d8afff3e22a1e5d2a05e1791b4403 Mon Sep 17 00:00:00 2001 From: Robert Osinski Date: Fri, 16 Jun 2023 10:24:21 +0000 Subject: [PATCH 002/372] Test for ecPoint definitions --- definitions/grib2/tables/33/4.0.table | 2 +- definitions/mars/type.table | 8 ++--- tests/CMakeLists.txt | 1 + tests/grib_ecpoint_dgov-242.sh | 52 +++++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 5 deletions(-) create mode 100755 tests/grib_ecpoint_dgov-242.sh diff --git a/definitions/grib2/tables/33/4.0.table b/definitions/grib2/tables/33/4.0.table index b2abf24b3..96802f3e5 100644 --- a/definitions/grib2/tables/33/4.0.table +++ b/definitions/grib2/tables/33/4.0.table @@ -97,7 +97,7 @@ # 113-120 Reserved 121 121 Post-processed quantile forecasts at a horizontal level or in a horizontal layer at a point in time 122 122, Post-processed quantile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval -# 123-254 Reserved +# 123-253 Reserved 254 254 CCITT IA5 character string # 255-999 Reserved 1000 1000 Cross-section of analysis and forecast at a point in time diff --git a/definitions/mars/type.table b/definitions/mars/type.table index 8af0982bd..47bb88811 100644 --- a/definitions/mars/type.table +++ b/definitions/mars/type.table @@ -69,7 +69,7 @@ 88 gsd Gridded satellite data 89 ga GFAS analysis 90 gai Gridded analysis input -91 gbf ecPoint bias-corrected gridbox -92 pfc ecPoint point values -93 ppm ecPoint point value metrics -94 gwt ecPoint weather types +91 gbf bias-corrected gridbox +92 pfc point values +93 ppm point value metrics +94 gwt weather types diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 08deb84d5..768f3317a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -84,6 +84,7 @@ if( HAVE_BUILD_TOOLS ) grib_packing_order filter_substr grib_uerra + grib_ecpoint_dgov-242 grib_s2s grib_fire # grib_true_imagery diff --git a/tests/grib_ecpoint_dgov-242.sh b/tests/grib_ecpoint_dgov-242.sh new file mode 100755 index 000000000..7bc0e0258 --- /dev/null +++ b/tests/grib_ecpoint_dgov-242.sh @@ -0,0 +1,52 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +REDIRECT=/dev/null + +label="grib_ecPoint_DGOV-242_test" # Change prod to bufr or grib etc +tempGrib=temp.$label.grib + +sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + +# 1. bias-corrected +## we check if we can set PDTN 73 and typeOfPostProcessing to ecPoint, ecPoint versioning and MARS type +${tools_dir}/grib_set -s tablesVersion=33,productDefinitionTemplateNumber=73,backgroundProcess=1,\ +setLocalDefinition=1,grib2LocalSectionNumber=1,type=gbf,class=od,stream=enfo,\ +generatingProcessIdentifier=2,typeOfPostProcessing=206 $sample_grib2 $tempGrib +grib_check_key_equals $tempGrib backgroundProcess,generatingProcessIdentifier,typeOfPostProcessing,type "1 2 206 gbf" +rm -f $tempGrib + +# 2. Point values +## we check if we can set PDTN 122 and typeOfPostProcessing to ecPoint, ecPoint versioning, MARS type, quantile +${tools_dir}/grib_set -s tablesVersion=33,productDefinitionTemplateNumber=122,backgroundProcess=1,\ +setLocalDefinition=1,grib2LocalSectionNumber=1,type=pfc,class=od,stream=enfo,\ +totalNumberOfQuantiles=1000,quantileValue=995,\ +generatingProcessIdentifier=2,typeOfPostProcessing=206 $sample_grib2 $tempGrib +grib_check_key_equals $tempGrib backgroundProcess,generatingProcessIdentifier,typeOfPostProcessing,type,quantile "1 2 206 pfc 995:1000" +rm -f $tempGrib + +# 3. Point value metrics +## we check if we can set PDTN 122 and typeOfPostProcessing to ecPoint, ecPoint versioning, MARS type, quantile +${tools_dir}/grib_set -s tablesVersion=33,productDefinitionTemplateNumber=122,backgroundProcess=1,\ +setLocalDefinition=1,grib2LocalSectionNumber=1,type=ppm,class=od,stream=enfo,\ +totalNumberOfQuantiles=1000,quantileValue=995,\ +generatingProcessIdentifier=2,typeOfPostProcessing=206 $sample_grib2 $tempGrib +grib_check_key_equals $tempGrib backgroundProcess,generatingProcessIdentifier,typeOfPostProcessing,type,quantile "1 2 206 ppm 995:1000" +rm -f $tempGrib + +# 4. weather types +## we check if we can set PDTN 73 and typeOfPostProcessing to ecPoint, ecPoint versioning and MARS type +${tools_dir}/grib_set -s tablesVersion=33,productDefinitionTemplateNumber=73,backgroundProcess=1,\ +setLocalDefinition=1,grib2LocalSectionNumber=1,type=gwt,class=od,stream=enfo,\ +generatingProcessIdentifier=2,typeOfPostProcessing=206 $sample_grib2 $tempGrib +grib_check_key_equals $tempGrib backgroundProcess,generatingProcessIdentifier,typeOfPostProcessing,type "1 2 206 gwt" +rm -f $tempGrib From cd08631b11734b97d9717fa66d1392a11acb29c5 Mon Sep 17 00:00:00 2001 From: Robert Osinski Date: Tue, 20 Jun 2023 09:08:15 +0000 Subject: [PATCH 003/372] PDTN 89/90 for post-processed quantile fcsts --- definitions/grib2/tables/33/4.0.table | 8 +++----- .../grib2/{template.4.121.def => template.4.89.def} | 0 .../grib2/{template.4.122.def => template.4.90.def} | 0 definitions/mars/type.table | 8 ++++---- tests/grib_ecpoint_dgov-242.sh | 4 ++-- 5 files changed, 9 insertions(+), 11 deletions(-) rename definitions/grib2/{template.4.121.def => template.4.89.def} (100%) rename definitions/grib2/{template.4.122.def => template.4.90.def} (100%) diff --git a/definitions/grib2/tables/33/4.0.table b/definitions/grib2/tables/33/4.0.table index 96802f3e5..cfbb61fd1 100644 --- a/definitions/grib2/tables/33/4.0.table +++ b/definitions/grib2/tables/33/4.0.table @@ -71,7 +71,8 @@ 86 86 Quantile forecasts at a horizontal level or in a horizontal layer at a point in time 87 87 Quantile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval 88 88 Analysis or forecast at a horizontal level or in a horizontal layer at a specified local time -# 89-90 Reserved +89 89 Post-processed quantile forecasts at a horizontal level or in a horizontal layer at a point in time +90 90 Post-processed quantile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval 91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval 92 92 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a specified local time 93 93 Post-processing analysis or forecast at a horizontal level or in a horizontal layer at a specified local time @@ -94,10 +95,7 @@ 110 110 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for generic optical products 111 111 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for generic optical products 112 112 Anomalies, significance and other derived products as probability forecasts in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval -# 113-120 Reserved -121 121 Post-processed quantile forecasts at a horizontal level or in a horizontal layer at a point in time -122 122, Post-processed quantile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval -# 123-253 Reserved +# 113-253 Reserved 254 254 CCITT IA5 character string # 255-999 Reserved 1000 1000 Cross-section of analysis and forecast at a point in time diff --git a/definitions/grib2/template.4.121.def b/definitions/grib2/template.4.89.def similarity index 100% rename from definitions/grib2/template.4.121.def rename to definitions/grib2/template.4.89.def diff --git a/definitions/grib2/template.4.122.def b/definitions/grib2/template.4.90.def similarity index 100% rename from definitions/grib2/template.4.122.def rename to definitions/grib2/template.4.90.def diff --git a/definitions/mars/type.table b/definitions/mars/type.table index 47bb88811..4850d9f43 100644 --- a/definitions/mars/type.table +++ b/definitions/mars/type.table @@ -69,7 +69,7 @@ 88 gsd Gridded satellite data 89 ga GFAS analysis 90 gai Gridded analysis input -91 gbf bias-corrected gridbox -92 pfc point values -93 ppm point value metrics -94 gwt weather types +91 gbf Bias-corrected gridbox +92 pfc Point values +93 ppm Point value metrics +94 gwt Weather types diff --git a/tests/grib_ecpoint_dgov-242.sh b/tests/grib_ecpoint_dgov-242.sh index 7bc0e0258..34430ee6d 100755 --- a/tests/grib_ecpoint_dgov-242.sh +++ b/tests/grib_ecpoint_dgov-242.sh @@ -27,7 +27,7 @@ rm -f $tempGrib # 2. Point values ## we check if we can set PDTN 122 and typeOfPostProcessing to ecPoint, ecPoint versioning, MARS type, quantile -${tools_dir}/grib_set -s tablesVersion=33,productDefinitionTemplateNumber=122,backgroundProcess=1,\ +${tools_dir}/grib_set -s tablesVersion=33,productDefinitionTemplateNumber=90,backgroundProcess=1,\ setLocalDefinition=1,grib2LocalSectionNumber=1,type=pfc,class=od,stream=enfo,\ totalNumberOfQuantiles=1000,quantileValue=995,\ generatingProcessIdentifier=2,typeOfPostProcessing=206 $sample_grib2 $tempGrib @@ -36,7 +36,7 @@ rm -f $tempGrib # 3. Point value metrics ## we check if we can set PDTN 122 and typeOfPostProcessing to ecPoint, ecPoint versioning, MARS type, quantile -${tools_dir}/grib_set -s tablesVersion=33,productDefinitionTemplateNumber=122,backgroundProcess=1,\ +${tools_dir}/grib_set -s tablesVersion=33,productDefinitionTemplateNumber=90,backgroundProcess=1,\ setLocalDefinition=1,grib2LocalSectionNumber=1,type=ppm,class=od,stream=enfo,\ totalNumberOfQuantiles=1000,quantileValue=995,\ generatingProcessIdentifier=2,typeOfPostProcessing=206 $sample_grib2 $tempGrib From cbfb3c76d1c22db3354dc29a9ed483ae1261993d Mon Sep 17 00:00:00 2001 From: Robert Osinski Date: Tue, 20 Jun 2023 09:44:59 +0000 Subject: [PATCH 004/372] type in template number --- definitions/grib2/template.4.89.def | 2 +- definitions/grib2/template.4.90.def | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/definitions/grib2/template.4.89.def b/definitions/grib2/template.4.89.def index 2a33f049f..eee84fade 100644 --- a/definitions/grib2/template.4.89.def +++ b/definitions/grib2/template.4.89.def @@ -1,6 +1,6 @@ # (C) Copyright 2005- ECMWF. -# TEMPLATE 4.121, Post-processed quantile forecasts at a horizontal level or in a horizontal layer at a point in time +# TEMPLATE 4.89, Post-processed quantile forecasts at a horizontal level or in a horizontal layer at a point in time include "grib2/template.4.parameter.def" include "grib2/template.4.postproc.def" diff --git a/definitions/grib2/template.4.90.def b/definitions/grib2/template.4.90.def index c6d1f2676..94e5cc8e4 100644 --- a/definitions/grib2/template.4.90.def +++ b/definitions/grib2/template.4.90.def @@ -1,6 +1,6 @@ # (C) Copyright 2005- ECMWF. -# TEMPLATE 4.122, Post-processed quantile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +# TEMPLATE 4.90, Post-processed quantile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval include "grib2/template.4.parameter.def" include "grib2/template.4.postproc.def" From b1712677fc7cfcb7e348cee7f6f77fdc0f1230ff Mon Sep 17 00:00:00 2001 From: Robert Osinski Date: Tue, 20 Jun 2023 09:47:52 +0000 Subject: [PATCH 005/372] type in test for dgov-242 --- tests/grib_ecpoint_dgov-242.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/grib_ecpoint_dgov-242.sh b/tests/grib_ecpoint_dgov-242.sh index 34430ee6d..95af43d4e 100755 --- a/tests/grib_ecpoint_dgov-242.sh +++ b/tests/grib_ecpoint_dgov-242.sh @@ -26,7 +26,7 @@ grib_check_key_equals $tempGrib backgroundProcess,generatingProcessIdentifier,ty rm -f $tempGrib # 2. Point values -## we check if we can set PDTN 122 and typeOfPostProcessing to ecPoint, ecPoint versioning, MARS type, quantile +## we check if we can set PDTN 90 and typeOfPostProcessing to ecPoint, ecPoint versioning, MARS type, quantile ${tools_dir}/grib_set -s tablesVersion=33,productDefinitionTemplateNumber=90,backgroundProcess=1,\ setLocalDefinition=1,grib2LocalSectionNumber=1,type=pfc,class=od,stream=enfo,\ totalNumberOfQuantiles=1000,quantileValue=995,\ @@ -35,7 +35,7 @@ grib_check_key_equals $tempGrib backgroundProcess,generatingProcessIdentifier,ty rm -f $tempGrib # 3. Point value metrics -## we check if we can set PDTN 122 and typeOfPostProcessing to ecPoint, ecPoint versioning, MARS type, quantile +## we check if we can set PDTN 90 and typeOfPostProcessing to ecPoint, ecPoint versioning, MARS type, quantile ${tools_dir}/grib_set -s tablesVersion=33,productDefinitionTemplateNumber=90,backgroundProcess=1,\ setLocalDefinition=1,grib2LocalSectionNumber=1,type=ppm,class=od,stream=enfo,\ totalNumberOfQuantiles=1000,quantileValue=995,\ From 7c10925a0960211a796398ec17c1479350b7a23f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 13 Jul 2023 19:43:51 +0100 Subject: [PATCH 006/372] Cleanup for C++ modernisation --- src/grib_accessor_class_codetable.cc | 12 ++++++------ src/grib_accessor_class_data_g2bifourier_packing.cc | 8 +++++--- src/grib_accessor_class_smart_table.cc | 10 +++++----- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/grib_accessor_class_codetable.cc b/src/grib_accessor_class_codetable.cc index c4ed37884..6681ef23d 100644 --- a/src/grib_accessor_class_codetable.cc +++ b/src/grib_accessor_class_codetable.cc @@ -268,14 +268,14 @@ static void dump_codetable(grib_codetable* atable) } } #endif -static grib_codetable* load_table(grib_accessor_codetable* self) +static grib_codetable* load_table(grib_accessor* a) { + grib_accessor_codetable* self = (grib_accessor_codetable*)a; size_t size = 0; grib_handle* h = ((grib_accessor*)self)->parent->h; grib_context* c = h->context; grib_codetable* t = NULL; grib_codetable* next = NULL; - grib_accessor* a = (grib_accessor*)self; char* filename = 0; char recomposed[1024] = {0,}; char localRecomposed[1024] = {0,}; @@ -533,7 +533,7 @@ static void dump(grib_accessor* a, grib_dumper* dumper) long value; if (!self->table_loaded) { - self->table = load_table(self); /* may return NULL */ + self->table = load_table(a); /* may return NULL */ self->table_loaded = 1; } table = self->table; @@ -596,7 +596,7 @@ static int unpack_string(grib_accessor* a, char* buffer, size_t* len) return err; if (!self->table_loaded) { - self->table = load_table(self); /* may return NULL */ + self->table = load_table(a); /* may return NULL */ self->table_loaded = 1; } table = self->table; @@ -643,7 +643,7 @@ static int pack_string(grib_accessor* a, const char* buffer, size_t* len) #endif if (!self->table_loaded) { - self->table = load_table(self); /* may return NULL */ + self->table = load_table(a); /* may return NULL */ self->table_loaded = 1; } table = self->table; @@ -766,7 +766,7 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) rlen = 1; /* ECC-480 Performance: avoid func call overhead of grib_value_count */ if (!self->table_loaded) { - self->table = load_table(self); /* may return NULL */ + self->table = load_table(a); /* may return NULL */ self->table_loaded = 1; } diff --git a/src/grib_accessor_class_data_g2bifourier_packing.cc b/src/grib_accessor_class_data_g2bifourier_packing.cc index bf5f56f61..86275d470 100644 --- a/src/grib_accessor_class_data_g2bifourier_packing.cc +++ b/src/grib_accessor_class_data_g2bifourier_packing.cc @@ -493,9 +493,11 @@ static void free_bif_trunc(bif_trunc_t* bt, grib_accessor* a) grib_context_free(gh->context, bt); } -static bif_trunc_t* new_bif_trunc(grib_accessor* a, grib_accessor_data_g2bifourier_packing* self) +static bif_trunc_t* new_bif_trunc(grib_accessor* a) { int ret; + grib_accessor_data_g2bifourier_packing* self = (grib_accessor_data_g2bifourier_packing*)a; + grib_handle* gh = grib_handle_of_accessor(a); bif_trunc_t* bt = (bif_trunc_t*)grib_context_malloc(gh->context, sizeof(bif_trunc_t)); @@ -634,7 +636,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) if ((ret = grib_value_count(a, &count)) != GRIB_SUCCESS) goto cleanup; - bt = new_bif_trunc(a, self); + bt = new_bif_trunc(a); if (bt == NULL) { ret = GRIB_INTERNAL_ERROR; @@ -735,7 +737,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) goto cleanup; } - bt = new_bif_trunc(a, self); + bt = new_bif_trunc(a); if (bt == NULL) { long makeTemplate = 0; diff --git a/src/grib_accessor_class_smart_table.cc b/src/grib_accessor_class_smart_table.cc index f9fda189d..61b5d49e3 100644 --- a/src/grib_accessor_class_smart_table.cc +++ b/src/grib_accessor_class_smart_table.cc @@ -161,8 +161,7 @@ static void thread_init() } #endif -static int grib_load_smart_table(grib_context* c, const char* filename, - const char* recomposed_name, size_t size, grib_smart_table* t); +static int grib_load_smart_table(grib_context* c, const char* filename, const char* recomposed_name, size_t size, grib_smart_table* t); static void init(grib_accessor* a, const long len, grib_arguments* params) { @@ -185,8 +184,9 @@ static void init(grib_accessor* a, const long len, grib_arguments* params) self->tableCodes = 0; } -static grib_smart_table* load_table(grib_accessor_smart_table* self) +static grib_smart_table* load_table(grib_accessor* a) { + grib_accessor_smart_table* self = (grib_accessor_smart_table*)a; size_t size = 0; grib_handle* h = ((grib_accessor*)self)->parent->h; grib_context* c = h->context; @@ -416,7 +416,7 @@ static int unpack_string(grib_accessor* a, char* buffer, size_t* len) return err; if (!self->table) - self->table = load_table(self); + self->table = load_table(a); table = self->table; if (table && (value >= 0) && (value < table->numberOfEntries) && table->entries[value].abbreviation) { @@ -457,7 +457,7 @@ static int get_table_codes(grib_accessor* a) table_size = (1 << self->widthOfCode); /* 2 ^ self->widthOfCode */ if (!self->table) - self->table = load_table(self); + self->table = load_table(a); err = grib_get_size(grib_handle_of_accessor(a), self->values, &size); if (err) { From 0a2153e73059ae847a43c79534a75b59f52af63f Mon Sep 17 00:00:00 2001 From: Bolli Palmason Date: Thu, 13 Jul 2023 23:27:16 +0000 Subject: [PATCH 007/372] Add few typeOfLevel to GRIB2 definitions, see following page: https://codes.ecmwf.int/grib/format/grib2/ctables/4/5/ --- definitions/grib2/typeOfLevelConcept.def | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/definitions/grib2/typeOfLevelConcept.def b/definitions/grib2/typeOfLevelConcept.def index 4e088abd8..4b564df7c 100644 --- a/definitions/grib2/typeOfLevelConcept.def +++ b/definitions/grib2/typeOfLevelConcept.def @@ -13,6 +13,11 @@ 'seaBottom' = {typeOfFirstFixedSurface=9; typeOfSecondFixedSurface=255;} # Note: We already had 'entireAtmosphere' mapped before adding this one so had to choose another name 'atmosphere' = {typeOfFirstFixedSurface=10; typeOfSecondFixedSurface=255;} +'cumulonimbusBase' = {typeOfFirstFixedSurface=11; typeOfSecondFixedSurface=255;} +'cumulonimbusTop' = {typeOfFirstFixedSurface=12; typeOfSecondFixedSurface=255;} +'freeConvection' = {typeOfFirstFixedSurface=14; typeOfSecondFixedSurface=255;} +'convectiveCondensation' = {typeOfFirstFixedSurface=15; typeOfSecondFixedSurface=255;} +'neutralBuoyancy' = {typeOfFirstFixedSurface=16; typeOfSecondFixedSurface=255;} 'mostUnstableParcel' = {typeOfFirstFixedSurface=17; typeOfSecondFixedSurface=255;} 'mixedLayerParcel' = {typeOfFirstFixedSurface=18; typeOfSecondFixedSurface=255;} 'isothermal' = {typeOfFirstFixedSurface=20; typeOfSecondFixedSurface=255;} From 1bad0d199db820256bfd4c13014881683f3b99e1 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 14 Jul 2023 10:58:10 +0100 Subject: [PATCH 008/372] ECC-1636: GRIB2: Add more values to the typeOfLevel key --- definitions/grib2/typeOfLevelConcept.def | 2 +- tests/grib_typeOfLevel.sh | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/definitions/grib2/typeOfLevelConcept.def b/definitions/grib2/typeOfLevelConcept.def index 4b564df7c..0353e9af6 100644 --- a/definitions/grib2/typeOfLevelConcept.def +++ b/definitions/grib2/typeOfLevelConcept.def @@ -1,4 +1,4 @@ -# Concept typeOfLevel +# Concept typeOfLevel 'surface' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=255;} 'entireAtmosphere' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=8;} 'entireOcean' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=9;} diff --git a/tests/grib_typeOfLevel.sh b/tests/grib_typeOfLevel.sh index 0db30515d..fa9a7634d 100755 --- a/tests/grib_typeOfLevel.sh +++ b/tests/grib_typeOfLevel.sh @@ -22,6 +22,8 @@ fi def_file="$ECCODES_DEFINITION_PATH/grib2/typeOfLevelConcept.def" rm -f $temp + +# uniq -d outputs a single copy of each line that is repeated in the input grep "^'" $def_file | awk -F= '{print $1}' | tr -d "' " | sort | uniq -d > $temp if [ -s "$temp" ]; then From 9cd7d36df02f703e91a33f2e6eab127a1cc4e155 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 14 Jul 2023 13:44:29 +0100 Subject: [PATCH 009/372] Single-Precision support --- src/grib_value.cc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/grib_value.cc b/src/grib_value.cc index 38745c39f..27e7b2129 100644 --- a/src/grib_value.cc +++ b/src/grib_value.cc @@ -30,15 +30,17 @@ GRIB_INLINE static int grib_inline_strcmp(const char* a, const char* b) } /* Debug utility function to track GRIB packing/repacking issues */ -static void print_debug_info__set_double_array(grib_handle* h, const char* func, const char* name, const double* val, size_t length) +template +static void print_debug_info__set_array(grib_handle* h, const char* func, const char* name, const T* val, size_t length) { size_t N = 7, i = 0; - double minVal = DBL_MAX, maxVal = -DBL_MAX; + T minVal = std::numeric_limits::max(); + T maxVal = -std::numeric_limits::max(); Assert( h->context->debug ); if (length <= N) N = length; - fprintf(stderr, "ECCODES DEBUG %s key=%s %zu values (", func, name, length); + fprintf(stderr, "ECCODES DEBUG %s key=%s, %zu entries (", func, name, length); for (i = 0; i < N; ++i) { if (i != 0) fprintf(stderr,", "); fprintf(stderr, "%.10g", val[i]); @@ -764,7 +766,7 @@ int grib_set_double_array_internal(grib_handle* h, const char* name, const doubl int ret = 0; if (h->context->debug) { - print_debug_info__set_double_array(h, "grib_set_double_array_internal", name, val, length); + print_debug_info__set_array(h, "grib_set_double_array_internal", name, val, length); } if (length == 0) { @@ -793,7 +795,7 @@ static int __grib_set_double_array(grib_handle* h, const char* name, const doubl size_t i = 0; if (h->context->debug) { - print_debug_info__set_double_array(h, "__grib_set_double_array", name, val, length); + print_debug_info__set_array(h, "__grib_set_double_array", name, val, length); } if (length == 0) { From aabdbd927a0e59d6ad107c89d7aeb277a65f8c10 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 14 Jul 2023 16:13:00 +0100 Subject: [PATCH 010/372] Badge for code coverage --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 024dc5c33..f63d65384 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ ecCodes [![Windows: master](https://img.shields.io/appveyor/ci/ecmwf/eccodes/master.svg?label=Windows%3A%20master)](https://ci.appveyor.com/project/ecmwf/eccodes/branch/master) [![Windows: develop](https://img.shields.io/appveyor/ci/ecmwf/eccodes/develop.svg?label=Windows%3A%20develop)](https://ci.appveyor.com/project/ecmwf/eccodes/branch/develop) +[![codecov](https://codecov.io/gh/ecmwf/eccodes/branch/develop/graph/badge.svg)](https://codecov.io/gh/ecmwf/eccodes) + ecCodes is a package developed by ECMWF which provides an application programming interface and a set of tools for decoding and encoding messages in the following formats: From 8017542bbe44957d284696d2a7b7d1fe4b92ba87 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 14 Jul 2023 15:34:36 +0000 Subject: [PATCH 011/372] Fix Windows build: include header file for std::max --- src/grib_value.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/grib_value.cc b/src/grib_value.cc index 27e7b2129..facb6e8a4 100644 --- a/src/grib_value.cc +++ b/src/grib_value.cc @@ -15,6 +15,7 @@ #include "grib_value.h" #include "grib_accessor.h" #include +#include /* Note: A fast cut-down version of strcmp which does NOT return -1 */ /* 0 means input strings are equal and 1 means not equal */ From 209a990bf43f1f1194438e67e64a4adb3765dd92 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 15 Jul 2023 16:01:07 +0100 Subject: [PATCH 012/372] ECC-1637: GRIB2: Remove template.5.6.def and template.7.6.def --- definitions/grib2/tables/0/5.0.table | 1 - definitions/grib2/tables/1/5.0.table | 1 - definitions/grib2/tables/10/5.0.table | 1 - definitions/grib2/tables/11/5.0.table | 1 - definitions/grib2/tables/12/5.0.table | 1 - definitions/grib2/tables/13/5.0.table | 1 - definitions/grib2/tables/14/5.0.table | 1 - definitions/grib2/tables/15/5.0.table | 1 - definitions/grib2/tables/16/5.0.table | 1 - definitions/grib2/tables/17/5.0.table | 1 - definitions/grib2/tables/18/5.0.table | 1 - definitions/grib2/tables/19/5.0.table | 1 - definitions/grib2/tables/2/5.0.table | 1 - definitions/grib2/tables/20/5.0.table | 1 - definitions/grib2/tables/21/5.0.table | 1 - definitions/grib2/tables/3/5.0.table | 1 - definitions/grib2/tables/4/5.0.table | 1 - definitions/grib2/tables/5/5.0.table | 1 - definitions/grib2/tables/6/5.0.table | 1 - definitions/grib2/tables/7/5.0.table | 1 - definitions/grib2/tables/8/5.0.table | 1 - definitions/grib2/tables/9/5.0.table | 1 - definitions/grib2/template.5.6.def | 8 ------- definitions/grib2/template.7.6.def | 32 --------------------------- 24 files changed, 62 deletions(-) delete mode 100644 definitions/grib2/template.5.6.def delete mode 100644 definitions/grib2/template.7.6.def diff --git a/definitions/grib2/tables/0/5.0.table b/definitions/grib2/tables/0/5.0.table index cb7fd1642..ecfd2bf47 100644 --- a/definitions/grib2/tables/0/5.0.table +++ b/definitions/grib2/tables/0/5.0.table @@ -3,7 +3,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - ieee packing -6 6 Grid point data - simple packing with pre-processing 40 40 JPEG2000 Packing 41 41 PNG pacling 50 50 Spectral data -simple packing diff --git a/definitions/grib2/tables/1/5.0.table b/definitions/grib2/tables/1/5.0.table index cb7fd1642..ecfd2bf47 100644 --- a/definitions/grib2/tables/1/5.0.table +++ b/definitions/grib2/tables/1/5.0.table @@ -3,7 +3,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - ieee packing -6 6 Grid point data - simple packing with pre-processing 40 40 JPEG2000 Packing 41 41 PNG pacling 50 50 Spectral data -simple packing diff --git a/definitions/grib2/tables/10/5.0.table b/definitions/grib2/tables/10/5.0.table index 44482726c..f27acb859 100644 --- a/definitions/grib2/tables/10/5.0.table +++ b/definitions/grib2/tables/10/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - IEEE floating point data -6 6 Grid point data - simple packing with pre-processing 40 40 Grid point data - JPEG 2000 code stream format 41 41 Grid point data - Portable Network Graphics (PNG) #42-49 Reserved diff --git a/definitions/grib2/tables/11/5.0.table b/definitions/grib2/tables/11/5.0.table index 44482726c..f27acb859 100644 --- a/definitions/grib2/tables/11/5.0.table +++ b/definitions/grib2/tables/11/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - IEEE floating point data -6 6 Grid point data - simple packing with pre-processing 40 40 Grid point data - JPEG 2000 code stream format 41 41 Grid point data - Portable Network Graphics (PNG) #42-49 Reserved diff --git a/definitions/grib2/tables/12/5.0.table b/definitions/grib2/tables/12/5.0.table index 8ce7bb24f..2795336df 100644 --- a/definitions/grib2/tables/12/5.0.table +++ b/definitions/grib2/tables/12/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - IEEE floating point data -6 6 Grid point data - simple packing with pre-processing 40 40 Grid point data - JPEG 2000 code stream format 41 41 Grid point data - Portable Network Graphics (PNG) # 42-49 Reserved diff --git a/definitions/grib2/tables/13/5.0.table b/definitions/grib2/tables/13/5.0.table index 8ce7bb24f..2795336df 100644 --- a/definitions/grib2/tables/13/5.0.table +++ b/definitions/grib2/tables/13/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - IEEE floating point data -6 6 Grid point data - simple packing with pre-processing 40 40 Grid point data - JPEG 2000 code stream format 41 41 Grid point data - Portable Network Graphics (PNG) # 42-49 Reserved diff --git a/definitions/grib2/tables/14/5.0.table b/definitions/grib2/tables/14/5.0.table index cd61837a5..5ec77ed0f 100644 --- a/definitions/grib2/tables/14/5.0.table +++ b/definitions/grib2/tables/14/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - IEEE floating point data -6 6 Grid point data - simple packing with pre-processing 40 40 Grid point data - JPEG 2000 code stream format 41 41 Grid point data - Portable Network Graphics (PNG) # 42-49 Reserved diff --git a/definitions/grib2/tables/15/5.0.table b/definitions/grib2/tables/15/5.0.table index cd61837a5..5ec77ed0f 100644 --- a/definitions/grib2/tables/15/5.0.table +++ b/definitions/grib2/tables/15/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - IEEE floating point data -6 6 Grid point data - simple packing with pre-processing 40 40 Grid point data - JPEG 2000 code stream format 41 41 Grid point data - Portable Network Graphics (PNG) # 42-49 Reserved diff --git a/definitions/grib2/tables/16/5.0.table b/definitions/grib2/tables/16/5.0.table index cd61837a5..5ec77ed0f 100644 --- a/definitions/grib2/tables/16/5.0.table +++ b/definitions/grib2/tables/16/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - IEEE floating point data -6 6 Grid point data - simple packing with pre-processing 40 40 Grid point data - JPEG 2000 code stream format 41 41 Grid point data - Portable Network Graphics (PNG) # 42-49 Reserved diff --git a/definitions/grib2/tables/17/5.0.table b/definitions/grib2/tables/17/5.0.table index cd61837a5..5ec77ed0f 100644 --- a/definitions/grib2/tables/17/5.0.table +++ b/definitions/grib2/tables/17/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - IEEE floating point data -6 6 Grid point data - simple packing with pre-processing 40 40 Grid point data - JPEG 2000 code stream format 41 41 Grid point data - Portable Network Graphics (PNG) # 42-49 Reserved diff --git a/definitions/grib2/tables/18/5.0.table b/definitions/grib2/tables/18/5.0.table index ad46a5377..33597681b 100644 --- a/definitions/grib2/tables/18/5.0.table +++ b/definitions/grib2/tables/18/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - IEEE floating point data -6 6 Grid point data - simple packing with pre-processing 40 40 Grid point data - JPEG 2000 code stream format 41 41 Grid point data - Portable Network Graphics (PNG) 42 42 Grid point data - CCSDS recommended lossless compression diff --git a/definitions/grib2/tables/19/5.0.table b/definitions/grib2/tables/19/5.0.table index ad46a5377..33597681b 100644 --- a/definitions/grib2/tables/19/5.0.table +++ b/definitions/grib2/tables/19/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - IEEE floating point data -6 6 Grid point data - simple packing with pre-processing 40 40 Grid point data - JPEG 2000 code stream format 41 41 Grid point data - Portable Network Graphics (PNG) 42 42 Grid point data - CCSDS recommended lossless compression diff --git a/definitions/grib2/tables/2/5.0.table b/definitions/grib2/tables/2/5.0.table index 0cf3752cb..b9b301151 100644 --- a/definitions/grib2/tables/2/5.0.table +++ b/definitions/grib2/tables/2/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - ieee packing -6 6 Grid point data - simple packing with pre-processing 40 40 JPEG2000 Packing 41 41 PNG pacling 50 50 Spectral data -simple packing diff --git a/definitions/grib2/tables/20/5.0.table b/definitions/grib2/tables/20/5.0.table index 74443e43a..4d6cc68c8 100644 --- a/definitions/grib2/tables/20/5.0.table +++ b/definitions/grib2/tables/20/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - IEEE floating point data -6 6 Grid point data - simple packing with pre-processing 40 40 Grid point data - JPEG 2000 code stream format 41 41 Grid point data - Portable Network Graphics (PNG) 42 42 Grid point data - CCSDS recommended lossless compression diff --git a/definitions/grib2/tables/21/5.0.table b/definitions/grib2/tables/21/5.0.table index 74443e43a..4d6cc68c8 100644 --- a/definitions/grib2/tables/21/5.0.table +++ b/definitions/grib2/tables/21/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - IEEE floating point data -6 6 Grid point data - simple packing with pre-processing 40 40 Grid point data - JPEG 2000 code stream format 41 41 Grid point data - Portable Network Graphics (PNG) 42 42 Grid point data - CCSDS recommended lossless compression diff --git a/definitions/grib2/tables/3/5.0.table b/definitions/grib2/tables/3/5.0.table index 0cf3752cb..b9b301151 100644 --- a/definitions/grib2/tables/3/5.0.table +++ b/definitions/grib2/tables/3/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - ieee packing -6 6 Grid point data - simple packing with pre-processing 40 40 JPEG2000 Packing 41 41 PNG pacling 50 50 Spectral data -simple packing diff --git a/definitions/grib2/tables/4/5.0.table b/definitions/grib2/tables/4/5.0.table index 0cf3752cb..b9b301151 100644 --- a/definitions/grib2/tables/4/5.0.table +++ b/definitions/grib2/tables/4/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - ieee packing -6 6 Grid point data - simple packing with pre-processing 40 40 JPEG2000 Packing 41 41 PNG pacling 50 50 Spectral data -simple packing diff --git a/definitions/grib2/tables/5/5.0.table b/definitions/grib2/tables/5/5.0.table index 62cc4a472..ccf4f88cb 100644 --- a/definitions/grib2/tables/5/5.0.table +++ b/definitions/grib2/tables/5/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - ieee packing -6 6 Grid point data - simple packing with pre-processing 40 40 JPEG2000 Packing 41 41 PNG pacling 50 50 Spectral data -simple packing diff --git a/definitions/grib2/tables/6/5.0.table b/definitions/grib2/tables/6/5.0.table index 62cc4a472..ccf4f88cb 100644 --- a/definitions/grib2/tables/6/5.0.table +++ b/definitions/grib2/tables/6/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - ieee packing -6 6 Grid point data - simple packing with pre-processing 40 40 JPEG2000 Packing 41 41 PNG pacling 50 50 Spectral data -simple packing diff --git a/definitions/grib2/tables/7/5.0.table b/definitions/grib2/tables/7/5.0.table index 62cc4a472..ccf4f88cb 100644 --- a/definitions/grib2/tables/7/5.0.table +++ b/definitions/grib2/tables/7/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - ieee packing -6 6 Grid point data - simple packing with pre-processing 40 40 JPEG2000 Packing 41 41 PNG pacling 50 50 Spectral data -simple packing diff --git a/definitions/grib2/tables/8/5.0.table b/definitions/grib2/tables/8/5.0.table index c7995a965..e554b5c4b 100644 --- a/definitions/grib2/tables/8/5.0.table +++ b/definitions/grib2/tables/8/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - IEEE floating point data -6 6 Grid point data - simple packing with pre-processing 40 40 Grid point data - JPEG 2000 code stream format 41 41 Grid point data - Portable Network Graphics (PNG) #42-49 Reserved diff --git a/definitions/grib2/tables/9/5.0.table b/definitions/grib2/tables/9/5.0.table index c7995a965..e554b5c4b 100644 --- a/definitions/grib2/tables/9/5.0.table +++ b/definitions/grib2/tables/9/5.0.table @@ -4,7 +4,6 @@ 2 2 Grid point data - complex packing 3 3 Grid point data - complex packing and spatial differencing 4 4 Grid point data - IEEE floating point data -6 6 Grid point data - simple packing with pre-processing 40 40 Grid point data - JPEG 2000 code stream format 41 41 Grid point data - Portable Network Graphics (PNG) #42-49 Reserved diff --git a/definitions/grib2/template.5.6.def b/definitions/grib2/template.5.6.def deleted file mode 100644 index 5214f812a..000000000 --- a/definitions/grib2/template.5.6.def +++ /dev/null @@ -1,8 +0,0 @@ -# (C) Copyright 2005- ECMWF. - -# Grid point data - Simple packing with preprocessing - -include "grib2/template.5.packing.def"; - -codetable[1] typeOfPreProcessing ('5.9.table',masterDir,localDir) :edition_specific; -ieeefloat preProcessingParameter : read_only; diff --git a/definitions/grib2/template.7.6.def b/definitions/grib2/template.7.6.def deleted file mode 100644 index f4308d128..000000000 --- a/definitions/grib2/template.7.6.def +++ /dev/null @@ -1,32 +0,0 @@ -# (C) Copyright 2005- ECMWF. - -# TEMPLATE 7.6, Grid point data - simple packing with preprocessing - -meta codedValues data_g2simple_packing_with_preprocessing( - section7Length, - offsetBeforeData, - offsetSection7, - unitsFactor, - unitsBias, - changingPrecision, - numberOfValues, - bitsPerValue, - referenceValue, - binaryScaleFactor, - decimalScaleFactor, - optimizeScaleFactor, - typeOfPreProcessing, - preProcessingParameter - ): read_only; - -meta values data_apply_bitmap(codedValues, - bitmap, - missingValue, - binaryScaleFactor, - numberOfDataPoints, - numberOfValues) : dump; - -alias data.packedValues = codedValues; - -template statistics "common/statistics_grid.def"; -template missing_values "common/missing_values_grid.def"; From f4e724a95b0d3a9c803581e3c6484eb9d92182e4 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 15 Jul 2023 20:34:22 +0100 Subject: [PATCH 013/372] Testing: codes_parser --- tests/definitions.sh | 13 ++++++++++++- tools/codes_parser.cc | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/tests/definitions.sh b/tests/definitions.sh index 63741ed2e..b841e2834 100755 --- a/tests/definitions.sh +++ b/tests/definitions.sh @@ -8,10 +8,11 @@ # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. # - . ./include.ctest.sh +label="definitions_test" REDIRECT=/dev/null +tempOut=temp.$label.txt [ -z "$ECCODES_DEFINITION_PATH" ] || ECCODES_DEFINITION_PATH=`${tools_dir}/codes_info -d` @@ -19,3 +20,13 @@ for file in `find ${ECCODES_DEFINITION_PATH}/ -name '*.def' -print | grep -v gri do ${tools_dir}/codes_parser $file > $REDIRECT done + +# Try an invalid input +set +e +echo 'transient xx=1' | ${tools_dir}/codes_parser - 2>$tempOut +status=$? +set -e +[ $status -ne 0 ] +grep -q "Parser: syntax error" $tempOut + +rm -f $tempOut diff --git a/tools/codes_parser.cc b/tools/codes_parser.cc index 465f8a271..92669c32b 100644 --- a/tools/codes_parser.cc +++ b/tools/codes_parser.cc @@ -21,6 +21,7 @@ int main(int argc, char* argv[]) for (i = 1; i < argc; i++) { printf("%s ... ", argv[i]); fflush(stdout); + // argv can be "-" to indicate stdin if (!(a = grib_parse_file(c, argv[i]))) { fail++; printf("FAILED\n"); From b8d6097b8b689213b704b931ead553efe33a068c Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 16 Jul 2023 14:01:24 +0100 Subject: [PATCH 014/372] ECC-1638: GRIB2: Error creating variable resolution latitude/longitude grid --- definitions/grib2/template.3.latlon_vares.def | 8 +-- tests/grib_gridType.sh | 54 +++++++++++++------ 2 files changed, 42 insertions(+), 20 deletions(-) diff --git a/definitions/grib2/template.3.latlon_vares.def b/definitions/grib2/template.3.latlon_vares.def index b3ef76569..3c29438ea 100644 --- a/definitions/grib2/template.3.latlon_vares.def +++ b/definitions/grib2/template.3.latlon_vares.def @@ -1,6 +1,6 @@ # (C) Copyright 2005- ECMWF. - -unsigned[4] Ni : can_be_missing,dump; +# Variable resolution latitude/longitude +unsigned[4] Ni : dump; alias numberOfPointsAlongAParallel=Ni; alias Nx = Ni; @@ -39,9 +39,9 @@ include "grib2/template.3.resolution_flags.def" include "grib2/template.3.scanning_mode.def"; longitudesList list(Ni) { - unsigned[4] longitudes; + unsigned[4] longitude; } latitudesList list(Nj) { - signed[4] latitudes; + signed[4] latitude; } diff --git a/tests/grib_gridType.sh b/tests/grib_gridType.sh index 1adf1c6b2..3d2c184a9 100755 --- a/tests/grib_gridType.sh +++ b/tests/grib_gridType.sh @@ -11,37 +11,36 @@ . ./include.ctest.sh REDIRECT=/dev/null +label="grib_gridType_test" +tempGrib=temp.$label.grib +tempFilt=temp.$label.filt +tempText=temp.$label.txt +rm -f $tempGrib $tempFilt $tempText -tmpdata=grib_api.gridType.grib -rm -f $tmpdata +${tools_dir}/grib_set -s gridType=regular_gg ${data_dir}/reduced_latlon_surface.grib1 ${tempGrib} > $REDIRECT -${tools_dir}/grib_set -s gridType=regular_gg ${data_dir}/reduced_latlon_surface.grib1 ${tmpdata} > $REDIRECT - -gridType=`${tools_dir}/grib_get -p gridType $tmpdata` -if [ $gridType != "regular_gg" ] -then +gridType=`${tools_dir}/grib_get -p gridType $tempGrib` +if [ $gridType != "regular_gg" ]; then echo "Unable to change from reduced_latlon to regular_gg" echo $gridType exit 1 fi -rm -f $tmpdata +rm -f $tempGrib -${tools_dir}/grib_set -s gridType=reduced_gg ${data_dir}/regular_gaussian_pressure_level.grib1 ${tmpdata} > $REDIRECT +${tools_dir}/grib_set -s gridType=reduced_gg ${data_dir}/regular_gaussian_pressure_level.grib1 ${tempGrib} > $REDIRECT -gridType=`${tools_dir}/grib_get -p gridType $tmpdata` -if [ $gridType != "reduced_gg" ] -then +gridType=`${tools_dir}/grib_get -p gridType $tempGrib` +if [ $gridType != "reduced_gg" ]; then echo "Unable to change from regular_gg to reduced_gg" echo $gridType exit 1 fi -rm -f $tmpdata +rm -f $tempGrib -########### -# gridName -########### +# Key gridName +# --------------- for f in $ECCODES_SAMPLES_PATH/regular_gg_ml_grib*tmpl; do gname=`${tools_dir}/grib_get -p gridName $f` [ "$gname" = "F32" ] @@ -51,3 +50,26 @@ for f in $ECCODES_SAMPLES_PATH/reduced_gg_pl_512_grib*.tmpl; do [ "$gname" = "N512" ] done +# ECC-1638 +# --------------- +cat > $tempFilt < $tempText 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Nearest neighbour functionality is not supported for grid type" $tempText + + +# Clean up +rm -f $tempGrib $tempFilt $tempText From 6aaf499d13c8b384344e78dcfefbd5b4626bf9e1 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 16 Jul 2023 15:05:07 +0100 Subject: [PATCH 015/372] ECC-1639: CRASH: Nearest neighbour on Gaussian grid with N=0 --- src/grib_geography.cc | 2 ++ src/grib_iterator_class_gaussian.cc | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/grib_geography.cc b/src/grib_geography.cc index b385ceb10..0493f8549 100644 --- a/src/grib_geography.cc +++ b/src/grib_geography.cc @@ -4003,6 +4003,8 @@ static int ecc_grib_get_gaussian_latitudes(long trunc, double* lats) int grib_get_gaussian_latitudes(long trunc, double* lats) { + if (trunc == 0) + return GRIB_GEOCALCULUS_PROBLEM; if (trunc == 1280) return get_precomputed_latitudes_N1280(lats); if (trunc == 640) diff --git a/src/grib_iterator_class_gaussian.cc b/src/grib_iterator_class_gaussian.cc index 7042b6233..20807be96 100644 --- a/src/grib_iterator_class_gaussian.cc +++ b/src/grib_iterator_class_gaussian.cc @@ -129,7 +129,7 @@ static int init(grib_iterator* i, grib_handle* h, grib_arguments* args) ret = grib_get_gaussian_latitudes(trunc, lats); if (ret != GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "error %d calculating gaussian points", ret); + grib_context_log(h->context, GRIB_LOG_ERROR, "Error calculating gaussian points: %s", grib_get_error_message(ret)); return ret; } /* From 0ef0fce94186460245ab30251de4f402f481058c Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 16 Jul 2023 15:06:52 +0100 Subject: [PATCH 016/372] Tools: Improve error message --- tests/grib_gridType.sh | 2 +- tools/grib_ls.cc | 15 ++++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/tests/grib_gridType.sh b/tests/grib_gridType.sh index 3d2c184a9..b21f09f9f 100755 --- a/tests/grib_gridType.sh +++ b/tests/grib_gridType.sh @@ -68,7 +68,7 @@ ${tools_dir}/grib_ls -l 0,0 $tempGrib > $tempText 2>&1 status=$? set -e [ $status -ne 0 ] -grep -q "Nearest neighbour functionality is not supported for grid type" $tempText +grep -q "Nearest neighbour functionality is not supported for grid: Variable resolution latitude/longitude" $tempText # Clean up diff --git a/tools/grib_ls.cc b/tools/grib_ls.cc index 44c8dec7f..4482370c9 100644 --- a/tools/grib_ls.cc +++ b/tools/grib_ls.cc @@ -281,15 +281,12 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) if (!nearest) nearest = grib_nearest_new(h, &err); if (err == GRIB_NOT_IMPLEMENTED) { - char grid_type[100], grid_desc[200]; - size_t g_len = sizeof(grid_type); - int err1 = 0, err2 = 0; - err1 = grib_get_string(h, "gridType", grid_type, &g_len); - g_len = sizeof(grid_desc); - err2 = grib_get_string(h, "gridDefinitionDescription", grid_desc, &g_len); - if (!err1 && !err2) { - fprintf(stderr, "Nearest neighbour functionality is not supported for grid type: %s (%s)\n", - grid_type, grid_desc); + char grid_desc[200]; + int err1 = 0; + size_t g_len = sizeof(grid_desc); + err1 = grib_get_string(h, "gridDefinitionDescription", grid_desc, &g_len); + if (!err1) { + fprintf(stderr, "Nearest neighbour functionality is not supported for grid: %s\n", grid_desc); } else { fprintf(stderr, "Nearest neighbour functionality is not supported for this grid type\n"); } From 4b2f8bcb4625d86921062972ad142897e540cb1b Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 17 Jul 2023 11:18:44 +0000 Subject: [PATCH 017/372] Turn assert into proper error (unreadable message) --- src/grib_handle.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/grib_handle.cc b/src/grib_handle.cc index 8b14a7161..18597a402 100644 --- a/src/grib_handle.cc +++ b/src/grib_handle.cc @@ -448,6 +448,7 @@ grib_handle* grib_handle_new_from_message(grib_context* c, const void* data, siz gl = grib_new_handle(c); gl->product_kind = PRODUCT_GRIB; /* See ECC-480 */ h = grib_handle_create(gl, c, data, buflen); + if (!h) return NULL; /* See ECC-448 */ if (determine_product_kind(h, &product_kind) == GRIB_SUCCESS) { From 78daafc3f58bcfe6221131276542d3cb011090dd Mon Sep 17 00:00:00 2001 From: Daniel Tipping Date: Fri, 14 Jul 2023 10:48:27 +0100 Subject: [PATCH 018/372] Prevent failure of CI notification for PRs from forks Fixes failure seen in #140 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cf2d99939..f11896b00 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -91,7 +91,7 @@ jobs: - downstream-ci-hpc - private-downstream-ci-hpc - codecov - if: always() + if: always() && ${{ !github.event.pull_request.head.repo.fork && github.event.action != 'labeled' || github.event.label.name == 'approved-for-ci' }} steps: - name: Trigger Teams notification uses: ecmwf-actions/notify-teams@v1 From abfaec141e5a816b97fd78902c7eee8db6faded2 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 18 Jul 2023 15:03:40 +0100 Subject: [PATCH 019/372] ECC-1640: Tools: Deprecate the grib1to2 script --- tests/grib1to2.sh | 11 --------- tools/CMakeLists.txt | 7 ------ tools/grib1to2.in | 59 -------------------------------------------- 3 files changed, 77 deletions(-) delete mode 100755 tools/grib1to2.in diff --git a/tests/grib1to2.sh b/tests/grib1to2.sh index d4b4bdbb3..1ff2dbaad 100755 --- a/tests/grib1to2.sh +++ b/tests/grib1to2.sh @@ -104,14 +104,3 @@ grib_check_key_equals $temp2 stepType,stepRange 'accum 0-240' rm -f $temp1 $temp2 rm -f $output - -#sed "s:toolsdir:${tools_dir}/:" ${tools_dir}/grib1to2.txt > ${tools_dir}/grib1to2.test -#chmod +x ${tools_dir}/grib1to2.test -#${tools_dir}/grib1to2.test -f ${data_dir}/test.grib1 ${data_dir}/test.grib2 -#${tools_dir}/grib_get -p typeOfProcessedData:s,type:s ${data_dir}/test.grib2 > ${data_dir}/typeOfProcessedData.log - -#diff ${data_dir}/typeOfProcessedData.log ${data_dir}/typeOfProcessedData.ok - -#${tools_dir}/grib_compare -Pe ${data_dir}/test.grib1 ${data_dir}/test.grib2 - -#rm -f ${data_dir}/test.grib2 diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index e9b3d4af9..cddce7c33 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -93,13 +93,6 @@ ecbuild_add_executable( TARGET codes_bufr_filter if( ECCODES_INSTALL_EXTRA_TOOLS ) ecbuild_info("ECCODES_INSTALL_EXTRA_TOOLS enabled") - # grib1to2 script needs to be generated before installation - configure_file( grib1to2.in grib1to2 ) - install( FILES ${CMAKE_CURRENT_BINARY_DIR}/grib1to2 - DESTINATION ${INSTALL_BIN_DIR} - PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ - GROUP_EXECUTE GROUP_READ - WORLD_EXECUTE WORLD_READ ) else() ecbuild_info("ECCODES_INSTALL_EXTRA_TOOLS disabled") endif() diff --git a/tools/grib1to2.in b/tools/grib1to2.in deleted file mode 100755 index 77dd45ef4..000000000 --- a/tools/grib1to2.in +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/sh -set -e - -if [ $# -lt 2 ] -then - echo "usage: $0 [-f] in.grib1 out.grib2" - echo "-f convert to grib2 only typeOfLevel='hybrid' and copy other level types as grib1" - exit 1 -fi - -grib_filter=@CMAKE_INSTALL_PREFIX@/bin/grib_filter -rules_filter=rules.filter$$ - -force=0 -out=$2 -in=$1 -while getopts fd:D:t:b:w:e:r:s:n:p: options -do - case $options in - f) force=1 - out=$3 - in=$2 - ;; - esac -done - - -if [ $force = 1 ] -then - - cat >> $rules_filter <> $rules_filter < Date: Tue, 18 Jul 2023 16:53:17 +0100 Subject: [PATCH 020/372] Testing: Error cases for packingType --- src/grib_accessor_class_concept.cc | 3 +++ tests/grib_change_packing.sh | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/grib_accessor_class_concept.cc b/src/grib_accessor_class_concept.cc index a0204b1ad..192dd1b6b 100644 --- a/src/grib_accessor_class_concept.cc +++ b/src/grib_accessor_class_concept.cc @@ -329,6 +329,9 @@ static bool blacklisted(grib_handle* h, long edition, const char* concept_name, if (edition == 2 && strstr(concept_value, "grid_run_length")) { return true; } + if (strstr(concept_value, "grid_simple_matrix")) { + return true; + } if (edition == 1 && (strstr(concept_value, "ccsds") || strstr(concept_value, "jpeg"))) { return true; } diff --git a/tests/grib_change_packing.sh b/tests/grib_change_packing.sh index e28baa356..790ef04c7 100755 --- a/tests/grib_change_packing.sh +++ b/tests/grib_change_packing.sh @@ -7,7 +7,8 @@ label="grib_change_packing_test" temp=temp.$label.grib -rm -f $temp +temp_err=temp.$label.err +rm -f $temp $temp_err grib1=${data_dir}/reduced_latlon_surface_constant.grib1 grib2=${data_dir}/reduced_latlon_surface_constant.grib2 @@ -124,7 +125,6 @@ stats=`${tools_dir}/grib_get -F%.1f -p average,standardDeviation $temp` # ECC-1352: Check CCSDS # ---------------------------- -temp_err=temp.$label.err if [ $HAVE_AEC -eq 0 ]; then # Check we get an error if we try to decode this packing [ -f "${data_dir}/ccsds.grib2" ] @@ -158,5 +158,15 @@ grib_check_key_equals $temp const,bitsPerValue,section4Length '1 0 12' ECCODES_GRIBEX_MODE_ON=1 ${tools_dir}/grib_set -d1 $input $temp grib_check_key_equals $temp const,bitsPerValue,section4Length '1 12 8966' +# Error in packingType value +# --------------------------- +set +e +${tools_dir}/grib_set -s packingType="xxxxx" $ECCODES_SAMPLES_PATH/GRIB2.tmpl $temp > $temp_err 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "ECCODES ERROR.*no match for packingType=xxxxx" $temp_err +cat $temp_err +# Clean up rm -f $temp $temp_err From 8b4156bf50deb9279569bf79a30b4d327946d3dd Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 18 Jul 2023 17:55:31 +0000 Subject: [PATCH 021/372] ECC-1641: Assertion failure in grib_to_netcdf for acetone product --- tools/grib_to_netcdf.cc | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/tools/grib_to_netcdf.cc b/tools/grib_to_netcdf.cc index e223a4c79..0e6212daa 100644 --- a/tools/grib_to_netcdf.cc +++ b/tools/grib_to_netcdf.cc @@ -2639,7 +2639,10 @@ static void scale(double* vals, long n, void* data, dataset_t* g) for (i = 0; i < n; ++i) { if (!g->bitmap || (vals[i] != global_missing_value)) { double d = rint((vals[i] - add_offset) / scale_factor); - Assert(d >= nc_type_values[nctype].nc_type_min && d <= nc_type_values[nctype].nc_type_max); + if (!(d >= nc_type_values[nctype].nc_type_min && d <= nc_type_values[nctype].nc_type_max)) { + grib_context_log(ctx, GRIB_LOG_ERROR, "Scaling for type NC_BYTE failed"); + return; + } vscaled[i] = d; } } @@ -2653,7 +2656,10 @@ static void scale(double* vals, long n, void* data, dataset_t* g) double d = 0; Assert(scale_factor > 0); d = rint((vals[i] - add_offset) / scale_factor); - Assert(d >= nc_type_values[nctype].nc_type_min && d <= nc_type_values[nctype].nc_type_max); + if (!(d >= nc_type_values[nctype].nc_type_min && d <= nc_type_values[nctype].nc_type_max)) { + grib_context_log(ctx, GRIB_LOG_ERROR, "Scaling for type NC_SHORT failed"); + return; + } vscaled[i] = d; } } @@ -2665,7 +2671,10 @@ static void scale(double* vals, long n, void* data, dataset_t* g) for (i = 0; i < n; ++i) { if (!g->bitmap || (vals[i] != global_missing_value)) { double d = rint((vals[i] - add_offset) / scale_factor); - Assert(d >= nc_type_values[nctype].nc_type_min && d <= nc_type_values[nctype].nc_type_max); + if (!(d >= nc_type_values[nctype].nc_type_min && d <= nc_type_values[nctype].nc_type_max)) { + grib_context_log(ctx, GRIB_LOG_ERROR, "Scaling for type NC_INT failed"); + return; + } vscaled[i] = d; } } @@ -2677,7 +2686,10 @@ static void scale(double* vals, long n, void* data, dataset_t* g) for (i = 0; i < n; ++i) { if (!g->bitmap || (vals[i] != global_missing_value)) { double d = vals[i]; - Assert(d >= nc_type_values[nctype].nc_type_min && d <= nc_type_values[nctype].nc_type_max); + if (!(d >= nc_type_values[nctype].nc_type_min && d <= nc_type_values[nctype].nc_type_max)) { + grib_context_log(ctx, GRIB_LOG_ERROR, "Scaling for type NC_FLOAT failed"); + return; + } vscaled[i] = d; } } @@ -2689,7 +2701,10 @@ static void scale(double* vals, long n, void* data, dataset_t* g) for (i = 0; i < n; ++i) { if (!g->bitmap || (vals[i] != global_missing_value)) { double d = vals[i]; - Assert(d >= nc_type_values[nctype].nc_type_min && d <= nc_type_values[nctype].nc_type_max); + if(!(d >= nc_type_values[nctype].nc_type_min && d <= nc_type_values[nctype].nc_type_max)) { + grib_context_log(ctx, GRIB_LOG_ERROR, "Scaling for type NC_DOUBLE failed"); + return; + } vscaled[i] = d; } } From 862764654ac4e0ab025379c74f7b130ff624bb95 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 19 Jul 2023 12:52:03 +0000 Subject: [PATCH 022/372] Tools: Error handling (grid geometry) --- tools/grib_to_netcdf.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tools/grib_to_netcdf.cc b/tools/grib_to_netcdf.cc index 0e6212daa..a4c95f5ed 100644 --- a/tools/grib_to_netcdf.cc +++ b/tools/grib_to_netcdf.cc @@ -2332,7 +2332,10 @@ static int put_latlon(int ncid, fieldset* fs) grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: put_latlon: cannot get distinctLongitudes: %s", grib_get_error_message(e)); return e; } - Assert(n == ni); + if (n != ni) { + grib_context_log(ctx, GRIB_LOG_ERROR, "Number of distinctLongitudes is not the same as Ni (%zu!=%zu)",n,ni); + return GRIB_GEOCALCULUS_PROBLEM; + } for (i = 0; i < n; i++) { fvalues[i] = dvalues[i]; @@ -2349,8 +2352,10 @@ static int put_latlon(int ncid, fieldset* fs) grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: put_latlon: cannot get distinctLatitudes: %s", grib_get_error_message(e)); return e; } - - Assert(n == nj); + if (n != nj) { + grib_context_log(ctx, GRIB_LOG_ERROR, "Number of distinctLatitudes is not the same as Nj (%zu!=%zu)",n,nj); + return GRIB_GEOCALCULUS_PROBLEM; + } for (i = 0; i < n; i++) { fvalues[i] = dvalues[i]; @@ -3256,6 +3261,7 @@ static size_t string_to_unique_number(const char* axis, const char* str) } return result; } + static int fill_netcdf_dimensions(hypercube* h, fieldset* fs, int ncid) { const request* cube = h->cube; From e1576f3aa76088fe8afc077adeb5df71263803e8 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 19 Jul 2023 15:58:28 +0000 Subject: [PATCH 023/372] ECC-1642: Geoiterator: No error for badly encoded regular grids --- src/grib_iterator_class_regular.cc | 5 ++++ tests/grib_iterator.sh | 37 ++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/grib_iterator_class_regular.cc b/src/grib_iterator_class_regular.cc index cc870e70a..3a614a85b 100644 --- a/src/grib_iterator_class_regular.cc +++ b/src/grib_iterator_class_regular.cc @@ -177,6 +177,11 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) return GRIB_WRONG_GRID; } + if (Ni*Nj != iter->nv) { + grib_context_log(h->context, GRIB_LOG_ERROR, "Geoiterator: Ni*Nj!=numberOfDataPoints (%ld*%ld!=%zu)", Ni,Nj,iter->nv); + return GRIB_WRONG_GRID; + } + if ((ret = grib_get_long_internal(h, s_iScansNeg, &self->iScansNegatively))) return ret; diff --git a/tests/grib_iterator.sh b/tests/grib_iterator.sh index c8e0ffe78..1c63056cb 100755 --- a/tests/grib_iterator.sh +++ b/tests/grib_iterator.sh @@ -11,7 +11,8 @@ . ./include.ctest.sh label="grib_iterator_test" -temp=temp.$label.txt +tempText=temp.$label.txt +tempGrib=temp.$label.grib files="reduced_latlon_surface.grib1 \ reduced_gaussian_pressure_level.grib1 \ @@ -32,15 +33,37 @@ for f in $files; do [ $numberOfPoints = ${iterator_count} ] done -# ECC-822: Increase lat/lon decimals using default grib_get_data -${tools_dir}/grib_get_data -L%12.6f%11.5f ${data_dir}/regular_latlon_surface.grib2 -${tools_dir}/grib_get_data -p shortName,level ${data_dir}/regular_latlon_surface.grib2 > $temp -grep -q "Latitude Longitude Value shortName level" $temp +# ECC-822: Increase lat/lon decimals using default grib_get_data +${tools_dir}/grib_get_data -L%12.6f%11.5f ${data_dir}/regular_latlon_surface.grib2 > $tempText + +${tools_dir}/grib_get_data -p shortName,level ${data_dir}/regular_latlon_surface.grib2 > $tempText +grep -q "Latitude Longitude Value shortName level" $tempText + # Run on a spectral field - should just print out its values -${tools_dir}/grib_get_data "$samp_dir/sh_ml_grib2.tmpl" +${tools_dir}/grib_get_data "$samp_dir/sh_ml_grib2.tmpl" > $tempText + + +# ECC-1642: badly encoded regular grids +# ------------------------------------- +${tools_dir}/grib_set -s Ni=33 $samp_dir/GRIB2.tmpl $tempGrib +set +e +${tools_dir}/grib_get_data $tempGrib > $tempText 2>&1 +status=$? +set +e +[ $status -ne 0 ] +grep -q "Grid description is wrong or inconsistent" $tempText + + +${tools_dir}/grib_set -s Ni=MISSING $samp_dir/GRIB2.tmpl $tempGrib +set +e +${tools_dir}/grib_get_data $tempGrib > $tempText 2>&1 +status=$? +set +e +[ $status -ne 0 ] +grep -q "Grid description is wrong or inconsistent" $tempText # Clean up -rm -f $temp +rm -f $tempText $tempGrib From 326691082eb74a3e1d79695641b0f87ad5f85eb0 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 19 Jul 2023 18:17:59 +0100 Subject: [PATCH 024/372] LUMI: Add support for the Cray compiler on LUMI --- src/eccodes.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/eccodes.h b/src/eccodes.h index f0e670775..422c41539 100644 --- a/src/eccodes.h +++ b/src/eccodes.h @@ -18,12 +18,12 @@ #ifndef eccodes_H #define eccodes_H +#include "grib_api.h" + #ifdef __cplusplus extern "C" { #endif -#include "grib_api.h" - #define CODES_VERSION ECCODES_VERSION /* sections */ From 72f917077d113802b7d80721684551e02fb818cc Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 20 Jul 2023 12:34:52 +0000 Subject: [PATCH 025/372] Definitions: Remove unused key 'oneThousand' --- definitions/grib2/template.3.20.def | 1 - definitions/grib2/template.3.62.def | 2 -- definitions/grib3/template.3.20.def | 2 -- 3 files changed, 5 deletions(-) diff --git a/definitions/grib2/template.3.20.def b/definitions/grib2/template.3.20.def index fb16d1bfc..370ab6d2d 100644 --- a/definitions/grib2/template.3.20.def +++ b/definitions/grib2/template.3.20.def @@ -2,7 +2,6 @@ # TEMPLATE 3.20, Polar stereographic projection include "grib2/template.3.shape_of_the_earth.def"; -transient oneThousand=1000; # Nx - number of points along X-axis unsigned[4] Nx : dump; diff --git a/definitions/grib2/template.3.62.def b/definitions/grib2/template.3.62.def index 83e2690b5..e1d2407ce 100644 --- a/definitions/grib2/template.3.62.def +++ b/definitions/grib2/template.3.62.def @@ -9,8 +9,6 @@ include "grib2/template.3.bf.def" include "grib2/template.3.shape_of_the_earth.def"; -transient oneThousand=1000; - # La1 - latitude of first grid point signed[4] latitudeOfFirstGridPoint : edition_specific ; meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint,oneConstant,grib2divider,truncateDegrees) : dump; diff --git a/definitions/grib3/template.3.20.def b/definitions/grib3/template.3.20.def index 1495b6005..a18577d1d 100644 --- a/definitions/grib3/template.3.20.def +++ b/definitions/grib3/template.3.20.def @@ -1,10 +1,8 @@ # (C) Copyright 2005- ECMWF. - # START 2/template.3.20 ---------------------------------------------------------------------- # TEMPLATE 3.20, Polar stereographic projection include "grib3/template.3.shape_of_the_earth.def"; -transient oneThousand=1000; # Nx - number of points along X-axis unsigned[4] Nx : dump; From 87c768ff18d21c01720e0fca13d702da92d727e5 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 20 Jul 2023 12:35:18 +0000 Subject: [PATCH 026/372] Error handling: Memory leak --- src/grib_nearest.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/grib_nearest.cc b/src/grib_nearest.cc index 1bacbe767..feb895267 100644 --- a/src/grib_nearest.cc +++ b/src/grib_nearest.cc @@ -366,8 +366,10 @@ int grib_nearest_find_generic( return GRIB_OUT_OF_MEMORY; iter = grib_iterator_new(h, 0, &ret); - if (ret) + if (ret) { + free(neighbours); return ret; + } /* First pass: collect all latitudes and longitudes */ while (grib_iterator_next(iter, &lat, &lon, &the_value)) { ++the_index; From 31b3602d78e8fe19529eafbabdcb01c2c991ff19 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 20 Jul 2023 12:35:53 +0000 Subject: [PATCH 027/372] Use the angleSubdivisions key rather than edition --- src/grib_iterator_class_gaussian_reduced.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/grib_iterator_class_gaussian_reduced.cc b/src/grib_iterator_class_gaussian_reduced.cc index e48db0a68..30404b3d7 100644 --- a/src/grib_iterator_class_gaussian_reduced.cc +++ b/src/grib_iterator_class_gaussian_reduced.cc @@ -301,7 +301,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) long max_pl = 0; long nj = 0, order = 0, i; long row_count = 0; - long editionNumber = 0; + long angleSubdivisions = 0; grib_context* c = h->context; grib_iterator_gaussian_reduced* self = (grib_iterator_gaussian_reduced*)iter; const char* slat_first = grib_arguments_get_name(h, args, self->carg++); @@ -323,12 +323,16 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) if ((ret = grib_get_long_internal(h, sorder, &order)) != GRIB_SUCCESS) return ret; + if (order == 0) { + grib_context_log(h->context, GRIB_LOG_ERROR, "Invalid Gaussian grid: N cannot be 0!"); + return GRIB_WRONG_GRID; + } if ((ret = grib_get_long_internal(h, snj, &nj)) != GRIB_SUCCESS) return ret; - if (grib_get_long(h, "editionNumber", &editionNumber) == GRIB_SUCCESS) { - if (editionNumber == 1) - angular_precision = 1.0 / 1000; + if (grib_get_long(h, "angleSubdivisions", &angleSubdivisions) == GRIB_SUCCESS) { + Assert(angleSubdivisions > 0); + angular_precision = 1.0 / angleSubdivisions; } numlats = order * 2; From 6e216a4a1d6b5212a7001bce09439bf93e3f3990 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 20 Jul 2023 14:41:12 +0100 Subject: [PATCH 028/372] Use the angleSubdivisions key rather than edition --- ...b_accessor_class_number_of_points_gaussian.cc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/grib_accessor_class_number_of_points_gaussian.cc b/src/grib_accessor_class_number_of_points_gaussian.cc index 41d8971cb..5d952b937 100644 --- a/src/grib_accessor_class_number_of_points_gaussian.cc +++ b/src/grib_accessor_class_number_of_points_gaussian.cc @@ -250,7 +250,7 @@ static int unpack_long_new(grib_accessor* a, long* val, size_t* len) long row_count; long ilon_first = 0, ilon_last = 0; double angular_precision = 1.0 / 1000000.0; - long editionNumber = 0; + long angleSubdivisions = 0; grib_handle* h = grib_handle_of_accessor(a); grib_accessor_number_of_points_gaussian* self = (grib_accessor_number_of_points_gaussian*)a; @@ -268,9 +268,9 @@ static int unpack_long_new(grib_accessor* a, long* val, size_t* len) if (nj == 0) return GRIB_GEOCALCULUS_PROBLEM; - if (grib_get_long(h, "editionNumber", &editionNumber) == GRIB_SUCCESS) { - if (editionNumber == 1) - angular_precision = 1.0 / 1000; + if (grib_get_long(h, "angleSubdivisions", &angleSubdivisions) == GRIB_SUCCESS) { + Assert(angleSubdivisions > 0); + angular_precision = 1.0 / angleSubdivisions; } if (plpresent) { @@ -361,7 +361,7 @@ static int unpack_long_with_legacy_support(grib_accessor* a, long* val, size_t* long row_count; long ilon_first = 0, ilon_last = 0; double angular_precision = 1.0 / 1000000.0; - long editionNumber = 0; + long angleSubdivisions = 0; grib_handle* h = grib_handle_of_accessor(a); size_t numDataValues = 0; @@ -380,9 +380,9 @@ static int unpack_long_with_legacy_support(grib_accessor* a, long* val, size_t* if (nj == 0) return GRIB_GEOCALCULUS_PROBLEM; - if (grib_get_long(h, "editionNumber", &editionNumber) == GRIB_SUCCESS) { - if (editionNumber == 1) - angular_precision = 1.0 / 1000; + if (grib_get_long(h, "angleSubdivisions", &angleSubdivisions) == GRIB_SUCCESS) { + Assert(angleSubdivisions > 0); + angular_precision = 1.0 / angleSubdivisions; } if (plpresent) { From a9238c8af68b7017bbb8da97fdcc166728a0cbc8 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 21 Jul 2023 11:39:08 +0100 Subject: [PATCH 029/372] Cleanup --- src/grib_accessor_class_g2grid.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/grib_accessor_class_g2grid.cc b/src/grib_accessor_class_g2grid.cc index 94ddb31e4..40aaca628 100644 --- a/src/grib_accessor_class_g2grid.cc +++ b/src/grib_accessor_class_g2grid.cc @@ -142,6 +142,9 @@ static int value_count(grib_accessor* a, long* count) return 0; } +// GRIB edition 2 uses microdegrees +#define ANGLE_SUBDIVISIONS (1000 * 1000) + static int unpack_double(grib_accessor* a, double* val, size_t* len) { grib_accessor_g2grid* self = (grib_accessor_g2grid*)a; @@ -167,7 +170,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) if (sub_division == GRIB_MISSING_LONG || sub_division == 0) - sub_division = 1000000; + sub_division = ANGLE_SUBDIVISIONS; if (basic_angle == 0) basic_angle = 1; @@ -292,21 +295,21 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) /* printf("pack_double %g %g %g %g %g %g\n",val[0],val[1],val[2],val[3],val[4],val[5]);*/ - if (is_ok(val, v, 1, 1000000)) { + if (is_ok(val, v, 1, ANGLE_SUBDIVISIONS)) { basic_angle = 1; - sub_division = 1000000; + sub_division = ANGLE_SUBDIVISIONS; } else if (trial(val, v, &basic_angle, &sub_division)) { } else { basic_angle = 1; - sub_division = 1000000; + sub_division = ANGLE_SUBDIVISIONS; if (!is_ok(val, v, basic_angle, sub_division)) grib_context_log(a->context, GRIB_LOG_DEBUG, "Grid cannot be coded with any loss of precision"); } - if (basic_angle == 1 && sub_division == 1000000) { + if (basic_angle == 1 && sub_division == ANGLE_SUBDIVISIONS) { basic_angle = 0; sub_division = GRIB_MISSING_LONG; } From 4fab2f3380b9af972c00cb3ca1f06e9ce707dd58 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 21 Jul 2023 11:39:28 +0100 Subject: [PATCH 030/372] Definitions: Cleanup --- definitions/grib2/template.5.200.def | 12 ++++++------ definitions/grib2/template.5.40.def | 7 ++----- definitions/grib2/template.5.41.def | 2 +- definitions/grib2/template.5.61.def | 2 +- definitions/grib2/template.7.200.def | 2 +- 5 files changed, 11 insertions(+), 14 deletions(-) diff --git a/definitions/grib2/template.5.200.def b/definitions/grib2/template.5.200.def index b5771cfe1..2ceca0c69 100644 --- a/definitions/grib2/template.5.200.def +++ b/definitions/grib2/template.5.200.def @@ -1,11 +1,11 @@ # (C) Copyright 2005- ECMWF. -# Grid point data - Run length encoding +# TEMPLATE 5.200, Grid point data - Run length packing with level values -unsigned[1] bitsPerValue : dump; -unsigned[2] maxLevelValue : dump; -unsigned[2] numberOfLevelValues : dump; -unsigned[1] decimalScaleFactor : dump; +unsigned[1] bitsPerValue : dump; +unsigned[2] maxLevelValue : dump; +unsigned[2] numberOfLevelValues : dump; +unsigned[1] decimalScaleFactor : dump; level_value_list list(numberOfLevelValues) { - unsigned[2] levelValues : dump; + unsigned[2] levelValues : dump; } diff --git a/definitions/grib2/template.5.40.def b/definitions/grib2/template.5.40.def index 8340a0b3a..a6bf95337 100644 --- a/definitions/grib2/template.5.40.def +++ b/definitions/grib2/template.5.40.def @@ -1,15 +1,12 @@ # (C) Copyright 2005- ECMWF. -#Data Representation Template 5.40: Grid point data - JPEG 2000 Code Stream Format +# TEMPLATE 5.40, Grid point data - JPEG 2000 Code Stream Format include "grib2/template.5.packing.def"; include "grib2/template.5.original_values.def"; -# Octet 22 : Type of Compression used. (see Code Table 5.40) - codetable[1] typeOfCompressionUsed ('5.40.table',masterDir,localDir) ; # Octets 23 Target compression ratio, M:1 (with respect to the bit-depth specified in octet 20), -# when octet 22 indicates Lossy Compression. Otherwise, set to missing. (see Note 3) - +# when octet 22 indicates Lossy Compression. Otherwise, set to missing. unsigned[1] targetCompressionRatio = 255; diff --git a/definitions/grib2/template.5.41.def b/definitions/grib2/template.5.41.def index af95ab4de..bc3c621e8 100644 --- a/definitions/grib2/template.5.41.def +++ b/definitions/grib2/template.5.41.def @@ -1,6 +1,6 @@ # (C) Copyright 2005- ECMWF. -# Grid point data - PNG Code Stream Format SAME AS 5.40010 !!!!!! +# TEMPLATE 5.41, Grid point data - PNG Code Stream Format include "grib2/template.5.packing.def"; include "grib2/template.5.original_values.def"; diff --git a/definitions/grib2/template.5.61.def b/definitions/grib2/template.5.61.def index 9799fd5ad..1077f1f97 100644 --- a/definitions/grib2/template.5.61.def +++ b/definitions/grib2/template.5.61.def @@ -1,6 +1,6 @@ # (C) Copyright 2005- ECMWF. -# Grid point data - Simple packing with logarithmic preprocessing +# TEMPLATE 5.61, Grid point data - Simple packing with logarithmic preprocessing # Note from WMO document: # This template is experimental, was not validated at the time of publication and should be used only for bilateral previously agreed tests diff --git a/definitions/grib2/template.7.200.def b/definitions/grib2/template.7.200.def index c38ae31fc..3c738cacb 100644 --- a/definitions/grib2/template.7.200.def +++ b/definitions/grib2/template.7.200.def @@ -1,6 +1,6 @@ # (C) Copyright 2005- ECMWF. -# Grid point data - Run length encoding +# TEMPLATE 7.200, Grid point data – run length packing with level values meta codedValues data_run_length_packing( section7Length, From 57785f31844351c9686d3afdfe6017663401682e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 21 Jul 2023 11:57:48 +0100 Subject: [PATCH 031/372] ECC-1643: GRIB2: Remove experimental data section template 40010 --- definitions/grib2/tables/0/5.40000.table | 3 --- definitions/grib2/tables/1/5.40000.table | 3 --- definitions/grib2/tables/10/5.40000.table | 5 ----- definitions/grib2/tables/11/5.40000.table | 5 ----- definitions/grib2/tables/12/5.40000.table | 5 ----- definitions/grib2/tables/13/5.40000.table | 5 ----- definitions/grib2/tables/14/5.40000.table | 5 ----- definitions/grib2/tables/15/5.40000.table | 5 ----- definitions/grib2/tables/16/5.40000.table | 5 ----- definitions/grib2/tables/17/5.40000.table | 5 ----- definitions/grib2/tables/18/5.40000.table | 5 ----- definitions/grib2/tables/19/5.40000.table | 5 ----- definitions/grib2/tables/2/5.40000.table | 5 ----- definitions/grib2/tables/20/5.40000.table | 5 ----- definitions/grib2/tables/21/5.40000.table | 5 ----- definitions/grib2/tables/22/5.40000.table | 5 ----- definitions/grib2/tables/23/5.40000.table | 5 ----- definitions/grib2/tables/24/5.40000.table | 5 ----- definitions/grib2/tables/25/5.40000.table | 5 ----- definitions/grib2/tables/3/5.40000.table | 5 ----- definitions/grib2/tables/4/5.40000.table | 5 ----- definitions/grib2/tables/5/5.40000.table | 5 ----- definitions/grib2/tables/6/5.40000.table | 5 ----- definitions/grib2/tables/7/5.40000.table | 5 ----- definitions/grib2/tables/8/5.40000.table | 5 ----- definitions/grib2/tables/9/5.40000.table | 5 ----- definitions/grib2/template.5.40010.def | 3 --- definitions/grib2/template.7.40010.def | 3 --- 28 files changed, 132 deletions(-) delete mode 100644 definitions/grib2/tables/0/5.40000.table delete mode 100644 definitions/grib2/tables/1/5.40000.table delete mode 100644 definitions/grib2/tables/10/5.40000.table delete mode 100644 definitions/grib2/tables/11/5.40000.table delete mode 100644 definitions/grib2/tables/12/5.40000.table delete mode 100644 definitions/grib2/tables/13/5.40000.table delete mode 100644 definitions/grib2/tables/14/5.40000.table delete mode 100644 definitions/grib2/tables/15/5.40000.table delete mode 100644 definitions/grib2/tables/16/5.40000.table delete mode 100644 definitions/grib2/tables/17/5.40000.table delete mode 100644 definitions/grib2/tables/18/5.40000.table delete mode 100644 definitions/grib2/tables/19/5.40000.table delete mode 100644 definitions/grib2/tables/2/5.40000.table delete mode 100644 definitions/grib2/tables/20/5.40000.table delete mode 100644 definitions/grib2/tables/21/5.40000.table delete mode 100644 definitions/grib2/tables/22/5.40000.table delete mode 100644 definitions/grib2/tables/23/5.40000.table delete mode 100644 definitions/grib2/tables/24/5.40000.table delete mode 100644 definitions/grib2/tables/25/5.40000.table delete mode 100644 definitions/grib2/tables/3/5.40000.table delete mode 100644 definitions/grib2/tables/4/5.40000.table delete mode 100644 definitions/grib2/tables/5/5.40000.table delete mode 100644 definitions/grib2/tables/6/5.40000.table delete mode 100644 definitions/grib2/tables/7/5.40000.table delete mode 100644 definitions/grib2/tables/8/5.40000.table delete mode 100644 definitions/grib2/tables/9/5.40000.table delete mode 100644 definitions/grib2/template.5.40010.def delete mode 100644 definitions/grib2/template.7.40010.def diff --git a/definitions/grib2/tables/0/5.40000.table b/definitions/grib2/tables/0/5.40000.table deleted file mode 100644 index 1a43b2d6c..000000000 --- a/definitions/grib2/tables/0/5.40000.table +++ /dev/null @@ -1,3 +0,0 @@ -0 0 Lossless -1 1 Lossy -255 255 Missing diff --git a/definitions/grib2/tables/1/5.40000.table b/definitions/grib2/tables/1/5.40000.table deleted file mode 100644 index 1a43b2d6c..000000000 --- a/definitions/grib2/tables/1/5.40000.table +++ /dev/null @@ -1,3 +0,0 @@ -0 0 Lossless -1 1 Lossy -255 255 Missing diff --git a/definitions/grib2/tables/10/5.40000.table b/definitions/grib2/tables/10/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/10/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/11/5.40000.table b/definitions/grib2/tables/11/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/11/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/12/5.40000.table b/definitions/grib2/tables/12/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/12/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/13/5.40000.table b/definitions/grib2/tables/13/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/13/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/14/5.40000.table b/definitions/grib2/tables/14/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/14/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/15/5.40000.table b/definitions/grib2/tables/15/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/15/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/16/5.40000.table b/definitions/grib2/tables/16/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/16/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/17/5.40000.table b/definitions/grib2/tables/17/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/17/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/18/5.40000.table b/definitions/grib2/tables/18/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/18/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/19/5.40000.table b/definitions/grib2/tables/19/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/19/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/2/5.40000.table b/definitions/grib2/tables/2/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/2/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/20/5.40000.table b/definitions/grib2/tables/20/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/20/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/21/5.40000.table b/definitions/grib2/tables/21/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/21/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/22/5.40000.table b/definitions/grib2/tables/22/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/22/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/23/5.40000.table b/definitions/grib2/tables/23/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/23/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/24/5.40000.table b/definitions/grib2/tables/24/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/24/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/25/5.40000.table b/definitions/grib2/tables/25/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/25/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/3/5.40000.table b/definitions/grib2/tables/3/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/3/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/4/5.40000.table b/definitions/grib2/tables/4/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/4/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/5/5.40000.table b/definitions/grib2/tables/5/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/5/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/6/5.40000.table b/definitions/grib2/tables/6/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/6/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/7/5.40000.table b/definitions/grib2/tables/7/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/7/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/8/5.40000.table b/definitions/grib2/tables/8/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/8/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/tables/9/5.40000.table b/definitions/grib2/tables/9/5.40000.table deleted file mode 100644 index 1eef7c763..000000000 --- a/definitions/grib2/tables/9/5.40000.table +++ /dev/null @@ -1,5 +0,0 @@ -# Code Table 5.40: Type of Compression -0 0 Lossless -1 1 Lossy -#2-254 Reserved -255 255 Missing diff --git a/definitions/grib2/template.5.40010.def b/definitions/grib2/template.5.40010.def deleted file mode 100644 index a761bf1d0..000000000 --- a/definitions/grib2/template.5.40010.def +++ /dev/null @@ -1,3 +0,0 @@ -# (C) Copyright 2005- ECMWF. - -include "grib2/template.5.41.def" diff --git a/definitions/grib2/template.7.40010.def b/definitions/grib2/template.7.40010.def deleted file mode 100644 index 96e332cd6..000000000 --- a/definitions/grib2/template.7.40010.def +++ /dev/null @@ -1,3 +0,0 @@ -# (C) Copyright 2005- ECMWF. - -include "grib2/template.7.41.def" From 2a8bf2b2335d1603ca0a93f09b9d85998767e16a Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 21 Jul 2023 14:29:47 +0100 Subject: [PATCH 032/372] Testing: BUFR operator 203YYY --- tests/bufr_ecc-680.sh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/bufr_ecc-680.sh b/tests/bufr_ecc-680.sh index a2abc6f05..d06f56759 100755 --- a/tests/bufr_ecc-680.sh +++ b/tests/bufr_ecc-680.sh @@ -59,5 +59,22 @@ val=`${tools_dir}/bufr_get -s unpack=1 -p heightOfStationGroundAboveMeanSeaLevel val=`${tools_dir}/bufr_get -s unpack=1 -p heightOfBarometerAboveMeanSeaLevel $tempBufr` [ "$val" = "-417" ] +# Add another instance but outside the 203YYY block. Should fail +# -------------------------------------------------------------- +cat > $tempFilt <$tempText +status=$? +[ $status -ne 0 ] +set -e +fgrep -q "Value (-416) out of range" $tempText +# Clean up rm -f $tempBufr $tempFilt $tempText From d476cb7171fcca7015fb60c1093833ab9f00605e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 21 Jul 2023 15:56:25 +0100 Subject: [PATCH 033/372] Testing: Split long tests --- tests/CMakeLists.txt | 2 ++ tests/bufr_ecc-147.sh | 42 ++++++++++++++++++++++++++ tests/bufr_ecc-389.sh | 47 +++++++++++++++++++++++++++++ tests/bufr_filter_misc.sh | 62 +-------------------------------------- 4 files changed, 92 insertions(+), 61 deletions(-) create mode 100755 tests/bufr_ecc-147.sh create mode 100755 tests/bufr_ecc-389.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 7de14c053..7c9ccc23f 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -181,6 +181,8 @@ if( HAVE_BUILD_TOOLS ) bufr_wmo_tables bufr_extract_headers extract_offsets + bufr_ecc-147 + bufr_ecc-389 bufr_ecc-673 bufr_ecc-428 bufr_ecc-286 diff --git a/tests/bufr_ecc-147.sh b/tests/bufr_ecc-147.sh new file mode 100755 index 000000000..06514f151 --- /dev/null +++ b/tests/bufr_ecc-147.sh @@ -0,0 +1,42 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +# Define a common label for all the tmp files +label="bufr_ecc-147_test" + +tempBufr=temp.$label.bufr +tempFilt=temp.$label.filt + +cat > $tempFilt < $tempFilt < $tempFilt < $tempOut + +cat > $tempRef <> $fLog 1>> $fLog ${tools_dir}/bufr_compare $fout ${fout}.ref #2>> $fLog 1>> $fLog +rm -f $fout -#----------------------------------------------------------- -# ECC-147 -#----------------------------------------------------------- -cat > $fRules < $fRules <> $fLog -echo "file: $f" >> $fLog - -${tools_dir}/codes_bufr_filter -o ${f}.out $fRules $f - -cat > $fRules < ${f}.log - -cat > ${f}.log.ref < Date: Fri, 21 Jul 2023 16:56:57 +0100 Subject: [PATCH 034/372] Testing: Split long tests --- tests/CMakeLists.txt | 1 + tests/bufr_filter_misc.sh | 82 ----------------------------- tests/bufr_operators.sh | 106 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+), 82 deletions(-) create mode 100755 tests/bufr_operators.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 7c9ccc23f..baeda6ef4 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -126,6 +126,7 @@ if( HAVE_BUILD_TOOLS ) bufr_ecc-359 bufr_ecc-517 bufr_rdbSubTypes + bufr_operators grib_efas grib_sh_imag grib_spectral diff --git a/tests/bufr_filter_misc.sh b/tests/bufr_filter_misc.sh index 495184149..de6c6d527 100755 --- a/tests/bufr_filter_misc.sh +++ b/tests/bufr_filter_misc.sh @@ -1255,43 +1255,6 @@ diff ${f}.log.ref ${f}.log rm -f ${f}.log ${f}.log.ref ${f}.out $fLog $fRules -#----------------------------------------------------------- -# Test: change width using operator 201YYY -#----------------------------------------------------------- -HIGH_TEMPERATURE=10000 -cat > $fRules < $fRules <width]"; - write; -EOF -${tools_dir}/codes_bufr_filter -o ${f}.out $fRules $f > ${f}.log - -cat > ${f}.log.ref < $fRules < $f.log - -cat > $f.log.ref < $fRules < $tempFilt </dev/null +status=$? +set -e +[ $status -ne 0 ] + +# Now change the width of airTemperature to allow high value +cat > $tempFilt <width]"; + write; +EOF +${tools_dir}/codes_bufr_filter -o $tempBufr $tempFilt $input > $tempLog + +cat > $tempRef < $tempFilt < $tempLog + +cat > $tempRef < $tempFilt < Date: Fri, 21 Jul 2023 17:15:22 +0100 Subject: [PATCH 035/372] Testing: Fix broken test --- tests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index baeda6ef4..b7ac704ad 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -126,7 +126,6 @@ if( HAVE_BUILD_TOOLS ) bufr_ecc-359 bufr_ecc-517 bufr_rdbSubTypes - bufr_operators grib_efas grib_sh_imag grib_spectral @@ -164,6 +163,7 @@ if( HAVE_BUILD_TOOLS ) bufr_copy bufr_count bufr_get + bufr_operators bufr_filter_misc bufr_filter_extract_subsets bufr_filter_extract_datetime From a268c22dfc5e671bf0a220d76b998829339e78b7 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 14 Jul 2023 16:43:31 +0100 Subject: [PATCH 036/372] Single precision: codes_get_float implementation --- src/eccodes.cc | 4 ++++ src/eccodes.h | 1 + src/grib_api.h | 1 + src/grib_value.cc | 23 +++++++++++++++++++++++ 4 files changed, 29 insertions(+) diff --git a/src/eccodes.cc b/src/eccodes.cc index a7984b396..70264eb10 100644 --- a/src/eccodes.cc +++ b/src/eccodes.cc @@ -337,6 +337,10 @@ int codes_get_double(const grib_handle* h, const char* key, double* value) { return grib_get_double(h, key, value); } +int codes_get_float(const grib_handle* h, const char* key, float* value) +{ + return grib_get_float(h, key, value); +} int codes_get_double_element(const grib_handle* h, const char* key, int i, double* value) { diff --git a/src/eccodes.h b/src/eccodes.h index 422c41539..c1b314671 100644 --- a/src/eccodes.h +++ b/src/eccodes.h @@ -775,6 +775,7 @@ int codes_get_long(const codes_handle* h, const char* key, long* value); * @return 0 if OK, integer value on error */ int codes_get_double(const codes_handle* h, const char* key, double* value); +int codes_get_float(const codes_handle* h, const char* key, float* value); /** * Get as double the i-th element of the "key" array diff --git a/src/grib_api.h b/src/grib_api.h index 718a1bb57..efc21dd79 100644 --- a/src/grib_api.h +++ b/src/grib_api.h @@ -783,6 +783,7 @@ int grib_get_long(const grib_handle* h, const char* key, long* value); * @return 0 if OK, integer value on error */ int grib_get_double(const grib_handle* h, const char* key, double* value); +int grib_get_float(const grib_handle* h, const char* key, float* value); /** * Get as double the i-th element of the "key" array diff --git a/src/grib_value.cc b/src/grib_value.cc index facb6e8a4..aeb07fcd6 100644 --- a/src/grib_value.cc +++ b/src/grib_value.cc @@ -1055,6 +1055,29 @@ int grib_get_double(const grib_handle* h, const char* name, double* val) return ret; } +int grib_get_float(const grib_handle* h, const char* name, float* val) +{ + size_t length = 1; + grib_accessor* a = NULL; + grib_accessors_list* al = NULL; + int ret = 0; + + if (name[0] == '/') { + al = grib_find_accessors_list(h, name); + if (!al) + return GRIB_NOT_FOUND; + ret = grib_unpack_float(al->accessor, val, &length); + grib_context_free(h->context, al); + } + else { + a = grib_find_accessor(h, name); + if (!a) + return GRIB_NOT_FOUND; + ret = grib_unpack_float(a, val, &length); + } + return ret; +} + int grib_get_double_element_internal(grib_handle* h, const char* name, int i, double* val) { int ret = grib_get_double_element(h, name, i, val); From 7d50127760da3f86243e1da0d1ab9f14b1f2b660 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 14 Jul 2023 18:55:32 +0100 Subject: [PATCH 037/372] Single precision: codes_get_float implementation --- src/grib_accessor_class_variable.cc | 47 ++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/src/grib_accessor_class_variable.cc b/src/grib_accessor_class_variable.cc index 60f97dfe6..d40f044b3 100644 --- a/src/grib_accessor_class_variable.cc +++ b/src/grib_accessor_class_variable.cc @@ -17,11 +17,13 @@ CLASS = accessor SUPER = grib_accessor_class_gen IMPLEMENTS = unpack_double;pack_double + IMPLEMENTS = unpack_float; pack_float IMPLEMENTS = unpack_string;pack_string;string_length IMPLEMENTS = unpack_long;pack_long;destroy;byte_count IMPLEMENTS = init;dump;value_count;get_native_type IMPLEMENTS = compare; make_clone MEMBERS=double dval + MEMBERS=float fval MEMBERS=char* cval MEMBERS=char* cname MEMBERS=int type @@ -41,9 +43,11 @@ or edit "accessor.class" and rerun ./make_class.pl static int get_native_type(grib_accessor*); static int pack_double(grib_accessor*, const double* val, size_t* len); +static int pack_float(grib_accessor*, const float* val, size_t* len); static int pack_long(grib_accessor*, const long* val, size_t* len); static int pack_string(grib_accessor*, const char*, size_t* len); static int unpack_double(grib_accessor*, double* val, size_t* len); +static int unpack_float(grib_accessor*, float* val, size_t* len); static int unpack_long(grib_accessor*, long* val, size_t* len); static int unpack_string(grib_accessor*, char*, size_t* len); static size_t string_length(grib_accessor*); @@ -61,6 +65,7 @@ typedef struct grib_accessor_variable /* Members defined in gen */ /* Members defined in variable */ double dval; + float fval; char* cval; char* cname; int type; @@ -90,9 +95,9 @@ static grib_accessor_class _grib_accessor_class_variable = { &pack_long, /* pack_long */ &unpack_long, /* unpack_long */ &pack_double, /* pack_double */ - 0, /* pack_float */ + &pack_float, /* pack_float */ &unpack_double, /* unpack_double */ - 0, /* unpack_float */ + &unpack_float, /* unpack_float */ &pack_string, /* pack_string */ &unpack_string, /* unpack_string */ 0, /* pack_string_array */ @@ -197,7 +202,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) const double dval = *val; if (*len != 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name, 1); + grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values", a->name, 1); *len = 1; return GRIB_ARRAY_TOO_SMALL; } @@ -211,6 +216,26 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) return GRIB_SUCCESS; } +static int pack_float(grib_accessor* a, const float* val, size_t* len) +{ + grib_accessor_variable* self = (grib_accessor_variable*)a; + const double fval = *val; + + if (*len != 1) { + grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values", a->name, 1); + *len = 1; + return GRIB_ARRAY_TOO_SMALL; + } + + self->fval = fval; + if (fval < (float)LONG_MIN || fval > (float)LONG_MAX) + self->type = GRIB_TYPE_DOUBLE; + else + self->type = ((long)fval == fval) ? GRIB_TYPE_LONG : GRIB_TYPE_DOUBLE; + + return GRIB_SUCCESS; +} + static int pack_long(grib_accessor* a, const long* val, size_t* len) { grib_accessor_variable* self = (grib_accessor_variable*)a; @@ -232,7 +257,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) grib_accessor_variable* self = (grib_accessor_variable*)a; if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name, 1); + grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values", a->name, 1); *len = 0; return GRIB_ARRAY_TOO_SMALL; } @@ -241,6 +266,20 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) return GRIB_SUCCESS; } +static int unpack_float(grib_accessor* a, float* val, size_t* len) +{ + grib_accessor_variable* self = (grib_accessor_variable*)a; + + if (*len < 1) { + grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values", a->name, 1); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + *val = self->fval; + *len = 1; + return GRIB_SUCCESS; +} + static int unpack_long(grib_accessor* a, long* val, size_t* len) { grib_accessor_variable* self = (grib_accessor_variable*)a; From 3cd9b6a378b97e207b8c6137de97c6b23be47f6f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 14 Jul 2023 21:58:50 +0100 Subject: [PATCH 038/372] Single precision: codes_get_float implementation --- src/grib_accessor_class_bufr_group.cc | 1 + src/grib_accessor_class_constant.cc | 1 + src/grib_accessor_class_transient.cc | 1 + src/grib_accessor_class_variable.cc | 3 +++ 4 files changed, 6 insertions(+) diff --git a/src/grib_accessor_class_bufr_group.cc b/src/grib_accessor_class_bufr_group.cc index 3f7aa745c..9af0a5633 100644 --- a/src/grib_accessor_class_bufr_group.cc +++ b/src/grib_accessor_class_bufr_group.cc @@ -40,6 +40,7 @@ typedef struct grib_accessor_bufr_group /* Members defined in gen */ /* Members defined in variable */ double dval; + float fval; char* cval; char* cname; int type; diff --git a/src/grib_accessor_class_constant.cc b/src/grib_accessor_class_constant.cc index 0c98a2d4d..0d48cddcf 100644 --- a/src/grib_accessor_class_constant.cc +++ b/src/grib_accessor_class_constant.cc @@ -47,6 +47,7 @@ typedef struct grib_accessor_constant /* Members defined in gen */ /* Members defined in variable */ double dval; + float fval; char* cval; char* cname; int type; diff --git a/src/grib_accessor_class_transient.cc b/src/grib_accessor_class_transient.cc index 3e998adcb..c51886c20 100644 --- a/src/grib_accessor_class_transient.cc +++ b/src/grib_accessor_class_transient.cc @@ -37,6 +37,7 @@ typedef struct grib_accessor_transient /* Members defined in gen */ /* Members defined in variable */ double dval; + float fval; char* cval; char* cname; int type; diff --git a/src/grib_accessor_class_variable.cc b/src/grib_accessor_class_variable.cc index d40f044b3..745b12e14 100644 --- a/src/grib_accessor_class_variable.cc +++ b/src/grib_accessor_class_variable.cc @@ -247,6 +247,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) } self->dval = *val; + self->fval = *val; self->type = GRIB_TYPE_LONG; return GRIB_SUCCESS; @@ -354,6 +355,7 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) grib_context_free(c, self->cval); self->cval = grib_context_strdup(c, val); self->dval = atof(val); + self->fval = atof(val); self->type = GRIB_TYPE_STRING; self->cname = NULL; return GRIB_SUCCESS; @@ -447,6 +449,7 @@ static grib_accessor* make_clone(grib_accessor* a, grib_section* s, int* err) } else { variableAccessor->dval = self->dval; + variableAccessor->fval = self->fval; } return the_clone; From 958efbe33dcc9d123e4f871217c50f0d2bf8a7b2 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 22 Jul 2023 21:58:35 +0100 Subject: [PATCH 039/372] Testing: MARS keys --- tests/CMakeLists.txt | 3 +- .../{grib_mars_keys.sh => grib_mars_keys1.sh} | 2 +- tests/grib_mars_keys2.sh | 32 +++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) rename tests/{grib_mars_keys.sh => grib_mars_keys1.sh} (99%) create mode 100755 tests/grib_mars_keys2.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b7ac704ad..ef07dbd64 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -288,7 +288,8 @@ if( HAVE_BUILD_TOOLS ) grib_local_NCEP grib_neg_fctime codes_split_file - grib_mars_keys) + grib_mars_keys1 + grib_mars_keys2) if( HAVE_AEC AND ENABLE_EXTRA_TESTS ) list(APPEND tests_extra grib_ecc-1431) diff --git a/tests/grib_mars_keys.sh b/tests/grib_mars_keys1.sh similarity index 99% rename from tests/grib_mars_keys.sh rename to tests/grib_mars_keys1.sh index 5188d83b1..b1be74ea9 100755 --- a/tests/grib_mars_keys.sh +++ b/tests/grib_mars_keys1.sh @@ -10,7 +10,7 @@ . ./include.ctest.sh -label="grib_mars_keys_test" +label="grib_mars_keys1_test" tempOut=temp.${label}.out tempGrib=temp.${label}.grib tempRef=temp.${label}.ref diff --git a/tests/grib_mars_keys2.sh b/tests/grib_mars_keys2.sh new file mode 100755 index 000000000..b01a0e774 --- /dev/null +++ b/tests/grib_mars_keys2.sh @@ -0,0 +1,32 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +label="grib_mars_keys2_test" +tempGrib=temp.${label}.grib + +grib2_sample=$ECCODES_SAMPLES_PATH/reduced_gg_pl_32_grib2.tmpl + +# Check all combinations +# ------------------------ +for cfg in $ECCODES_DEFINITION_PATH/mars/grib.*.def; do + b=$(basename $cfg) + num=$(echo $b | awk -F. '{print NF}') + if [ $num -eq 4 ]; then + # Each file should be of the form grib.$stream.$type.def + stream=$(echo $b | awk -F. '{print $2}') + type=$(echo $b | awk -F. '{print $3}') + ${tools_dir}/grib_set -s stream=$stream,type=$type $grib2_sample $tempGrib + ${tools_dir}/grib_ls -m $tempGrib + fi +done + +rm -f $tempGrib From 6d80cc9f2a698029a8874f915879d0638861fb46 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 23 Jul 2023 16:50:34 +0100 Subject: [PATCH 040/372] Remove unused functions --- src/eccodes_prototypes.h | 2 -- src/grib_vdarray.cc | 22 +++++++++++----------- src/grib_vsarray.cc | 22 +++++++++++----------- 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 76960b58e..7748f6601 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -249,7 +249,6 @@ grib_vdarray* grib_vdarray_new(grib_context* c, size_t size, size_t incsize); grib_vdarray* grib_vdarray_push(grib_context* c, grib_vdarray* v, grib_darray* val); void grib_vdarray_delete(grib_context* c, grib_vdarray* v); void grib_vdarray_delete_content(grib_context* c, grib_vdarray* v); -grib_darray** grib_vdarray_get_array(grib_context* c, grib_vdarray* v); size_t grib_vdarray_used_size(grib_vdarray* v); /* grib_vsarray.cc*/ @@ -258,7 +257,6 @@ grib_vsarray* grib_vsarray_new(grib_context* c, size_t size, size_t incsize); grib_vsarray* grib_vsarray_push(grib_context* c, grib_vsarray* v, grib_sarray* val); void grib_vsarray_delete(grib_context* c, grib_vsarray* v); void grib_vsarray_delete_content(grib_context* c, grib_vsarray* v); -grib_sarray** grib_vsarray_get_array(grib_context* c, grib_vsarray* v); size_t grib_vsarray_used_size(grib_vsarray* v); /* grib_viarray.cc*/ diff --git a/src/grib_vdarray.cc b/src/grib_vdarray.cc index 3510bf77c..9aadbf455 100644 --- a/src/grib_vdarray.cc +++ b/src/grib_vdarray.cc @@ -111,17 +111,17 @@ void grib_vdarray_delete_content(grib_context* c, grib_vdarray* v) v->n = 0; } -grib_darray** grib_vdarray_get_array(grib_context* c, grib_vdarray* v) -{ - grib_darray** ret; - size_t i = 0; - if (!v) - return NULL; - ret = (grib_darray**)grib_context_malloc_clear(c, sizeof(grib_darray*) * v->n); - for (i = 0; i < v->n; i++) - ret[i] = v->v[i]; - return ret; -} +// grib_darray** grib_vdarray_get_array(grib_context* c, grib_vdarray* v) +// { +// grib_darray** ret; +// size_t i = 0; +// if (!v) +// return NULL; +// ret = (grib_darray**)grib_context_malloc_clear(c, sizeof(grib_darray*) * v->n); +// for (i = 0; i < v->n; i++) +// ret[i] = v->v[i]; +// return ret; +// } size_t grib_vdarray_used_size(grib_vdarray* v) { diff --git a/src/grib_vsarray.cc b/src/grib_vsarray.cc index 025e9c6de..9f1d1bb3f 100644 --- a/src/grib_vsarray.cc +++ b/src/grib_vsarray.cc @@ -114,17 +114,17 @@ void grib_vsarray_delete_content(grib_context* c, grib_vsarray* v) v->n = 0; } -grib_sarray** grib_vsarray_get_array(grib_context* c, grib_vsarray* v) -{ - grib_sarray** ret; - size_t i = 0; - if (!v) - return NULL; - ret = (grib_sarray**)grib_context_malloc_clear(c, sizeof(grib_sarray*) * v->n); - for (i = 0; i < v->n; i++) - ret[i] = v->v[i]; - return ret; -} +// grib_sarray** grib_vsarray_get_array(grib_context* c, grib_vsarray* v) +// { +// grib_sarray** ret; +// size_t i = 0; +// if (!v) +// return NULL; +// ret = (grib_sarray**)grib_context_malloc_clear(c, sizeof(grib_sarray*) * v->n); +// for (i = 0; i < v->n; i++) +// ret[i] = v->v[i]; +// return ret; +// } size_t grib_vsarray_used_size(grib_vsarray* v) { From 3a5bc4985be6e5b624c0557f0825dd148d25c5e2 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 23 Jul 2023 16:50:53 +0100 Subject: [PATCH 041/372] Testing: Cleanup --- tests/grib_double_cmp.cc | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/tests/grib_double_cmp.cc b/tests/grib_double_cmp.cc index 26a5e93d7..e1bd045d7 100644 --- a/tests/grib_double_cmp.cc +++ b/tests/grib_double_cmp.cc @@ -10,18 +10,14 @@ /* * Description: compare values retrieved with grib_get_double_array and - * grib_get_double_element + * grib_get_double_element * * Author: Cristian D. Codorean * */ -#include "grib_api.h" - -static void usage(const char* prog) -{ - printf("usage: %s filename\n", prog); - exit(1); -} +#include "grib_api_internal.h" +#undef NDEBUG +#include int main(int argc, char** argv) { @@ -34,14 +30,11 @@ int main(int argc, char** argv) char* filename = NULL; grib_handle* h = NULL; - if (argc < 2) usage(argv[0]); + assert(argc == 2); filename = argv[1]; in = fopen(filename, "rb"); - if (!in) { - printf("ERROR: unable to open file %s\n", filename); - return 1; - } + assert(in); /* create new handle from a message in a file*/ h = grib_handle_new_from_file(0, in, &err); From b5a0d2d452e49397da0b5bfb3a7b5e19faf8cd92 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 23 Jul 2023 17:13:44 +0100 Subject: [PATCH 042/372] Remove unused functions --- src/eccodes_prototypes.h | 1 - src/grib_accessor.cc | 54 ++++++++++++++++++++-------------------- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 7748f6601..1ec90f91d 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -154,7 +154,6 @@ int grib_nearest_smaller_value(grib_accessor* a, double val, double* nearest); size_t grib_preferred_size(grib_accessor* a, int from_handle); grib_accessor* grib_next_accessor(grib_accessor* a); void grib_resize(grib_accessor* a, size_t new_size); -int grib_compare_accessors(grib_accessor* a1, grib_accessor* a2, int compare_flags); int grib_accessor_add_attribute(grib_accessor* a, grib_accessor* attr, int nest_if_clash); int grib_accessor_replace_attribute(grib_accessor* a, grib_accessor* attr); int grib_accessor_delete_attribute(grib_accessor* a, const char* name); diff --git a/src/grib_accessor.cc b/src/grib_accessor.cc index 673eb2dcd..90066e00c 100644 --- a/src/grib_accessor.cc +++ b/src/grib_accessor.cc @@ -652,39 +652,39 @@ void grib_resize(grib_accessor* a, size_t new_size) return; } -int grib_compare_accessors(grib_accessor* a1, grib_accessor* a2, int compare_flags) -{ - int ret = 0; - long type1 = 0; - long type2 = 0; - int type_mismatch = 0; - grib_accessor_class* c1 = NULL; +// int grib_compare_accessors(grib_accessor* a1, grib_accessor* a2, int compare_flags) +// { +// int ret = 0; +// long type1 = 0; +// long type2 = 0; +// int type_mismatch = 0; +// grib_accessor_class* c1 = NULL; - if ((compare_flags & GRIB_COMPARE_NAMES) && grib_inline_strcmp(a1->name, a2->name)) - return GRIB_NAME_MISMATCH; +// if ((compare_flags & GRIB_COMPARE_NAMES) && grib_inline_strcmp(a1->name, a2->name)) +// return GRIB_NAME_MISMATCH; - if (compare_flags & GRIB_COMPARE_TYPES) { - type1 = grib_accessor_get_native_type(a1); - type2 = grib_accessor_get_native_type(a2); +// if (compare_flags & GRIB_COMPARE_TYPES) { +// type1 = grib_accessor_get_native_type(a1); +// type2 = grib_accessor_get_native_type(a2); - type_mismatch = type1 != type2 ? 1 : 0; - } +// type_mismatch = type1 != type2 ? 1 : 0; +// } - ret = GRIB_UNABLE_TO_COMPARE_ACCESSORS; - c1 = a1->cclass; - while (c1) { - if (c1->compare) { - ret = c1->compare(a1, a2); - break; - } - c1 = c1->super ? *(c1->super) : NULL; - } +// ret = GRIB_UNABLE_TO_COMPARE_ACCESSORS; +// c1 = a1->cclass; +// while (c1) { +// if (c1->compare) { +// ret = c1->compare(a1, a2); +// break; +// } +// c1 = c1->super ? *(c1->super) : NULL; +// } - if (ret == GRIB_VALUE_MISMATCH && type_mismatch) - ret = GRIB_TYPE_AND_VALUE_MISMATCH; +// if (ret == GRIB_VALUE_MISMATCH && type_mismatch) +// ret = GRIB_TYPE_AND_VALUE_MISMATCH; - return ret; -} +// return ret; +// } /* int grib_accessor_clear_attributes(grib_accessor* a) From 41a9ebc44c71a99b7d3b94db61de3d9a6a1827c5 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 23 Jul 2023 17:14:42 +0100 Subject: [PATCH 043/372] Testing: Ascii keys encoding --- src/grib_accessor_class_ascii.cc | 4 ++-- tests/grib_set.sh | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/grib_accessor_class_ascii.cc b/src/grib_accessor_class_ascii.cc index e2901d2d7..24856f3d5 100644 --- a/src/grib_accessor_class_ascii.cc +++ b/src/grib_accessor_class_ascii.cc @@ -185,13 +185,13 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) static int pack_long(grib_accessor* a, const long* v, size_t* len) { - grib_context_log(a->context, GRIB_LOG_ERROR, " Should not pack %s as long", a->name); + grib_context_log(a->context, GRIB_LOG_ERROR, "Should not pack %s as long (It's a string)", a->name); return GRIB_NOT_IMPLEMENTED; } static int pack_double(grib_accessor* a, const double* v, size_t* len) { - grib_context_log(a->context, GRIB_LOG_ERROR, " Should not pack %s as double", a->name); + grib_context_log(a->context, GRIB_LOG_ERROR, "Should not pack %s as double (It's a string)", a->name); return GRIB_NOT_IMPLEMENTED; } diff --git a/tests/grib_set.sh b/tests/grib_set.sh index 9d35ad349..4268158dd 100755 --- a/tests/grib_set.sh +++ b/tests/grib_set.sh @@ -154,6 +154,23 @@ set -e grep -q "String cannot be converted to a double" $temp +# Set ascii key via double or long +# -------------------------------- +${tools_dir}/grib_set -s setLocalDefinition=1,localDefinitionNumber=21 $ECCODES_SAMPLES_PATH/GRIB2.tmpl $outfile +${tools_dir}/grib_set -s marsDomain=x $outfile $temp +grib_check_key_equals $temp 'marsDomain' 'x' +set +e +${tools_dir}/grib_set -s marsDomain=9 $outfile $temp +status=$? +set -e +[ $status -ne 0 ] + +set +e +${tools_dir}/grib_set -s marsDomain=1.2 $outfile $temp +status=$? +set -e +[ $status -ne 0 ] + # Strict option # --------------- # There is only one field in this file with shortName=2t From 3d513738c85aa479f28ac1eff3b94afe37996eda Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 24 Jul 2023 13:14:40 +0100 Subject: [PATCH 044/372] Comparison of accessors --- src/eccodes_prototypes.h | 2 + src/grib_accessor.cc | 80 ++++++++++++++++---------------- src/grib_accessor_class_ascii.cc | 23 +++------ src/grib_value.cc | 16 +++++++ tests/CMakeLists.txt | 1 + tests/codes_compare_keys.cc | 57 +++++++++++++++++++++++ 6 files changed, 122 insertions(+), 57 deletions(-) create mode 100644 tests/codes_compare_keys.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 1ec90f91d..76d5656c1 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -154,6 +154,7 @@ int grib_nearest_smaller_value(grib_accessor* a, double val, double* nearest); size_t grib_preferred_size(grib_accessor* a, int from_handle); grib_accessor* grib_next_accessor(grib_accessor* a); void grib_resize(grib_accessor* a, size_t new_size); +int grib_compare_accessors(grib_accessor* a1, grib_accessor* a2, int compare_flags); int grib_accessor_add_attribute(grib_accessor* a, grib_accessor* attr, int nest_if_clash); int grib_accessor_replace_attribute(grib_accessor* a, grib_accessor* attr); int grib_accessor_delete_attribute(grib_accessor* a, const char* name); @@ -1277,6 +1278,7 @@ void grib_print_values(const char* title, grib_values* values); int grib_values_check(grib_handle* h, grib_values* values, int count); int grib_key_equal(grib_handle* h1, grib_handle* h2, const char* key, int type, int* err); int codes_copy_key(grib_handle* h1, grib_handle* h2, const char* key, int type); +int codes_compare_key(grib_handle* h1, grib_handle* h2, const char* key, int compare_flags); /* grib_errors.cc*/ const char* grib_get_error_message(int code); diff --git a/src/grib_accessor.cc b/src/grib_accessor.cc index 90066e00c..58cf51c0e 100644 --- a/src/grib_accessor.cc +++ b/src/grib_accessor.cc @@ -652,50 +652,48 @@ void grib_resize(grib_accessor* a, size_t new_size) return; } -// int grib_compare_accessors(grib_accessor* a1, grib_accessor* a2, int compare_flags) -// { -// int ret = 0; -// long type1 = 0; -// long type2 = 0; -// int type_mismatch = 0; -// grib_accessor_class* c1 = NULL; - -// if ((compare_flags & GRIB_COMPARE_NAMES) && grib_inline_strcmp(a1->name, a2->name)) -// return GRIB_NAME_MISMATCH; - -// if (compare_flags & GRIB_COMPARE_TYPES) { -// type1 = grib_accessor_get_native_type(a1); -// type2 = grib_accessor_get_native_type(a2); - -// type_mismatch = type1 != type2 ? 1 : 0; -// } - -// ret = GRIB_UNABLE_TO_COMPARE_ACCESSORS; -// c1 = a1->cclass; -// while (c1) { -// if (c1->compare) { -// ret = c1->compare(a1, a2); -// break; -// } -// c1 = c1->super ? *(c1->super) : NULL; -// } - -// if (ret == GRIB_VALUE_MISMATCH && type_mismatch) -// ret = GRIB_TYPE_AND_VALUE_MISMATCH; - -// return ret; -// } - -/* -int grib_accessor_clear_attributes(grib_accessor* a) +int grib_compare_accessors(grib_accessor* a1, grib_accessor* a2, int compare_flags) { - int id; - for (id=0;idattributes[id]=NULL; + int ret = 0; + long type1 = 0; + long type2 = 0; + int type_mismatch = 0; + grib_accessor_class* c1 = NULL; + + if ((compare_flags & GRIB_COMPARE_NAMES) && grib_inline_strcmp(a1->name, a2->name)) + return GRIB_NAME_MISMATCH; + + if (compare_flags & GRIB_COMPARE_TYPES) { + type1 = grib_accessor_get_native_type(a1); + type2 = grib_accessor_get_native_type(a2); + + type_mismatch = type1 != type2 ? 1 : 0; } - return 0; + + ret = GRIB_UNABLE_TO_COMPARE_ACCESSORS; + c1 = a1->cclass; + while (c1) { + if (c1->compare) { + ret = c1->compare(a1, a2); + break; + } + c1 = c1->super ? *(c1->super) : NULL; + } + + if (ret == GRIB_VALUE_MISMATCH && type_mismatch) + ret = GRIB_TYPE_AND_VALUE_MISMATCH; + + return ret; } - */ + +// int grib_accessor_clear_attributes(grib_accessor* a) +// { +// int id; +// for (id=0;idattributes[id]=NULL; +// } +// return 0; +// } int grib_accessor_add_attribute(grib_accessor* a, grib_accessor* attr, int nest_if_clash) { diff --git a/src/grib_accessor_class_ascii.cc b/src/grib_accessor_class_ascii.cc index 24856f3d5..46d18b63d 100644 --- a/src/grib_accessor_class_ascii.cc +++ b/src/grib_accessor_class_ascii.cc @@ -250,19 +250,8 @@ static int compare(grib_accessor* a, grib_accessor* b) char* bval = 0; int err = 0; - size_t alen = 0; - size_t blen = 0; - long count = 0; - - err = grib_value_count(a, &count); - if (err) - return err; - alen = count; - - err = grib_value_count(b, &count); - if (err) - return err; - blen = count; + size_t alen = a->length+1; + size_t blen = b->length+1; if (alen != blen) return GRIB_COUNT_MISMATCH; @@ -270,11 +259,13 @@ static int compare(grib_accessor* a, grib_accessor* b) aval = (char*)grib_context_malloc(a->context, alen * sizeof(char)); bval = (char*)grib_context_malloc(b->context, blen * sizeof(char)); - grib_unpack_string(a, aval, &alen); - grib_unpack_string(b, bval, &blen); + err = grib_unpack_string(a, aval, &alen); + if (err) return err; + err = grib_unpack_string(b, bval, &blen); + if (err) return err; retval = GRIB_SUCCESS; - if (strcmp(aval, bval)) + if (!STR_EQUAL(aval, bval)) retval = GRIB_STRING_VALUE_MISMATCH; grib_context_free(a->context, aval); diff --git a/src/grib_value.cc b/src/grib_value.cc index aeb07fcd6..d9ef8bcd3 100644 --- a/src/grib_value.cc +++ b/src/grib_value.cc @@ -2083,3 +2083,19 @@ int codes_copy_key(grib_handle* h1, grib_handle* h2, const char* key, int type) return GRIB_INVALID_TYPE; } } + +int codes_compare_key(grib_handle* h1, grib_handle* h2, const char* key, int compare_flags) +{ + grib_accessor* a1 = grib_find_accessor(h1, key); + if (!a1) { + grib_context_log(h1->context, GRIB_LOG_ERROR, "Key %s not found in first message", key); + return GRIB_NOT_FOUND; + } + grib_accessor* a2 = grib_find_accessor(h2, key); + if (!a2) { + grib_context_log(h1->context, GRIB_LOG_ERROR, "Key %s not found in second message", key); + return GRIB_NOT_FOUND; + } + + return grib_compare_accessors(a1, a2, GRIB_COMPARE_TYPES); +} diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index ef07dbd64..827d91ef8 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -45,6 +45,7 @@ list(APPEND test_c_bins bufr_coordinate_descriptors codes_new_from_samples codes_set_samples_path + codes_compare_keys grib_sh_ieee64 grib_ieee grib_set_bytes diff --git a/tests/codes_compare_keys.cc b/tests/codes_compare_keys.cc new file mode 100644 index 000000000..1bc8ad337 --- /dev/null +++ b/tests/codes_compare_keys.cc @@ -0,0 +1,57 @@ +/* + * (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" + +int main(int argc, char* argv[]) +{ + FILE* f1 = NULL; + FILE* f2 = NULL; + grib_handle* h1 = NULL; + grib_handle* h2 = NULL; + int err = 0; + int failed = 0; + + Assert(argc == 3); + f1 = fopen(argv[1], "rb"); + f2 = fopen(argv[2], "rb"); + Assert(f1 && f2); + + while ((h1 = grib_handle_new_from_file(0, f1, &err)) != NULL && (h2 = grib_handle_new_from_file(0, f2, &err)) != NULL) { + grib_keys_iterator* kiter = NULL; + + /* Use namespace of NULL to get ALL keys */ + /* Set flags to 0 to not filter any keys */ + //kiter = grib_keys_iterator_new(h1, /*flags=*/0, /*namespace=*/NULL); + kiter = grib_keys_iterator_new(h1, /*flags=*/GRIB_KEYS_ITERATOR_SKIP_COMPUTED, /*namespace=*/NULL); + Assert(kiter); + + while (grib_keys_iterator_next(kiter)) { + const char* name = grib_keys_iterator_get_name(kiter); + Assert(name); + //printf("Comparing key '%s' ...\n", name); + err = codes_compare_key(h1, h2, name, 0); + if (err) { + printf("key: %s (%s)\n", name, grib_get_error_message(err)); + failed = 1; + } + } + + grib_keys_iterator_delete(kiter); + grib_handle_delete(h1); + grib_handle_delete(h2); + } + fclose(f1); + fclose(f2); + if (failed) { + fprintf(stderr, "\nComparison failed: One or more keys different\n"); + } + return err; +} From bd62688189d39acdff2d4546bd45adcbb66e8fae Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 24 Jul 2023 13:25:18 +0000 Subject: [PATCH 045/372] Add extra error codes --- fortran/eccodes_constants.h | 149 ++++++++++++++++++--------------- fortran/grib_api_constants.h | 11 +++ src/eccodes.h | 158 ++++++++++++++++++++--------------- src/extrules.am | 2 - src/grib_api.h | 158 ++++++++++++++++++++--------------- src/grib_api_internal.h | 24 ------ src/grib_errors.cc | 25 +++--- src/grib_errors.txt | 11 +++ src/grib_errors_internal.txt | 13 --- 9 files changed, 294 insertions(+), 257 deletions(-) diff --git a/fortran/eccodes_constants.h b/fortran/eccodes_constants.h index a57288446..72383e471 100644 --- a/fortran/eccodes_constants.h +++ b/fortran/eccodes_constants.h @@ -1,69 +1,80 @@ - integer, parameter,public :: CODES_FUNCTIONALITY_NOT_ENABLED = -67 - integer, parameter,public :: CODES_WRONG_BITMAP_SIZE = -66 - integer, parameter,public :: CODES_OUT_OF_RANGE = -65 - integer, parameter,public :: CODES_UNSUPPORTED_EDITION = -64 - integer, parameter,public :: CODES_ATTRIBUTE_NOT_FOUND = -63 - integer, parameter,public :: CODES_TOO_MANY_ATTRIBUTES = -62 - integer, parameter,public :: CODES_ATTRIBUTE_CLASH = -61 - integer, parameter,public :: CODES_NULL_POINTER = -60 - integer, parameter,public :: CODES_MISSING_BUFR_ENTRY = -59 - integer, parameter,public :: CODES_WRONG_CONVERSION = -58 - integer, parameter,public :: CODES_STRING_TOO_SMALL = -57 - integer, parameter,public :: CODES_INVALID_KEY_VALUE = -56 - integer, parameter,public :: CODES_VALUE_DIFFERENT = -55 - integer, parameter,public :: CODES_DIFFERENT_EDITION = -54 - integer, parameter,public :: CODES_INVALID_BPV = -53 - integer, parameter,public :: CODES_CORRUPTED_INDEX = -52 - integer, parameter,public :: CODES_MESSAGE_MALFORMED = -51 - integer, parameter,public :: CODES_UNDERFLOW = -50 - integer, parameter,public :: CODES_SWITCH_NO_MATCH = -49 - integer, parameter,public :: CODES_CONSTANT_FIELD = -48 - integer, parameter,public :: CODES_MESSAGE_TOO_LARGE = -47 - integer, parameter,public :: CODES_INTERNAL_ARRAY_TOO_SMALL = -46 - integer, parameter,public :: CODES_PREMATURE_END_OF_FILE = -45 - integer, parameter,public :: CODES_NULL_INDEX = -44 - integer, parameter,public :: CODES_END_OF_INDEX = -43 - integer, parameter,public :: CODES_WRONG_GRID = -42 - integer, parameter,public :: CODES_NO_VALUES = -41 - integer, parameter,public :: CODES_END = -40 - integer, parameter,public :: CODES_WRONG_TYPE = -39 - integer, parameter,public :: CODES_NO_DEFINITIONS = -38 - integer, parameter,public :: CODES_HASH_ARRAY_NO_MATCH = -37 - integer, parameter,public :: CODES_CONCEPT_NO_MATCH = -36 - integer, parameter,public :: CODES_OUT_OF_AREA = -35 - integer, parameter,public :: CODES_MISSING_KEY = -34 - integer, parameter,public :: CODES_INVALID_ORDERBY = -33 - integer, parameter,public :: CODES_INVALID_NEAREST = -32 - integer, parameter,public :: CODES_INVALID_KEYS_ITERATOR = -31 - integer, parameter,public :: CODES_INVALID_ITERATOR = -30 - integer, parameter,public :: CODES_INVALID_INDEX = -29 - integer, parameter,public :: CODES_INVALID_GRIB = -28 - integer, parameter,public :: CODES_INVALID_FILE = -27 - integer, parameter,public :: CODES_WRONG_STEP_UNIT = -26 - integer, parameter,public :: CODES_WRONG_STEP = -25 - integer, parameter,public :: CODES_INVALID_TYPE = -24 - integer, parameter,public :: CODES_WRONG_LENGTH = -23 - integer, parameter,public :: CODES_VALUE_CANNOT_BE_MISSING = -22 - integer, parameter,public :: CODES_INVALID_SECTION_NUMBER = -21 - integer, parameter,public :: CODES_NULL_HANDLE = -20 - integer, parameter,public :: CODES_INVALID_ARGUMENT = -19 - integer, parameter,public :: CODES_READ_ONLY = -18 - integer, parameter,public :: CODES_OUT_OF_MEMORY = -17 - integer, parameter,public :: CODES_GEOCALCULUS_PROBLEM = -16 - integer, parameter,public :: CODES_NO_MORE_IN_SET = -15 - integer, parameter,public :: CODES_ENCODING_ERROR = -14 - integer, parameter,public :: CODES_DECODING_ERROR = -13 - integer, parameter,public :: CODES_INVALID_MESSAGE = -12 - integer, parameter,public :: CODES_IO_PROBLEM = -11 - integer, parameter,public :: CODES_NOT_FOUND = -10 - integer, parameter,public :: CODES_WRONG_ARRAY_SIZE = -9 - integer, parameter,public :: CODES_CODE_NOT_FOUND_IN_TABLE = -8 - integer, parameter,public :: CODES_FILE_NOT_FOUND = -7 - integer, parameter,public :: CODES_ARRAY_TOO_SMALL = -6 - integer, parameter,public :: CODES_7777_NOT_FOUND = -5 - integer, parameter,public :: CODES_NOT_IMPLEMENTED = -4 - integer, parameter,public :: CODES_BUFFER_TOO_SMALL = -3 - integer, parameter,public :: CODES_INTERNAL_ERROR = -2 - integer, parameter,public :: CODES_END_OF_FILE = -1 - integer, parameter,public :: CODES_SUCCESS = 0 - integer, parameter,public :: CODES_NULL = -1 + integer, parameter,public :: CODES_UNABLE_TO_COMPARE_ACCESSORS = -78 + integer, parameter,public :: CODES_TYPE_AND_VALUE_MISMATCH = -77 + integer, parameter,public :: CODES_TYPE_MISMATCH = -76 + integer, parameter,public :: CODES_NAME_MISMATCH = -75 + integer, parameter,public :: CODES_COUNT_MISMATCH = -74 + integer, parameter,public :: CODES_OFFSET_MISMATCH = -73 + integer, parameter,public :: CODES_STRING_VALUE_MISMATCH = -72 + integer, parameter,public :: CODES_BYTE_VALUE_MISMATCH = -71 + integer, parameter,public :: CODES_LONG_VALUE_MISMATCH = -70 + integer, parameter,public :: CODES_DOUBLE_VALUE_MISMATCH = -69 + integer, parameter,public :: CODES_VALUE_MISMATCH = -68 + integer, parameter,public :: CODES_FUNCTIONALITY_NOT_ENABLED = -67 + integer, parameter,public :: CODES_WRONG_BITMAP_SIZE = -66 + integer, parameter,public :: CODES_OUT_OF_RANGE = -65 + integer, parameter,public :: CODES_UNSUPPORTED_EDITION = -64 + integer, parameter,public :: CODES_ATTRIBUTE_NOT_FOUND = -63 + integer, parameter,public :: CODES_TOO_MANY_ATTRIBUTES = -62 + integer, parameter,public :: CODES_ATTRIBUTE_CLASH = -61 + integer, parameter,public :: CODES_NULL_POINTER = -60 + integer, parameter,public :: CODES_MISSING_BUFR_ENTRY = -59 + integer, parameter,public :: CODES_WRONG_CONVERSION = -58 + integer, parameter,public :: CODES_STRING_TOO_SMALL = -57 + integer, parameter,public :: CODES_INVALID_KEY_VALUE = -56 + integer, parameter,public :: CODES_VALUE_DIFFERENT = -55 + integer, parameter,public :: CODES_DIFFERENT_EDITION = -54 + integer, parameter,public :: CODES_INVALID_BPV = -53 + integer, parameter,public :: CODES_CORRUPTED_INDEX = -52 + integer, parameter,public :: CODES_MESSAGE_MALFORMED = -51 + integer, parameter,public :: CODES_UNDERFLOW = -50 + integer, parameter,public :: CODES_SWITCH_NO_MATCH = -49 + integer, parameter,public :: CODES_CONSTANT_FIELD = -48 + integer, parameter,public :: CODES_MESSAGE_TOO_LARGE = -47 + integer, parameter,public :: CODES_INTERNAL_ARRAY_TOO_SMALL = -46 + integer, parameter,public :: CODES_PREMATURE_END_OF_FILE = -45 + integer, parameter,public :: CODES_NULL_INDEX = -44 + integer, parameter,public :: CODES_END_OF_INDEX = -43 + integer, parameter,public :: CODES_WRONG_GRID = -42 + integer, parameter,public :: CODES_NO_VALUES = -41 + integer, parameter,public :: CODES_END = -40 + integer, parameter,public :: CODES_WRONG_TYPE = -39 + integer, parameter,public :: CODES_NO_DEFINITIONS = -38 + integer, parameter,public :: CODES_HASH_ARRAY_NO_MATCH = -37 + integer, parameter,public :: CODES_CONCEPT_NO_MATCH = -36 + integer, parameter,public :: CODES_OUT_OF_AREA = -35 + integer, parameter,public :: CODES_MISSING_KEY = -34 + integer, parameter,public :: CODES_INVALID_ORDERBY = -33 + integer, parameter,public :: CODES_INVALID_NEAREST = -32 + integer, parameter,public :: CODES_INVALID_KEYS_ITERATOR = -31 + integer, parameter,public :: CODES_INVALID_ITERATOR = -30 + integer, parameter,public :: CODES_INVALID_INDEX = -29 + integer, parameter,public :: CODES_INVALID_GRIB = -28 + integer, parameter,public :: CODES_INVALID_FILE = -27 + integer, parameter,public :: CODES_WRONG_STEP_UNIT = -26 + integer, parameter,public :: CODES_WRONG_STEP = -25 + integer, parameter,public :: CODES_INVALID_TYPE = -24 + integer, parameter,public :: CODES_WRONG_LENGTH = -23 + integer, parameter,public :: CODES_VALUE_CANNOT_BE_MISSING = -22 + integer, parameter,public :: CODES_INVALID_SECTION_NUMBER = -21 + integer, parameter,public :: CODES_NULL_HANDLE = -20 + integer, parameter,public :: CODES_INVALID_ARGUMENT = -19 + integer, parameter,public :: CODES_READ_ONLY = -18 + integer, parameter,public :: CODES_OUT_OF_MEMORY = -17 + integer, parameter,public :: CODES_GEOCALCULUS_PROBLEM = -16 + integer, parameter,public :: CODES_NO_MORE_IN_SET = -15 + integer, parameter,public :: CODES_ENCODING_ERROR = -14 + integer, parameter,public :: CODES_DECODING_ERROR = -13 + integer, parameter,public :: CODES_INVALID_MESSAGE = -12 + integer, parameter,public :: CODES_IO_PROBLEM = -11 + integer, parameter,public :: CODES_NOT_FOUND = -10 + integer, parameter,public :: CODES_WRONG_ARRAY_SIZE = -9 + integer, parameter,public :: CODES_CODE_NOT_FOUND_IN_TABLE = -8 + integer, parameter,public :: CODES_FILE_NOT_FOUND = -7 + integer, parameter,public :: CODES_ARRAY_TOO_SMALL = -6 + integer, parameter,public :: CODES_7777_NOT_FOUND = -5 + integer, parameter,public :: CODES_NOT_IMPLEMENTED = -4 + integer, parameter,public :: CODES_BUFFER_TOO_SMALL = -3 + integer, parameter,public :: CODES_INTERNAL_ERROR = -2 + integer, parameter,public :: CODES_END_OF_FILE = -1 + integer, parameter,public :: CODES_SUCCESS = 0 + integer, parameter,public :: CODES_NULL = -1 diff --git a/fortran/grib_api_constants.h b/fortran/grib_api_constants.h index 1ad7238ba..0644110a9 100644 --- a/fortran/grib_api_constants.h +++ b/fortran/grib_api_constants.h @@ -1,3 +1,14 @@ + integer, parameter,public :: GRIB_UNABLE_TO_COMPARE_ACCESSORS = -78 + integer, parameter,public :: GRIB_TYPE_AND_VALUE_MISMATCH = -77 + integer, parameter,public :: GRIB_TYPE_MISMATCH = -76 + integer, parameter,public :: GRIB_NAME_MISMATCH = -75 + integer, parameter,public :: GRIB_COUNT_MISMATCH = -74 + integer, parameter,public :: GRIB_OFFSET_MISMATCH = -73 + integer, parameter,public :: GRIB_STRING_VALUE_MISMATCH = -72 + integer, parameter,public :: GRIB_BYTE_VALUE_MISMATCH = -71 + integer, parameter,public :: GRIB_LONG_VALUE_MISMATCH = -70 + integer, parameter,public :: GRIB_DOUBLE_VALUE_MISMATCH = -69 + integer, parameter,public :: GRIB_VALUE_MISMATCH = -68 integer, parameter,public :: GRIB_FUNCTIONALITY_NOT_ENABLED = -67 integer, parameter,public :: GRIB_WRONG_BITMAP_SIZE = -66 integer, parameter,public :: GRIB_OUT_OF_RANGE = -65 diff --git a/src/eccodes.h b/src/eccodes.h index c1b314671..9509afe10 100644 --- a/src/eccodes.h +++ b/src/eccodes.h @@ -1461,140 +1461,162 @@ Error codes returned by the eccodes functions. */ /*! @{*/ /** No error */ -#define CODES_SUCCESS GRIB_SUCCESS +#define CODES_SUCCESS GRIB_SUCCESS /** End of resource reached */ -#define CODES_END_OF_FILE GRIB_END_OF_FILE +#define CODES_END_OF_FILE GRIB_END_OF_FILE /** Internal error */ -#define CODES_INTERNAL_ERROR GRIB_INTERNAL_ERROR +#define CODES_INTERNAL_ERROR GRIB_INTERNAL_ERROR /** Passed buffer is too small */ -#define CODES_BUFFER_TOO_SMALL GRIB_BUFFER_TOO_SMALL +#define CODES_BUFFER_TOO_SMALL GRIB_BUFFER_TOO_SMALL /** Function not yet implemented */ -#define CODES_NOT_IMPLEMENTED GRIB_NOT_IMPLEMENTED +#define CODES_NOT_IMPLEMENTED GRIB_NOT_IMPLEMENTED /** Missing 7777 at end of message */ -#define CODES_7777_NOT_FOUND GRIB_7777_NOT_FOUND +#define CODES_7777_NOT_FOUND GRIB_7777_NOT_FOUND /** Passed array is too small */ -#define CODES_ARRAY_TOO_SMALL GRIB_ARRAY_TOO_SMALL +#define CODES_ARRAY_TOO_SMALL GRIB_ARRAY_TOO_SMALL /** File not found */ -#define CODES_FILE_NOT_FOUND GRIB_FILE_NOT_FOUND +#define CODES_FILE_NOT_FOUND GRIB_FILE_NOT_FOUND /** Code not found in code table */ -#define CODES_CODE_NOT_FOUND_IN_TABLE GRIB_CODE_NOT_FOUND_IN_TABLE +#define CODES_CODE_NOT_FOUND_IN_TABLE GRIB_CODE_NOT_FOUND_IN_TABLE /** Array size mismatch */ -#define CODES_WRONG_ARRAY_SIZE GRIB_WRONG_ARRAY_SIZE +#define CODES_WRONG_ARRAY_SIZE GRIB_WRONG_ARRAY_SIZE /** Key/value not found */ -#define CODES_NOT_FOUND GRIB_NOT_FOUND +#define CODES_NOT_FOUND GRIB_NOT_FOUND /** Input output problem */ -#define CODES_IO_PROBLEM GRIB_IO_PROBLEM +#define CODES_IO_PROBLEM GRIB_IO_PROBLEM /** Message invalid */ -#define CODES_INVALID_MESSAGE GRIB_INVALID_MESSAGE +#define CODES_INVALID_MESSAGE GRIB_INVALID_MESSAGE /** Decoding invalid */ -#define CODES_DECODING_ERROR GRIB_DECODING_ERROR +#define CODES_DECODING_ERROR GRIB_DECODING_ERROR /** Encoding invalid */ -#define CODES_ENCODING_ERROR GRIB_ENCODING_ERROR +#define CODES_ENCODING_ERROR GRIB_ENCODING_ERROR /** Code cannot unpack because of string too small */ -#define CODES_NO_MORE_IN_SET GRIB_NO_MORE_IN_SET +#define CODES_NO_MORE_IN_SET GRIB_NO_MORE_IN_SET /** Problem with calculation of geographic attributes */ -#define CODES_GEOCALCULUS_PROBLEM GRIB_GEOCALCULUS_PROBLEM +#define CODES_GEOCALCULUS_PROBLEM GRIB_GEOCALCULUS_PROBLEM /** Memory allocation error */ -#define CODES_OUT_OF_MEMORY GRIB_OUT_OF_MEMORY +#define CODES_OUT_OF_MEMORY GRIB_OUT_OF_MEMORY /** Value is read only */ -#define CODES_READ_ONLY GRIB_READ_ONLY +#define CODES_READ_ONLY GRIB_READ_ONLY /** Invalid argument */ -#define CODES_INVALID_ARGUMENT GRIB_INVALID_ARGUMENT +#define CODES_INVALID_ARGUMENT GRIB_INVALID_ARGUMENT /** Null handle */ -#define CODES_NULL_HANDLE GRIB_NULL_HANDLE +#define CODES_NULL_HANDLE GRIB_NULL_HANDLE /** Invalid section number */ -#define CODES_INVALID_SECTION_NUMBER GRIB_INVALID_SECTION_NUMBER +#define CODES_INVALID_SECTION_NUMBER GRIB_INVALID_SECTION_NUMBER /** Value cannot be missing */ -#define CODES_VALUE_CANNOT_BE_MISSING GRIB_VALUE_CANNOT_BE_MISSING +#define CODES_VALUE_CANNOT_BE_MISSING GRIB_VALUE_CANNOT_BE_MISSING /** Wrong message length */ -#define CODES_WRONG_LENGTH GRIB_WRONG_LENGTH +#define CODES_WRONG_LENGTH GRIB_WRONG_LENGTH /** Invalid key type */ -#define CODES_INVALID_TYPE GRIB_INVALID_TYPE +#define CODES_INVALID_TYPE GRIB_INVALID_TYPE /** Unable to set step */ -#define CODES_WRONG_STEP GRIB_WRONG_STEP +#define CODES_WRONG_STEP GRIB_WRONG_STEP /** Wrong units for step (step must be integer) */ -#define CODES_WRONG_STEP_UNIT GRIB_WRONG_STEP_UNIT +#define CODES_WRONG_STEP_UNIT GRIB_WRONG_STEP_UNIT /** Invalid file id */ -#define CODES_INVALID_FILE GRIB_INVALID_FILE +#define CODES_INVALID_FILE GRIB_INVALID_FILE /** Invalid grib id */ -#define CODES_INVALID_GRIB GRIB_INVALID_GRIB +#define CODES_INVALID_GRIB GRIB_INVALID_GRIB /** Invalid index id */ -#define CODES_INVALID_INDEX GRIB_INVALID_INDEX +#define CODES_INVALID_INDEX GRIB_INVALID_INDEX /** Invalid iterator id */ -#define CODES_INVALID_ITERATOR GRIB_INVALID_ITERATOR +#define CODES_INVALID_ITERATOR GRIB_INVALID_ITERATOR /** Invalid keys iterator id */ -#define CODES_INVALID_KEYS_ITERATOR GRIB_INVALID_KEYS_ITERATOR +#define CODES_INVALID_KEYS_ITERATOR GRIB_INVALID_KEYS_ITERATOR /** Invalid nearest id */ -#define CODES_INVALID_NEAREST GRIB_INVALID_NEAREST +#define CODES_INVALID_NEAREST GRIB_INVALID_NEAREST /** Invalid order by */ -#define CODES_INVALID_ORDERBY GRIB_INVALID_ORDERBY +#define CODES_INVALID_ORDERBY GRIB_INVALID_ORDERBY /** Missing a key from the fieldset */ -#define CODES_MISSING_KEY GRIB_MISSING_KEY +#define CODES_MISSING_KEY GRIB_MISSING_KEY /** The point is out of the grid area */ -#define CODES_OUT_OF_AREA GRIB_OUT_OF_AREA +#define CODES_OUT_OF_AREA GRIB_OUT_OF_AREA /** Concept no match */ -#define CODES_CONCEPT_NO_MATCH GRIB_CONCEPT_NO_MATCH +#define CODES_CONCEPT_NO_MATCH GRIB_CONCEPT_NO_MATCH /** Hash array no match */ -#define CODES_HASH_ARRAY_NO_MATCH GRIB_HASH_ARRAY_NO_MATCH +#define CODES_HASH_ARRAY_NO_MATCH GRIB_HASH_ARRAY_NO_MATCH /** Definitions files not found */ -#define CODES_NO_DEFINITIONS GRIB_NO_DEFINITIONS +#define CODES_NO_DEFINITIONS GRIB_NO_DEFINITIONS /** Wrong type while packing */ -#define CODES_WRONG_TYPE GRIB_WRONG_TYPE +#define CODES_WRONG_TYPE GRIB_WRONG_TYPE /** End of resource */ -#define CODES_END GRIB_END +#define CODES_END GRIB_END /** Unable to code a field without values */ -#define CODES_NO_VALUES GRIB_NO_VALUES +#define CODES_NO_VALUES GRIB_NO_VALUES /** Grid description is wrong or inconsistent */ -#define CODES_WRONG_GRID GRIB_WRONG_GRID +#define CODES_WRONG_GRID GRIB_WRONG_GRID /** End of index reached */ -#define CODES_END_OF_INDEX GRIB_END_OF_INDEX +#define CODES_END_OF_INDEX GRIB_END_OF_INDEX /** Null index */ -#define CODES_NULL_INDEX GRIB_NULL_INDEX +#define CODES_NULL_INDEX GRIB_NULL_INDEX /** End of resource reached when reading message */ -#define CODES_PREMATURE_END_OF_FILE GRIB_PREMATURE_END_OF_FILE +#define CODES_PREMATURE_END_OF_FILE GRIB_PREMATURE_END_OF_FILE /** An internal array is too small */ -#define CODES_INTERNAL_ARRAY_TOO_SMALL GRIB_INTERNAL_ARRAY_TOO_SMALL +#define CODES_INTERNAL_ARRAY_TOO_SMALL GRIB_INTERNAL_ARRAY_TOO_SMALL /** Message is too large for the current architecture */ -#define CODES_MESSAGE_TOO_LARGE GRIB_MESSAGE_TOO_LARGE +#define CODES_MESSAGE_TOO_LARGE GRIB_MESSAGE_TOO_LARGE /** Constant field */ -#define CODES_CONSTANT_FIELD GRIB_CONSTANT_FIELD +#define CODES_CONSTANT_FIELD GRIB_CONSTANT_FIELD /** Switch unable to find a matching case */ -#define CODES_SWITCH_NO_MATCH GRIB_SWITCH_NO_MATCH +#define CODES_SWITCH_NO_MATCH GRIB_SWITCH_NO_MATCH /** Underflow */ -#define CODES_UNDERFLOW GRIB_UNDERFLOW +#define CODES_UNDERFLOW GRIB_UNDERFLOW /** Message malformed */ -#define CODES_MESSAGE_MALFORMED GRIB_MESSAGE_MALFORMED +#define CODES_MESSAGE_MALFORMED GRIB_MESSAGE_MALFORMED /** Index is corrupted */ -#define CODES_CORRUPTED_INDEX GRIB_CORRUPTED_INDEX +#define CODES_CORRUPTED_INDEX GRIB_CORRUPTED_INDEX /** Invalid number of bits per value */ -#define CODES_INVALID_BPV GRIB_INVALID_BPV +#define CODES_INVALID_BPV GRIB_INVALID_BPV /** Edition of two messages is different */ -#define CODES_DIFFERENT_EDITION GRIB_DIFFERENT_EDITION +#define CODES_DIFFERENT_EDITION GRIB_DIFFERENT_EDITION /** Value is different */ -#define CODES_VALUE_DIFFERENT GRIB_VALUE_DIFFERENT +#define CODES_VALUE_DIFFERENT GRIB_VALUE_DIFFERENT /** Invalid key value */ -#define CODES_INVALID_KEY_VALUE GRIB_INVALID_KEY_VALUE +#define CODES_INVALID_KEY_VALUE GRIB_INVALID_KEY_VALUE /** String is smaller than requested */ -#define CODES_STRING_TOO_SMALL GRIB_STRING_TOO_SMALL +#define CODES_STRING_TOO_SMALL GRIB_STRING_TOO_SMALL /** Wrong type conversion */ -#define CODES_WRONG_CONVERSION GRIB_WRONG_CONVERSION +#define CODES_WRONG_CONVERSION GRIB_WRONG_CONVERSION /** Missing BUFR table entry for descriptor */ -#define CODES_MISSING_BUFR_ENTRY GRIB_MISSING_BUFR_ENTRY +#define CODES_MISSING_BUFR_ENTRY GRIB_MISSING_BUFR_ENTRY /** Null pointer */ -#define CODES_NULL_POINTER GRIB_NULL_POINTER +#define CODES_NULL_POINTER GRIB_NULL_POINTER /** Attribute is already present, cannot add */ -#define CODES_ATTRIBUTE_CLASH GRIB_ATTRIBUTE_CLASH +#define CODES_ATTRIBUTE_CLASH GRIB_ATTRIBUTE_CLASH /** Too many attributes. Increase MAX_ACCESSOR_ATTRIBUTES */ -#define CODES_TOO_MANY_ATTRIBUTES GRIB_TOO_MANY_ATTRIBUTES +#define CODES_TOO_MANY_ATTRIBUTES GRIB_TOO_MANY_ATTRIBUTES /** Attribute not found. */ -#define CODES_ATTRIBUTE_NOT_FOUND GRIB_ATTRIBUTE_NOT_FOUND +#define CODES_ATTRIBUTE_NOT_FOUND GRIB_ATTRIBUTE_NOT_FOUND /** Edition not supported. */ -#define CODES_UNSUPPORTED_EDITION GRIB_UNSUPPORTED_EDITION +#define CODES_UNSUPPORTED_EDITION GRIB_UNSUPPORTED_EDITION /** Value out of coding range */ -#define CODES_OUT_OF_RANGE GRIB_OUT_OF_RANGE +#define CODES_OUT_OF_RANGE GRIB_OUT_OF_RANGE /** Size of bitmap is incorrect */ -#define CODES_WRONG_BITMAP_SIZE GRIB_WRONG_BITMAP_SIZE +#define CODES_WRONG_BITMAP_SIZE GRIB_WRONG_BITMAP_SIZE /** Functionality not enabled */ -#define CODES_FUNCTIONALITY_NOT_ENABLED GRIB_FUNCTIONALITY_NOT_ENABLED +#define CODES_FUNCTIONALITY_NOT_ENABLED GRIB_FUNCTIONALITY_NOT_ENABLED +/** Value mismatch */ +#define CODES_VALUE_MISMATCH GRIB_VALUE_MISMATCH +/** Double values are different */ +#define CODES_DOUBLE_VALUE_MISMATCH GRIB_DOUBLE_VALUE_MISMATCH +/** Long values are different */ +#define CODES_LONG_VALUE_MISMATCH GRIB_LONG_VALUE_MISMATCH +/** Byte values are different */ +#define CODES_BYTE_VALUE_MISMATCH GRIB_BYTE_VALUE_MISMATCH +/** String values are different */ +#define CODES_STRING_VALUE_MISMATCH GRIB_STRING_VALUE_MISMATCH +/** Offset mismatch */ +#define CODES_OFFSET_MISMATCH GRIB_OFFSET_MISMATCH +/** Count mismatch */ +#define CODES_COUNT_MISMATCH GRIB_COUNT_MISMATCH +/** Name mismatch */ +#define CODES_NAME_MISMATCH GRIB_NAME_MISMATCH +/** Type mismatch */ +#define CODES_TYPE_MISMATCH GRIB_TYPE_MISMATCH +/** Type and value mismatch */ +#define CODES_TYPE_AND_VALUE_MISMATCH GRIB_TYPE_AND_VALUE_MISMATCH +/** Unable to compare accessors */ +#define CODES_UNABLE_TO_COMPARE_ACCESSORS GRIB_UNABLE_TO_COMPARE_ACCESSORS /*! @}*/ #endif diff --git a/src/extrules.am b/src/extrules.am index 210121b4e..9412ea9b9 100644 --- a/src/extrules.am +++ b/src/extrules.am @@ -8,8 +8,6 @@ grib_errors.cc : grib_errors.txt errors.pl cmp -s eccodes.h eccodes.h.new || (mv eccodes.h.new eccodes.h) cmp -s ../fortran/grib_api_constants.h grib_api_constants.h.new || (mv grib_api_constants.h.new ../fortran/grib_api_constants.h) cmp -s ../fortran/eccodes_constants.h eccodes_constants.h.new || (mv eccodes_constants.h.new ../fortran/eccodes_constants.h) - cmp -s ../python/grib_errors.h grib_errors.h.new || (mv grib_errors.h.new ../python/grib_errors.h) - cmp -s ../python/gribapi/errors.py errors.py.new || (mv errors.py.new ../python/gribapi/errors.py) proto:;-chmod +w eccodes_prototypes.h; mkptypes -A $(libeccodes_la_prototypes) $(libeccodes_extra_prototypes) > temp && mv temp eccodes_prototypes.h;rm -f temp diff --git a/src/grib_api.h b/src/grib_api.h index efc21dd79..7c830e495 100644 --- a/src/grib_api.h +++ b/src/grib_api.h @@ -1655,140 +1655,162 @@ Error codes returned by the grib_api functions. */ /*! @{*/ /** No error */ -#define GRIB_SUCCESS 0 +#define GRIB_SUCCESS 0 /** End of resource reached */ -#define GRIB_END_OF_FILE -1 +#define GRIB_END_OF_FILE -1 /** Internal error */ -#define GRIB_INTERNAL_ERROR -2 +#define GRIB_INTERNAL_ERROR -2 /** Passed buffer is too small */ -#define GRIB_BUFFER_TOO_SMALL -3 +#define GRIB_BUFFER_TOO_SMALL -3 /** Function not yet implemented */ -#define GRIB_NOT_IMPLEMENTED -4 +#define GRIB_NOT_IMPLEMENTED -4 /** Missing 7777 at end of message */ -#define GRIB_7777_NOT_FOUND -5 +#define GRIB_7777_NOT_FOUND -5 /** Passed array is too small */ -#define GRIB_ARRAY_TOO_SMALL -6 +#define GRIB_ARRAY_TOO_SMALL -6 /** File not found */ -#define GRIB_FILE_NOT_FOUND -7 +#define GRIB_FILE_NOT_FOUND -7 /** Code not found in code table */ -#define GRIB_CODE_NOT_FOUND_IN_TABLE -8 +#define GRIB_CODE_NOT_FOUND_IN_TABLE -8 /** Array size mismatch */ -#define GRIB_WRONG_ARRAY_SIZE -9 +#define GRIB_WRONG_ARRAY_SIZE -9 /** Key/value not found */ -#define GRIB_NOT_FOUND -10 +#define GRIB_NOT_FOUND -10 /** Input output problem */ -#define GRIB_IO_PROBLEM -11 +#define GRIB_IO_PROBLEM -11 /** Message invalid */ -#define GRIB_INVALID_MESSAGE -12 +#define GRIB_INVALID_MESSAGE -12 /** Decoding invalid */ -#define GRIB_DECODING_ERROR -13 +#define GRIB_DECODING_ERROR -13 /** Encoding invalid */ -#define GRIB_ENCODING_ERROR -14 +#define GRIB_ENCODING_ERROR -14 /** Code cannot unpack because of string too small */ -#define GRIB_NO_MORE_IN_SET -15 +#define GRIB_NO_MORE_IN_SET -15 /** Problem with calculation of geographic attributes */ -#define GRIB_GEOCALCULUS_PROBLEM -16 +#define GRIB_GEOCALCULUS_PROBLEM -16 /** Memory allocation error */ -#define GRIB_OUT_OF_MEMORY -17 +#define GRIB_OUT_OF_MEMORY -17 /** Value is read only */ -#define GRIB_READ_ONLY -18 +#define GRIB_READ_ONLY -18 /** Invalid argument */ -#define GRIB_INVALID_ARGUMENT -19 +#define GRIB_INVALID_ARGUMENT -19 /** Null handle */ -#define GRIB_NULL_HANDLE -20 +#define GRIB_NULL_HANDLE -20 /** Invalid section number */ -#define GRIB_INVALID_SECTION_NUMBER -21 +#define GRIB_INVALID_SECTION_NUMBER -21 /** Value cannot be missing */ -#define GRIB_VALUE_CANNOT_BE_MISSING -22 +#define GRIB_VALUE_CANNOT_BE_MISSING -22 /** Wrong message length */ -#define GRIB_WRONG_LENGTH -23 +#define GRIB_WRONG_LENGTH -23 /** Invalid key type */ -#define GRIB_INVALID_TYPE -24 +#define GRIB_INVALID_TYPE -24 /** Unable to set step */ -#define GRIB_WRONG_STEP -25 +#define GRIB_WRONG_STEP -25 /** Wrong units for step (step must be integer) */ -#define GRIB_WRONG_STEP_UNIT -26 +#define GRIB_WRONG_STEP_UNIT -26 /** Invalid file id */ -#define GRIB_INVALID_FILE -27 +#define GRIB_INVALID_FILE -27 /** Invalid grib id */ -#define GRIB_INVALID_GRIB -28 +#define GRIB_INVALID_GRIB -28 /** Invalid index id */ -#define GRIB_INVALID_INDEX -29 +#define GRIB_INVALID_INDEX -29 /** Invalid iterator id */ -#define GRIB_INVALID_ITERATOR -30 +#define GRIB_INVALID_ITERATOR -30 /** Invalid keys iterator id */ -#define GRIB_INVALID_KEYS_ITERATOR -31 +#define GRIB_INVALID_KEYS_ITERATOR -31 /** Invalid nearest id */ -#define GRIB_INVALID_NEAREST -32 +#define GRIB_INVALID_NEAREST -32 /** Invalid order by */ -#define GRIB_INVALID_ORDERBY -33 +#define GRIB_INVALID_ORDERBY -33 /** Missing a key from the fieldset */ -#define GRIB_MISSING_KEY -34 +#define GRIB_MISSING_KEY -34 /** The point is out of the grid area */ -#define GRIB_OUT_OF_AREA -35 +#define GRIB_OUT_OF_AREA -35 /** Concept no match */ -#define GRIB_CONCEPT_NO_MATCH -36 +#define GRIB_CONCEPT_NO_MATCH -36 /** Hash array no match */ -#define GRIB_HASH_ARRAY_NO_MATCH -37 +#define GRIB_HASH_ARRAY_NO_MATCH -37 /** Definitions files not found */ -#define GRIB_NO_DEFINITIONS -38 +#define GRIB_NO_DEFINITIONS -38 /** Wrong type while packing */ -#define GRIB_WRONG_TYPE -39 +#define GRIB_WRONG_TYPE -39 /** End of resource */ -#define GRIB_END -40 +#define GRIB_END -40 /** Unable to code a field without values */ -#define GRIB_NO_VALUES -41 +#define GRIB_NO_VALUES -41 /** Grid description is wrong or inconsistent */ -#define GRIB_WRONG_GRID -42 +#define GRIB_WRONG_GRID -42 /** End of index reached */ -#define GRIB_END_OF_INDEX -43 +#define GRIB_END_OF_INDEX -43 /** Null index */ -#define GRIB_NULL_INDEX -44 +#define GRIB_NULL_INDEX -44 /** End of resource reached when reading message */ -#define GRIB_PREMATURE_END_OF_FILE -45 +#define GRIB_PREMATURE_END_OF_FILE -45 /** An internal array is too small */ -#define GRIB_INTERNAL_ARRAY_TOO_SMALL -46 +#define GRIB_INTERNAL_ARRAY_TOO_SMALL -46 /** Message is too large for the current architecture */ -#define GRIB_MESSAGE_TOO_LARGE -47 +#define GRIB_MESSAGE_TOO_LARGE -47 /** Constant field */ -#define GRIB_CONSTANT_FIELD -48 +#define GRIB_CONSTANT_FIELD -48 /** Switch unable to find a matching case */ -#define GRIB_SWITCH_NO_MATCH -49 +#define GRIB_SWITCH_NO_MATCH -49 /** Underflow */ -#define GRIB_UNDERFLOW -50 +#define GRIB_UNDERFLOW -50 /** Message malformed */ -#define GRIB_MESSAGE_MALFORMED -51 +#define GRIB_MESSAGE_MALFORMED -51 /** Index is corrupted */ -#define GRIB_CORRUPTED_INDEX -52 +#define GRIB_CORRUPTED_INDEX -52 /** Invalid number of bits per value */ -#define GRIB_INVALID_BPV -53 +#define GRIB_INVALID_BPV -53 /** Edition of two messages is different */ -#define GRIB_DIFFERENT_EDITION -54 +#define GRIB_DIFFERENT_EDITION -54 /** Value is different */ -#define GRIB_VALUE_DIFFERENT -55 +#define GRIB_VALUE_DIFFERENT -55 /** Invalid key value */ -#define GRIB_INVALID_KEY_VALUE -56 +#define GRIB_INVALID_KEY_VALUE -56 /** String is smaller than requested */ -#define GRIB_STRING_TOO_SMALL -57 +#define GRIB_STRING_TOO_SMALL -57 /** Wrong type conversion */ -#define GRIB_WRONG_CONVERSION -58 +#define GRIB_WRONG_CONVERSION -58 /** Missing BUFR table entry for descriptor */ -#define GRIB_MISSING_BUFR_ENTRY -59 +#define GRIB_MISSING_BUFR_ENTRY -59 /** Null pointer */ -#define GRIB_NULL_POINTER -60 +#define GRIB_NULL_POINTER -60 /** Attribute is already present, cannot add */ -#define GRIB_ATTRIBUTE_CLASH -61 +#define GRIB_ATTRIBUTE_CLASH -61 /** Too many attributes. Increase MAX_ACCESSOR_ATTRIBUTES */ -#define GRIB_TOO_MANY_ATTRIBUTES -62 +#define GRIB_TOO_MANY_ATTRIBUTES -62 /** Attribute not found. */ -#define GRIB_ATTRIBUTE_NOT_FOUND -63 +#define GRIB_ATTRIBUTE_NOT_FOUND -63 /** Edition not supported. */ -#define GRIB_UNSUPPORTED_EDITION -64 +#define GRIB_UNSUPPORTED_EDITION -64 /** Value out of coding range */ -#define GRIB_OUT_OF_RANGE -65 +#define GRIB_OUT_OF_RANGE -65 /** Size of bitmap is incorrect */ -#define GRIB_WRONG_BITMAP_SIZE -66 +#define GRIB_WRONG_BITMAP_SIZE -66 /** Functionality not enabled */ -#define GRIB_FUNCTIONALITY_NOT_ENABLED -67 +#define GRIB_FUNCTIONALITY_NOT_ENABLED -67 +/** Value mismatch */ +#define GRIB_VALUE_MISMATCH -68 +/** Double values are different */ +#define GRIB_DOUBLE_VALUE_MISMATCH -69 +/** Long values are different */ +#define GRIB_LONG_VALUE_MISMATCH -70 +/** Byte values are different */ +#define GRIB_BYTE_VALUE_MISMATCH -71 +/** String values are different */ +#define GRIB_STRING_VALUE_MISMATCH -72 +/** Offset mismatch */ +#define GRIB_OFFSET_MISMATCH -73 +/** Count mismatch */ +#define GRIB_COUNT_MISMATCH -74 +/** Name mismatch */ +#define GRIB_NAME_MISMATCH -75 +/** Type mismatch */ +#define GRIB_TYPE_MISMATCH -76 +/** Type and value mismatch */ +#define GRIB_TYPE_AND_VALUE_MISMATCH -77 +/** Unable to compare accessors */ +#define GRIB_UNABLE_TO_COMPARE_ACCESSORS -78 /*! @}*/ #endif diff --git a/src/grib_api_internal.h b/src/grib_api_internal.h index 9f413495b..024bc1c5b 100644 --- a/src/grib_api_internal.h +++ b/src/grib_api_internal.h @@ -1564,30 +1564,6 @@ typedef struct j2k_encode_helper /* This part is automatically generated by ./errors.pl, do not edit */ #ifndef grib_errors_internal_H #define grib_errors_internal_H -/** Value mismatch */ -#define GRIB_VALUE_MISMATCH 1 -/** double values are different */ -#define GRIB_DOUBLE_VALUE_MISMATCH 2 -/** long values are different */ -#define GRIB_LONG_VALUE_MISMATCH 3 -/** byte values are different */ -#define GRIB_BYTE_VALUE_MISMATCH 4 -/** string values are different */ -#define GRIB_STRING_VALUE_MISMATCH 5 -/** Offset mismatch */ -#define GRIB_OFFSET_MISMATCH 6 -/** Count mismatch */ -#define GRIB_COUNT_MISMATCH 7 -/** Name mismatch */ -#define GRIB_NAME_MISMATCH 8 -/** Type mismatch */ -#define GRIB_TYPE_MISMATCH 9 -/** Type and value mismatch */ -#define GRIB_TYPE_AND_VALUE_MISMATCH 10 -/** Unable to compare accessors */ -#define GRIB_UNABLE_TO_COMPARE_ACCESSORS 11 -/** Unable to reset iterator */ -#define GRIB_UNABLE_TO_RESET_ITERATOR 12 /** Assertion failure */ #define GRIB_ASSERTION_FAILURE 13 #endif diff --git a/src/grib_errors.cc b/src/grib_errors.cc index a057694a7..97b384c83 100644 --- a/src/grib_errors.cc +++ b/src/grib_errors.cc @@ -80,19 +80,18 @@ static const char *errors[] = { "Value out of coding range", /* -65 GRIB_OUT_OF_RANGE */ "Size of bitmap is incorrect", /* -66 GRIB_WRONG_BITMAP_SIZE */ "Functionality not enabled", /* -67 GRIB_FUNCTIONALITY_NOT_ENABLED */ -"Value mismatch", /* 1 GRIB_VALUE_MISMATCH */ -"double values are different", /* 2 GRIB_DOUBLE_VALUE_MISMATCH */ -"long values are different", /* 3 GRIB_LONG_VALUE_MISMATCH */ -"byte values are different", /* 4 GRIB_BYTE_VALUE_MISMATCH */ -"string values are different", /* 5 GRIB_STRING_VALUE_MISMATCH */ -"Offset mismatch", /* 6 GRIB_OFFSET_MISMATCH */ -"Count mismatch", /* 7 GRIB_COUNT_MISMATCH */ -"Name mismatch", /* 8 GRIB_NAME_MISMATCH */ -"Type mismatch", /* 9 GRIB_TYPE_MISMATCH */ -"Type and value mismatch", /* 10 GRIB_TYPE_AND_VALUE_MISMATCH */ -"Unable to compare accessors", /* 11 GRIB_UNABLE_TO_COMPARE_ACCESSORS */ -"Unable to reset iterator", /* 12 GRIB_UNABLE_TO_RESET_ITERATOR */ -"Assertion failure", /* 13 GRIB_ASSERTION_FAILURE */ +"Value mismatch", /* -68 GRIB_VALUE_MISMATCH */ +"Double values are different", /* -69 GRIB_DOUBLE_VALUE_MISMATCH */ +"Long values are different", /* -70 GRIB_LONG_VALUE_MISMATCH */ +"Byte values are different", /* -71 GRIB_BYTE_VALUE_MISMATCH */ +"String values are different", /* -72 GRIB_STRING_VALUE_MISMATCH */ +"Offset mismatch", /* -73 GRIB_OFFSET_MISMATCH */ +"Count mismatch", /* -74 GRIB_COUNT_MISMATCH */ +"Name mismatch", /* -75 GRIB_NAME_MISMATCH */ +"Type mismatch", /* -76 GRIB_TYPE_MISMATCH */ +"Type and value mismatch", /* -77 GRIB_TYPE_AND_VALUE_MISMATCH */ +"Unable to compare accessors", /* -78 GRIB_UNABLE_TO_COMPARE_ACCESSORS */ +"Assertion failure", /* 2 GRIB_ASSERTION_FAILURE */ }; #define NUMBER(a) sizeof(a)/sizeof(a[0]) diff --git a/src/grib_errors.txt b/src/grib_errors.txt index c9e4ccb18..3d592da57 100644 --- a/src/grib_errors.txt +++ b/src/grib_errors.txt @@ -73,3 +73,14 @@ GRIB_UNSUPPORTED_EDITION Edition not supported. GRIB_OUT_OF_RANGE Value out of coding range GRIB_WRONG_BITMAP_SIZE Size of bitmap is incorrect GRIB_FUNCTIONALITY_NOT_ENABLED Functionality not enabled +GRIB_VALUE_MISMATCH Value mismatch +GRIB_DOUBLE_VALUE_MISMATCH Double values are different +GRIB_LONG_VALUE_MISMATCH Long values are different +GRIB_BYTE_VALUE_MISMATCH Byte values are different +GRIB_STRING_VALUE_MISMATCH String values are different +GRIB_OFFSET_MISMATCH Offset mismatch +GRIB_COUNT_MISMATCH Count mismatch +GRIB_NAME_MISMATCH Name mismatch +GRIB_TYPE_MISMATCH Type mismatch +GRIB_TYPE_AND_VALUE_MISMATCH Type and value mismatch +GRIB_UNABLE_TO_COMPARE_ACCESSORS Unable to compare accessors diff --git a/src/grib_errors_internal.txt b/src/grib_errors_internal.txt index eb8fd4da7..3f88945d1 100644 --- a/src/grib_errors_internal.txt +++ b/src/grib_errors_internal.txt @@ -1,14 +1 @@ -/* accessors compare */ -GRIB_VALUE_MISMATCH Value mismatch -GRIB_DOUBLE_VALUE_MISMATCH double values are different -GRIB_LONG_VALUE_MISMATCH long values are different -GRIB_BYTE_VALUE_MISMATCH byte values are different -GRIB_STRING_VALUE_MISMATCH string values are different -GRIB_OFFSET_MISMATCH Offset mismatch -GRIB_COUNT_MISMATCH Count mismatch -GRIB_NAME_MISMATCH Name mismatch -GRIB_TYPE_MISMATCH Type mismatch -GRIB_TYPE_AND_VALUE_MISMATCH Type and value mismatch -GRIB_UNABLE_TO_COMPARE_ACCESSORS Unable to compare accessors -GRIB_UNABLE_TO_RESET_ITERATOR Unable to reset iterator GRIB_ASSERTION_FAILURE Assertion failure From f0cbdfd3b367eb132212a9c39f5cde7f56c6d26e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 24 Jul 2023 13:26:04 +0000 Subject: [PATCH 046/372] Comparison of accessors: Add test --- tests/CMakeLists.txt | 1 + tests/codes_compare_keys.cc | 11 +++++---- tests/codes_compare_keys.sh | 45 +++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 6 deletions(-) create mode 100755 tests/codes_compare_keys.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 827d91ef8..fc4711efc 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -282,6 +282,7 @@ if( HAVE_BUILD_TOOLS ) read_any codes_new_from_samples codes_set_samples_path + codes_compare_keys grib_dump grib_dump_debug grib_dump_json diff --git a/tests/codes_compare_keys.cc b/tests/codes_compare_keys.cc index 1bc8ad337..9a4027958 100644 --- a/tests/codes_compare_keys.cc +++ b/tests/codes_compare_keys.cc @@ -27,8 +27,8 @@ int main(int argc, char* argv[]) while ((h1 = grib_handle_new_from_file(0, f1, &err)) != NULL && (h2 = grib_handle_new_from_file(0, f2, &err)) != NULL) { grib_keys_iterator* kiter = NULL; - /* Use namespace of NULL to get ALL keys */ - /* Set flags to 0 to not filter any keys */ + // Use namespace of NULL to get ALL keys + // Set flags to 0 to not filter any keys //kiter = grib_keys_iterator_new(h1, /*flags=*/0, /*namespace=*/NULL); kiter = grib_keys_iterator_new(h1, /*flags=*/GRIB_KEYS_ITERATOR_SKIP_COMPUTED, /*namespace=*/NULL); Assert(kiter); @@ -36,10 +36,9 @@ int main(int argc, char* argv[]) while (grib_keys_iterator_next(kiter)) { const char* name = grib_keys_iterator_get_name(kiter); Assert(name); - //printf("Comparing key '%s' ...\n", name); err = codes_compare_key(h1, h2, name, 0); if (err) { - printf("key: %s (%s)\n", name, grib_get_error_message(err)); + fprintf(stderr, "key: %s (%s)\n", name, grib_get_error_message(err)); failed = 1; } } @@ -51,7 +50,7 @@ int main(int argc, char* argv[]) fclose(f1); fclose(f2); if (failed) { - fprintf(stderr, "\nComparison failed: One or more keys different\n"); + fprintf(stderr, "\nComparison failed: One or more keys are different\n"); } - return err; + return failed; } diff --git a/tests/codes_compare_keys.sh b/tests/codes_compare_keys.sh new file mode 100755 index 000000000..5337046ca --- /dev/null +++ b/tests/codes_compare_keys.sh @@ -0,0 +1,45 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +label="codes_compare_keys_test" +tempRef=temp.${label}.ref +tempLog=temp.$label.log + +file1=$ECCODES_SAMPLES_PATH/reduced_gg_pl_32_grib2.tmpl +file2=$ECCODES_SAMPLES_PATH/reduced_gg_pl_48_grib2.tmpl +set +e +$EXEC ${test_dir}/codes_compare_keys $file1 $file2 > $tempLog 2>&1 +status=$? +set -e +[ $status -ne 0 ] + +cat > $tempRef < Date: Mon, 24 Jul 2023 14:24:08 +0000 Subject: [PATCH 047/372] Comparison of accessors: bitmap and concept --- src/grib_accessor_class_concept.cc | 2 + src/grib_accessor_class_data_apply_bitmap.cc | 48 +++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/grib_accessor_class_concept.cc b/src/grib_accessor_class_concept.cc index 192dd1b6b..5e1e19b5c 100644 --- a/src/grib_accessor_class_concept.cc +++ b/src/grib_accessor_class_concept.cc @@ -662,6 +662,8 @@ static int compare(grib_accessor* a, grib_accessor* b) if (alen != blen) return GRIB_COUNT_MISMATCH; + alen = MAX_CONCEPT_STRING_LENGTH; + blen = MAX_CONCEPT_STRING_LENGTH; aval = (char*)grib_context_malloc(a->context, alen * sizeof(char)); bval = (char*)grib_context_malloc(b->context, blen * sizeof(char)); diff --git a/src/grib_accessor_class_data_apply_bitmap.cc b/src/grib_accessor_class_data_apply_bitmap.cc index b8e77e9d0..3f10fa26c 100644 --- a/src/grib_accessor_class_data_apply_bitmap.cc +++ b/src/grib_accessor_class_data_apply_bitmap.cc @@ -22,6 +22,7 @@ IMPLEMENTS = pack_double IMPLEMENTS = value_count IMPLEMENTS = dump;get_native_type + IMPLEMENTS = compare MEMBERS=const char* coded_values MEMBERS=const char* bitmap MEMBERS=const char* missing_value @@ -48,6 +49,7 @@ static int unpack_float(grib_accessor*, float* val, size_t* len); static int value_count(grib_accessor*, long*); static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); +static int compare(grib_accessor*, grib_accessor*); static int unpack_double_element(grib_accessor*, size_t i, double* val); static int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array); @@ -104,7 +106,7 @@ static grib_accessor_class _grib_accessor_class_data_apply_bitmap = { 0, /* resize */ 0, /* nearest_smaller_value */ 0, /* next accessor */ - 0, /* compare vs. another accessor */ + &compare, /* compare vs. another accessor */ &unpack_double_element, /* unpack only ith value (double) */ 0, /* unpack only ith value (float) */ &unpack_double_element_set, /* unpack a given set of elements (double) */ @@ -441,3 +443,47 @@ static int get_native_type(grib_accessor* a) return GRIB_TYPE_DOUBLE; } + +static int compare(grib_accessor* a, grib_accessor* b) +{ + int retval = 0; + double* aval = 0; + double* bval = 0; + + size_t alen = 0; + size_t blen = 0; + int err = 0; + long count = 0; + + err = grib_value_count(a, &count); + if (err) + return err; + alen = count; + + err = grib_value_count(b, &count); + if (err) + return err; + blen = count; + + if (alen != blen) + return GRIB_COUNT_MISMATCH; + + aval = (double*)grib_context_malloc(a->context, alen * sizeof(double)); + bval = (double*)grib_context_malloc(b->context, blen * sizeof(double)); + + grib_unpack_double(a, aval, &alen); + grib_unpack_double(b, bval, &blen); + + retval = GRIB_SUCCESS; + while (alen != 0) { + if (*bval != *aval) + retval = GRIB_DOUBLE_VALUE_MISMATCH; + alen--; + } + + grib_context_free(a->context, aval); + grib_context_free(b->context, bval); + + return retval; +} + From aa1a3ea6e7fb42042c5b875b7fda67680ff76463 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 24 Jul 2023 14:34:04 +0000 Subject: [PATCH 048/372] Testing: Count of failed compares --- tests/codes_compare_keys.cc | 4 +++- tests/codes_compare_keys.sh | 26 ++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/tests/codes_compare_keys.cc b/tests/codes_compare_keys.cc index 9a4027958..484e12f0e 100644 --- a/tests/codes_compare_keys.cc +++ b/tests/codes_compare_keys.cc @@ -18,6 +18,7 @@ int main(int argc, char* argv[]) grib_handle* h2 = NULL; int err = 0; int failed = 0; + size_t count = 0; Assert(argc == 3); f1 = fopen(argv[1], "rb"); @@ -40,6 +41,7 @@ int main(int argc, char* argv[]) if (err) { fprintf(stderr, "key: %s (%s)\n", name, grib_get_error_message(err)); failed = 1; + ++count; } } @@ -50,7 +52,7 @@ int main(int argc, char* argv[]) fclose(f1); fclose(f2); if (failed) { - fprintf(stderr, "\nComparison failed: One or more keys are different\n"); + fprintf(stderr, "\nComparison failed: %zu key(s) are different\n", count); } return failed; } diff --git a/tests/codes_compare_keys.sh b/tests/codes_compare_keys.sh index 5337046ca..398f2009d 100755 --- a/tests/codes_compare_keys.sh +++ b/tests/codes_compare_keys.sh @@ -11,6 +11,7 @@ . ./include.ctest.sh label="codes_compare_keys_test" +tempGrib=temp.${label}.grib tempRef=temp.${label}.ref tempLog=temp.$label.log @@ -37,9 +38,30 @@ key: minutesAfterDataCutoff (Long values are different) key: numberOfValues (Long values are different) key: referenceValue (Double values are different) -Comparison failed: One or more keys are different +Comparison failed: 13 key(s) are different +EOF + +diff $tempRef $tempLog +rm -f $tempRef $tempLog + +# Different values +# --------------------- +input=${data_dir}/sample.grib2 +${tools_dir}/grib_set -s scaleValuesBy=1.01 $input $tempGrib +set +e +$EXEC ${test_dir}/codes_compare_keys $input $tempGrib > $tempLog 2>&1 +status=$? +set -e +[ $status -ne 0 ] +cat $tempLog +cat > $tempRef < Date: Mon, 24 Jul 2023 16:10:24 +0100 Subject: [PATCH 049/372] Dead code removal --- src/grib_accessor_class_concept.cc | 58 ++++-------------------------- 1 file changed, 6 insertions(+), 52 deletions(-) diff --git a/src/grib_accessor_class_concept.cc b/src/grib_accessor_class_concept.cc index 5e1e19b5c..20b76059d 100644 --- a/src/grib_accessor_class_concept.cc +++ b/src/grib_accessor_class_concept.cc @@ -492,58 +492,12 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) return ret; } -static long guess_paramId(grib_handle* h) -{ - int err = 0; - long discipline, category, number; - err = grib_get_long(h, "discipline", &discipline); - if (err || discipline != 192) - return -1; - err = grib_get_long(h, "parameterCategory", &category); - if (err) - return -1; - err = grib_get_long(h, "parameterNumber", &number); - if (err) - return -1; - - if (category == 128) - return number; - else - return (category * 1000 + number); -} - -/* Return -1 if cannot match */ -static long get_ECMWF_local_paramId(grib_accessor* a, grib_handle* h) -{ - int err = 0; - long edition, centre; - if (h->product_kind != PRODUCT_GRIB) - return -1; - err = grib_get_long(h, "centre", ¢re); - if (err) - return -1; - err = grib_get_long(h, "edition", &edition); - if (err) - return -1; - if (edition == 2 && centre == 98 && strncmp(a->name, "paramId", 7) == 0) { - return guess_paramId(h); - } - return -1; -} - static int unpack_long(grib_accessor* a, long* val, size_t* len) { const char* p = concept_evaluate(a); if (!p) { grib_handle* h = grib_handle_of_accessor(a); - const long pid = get_ECMWF_local_paramId(a, h); - if (pid != -1) { - grib_context_log(h->context, GRIB_LOG_DEBUG, "ECMWF local grib2: paramId guessed to be %ld", pid); - *val = pid; - *len = 1; - return GRIB_SUCCESS; - } if (a->creator->defaultkey) return grib_get_long_internal(h, a->creator->defaultkey, val); @@ -651,13 +605,11 @@ static int compare(grib_accessor* a, grib_accessor* b) long count = 0; err = grib_value_count(a, &count); - if (err) - return err; + if (err) return err; alen = count; err = grib_value_count(b, &count); - if (err) - return err; + if (err) return err; blen = count; if (alen != blen) @@ -668,8 +620,10 @@ static int compare(grib_accessor* a, grib_accessor* b) aval = (char*)grib_context_malloc(a->context, alen * sizeof(char)); bval = (char*)grib_context_malloc(b->context, blen * sizeof(char)); - grib_unpack_string(a, aval, &alen); - grib_unpack_string(b, bval, &blen); + err = grib_unpack_string(a, aval, &alen); + if (err) return err; + err = grib_unpack_string(b, bval, &blen); + if (err) return err; retval = GRIB_SUCCESS; if (!aval || !bval || grib_inline_strcmp(aval, bval)) From d92f2b01d58e13cd861af52ba6e09fdf24fe16a8 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 24 Jul 2023 16:10:55 +0100 Subject: [PATCH 050/372] Testing: Comparison of accessors --- tests/codes_compare_keys.cc | 9 ++++----- tests/codes_compare_keys.sh | 4 ++-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/tests/codes_compare_keys.cc b/tests/codes_compare_keys.cc index 484e12f0e..89f37a25d 100644 --- a/tests/codes_compare_keys.cc +++ b/tests/codes_compare_keys.cc @@ -17,7 +17,6 @@ int main(int argc, char* argv[]) grib_handle* h1 = NULL; grib_handle* h2 = NULL; int err = 0; - int failed = 0; size_t count = 0; Assert(argc == 3); @@ -40,7 +39,6 @@ int main(int argc, char* argv[]) err = codes_compare_key(h1, h2, name, 0); if (err) { fprintf(stderr, "key: %s (%s)\n", name, grib_get_error_message(err)); - failed = 1; ++count; } } @@ -51,8 +49,9 @@ int main(int argc, char* argv[]) } fclose(f1); fclose(f2); - if (failed) { - fprintf(stderr, "\nComparison failed: %zu key(s) are different\n", count); + if (count > 0) { + fprintf(stderr, "\nComparison failed: %zu differences\n", count); + return 1; } - return failed; + return 0; } diff --git a/tests/codes_compare_keys.sh b/tests/codes_compare_keys.sh index 398f2009d..c5918f769 100755 --- a/tests/codes_compare_keys.sh +++ b/tests/codes_compare_keys.sh @@ -38,7 +38,7 @@ key: minutesAfterDataCutoff (Long values are different) key: numberOfValues (Long values are different) key: referenceValue (Double values are different) -Comparison failed: 13 key(s) are different +Comparison failed: 13 differences EOF diff $tempRef $tempLog @@ -58,7 +58,7 @@ cat > $tempRef < Date: Mon, 24 Jul 2023 18:45:26 +0000 Subject: [PATCH 051/372] ECC-1644: GRIB2: Changing the PDTN changes the scale factor and scaled value keys --- definitions/grib2/template.4.horizontal.def | 12 ++++++------ definitions/grib3/template.4.horizontal.def | 12 ++++++------ definitions/grib3/template.component.5.0.def | 6 +++--- definitions/grib3/template.component.5.1.def | 12 ++++++------ src/grib_accessor_class_g2level.cc | 2 ++ src/grib_api_internal.h | 1 + src/grib_loader_from_handle.cc | 9 ++++++--- tests/grib_ecc-1560.sh | 8 ++++++++ 8 files changed, 38 insertions(+), 24 deletions(-) diff --git a/definitions/grib2/template.4.horizontal.def b/definitions/grib2/template.4.horizontal.def index 3749b84b4..954888d36 100644 --- a/definitions/grib2/template.4.horizontal.def +++ b/definitions/grib2/template.4.horizontal.def @@ -1,26 +1,26 @@ # (C) Copyright 2005- ECMWF. # Type of first fixed surface -codetable[1] typeOfFirstFixedSurface ('4.5.table',masterDir,localDir) : dump,no_copy,edition_specific,string_type; +codetable[1] typeOfFirstFixedSurface ('4.5.table',masterDir,localDir) : dump,edition_specific,string_type; meta unitsOfFirstFixedSurface codetable_units(typeOfFirstFixedSurface) : dump; meta nameOfFirstFixedSurface codetable_title(typeOfFirstFixedSurface) : dump; # Scale factor of first fixed surface -signed[1] scaleFactorOfFirstFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; +signed[1] scaleFactorOfFirstFixedSurface = missing() : can_be_missing,dump,edition_specific; # Scaled value of first fixed surface -unsigned[4] scaledValueOfFirstFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; +unsigned[4] scaledValueOfFirstFixedSurface = missing() : can_be_missing,dump,edition_specific; # Type of second fixed surface -codetable[1] typeOfSecondFixedSurface ('4.5.table',masterDir,localDir) = 255 : dump,no_copy,edition_specific; +codetable[1] typeOfSecondFixedSurface ('4.5.table',masterDir,localDir) = 255 : dump,edition_specific; meta unitsOfSecondFixedSurface codetable_units(typeOfSecondFixedSurface) : dump; meta nameOfSecondFixedSurface codetable_title(typeOfSecondFixedSurface) : dump; # Scale factor of second fixed surface -signed[1] scaleFactorOfSecondFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; +signed[1] scaleFactorOfSecondFixedSurface = missing() : can_be_missing,dump,edition_specific; # Scaled value of second fixed surface -unsigned[4] scaledValueOfSecondFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; +unsigned[4] scaledValueOfSecondFixedSurface = missing() : can_be_missing,dump,edition_specific; transient pressureUnits="hPa"; diff --git a/definitions/grib3/template.4.horizontal.def b/definitions/grib3/template.4.horizontal.def index 5b1b78233..ed1bc6025 100644 --- a/definitions/grib3/template.4.horizontal.def +++ b/definitions/grib3/template.4.horizontal.def @@ -1,26 +1,26 @@ # (C) Copyright 2005- ECMWF. # Type of first fixed surface -codetable[1] typeOfFirstFixedSurface ('4.5.table',masterDir,localDir) : dump,no_copy,edition_specific,string_type; +codetable[1] typeOfFirstFixedSurface ('4.5.table',masterDir,localDir) : dump,edition_specific,string_type; meta unitsOfFirstFixedSurface codetable_units(typeOfFirstFixedSurface) : dump; meta nameOfFirstFixedSurface codetable_title(typeOfFirstFixedSurface) : dump; # Scale factor of first fixed surface -signed[1] scaleFactorOfFirstFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; +signed[1] scaleFactorOfFirstFixedSurface = missing() : can_be_missing,dump,edition_specific; # Scaled value of first fixed surface -unsigned[4] scaledValueOfFirstFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; +unsigned[4] scaledValueOfFirstFixedSurface = missing() : can_be_missing,dump,edition_specific; # Type of second fixed surface -codetable[1] typeOfSecondFixedSurface ('4.5.table',masterDir,localDir) = 255 : dump,no_copy,edition_specific; +codetable[1] typeOfSecondFixedSurface ('4.5.table',masterDir,localDir) = 255 : dump,edition_specific; meta unitsOfSecondFixedSurface codetable_units(typeOfSecondFixedSurface) : dump; meta nameOfSecondFixedSurface codetable_title(typeOfSecondFixedSurface) : dump; # Scale factor of second fixed surface -signed[1] scaleFactorOfSecondFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; +signed[1] scaleFactorOfSecondFixedSurface = missing() : can_be_missing,dump,edition_specific; # Scaled value of second fixed surface -unsigned[4] scaledValueOfSecondFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; +unsigned[4] scaledValueOfSecondFixedSurface = missing() : can_be_missing,dump,edition_specific; transient pressureUnits="hPa"; diff --git a/definitions/grib3/template.component.5.0.def b/definitions/grib3/template.component.5.0.def index 50cbaa55e..0170577a6 100644 --- a/definitions/grib3/template.component.5.0.def +++ b/definitions/grib3/template.component.5.0.def @@ -1,15 +1,15 @@ # Vertical Coordinate Template Component 5.0 - Vertical level # Type of first fixed surface -codetable[1] typeOfFirstFixedSurface ('5.1.table',masterDir,localDir) : dump,no_copy,edition_specific,string_type; +codetable[1] typeOfFirstFixedSurface ('5.1.table',masterDir,localDir) : dump,edition_specific,string_type; meta unitsOfFirstFixedSurface codetable_units(typeOfFirstFixedSurface) : dump; meta nameOfFirstFixedSurface codetable_title(typeOfFirstFixedSurface) : dump; # Scale factor of first fixed surface -signed[1] scaleFactorOfFirstFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; +signed[1] scaleFactorOfFirstFixedSurface = missing() : can_be_missing,dump,edition_specific; # Scaled value of first fixed surface -unsigned[4] scaledValueOfFirstFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; +unsigned[4] scaledValueOfFirstFixedSurface = missing() : can_be_missing,dump,edition_specific; #### transient pressureUnits="hPa"; diff --git a/definitions/grib3/template.component.5.1.def b/definitions/grib3/template.component.5.1.def index cafaf2c1d..dc3b84ac8 100644 --- a/definitions/grib3/template.component.5.1.def +++ b/definitions/grib3/template.component.5.1.def @@ -1,26 +1,26 @@ # Vertical Coordinate Template Component 5.1 - Vertical layer # Type of first fixed surface -codetable[1] typeOfFirstFixedSurface ('5.1.table',masterDir,localDir) : dump,no_copy,edition_specific,string_type; +codetable[1] typeOfFirstFixedSurface ('5.1.table',masterDir,localDir) : dump,edition_specific,string_type; meta unitsOfFirstFixedSurface codetable_units(typeOfFirstFixedSurface) : dump; meta nameOfFirstFixedSurface codetable_title(typeOfFirstFixedSurface) : dump; # Scale factor of first fixed surface -signed[1] scaleFactorOfFirstFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; +signed[1] scaleFactorOfFirstFixedSurface = missing() : can_be_missing,dump,edition_specific; # Scaled value of first fixed surface -unsigned[4] scaledValueOfFirstFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; +unsigned[4] scaledValueOfFirstFixedSurface = missing() : can_be_missing,dump,edition_specific; # Type of second fixed surface -codetable[1] typeOfSecondFixedSurface ('5.1.table',masterDir,localDir) = 255 : dump,no_copy,edition_specific; +codetable[1] typeOfSecondFixedSurface ('5.1.table',masterDir,localDir) = 255 : dump,edition_specific; meta unitsOfSecondFixedSurface codetable_units(typeOfSecondFixedSurface) : dump; meta nameOfSecondFixedSurface codetable_title(typeOfSecondFixedSurface) : dump; # Scale factor of second fixed surface -signed[1] scaleFactorOfSecondFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; +signed[1] scaleFactorOfSecondFixedSurface = missing() : can_be_missing,dump,edition_specific; # Scaled value of second fixed surface -unsigned[4] scaledValueOfSecondFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; +unsigned[4] scaledValueOfSecondFixedSurface = missing() : can_be_missing,dump,edition_specific; ####### diff --git a/src/grib_accessor_class_g2level.cc b/src/grib_accessor_class_g2level.cc index 8474f924d..f4cc01086 100644 --- a/src/grib_accessor_class_g2level.cc +++ b/src/grib_accessor_class_g2level.cc @@ -121,6 +121,8 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) self->scale_first = grib_arguments_get_name(hand, c, n++); self->value_first = grib_arguments_get_name(hand, c, n++); self->pressure_units = grib_arguments_get_name(hand, c, n++); + + a->flags |= GRIB_ACCESSOR_FLAG_COPY_IF_CHANGING_EDITION; } static void dump(grib_accessor* a, grib_dumper* dumper) diff --git a/src/grib_api_internal.h b/src/grib_api_internal.h index 024bc1c5b..5a39ca0ba 100644 --- a/src/grib_api_internal.h +++ b/src/grib_api_internal.h @@ -574,6 +574,7 @@ struct grib_accessor #define GRIB_ACCESSOR_FLAG_DOUBLE_TYPE (1 << 16) #define GRIB_ACCESSOR_FLAG_LOWERCASE (1 << 17) #define GRIB_ACCESSOR_FLAG_BUFR_COORD (1 << 18) +#define GRIB_ACCESSOR_FLAG_COPY_IF_CHANGING_EDITION (1 << 19) /** * a section accessor diff --git a/src/grib_loader_from_handle.cc b/src/grib_loader_from_handle.cc index e47f9fa92..db2721598 100644 --- a/src/grib_loader_from_handle.cc +++ b/src/grib_loader_from_handle.cc @@ -156,9 +156,12 @@ int grib_init_accessor_from_handle(grib_loader* loader, grib_accessor* ga, grib_ pack_missing = 1; } - long ga_type = grib_accessor_get_native_type(ga); - if (STR_EQUAL(name,"level")) { // See ECC-1560 - ga_type = GRIB_TYPE_DOUBLE; + const long ga_type = grib_accessor_get_native_type(ga); + + if ((ga->flags & GRIB_ACCESSOR_FLAG_COPY_IF_CHANGING_EDITION) && !loader->changing_edition) { + // See ECC-1560 and ECC-1644 + grib_context_log(h->context, GRIB_LOG_DEBUG, "Skipping %s (only copied if changing edition)", ga->name); + return GRIB_SUCCESS; } switch (ga_type) { diff --git a/tests/grib_ecc-1560.sh b/tests/grib_ecc-1560.sh index b83eda55c..6c281d531 100755 --- a/tests/grib_ecc-1560.sh +++ b/tests/grib_ecc-1560.sh @@ -11,11 +11,19 @@ . ./include.ctest.sh label="grib_ecc-1560_test" +temp_PDTN00_Grib=temp.$label.PDTN00.grib temp_PDTN08_Grib=temp.$label.PDTN08.grib temp_PDTN11_Grib=temp.$label.PDTN11.grib tempGrib=temp.$label.grib sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +# scale factor/value set to 0 vs. MISSING +${tools_dir}/grib_set -s scaleFactorOfFirstFixedSurface=0,scaledValueOfFirstFixedSurface=0 \ + $sample_grib2 $temp_PDTN00_Grib +${tools_dir}/grib_set -s productDefinitionTemplateNumber=11 $temp_PDTN00_Grib $temp_PDTN11_Grib +${tools_dir}/grib_compare -b totalLength,section4Length,productDefinitionTemplateNumber $temp_PDTN00_Grib $temp_PDTN11_Grib + + # We set PDTN=8 and level to 1.5 metres above ground ${tools_dir}/grib_set -s \ productDefinitionTemplateNumber=8,typeOfFirstFixedSurface=103,scaledValueOfFirstFixedSurface=15,scaleFactorOfFirstFixedSurface=1 \ From 876097fc60d89de9cd833d90fb26762028fa2391 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 24 Jul 2023 20:43:06 +0000 Subject: [PATCH 052/372] ECC-1644: Further tests --- src/grib_accessor_class_g2level.cc | 1 + tests/grib_ecc-1560.sh | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/grib_accessor_class_g2level.cc b/src/grib_accessor_class_g2level.cc index f4cc01086..dc2597026 100644 --- a/src/grib_accessor_class_g2level.cc +++ b/src/grib_accessor_class_g2level.cc @@ -122,6 +122,7 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) self->value_first = grib_arguments_get_name(hand, c, n++); self->pressure_units = grib_arguments_get_name(hand, c, n++); + // See ECC-1644 a->flags |= GRIB_ACCESSOR_FLAG_COPY_IF_CHANGING_EDITION; } diff --git a/tests/grib_ecc-1560.sh b/tests/grib_ecc-1560.sh index 6c281d531..d2d1de9d5 100755 --- a/tests/grib_ecc-1560.sh +++ b/tests/grib_ecc-1560.sh @@ -17,14 +17,23 @@ temp_PDTN11_Grib=temp.$label.PDTN11.grib tempGrib=temp.$label.grib sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl -# scale factor/value set to 0 vs. MISSING +# ECC-1644 +# -------------- ${tools_dir}/grib_set -s scaleFactorOfFirstFixedSurface=0,scaledValueOfFirstFixedSurface=0 \ $sample_grib2 $temp_PDTN00_Grib ${tools_dir}/grib_set -s productDefinitionTemplateNumber=11 $temp_PDTN00_Grib $temp_PDTN11_Grib ${tools_dir}/grib_compare -b totalLength,section4Length,productDefinitionTemplateNumber $temp_PDTN00_Grib $temp_PDTN11_Grib -# We set PDTN=8 and level to 1.5 metres above ground +${tools_dir}/grib_set -s typeOfFirstFixedSurface=100,scaleFactorOfFirstFixedSurface=-2,scaledValueOfFirstFixedSurface=10 \ + $sample_grib2 $temp_PDTN00_Grib +${tools_dir}/grib_set -s productDefinitionTemplateNumber=11 $temp_PDTN00_Grib $temp_PDTN11_Grib +${tools_dir}/grib_compare -b totalLength,section4Length,productDefinitionTemplateNumber $temp_PDTN00_Grib $temp_PDTN11_Grib + + + +# Set PDTN=8 and level to 1.5 metres above ground +# -------------------------------------------------- ${tools_dir}/grib_set -s \ productDefinitionTemplateNumber=8,typeOfFirstFixedSurface=103,scaledValueOfFirstFixedSurface=15,scaleFactorOfFirstFixedSurface=1 \ $sample_grib2 $temp_PDTN08_Grib From 3c9171ed9793cf168ab42743d888e12a0c40984a Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 25 Jul 2023 10:43:50 +0000 Subject: [PATCH 053/372] ECC-530: GRIB2: Order of setting keys creates a failure --- tests/CMakeLists.txt | 1 + tests/grib_ecc-530.sh | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100755 tests/grib_ecc-530.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index fc4711efc..63a004fd9 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -95,6 +95,7 @@ if( HAVE_BUILD_TOOLS ) grib_suppressed grib_2nd_order_numValues grib_ecc-136 + grib_ecc-530 grib_ecc-922 grib_ecc-966 grib_ecc-967 diff --git a/tests/grib_ecc-530.sh b/tests/grib_ecc-530.sh new file mode 100755 index 000000000..79c48321b --- /dev/null +++ b/tests/grib_ecc-530.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +label="grid_ecc-530_test" +tempGrib=temp.$label.grib +tempFilt=temp.${label}.filt + +sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + +cat > $tempFilt < Date: Tue, 25 Jul 2023 17:47:44 +0000 Subject: [PATCH 054/372] ECC-1645: GRIB: Update parameter long names and move discipline 192 encoding to legacy (part 1) --- .../grib1/localConcepts/ecmf/cfVarName.def | 12 +++++----- definitions/grib1/localConcepts/ecmf/name.def | 24 +++++++++---------- .../grib1/localConcepts/ecmf/paramId.def | 12 +++++----- .../grib1/localConcepts/ecmf/shortName.def | 12 +++++----- .../grib1/localConcepts/ecmf/units.def | 12 +++++----- .../grib2/localConcepts/ecmf/cfVarName.def | 12 +++++----- definitions/grib2/localConcepts/ecmf/name.def | 24 +++++++++---------- .../grib2/localConcepts/ecmf/paramId.def | 12 +++++----- .../grib2/localConcepts/ecmf/shortName.def | 12 +++++----- .../grib2/localConcepts/ecmf/units.def | 12 +++++----- 10 files changed, 72 insertions(+), 72 deletions(-) diff --git a/definitions/grib1/localConcepts/ecmf/cfVarName.def b/definitions/grib1/localConcepts/ecmf/cfVarName.def index 5dc3435b1..806e24d2a 100644 --- a/definitions/grib1/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib1/localConcepts/ecmf/cfVarName.def @@ -4054,32 +4054,32 @@ table2Version = 210 ; indicatorOfParameter = 191 ; } -#UV visible albedo for diffuse radiation, isotropic component +#UV visible albedo for diffuse radiation, isotropic component (climatological) 'aluvdi' = { table2Version = 210 ; indicatorOfParameter = 192 ; } -#UV visible albedo for diffuse radiation, volumetric component +#UV visible albedo for diffuse radiation, volumetric component (climatological) 'aluvdv' = { table2Version = 210 ; indicatorOfParameter = 193 ; } -#UV visible albedo for diffuse radiation, geometric component +#UV visible albedo for diffuse radiation, geometric component (climatological) 'aluvdg' = { table2Version = 210 ; indicatorOfParameter = 194 ; } -#Near IR albedo for diffuse radiation, isotropic component +#Near IR albedo for diffuse radiation, isotropic component (climatological) 'alnidi' = { table2Version = 210 ; indicatorOfParameter = 195 ; } -#Near IR albedo for diffuse radiation, volumetric component +#Near IR albedo for diffuse radiation, volumetric component (climatological) 'alnidv' = { table2Version = 210 ; indicatorOfParameter = 196 ; } -#Near IR albedo for diffuse radiation, geometric component +#Near IR albedo for diffuse radiation, geometric component (climatological) 'alnidg' = { table2Version = 210 ; indicatorOfParameter = 197 ; diff --git a/definitions/grib1/localConcepts/ecmf/name.def b/definitions/grib1/localConcepts/ecmf/name.def index 6e7677835..32e58bb5f 100644 --- a/definitions/grib1/localConcepts/ecmf/name.def +++ b/definitions/grib1/localConcepts/ecmf/name.def @@ -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 (climatological) +'UV visible albedo for diffuse radiation, isotropic component (climatological)' = { 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 (climatological) +'UV visible albedo for diffuse radiation, volumetric component (climatological)' = { 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 (climatological) +'UV visible albedo for diffuse radiation, geometric component (climatological)' = { 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 (climatological) +'Near IR albedo for diffuse radiation, isotropic component (climatological)' = { 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 (climatological) +'Near IR albedo for diffuse radiation, volumetric component (climatological)' = { 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 (climatological) +'Near IR albedo for diffuse radiation, geometric component (climatological)' = { table2Version = 210 ; indicatorOfParameter = 197 ; } diff --git a/definitions/grib1/localConcepts/ecmf/paramId.def b/definitions/grib1/localConcepts/ecmf/paramId.def index f7db4d9f3..9a548e3e0 100644 --- a/definitions/grib1/localConcepts/ecmf/paramId.def +++ b/definitions/grib1/localConcepts/ecmf/paramId.def @@ -4054,32 +4054,32 @@ table2Version = 210 ; indicatorOfParameter = 191 ; } -#UV visible albedo for diffuse radiation, isotropic component +#UV visible albedo for diffuse radiation, isotropic component (climatological) '210192' = { table2Version = 210 ; indicatorOfParameter = 192 ; } -#UV visible albedo for diffuse radiation, volumetric component +#UV visible albedo for diffuse radiation, volumetric component (climatological) '210193' = { table2Version = 210 ; indicatorOfParameter = 193 ; } -#UV visible albedo for diffuse radiation, geometric component +#UV visible albedo for diffuse radiation, geometric component (climatological) '210194' = { table2Version = 210 ; indicatorOfParameter = 194 ; } -#Near IR albedo for diffuse radiation, isotropic component +#Near IR albedo for diffuse radiation, isotropic component (climatological) '210195' = { table2Version = 210 ; indicatorOfParameter = 195 ; } -#Near IR albedo for diffuse radiation, volumetric component +#Near IR albedo for diffuse radiation, volumetric component (climatological) '210196' = { table2Version = 210 ; indicatorOfParameter = 196 ; } -#Near IR albedo for diffuse radiation, geometric component +#Near IR albedo for diffuse radiation, geometric component (climatological) '210197' = { table2Version = 210 ; indicatorOfParameter = 197 ; diff --git a/definitions/grib1/localConcepts/ecmf/shortName.def b/definitions/grib1/localConcepts/ecmf/shortName.def index 02132b9e2..73e8b7fc8 100644 --- a/definitions/grib1/localConcepts/ecmf/shortName.def +++ b/definitions/grib1/localConcepts/ecmf/shortName.def @@ -4054,32 +4054,32 @@ table2Version = 210 ; indicatorOfParameter = 191 ; } -#UV visible albedo for diffuse radiation, isotropic component +#UV visible albedo for diffuse radiation, isotropic component (climatological) 'aluvdi' = { table2Version = 210 ; indicatorOfParameter = 192 ; } -#UV visible albedo for diffuse radiation, volumetric component +#UV visible albedo for diffuse radiation, volumetric component (climatological) 'aluvdv' = { table2Version = 210 ; indicatorOfParameter = 193 ; } -#UV visible albedo for diffuse radiation, geometric component +#UV visible albedo for diffuse radiation, geometric component (climatological) 'aluvdg' = { table2Version = 210 ; indicatorOfParameter = 194 ; } -#Near IR albedo for diffuse radiation, isotropic component +#Near IR albedo for diffuse radiation, isotropic component (climatological) 'alnidi' = { table2Version = 210 ; indicatorOfParameter = 195 ; } -#Near IR albedo for diffuse radiation, volumetric component +#Near IR albedo for diffuse radiation, volumetric component (climatological) 'alnidv' = { table2Version = 210 ; indicatorOfParameter = 196 ; } -#Near IR albedo for diffuse radiation, geometric component +#Near IR albedo for diffuse radiation, geometric component (climatological) 'alnidg' = { table2Version = 210 ; indicatorOfParameter = 197 ; diff --git a/definitions/grib1/localConcepts/ecmf/units.def b/definitions/grib1/localConcepts/ecmf/units.def index a0a826edc..7a47cce75 100644 --- a/definitions/grib1/localConcepts/ecmf/units.def +++ b/definitions/grib1/localConcepts/ecmf/units.def @@ -4054,32 +4054,32 @@ table2Version = 210 ; indicatorOfParameter = 191 ; } -#UV visible albedo for diffuse radiation, isotropic component +#UV visible albedo for diffuse radiation, isotropic component (climatological) '(0 - 1)' = { table2Version = 210 ; indicatorOfParameter = 192 ; } -#UV visible albedo for diffuse radiation, volumetric component +#UV visible albedo for diffuse radiation, volumetric component (climatological) '(0 - 1)' = { table2Version = 210 ; indicatorOfParameter = 193 ; } -#UV visible albedo for diffuse radiation, geometric component +#UV visible albedo for diffuse radiation, geometric component (climatological) '(0 - 1)' = { table2Version = 210 ; indicatorOfParameter = 194 ; } -#Near IR albedo for diffuse radiation, isotropic component +#Near IR albedo for diffuse radiation, isotropic component (climatological) '(0 - 1)' = { table2Version = 210 ; indicatorOfParameter = 195 ; } -#Near IR albedo for diffuse radiation, volumetric component +#Near IR albedo for diffuse radiation, volumetric component (climatological) '(0 - 1)' = { table2Version = 210 ; indicatorOfParameter = 196 ; } -#Near IR albedo for diffuse radiation, geometric component +#Near IR albedo for diffuse radiation, geometric component (climatological) '(0 - 1)' = { table2Version = 210 ; indicatorOfParameter = 197 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index 8c3514541..a696291ed 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -2804,37 +2804,37 @@ parameterNumber = 194 ; typeOfGeneratingProcess = 9 ; } -#UV visible albedo for diffuse radiation, isotropic component +#UV visible albedo for diffuse radiation, isotropic component (climatological) 'aluvdi' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 192 ; } -#UV visible albedo for diffuse radiation, volumetric component +#UV visible albedo for diffuse radiation, volumetric component (climatological) 'aluvdv' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 193 ; } -#UV visible albedo for diffuse radiation, geometric component +#UV visible albedo for diffuse radiation, geometric component (climatological) 'aluvdg' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 194 ; } -#Near IR albedo for diffuse radiation, isotropic component +#Near IR albedo for diffuse radiation, isotropic component (climatological) 'alnidi' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 195 ; } -#Near IR albedo for diffuse radiation, volumetric component +#Near IR albedo for diffuse radiation, volumetric component (climatological) 'alnidv' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 196 ; } -#Near IR albedo for diffuse radiation, geometric component +#Near IR albedo for diffuse radiation, geometric component (climatological) 'alnidg' = { discipline = 192 ; parameterCategory = 210 ; diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index 5fe5902e5..e6d4905b8 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -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 (climatological) +'UV visible albedo for diffuse radiation, isotropic component (climatological)' = { 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 (climatological) +'UV visible albedo for diffuse radiation, volumetric component (climatological)' = { 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 (climatological) +'UV visible albedo for diffuse radiation, geometric component (climatological)' = { 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 (climatological) +'Near IR albedo for diffuse radiation, isotropic component (climatological)' = { 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 (climatological) +'Near IR albedo for diffuse radiation, volumetric component (climatological)' = { 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 (climatological) +'Near IR albedo for diffuse radiation, geometric component (climatological)' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 197 ; diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index 56dba8702..ec89df62a 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -2804,37 +2804,37 @@ parameterNumber = 194 ; typeOfGeneratingProcess = 9 ; } -#UV visible albedo for diffuse radiation, isotropic component +#UV visible albedo for diffuse radiation, isotropic component (climatological) '210192' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 192 ; } -#UV visible albedo for diffuse radiation, volumetric component +#UV visible albedo for diffuse radiation, volumetric component (climatological) '210193' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 193 ; } -#UV visible albedo for diffuse radiation, geometric component +#UV visible albedo for diffuse radiation, geometric component (climatological) '210194' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 194 ; } -#Near IR albedo for diffuse radiation, isotropic component +#Near IR albedo for diffuse radiation, isotropic component (climatological) '210195' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 195 ; } -#Near IR albedo for diffuse radiation, volumetric component +#Near IR albedo for diffuse radiation, volumetric component (climatological) '210196' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 196 ; } -#Near IR albedo for diffuse radiation, geometric component +#Near IR albedo for diffuse radiation, geometric component (climatological) '210197' = { discipline = 192 ; parameterCategory = 210 ; diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index 307bdc4cf..4b96238b2 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -2804,37 +2804,37 @@ parameterNumber = 194 ; typeOfGeneratingProcess = 9 ; } -#UV visible albedo for diffuse radiation, isotropic component +#UV visible albedo for diffuse radiation, isotropic component (climatological) 'aluvdi' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 192 ; } -#UV visible albedo for diffuse radiation, volumetric component +#UV visible albedo for diffuse radiation, volumetric component (climatological) 'aluvdv' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 193 ; } -#UV visible albedo for diffuse radiation, geometric component +#UV visible albedo for diffuse radiation, geometric component (climatological) 'aluvdg' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 194 ; } -#Near IR albedo for diffuse radiation, isotropic component +#Near IR albedo for diffuse radiation, isotropic component (climatological) 'alnidi' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 195 ; } -#Near IR albedo for diffuse radiation, volumetric component +#Near IR albedo for diffuse radiation, volumetric component (climatological) 'alnidv' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 196 ; } -#Near IR albedo for diffuse radiation, geometric component +#Near IR albedo for diffuse radiation, geometric component (climatological) 'alnidg' = { discipline = 192 ; parameterCategory = 210 ; diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index 2ef819f22..43e5c89c0 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -2804,37 +2804,37 @@ parameterNumber = 194 ; typeOfGeneratingProcess = 9 ; } -#UV visible albedo for diffuse radiation, isotropic component +#UV visible albedo for diffuse radiation, isotropic component (climatological) '(0 - 1)' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 192 ; } -#UV visible albedo for diffuse radiation, volumetric component +#UV visible albedo for diffuse radiation, volumetric component (climatological) '(0 - 1)' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 193 ; } -#UV visible albedo for diffuse radiation, geometric component +#UV visible albedo for diffuse radiation, geometric component (climatological) '(0 - 1)' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 194 ; } -#Near IR albedo for diffuse radiation, isotropic component +#Near IR albedo for diffuse radiation, isotropic component (climatological) '(0 - 1)' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 195 ; } -#Near IR albedo for diffuse radiation, volumetric component +#Near IR albedo for diffuse radiation, volumetric component (climatological) '(0 - 1)' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 196 ; } -#Near IR albedo for diffuse radiation, geometric component +#Near IR albedo for diffuse radiation, geometric component (climatological) '(0 - 1)' = { discipline = 192 ; parameterCategory = 210 ; From 210e5c94edcd464c07ae1bc0905ea2a6d079154f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 26 Jul 2023 10:32:46 +0000 Subject: [PATCH 055/372] ECC-1646: Error setting GRIB edition to 2 for parameters: sro, uvb, lsp, e, and pev --- .../localConcepts/ecmf/stepTypeForConversion.def | 14 ++++++++++---- tests/grib1to2.sh | 12 +++++++++++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def b/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def index 4ddc95f31..c649d29a6 100644 --- a/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def +++ b/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def @@ -11,10 +11,8 @@ "accum" = {indicatorOfParameter=146;gribTablesVersionNo=128;centre=98;} # slhf "accum" = {indicatorOfParameter=147;gribTablesVersionNo=128;centre=98;} - # ssrd "accum" = {indicatorOfParameter=169;gribTablesVersionNo=128;centre=98;} - # strd "accum" = {indicatorOfParameter=175;gribTablesVersionNo=128;centre=98;} # ssr @@ -23,9 +21,17 @@ "accum" = {indicatorOfParameter=177;gribTablesVersionNo=128;centre=98;} # ttr "accum" = {indicatorOfParameter=179;gribTablesVersionNo=128;centre=98;} - # sund "accum" = {indicatorOfParameter=189;gribTablesVersionNo=128;centre=98;} - # runoff "accum" = {indicatorOfParameter=205;gribTablesVersionNo=128;centre=98;} +# sro +"accum" = {indicatorOfParameter=8;gribTablesVersionNo=128;centre=98;} +# e +"accum" = {indicatorOfParameter=182;gribTablesVersionNo=128;centre=98;} +# lsp +"accum" = {indicatorOfParameter=142;gribTablesVersionNo=128;centre=98;} +# pev +"accum" = {indicatorOfParameter=251;gribTablesVersionNo=228;centre=98;} +# uvb +"accum" = {indicatorOfParameter=57;gribTablesVersionNo=128;centre=98;} diff --git a/tests/grib1to2.sh b/tests/grib1to2.sh index 1ff2dbaad..4300e21a9 100755 --- a/tests/grib1to2.sh +++ b/tests/grib1to2.sh @@ -91,7 +91,7 @@ grib_check_key_equals $sample_g1 shapeOfTheEarth 0 grib_check_key_equals $output shapeOfTheEarth 0 -echo "ECC-1329: GRIB: Cannot convert runoff (paramId=205)" +echo "ECC-1329: Cannot convert runoff (paramId=205)" # -------------------------------------------------------- temp1="temp1.grib1to2.grib1" temp2="temp2.grib1to2.grib2" @@ -103,4 +103,14 @@ ${tools_dir}/grib_set -s edition=2,startStep=0 $temp1 $temp2 grib_check_key_equals $temp2 stepType,stepRange 'accum 0-240' rm -f $temp1 $temp2 +echo "ECC-1646: Cannot convert sro, uvb, lsp, e, and pev" +# -------------------------------------------------------- +for sn in e lsp pev sro uvb; do + ${tools_dir}/grib_set -s shortName=$sn,typeOfLevel=surface,level=0 $sample_g1 $temp1 + ${tools_dir}/grib_set -s edition=2 $temp1 $temp2 + ${tools_dir}/grib_compare -e -b param $temp1 $temp2 +done + + +# Clean up rm -f $output From 1bc505bc95830be29f7443e1e7b078bb97df0a55 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 26 Jul 2023 10:41:01 +0000 Subject: [PATCH 056/372] Testing: Creation script --- tests/create_test.sh | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/create_test.sh b/tests/create_test.sh index 47e04c547..3be842e8e 100755 --- a/tests/create_test.sh +++ b/tests/create_test.sh @@ -13,6 +13,7 @@ if [ $# -ne 1 ]; then fi TEST_TITLE="$1" +TEST_TITLE=$(echo $TEST_TITLE | tr '[A-Z]' '[a-z]') # Check label is unique grep -i -q "label=\"$TEST_TITLE\"" $TEST_DIR/*.sh @@ -40,15 +41,18 @@ REDIRECT=/dev/null label="prod_${TEST_TITLE}_test" # Change prod to bufr or grib etc tempGrib=temp.\$label.grib tempBufr=temp.\$label.bufr -tempText=temp.\$label.txt +tempFilt=temp.\$label.filt +tempLog=temp.\$label.log +tempRef=temp.\$label.ref -sample_grib1=\$ECCODES_SAMPLES_PATH/GRIB1.tmpl sample_grib2=\$ECCODES_SAMPLES_PATH/GRIB2.tmpl -sample_bufr3=\$ECCODES_SAMPLES_PATH/BUFR3.tmpl sample_bufr4=\$ECCODES_SAMPLES_PATH/BUFR4.tmpl #... #infile=\${data_dir}/SOME_FILE +#cat >\$tempFilt<&2 From d3e0dc5fd6e5c5450359cac4c6fcf5112de6b4f2 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 26 Jul 2023 11:57:13 +0000 Subject: [PATCH 057/372] ECC-1645: GRIB: Update parameter long names and move discipline 192 encoding to legacy (part 1) --- .../localConcepts/ecmf/cfVarName.legacy.def | 36 +++++++++++++++++++ .../grib2/localConcepts/ecmf/name.legacy.def | 36 +++++++++++++++++++ .../localConcepts/ecmf/paramId.legacy.def | 36 +++++++++++++++++++ .../localConcepts/ecmf/shortName.legacy.def | 36 +++++++++++++++++++ .../grib2/localConcepts/ecmf/units.legacy.def | 36 +++++++++++++++++++ 5 files changed, 180 insertions(+) diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def index f0ef927d5..f68e3dbea 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def @@ -967,3 +967,39 @@ parameterCategory = 162 ; parameterNumber = 63 ; } +#UV visible albedo for diffuse radiation, isotropic component (climatological) +'aluvdi' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 192 ; +} +#UV visible albedo for diffuse radiation, volumetric component (climatological) +'aluvdv' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 193 ; +} +#UV visible albedo for diffuse radiation, geometric component (climatological) +'aluvdg' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 194 ; +} +#Near IR albedo for diffuse radiation, isotropic component (climatological) +'alnidi' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 195 ; +} +#Near IR albedo for diffuse radiation, volumetric component (climatological) +'alnidv' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 196 ; +} +#Near IR albedo for diffuse radiation, geometric component (climatological) +'alnidg' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 197 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/name.legacy.def b/definitions/grib2/localConcepts/ecmf/name.legacy.def index 50a64458f..7519aaa8e 100644 --- a/definitions/grib2/localConcepts/ecmf/name.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/name.legacy.def @@ -967,3 +967,39 @@ parameterCategory = 162 ; parameterNumber = 63 ; } +#UV visible albedo for diffuse radiation, isotropic component (climatological) +'UV visible albedo for diffuse radiation, isotropic component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 192 ; +} +#UV visible albedo for diffuse radiation, volumetric component (climatological) +'UV visible albedo for diffuse radiation, volumetric component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 193 ; +} +#UV visible albedo for diffuse radiation, geometric component (climatological) +'UV visible albedo for diffuse radiation, geometric component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 194 ; +} +#Near IR albedo for diffuse radiation, isotropic component (climatological) +'Near IR albedo for diffuse radiation, isotropic component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 195 ; +} +#Near IR albedo for diffuse radiation, volumetric component (climatological) +'Near IR albedo for diffuse radiation, volumetric component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 196 ; +} +#Near IR albedo for diffuse radiation, geometric component (climatological) +'Near IR albedo for diffuse radiation, geometric component (climatological)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 197 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def index 8ac6e9834..8c86a6ba1 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def @@ -967,3 +967,39 @@ parameterCategory = 162 ; parameterNumber = 63 ; } +#UV visible albedo for diffuse radiation, isotropic component (climatological) +'210192' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 192 ; +} +#UV visible albedo for diffuse radiation, volumetric component (climatological) +'210193' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 193 ; +} +#UV visible albedo for diffuse radiation, geometric component (climatological) +'210194' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 194 ; +} +#Near IR albedo for diffuse radiation, isotropic component (climatological) +'210195' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 195 ; +} +#Near IR albedo for diffuse radiation, volumetric component (climatological) +'210196' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 196 ; +} +#Near IR albedo for diffuse radiation, geometric component (climatological) +'210197' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 197 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def index 0c2c2cfcb..571b8bd00 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def @@ -967,3 +967,39 @@ parameterCategory = 162 ; parameterNumber = 63 ; } +#UV visible albedo for diffuse radiation, isotropic component (climatological) +'aluvdi' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 192 ; +} +#UV visible albedo for diffuse radiation, volumetric component (climatological) +'aluvdv' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 193 ; +} +#UV visible albedo for diffuse radiation, geometric component (climatological) +'aluvdg' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 194 ; +} +#Near IR albedo for diffuse radiation, isotropic component (climatological) +'alnidi' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 195 ; +} +#Near IR albedo for diffuse radiation, volumetric component (climatological) +'alnidv' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 196 ; +} +#Near IR albedo for diffuse radiation, geometric component (climatological) +'alnidg' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 197 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/units.legacy.def b/definitions/grib2/localConcepts/ecmf/units.legacy.def index e2ad66fde..7248d1494 100644 --- a/definitions/grib2/localConcepts/ecmf/units.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/units.legacy.def @@ -967,3 +967,39 @@ parameterCategory = 162 ; parameterNumber = 63 ; } +#UV visible albedo for diffuse radiation, isotropic component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 192 ; +} +#UV visible albedo for diffuse radiation, volumetric component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 193 ; +} +#UV visible albedo for diffuse radiation, geometric component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 194 ; +} +#Near IR albedo for diffuse radiation, isotropic component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 195 ; +} +#Near IR albedo for diffuse radiation, volumetric component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 196 ; +} +#Near IR albedo for diffuse radiation, geometric component (climatological) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 197 ; +} From c3387ccedcb5ef3363bc5d9d6432d8881fbf25be Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 26 Jul 2023 13:02:52 +0000 Subject: [PATCH 058/372] ECC-1645: GRIB: Update parameter long names and move discipline 192 encoding to legacy (part 2) --- .../grib2/localConcepts/ecmf/cfVarName.def | 36 ------------------- definitions/grib2/localConcepts/ecmf/name.def | 36 ------------------- .../grib2/localConcepts/ecmf/paramId.def | 36 ------------------- .../grib2/localConcepts/ecmf/shortName.def | 36 ------------------- .../grib2/localConcepts/ecmf/units.def | 36 ------------------- 5 files changed, 180 deletions(-) diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index a696291ed..78aba86ea 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -2804,42 +2804,6 @@ parameterNumber = 194 ; typeOfGeneratingProcess = 9 ; } -#UV visible albedo for diffuse radiation, isotropic component (climatological) -'aluvdi' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 192 ; - } -#UV visible albedo for diffuse radiation, volumetric component (climatological) -'aluvdv' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 193 ; - } -#UV visible albedo for diffuse radiation, geometric component (climatological) -'aluvdg' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 194 ; - } -#Near IR albedo for diffuse radiation, isotropic component (climatological) -'alnidi' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 195 ; - } -#Near IR albedo for diffuse radiation, volumetric component (climatological) -'alnidv' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 196 ; - } -#Near IR albedo for diffuse radiation, geometric component (climatological) -'alnidg' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 197 ; - } #Total aerosol optical depth at 340 nm 'aod340' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index e6d4905b8..ffe0c174a 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -2804,42 +2804,6 @@ parameterNumber = 194 ; typeOfGeneratingProcess = 9 ; } -#UV visible albedo for diffuse radiation, isotropic component (climatological) -'UV visible albedo for diffuse radiation, isotropic component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 192 ; - } -#UV visible albedo for diffuse radiation, volumetric component (climatological) -'UV visible albedo for diffuse radiation, volumetric component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 193 ; - } -#UV visible albedo for diffuse radiation, geometric component (climatological) -'UV visible albedo for diffuse radiation, geometric component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 194 ; - } -#Near IR albedo for diffuse radiation, isotropic component (climatological) -'Near IR albedo for diffuse radiation, isotropic component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 195 ; - } -#Near IR albedo for diffuse radiation, volumetric component (climatological) -'Near IR albedo for diffuse radiation, volumetric component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 196 ; - } -#Near IR albedo for diffuse radiation, geometric component (climatological) -'Near IR albedo for diffuse radiation, geometric component (climatological)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 197 ; - } #Total aerosol optical depth at 340 nm 'Total aerosol optical depth at 340 nm' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index ec89df62a..71cc6caf3 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -2804,42 +2804,6 @@ parameterNumber = 194 ; typeOfGeneratingProcess = 9 ; } -#UV visible albedo for diffuse radiation, isotropic component (climatological) -'210192' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 192 ; - } -#UV visible albedo for diffuse radiation, volumetric component (climatological) -'210193' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 193 ; - } -#UV visible albedo for diffuse radiation, geometric component (climatological) -'210194' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 194 ; - } -#Near IR albedo for diffuse radiation, isotropic component (climatological) -'210195' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 195 ; - } -#Near IR albedo for diffuse radiation, volumetric component (climatological) -'210196' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 196 ; - } -#Near IR albedo for diffuse radiation, geometric component (climatological) -'210197' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 197 ; - } #Total aerosol optical depth at 340 nm '210217' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index 4b96238b2..4e095b0fa 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -2804,42 +2804,6 @@ parameterNumber = 194 ; typeOfGeneratingProcess = 9 ; } -#UV visible albedo for diffuse radiation, isotropic component (climatological) -'aluvdi' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 192 ; - } -#UV visible albedo for diffuse radiation, volumetric component (climatological) -'aluvdv' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 193 ; - } -#UV visible albedo for diffuse radiation, geometric component (climatological) -'aluvdg' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 194 ; - } -#Near IR albedo for diffuse radiation, isotropic component (climatological) -'alnidi' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 195 ; - } -#Near IR albedo for diffuse radiation, volumetric component (climatological) -'alnidv' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 196 ; - } -#Near IR albedo for diffuse radiation, geometric component (climatological) -'alnidg' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 197 ; - } #Total aerosol optical depth at 340 nm 'aod340' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index 43e5c89c0..73bc8485e 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -2804,42 +2804,6 @@ parameterNumber = 194 ; typeOfGeneratingProcess = 9 ; } -#UV visible albedo for diffuse radiation, isotropic component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 192 ; - } -#UV visible albedo for diffuse radiation, volumetric component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 193 ; - } -#UV visible albedo for diffuse radiation, geometric component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 194 ; - } -#Near IR albedo for diffuse radiation, isotropic component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 195 ; - } -#Near IR albedo for diffuse radiation, volumetric component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 196 ; - } -#Near IR albedo for diffuse radiation, geometric component (climatological) -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 210 ; - parameterNumber = 197 ; - } #Total aerosol optical depth at 340 nm '~' = { discipline = 192 ; From 425619e195a7c2b462edc4f0533489c8d9f7084d Mon Sep 17 00:00:00 2001 From: Dusan Figala Date: Wed, 26 Jul 2023 15:29:43 +0200 Subject: [PATCH 059/372] CD: trigger on tags following the versioning scheme --- .github/workflows/cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index ef99a2174..2717a74f7 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -3,7 +3,7 @@ name: cd on: push: tags: - - '**' + - '[0-9]+.[0-9]+.[0-9]+' jobs: deploy: From 5500f340ec7e0247f6c4ab5d6bcb1a09ba2e14f8 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 27 Jul 2023 11:10:11 +0000 Subject: [PATCH 060/372] ECC-1647: GRIB2: Addition of missing fixed surfaces to recently updated parameters --- definitions/grib2/cfVarName.def | 4 ++++ definitions/grib2/name.def | 4 ++++ definitions/grib2/paramId.def | 4 ++++ definitions/grib2/shortName.def | 4 ++++ definitions/grib2/units.def | 4 ++++ 5 files changed, 20 insertions(+) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index fbed8075c..3974f1ae2 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -432,6 +432,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 1 ; } #Instantaneous eastward turbulent surface stress @@ -7017,6 +7019,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Surface runoff 'sro' = { diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index d6c843f5f..91524b578 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -432,6 +432,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 1 ; } #Instantaneous eastward turbulent surface stress @@ -7017,6 +7019,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Surface runoff 'Surface runoff' = { diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 50bc2c511..df2913d8f 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -432,6 +432,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 1 ; } #Instantaneous eastward turbulent surface stress @@ -7017,6 +7019,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Surface runoff '174008' = { diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 395352a11..b27dae912 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -432,6 +432,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 1 ; } #Instantaneous eastward turbulent surface stress @@ -7017,6 +7019,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Surface runoff 'sro' = { diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 84def1118..aa34db1f0 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -432,6 +432,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; typeOfStatisticalProcessing = 1 ; } #Instantaneous eastward turbulent surface stress @@ -7017,6 +7019,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 165 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Surface runoff 'kg m**-2' = { From e524876975d8e0d83382aa85110d7c52d3295e9e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 27 Jul 2023 11:21:53 +0000 Subject: [PATCH 061/372] Testing: MARS keys --- tests/grib_mars_keys2.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/grib_mars_keys2.sh b/tests/grib_mars_keys2.sh index b01a0e774..2e86b581a 100755 --- a/tests/grib_mars_keys2.sh +++ b/tests/grib_mars_keys2.sh @@ -17,16 +17,16 @@ grib2_sample=$ECCODES_SAMPLES_PATH/reduced_gg_pl_32_grib2.tmpl # Check all combinations # ------------------------ -for cfg in $ECCODES_DEFINITION_PATH/mars/grib.*.def; do +i=0 +for cfg in $ECCODES_DEFINITION_PATH/mars/grib.*.*.def; do b=$(basename $cfg) - num=$(echo $b | awk -F. '{print NF}') - if [ $num -eq 4 ]; then - # Each file should be of the form grib.$stream.$type.def - stream=$(echo $b | awk -F. '{print $2}') - type=$(echo $b | awk -F. '{print $3}') - ${tools_dir}/grib_set -s stream=$stream,type=$type $grib2_sample $tempGrib - ${tools_dir}/grib_ls -m $tempGrib - fi + # Each file should be of the form grib.$stream.$type.def + stream=$(echo $b | awk -F. '{print $2}') + type=$(echo $b | awk -F. '{print $3}') + ${tools_dir}/grib_set -s stream=$stream,type=$type $grib2_sample $tempGrib + ${tools_dir}/grib_ls -m $tempGrib > /dev/null + i=$((i + 1)) done +echo "Checked $i files" rm -f $tempGrib From 265b4fc49b0b53465ef2558f2d26b7ef6f2b8826 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 27 Jul 2023 13:15:48 +0100 Subject: [PATCH 062/372] Tools: grib_to_netcdf test for GRIB_TO_NETCDF_CHECKVALIDTIME --- src/latlon.req | 1 - src/spectral.req | 1 - tests/grib_to_netcdf.sh | 19 +++++++++++++++++++ tools/grib_to_netcdf.cc | 6 +++++- 4 files changed, 24 insertions(+), 3 deletions(-) delete mode 100644 src/latlon.req delete mode 100644 src/spectral.req diff --git a/src/latlon.req b/src/latlon.req deleted file mode 100644 index bf3968bfa..000000000 --- a/src/latlon.req +++ /dev/null @@ -1 +0,0 @@ -ret,padding=0,level=500,grid=2/2,area=2/0/0/2,target=latlon.grib diff --git a/src/spectral.req b/src/spectral.req deleted file mode 100644 index 982ce8868..000000000 --- a/src/spectral.req +++ /dev/null @@ -1 +0,0 @@ -ret,padding=0,level=500,resol=21,target=spectral.grib diff --git a/tests/grib_to_netcdf.sh b/tests/grib_to_netcdf.sh index 5c1f13d35..9e2151b7c 100755 --- a/tests/grib_to_netcdf.sh +++ b/tests/grib_to_netcdf.sh @@ -135,5 +135,24 @@ ${tools_dir}/grib_to_netcdf -o $tempNetcdf $tempDir > $tempText grep -q "Processing input file .*/subdir/regular_latlon_surface.grib2" $tempText rm -rf $tempDir +echo "Enable/Disable Checks ..." +# --------------------------------- +rm -f $tempNetcdf +input=${data_dir}/regular_latlon_surface.grib2 +cat $input $input > $tempGrib +# By default checks are enabled. So this should fail +set +e +${tools_dir}/grib_to_netcdf -o $tempNetcdf $tempGrib > $tempText 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Wrong number of fields" $tempText + +export GRIB_TO_NETCDF_CHECKVALIDTIME=0 +${tools_dir}/grib_to_netcdf -o $tempNetcdf $tempGrib +[ -f "$tempNetcdf" ] +unset GRIB_TO_NETCDF_CHECKVALIDTIME + + # Clean up rm -f $tempNetcdf $tempGrib $tempText diff --git a/tools/grib_to_netcdf.cc b/tools/grib_to_netcdf.cc index a4c95f5ed..fec300970 100644 --- a/tools/grib_to_netcdf.cc +++ b/tools/grib_to_netcdf.cc @@ -2107,8 +2107,12 @@ static void get_nc_options(const request* user_r) setup.history = history ? grib_context_strdup(ctx, (history)) : NULL; setup.unlimited = unlimited ? grib_context_strdup(ctx, ((unlimited))) : NULL; + setup.checkvalidtime = true; checkvalidtime_env = getenv("GRIB_TO_NETCDF_CHECKVALIDTIME"); - setup.checkvalidtime = checkvalidtime_env ? atol(checkvalidtime_env) : 1; + if (checkvalidtime_env) { + const long v = atol(checkvalidtime_env); + if (v == 0) setup.checkvalidtime = false; + } setup.mars_description = empty_request("MARS"); } From e241fdcba6e5b70bcbc66533d683c3fbb2a08b34 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 27 Jul 2023 13:17:34 +0100 Subject: [PATCH 063/372] Add extra error codes --- fortran/eccodes_constants.h | 1 + fortran/grib_api_constants.h | 1 + src/eccodes.h | 2 ++ src/grib_api.h | 2 ++ src/grib_api_internal.h | 6 ------ src/grib_errors.cc | 2 +- src/grib_errors.txt | 1 + src/grib_errors_internal.txt | 1 - 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/fortran/eccodes_constants.h b/fortran/eccodes_constants.h index 72383e471..736e3feab 100644 --- a/fortran/eccodes_constants.h +++ b/fortran/eccodes_constants.h @@ -1,3 +1,4 @@ + integer, parameter,public :: CODES_ASSERTION_FAILURE = -79 integer, parameter,public :: CODES_UNABLE_TO_COMPARE_ACCESSORS = -78 integer, parameter,public :: CODES_TYPE_AND_VALUE_MISMATCH = -77 integer, parameter,public :: CODES_TYPE_MISMATCH = -76 diff --git a/fortran/grib_api_constants.h b/fortran/grib_api_constants.h index 0644110a9..f8ea7a226 100644 --- a/fortran/grib_api_constants.h +++ b/fortran/grib_api_constants.h @@ -1,3 +1,4 @@ + integer, parameter,public :: GRIB_ASSERTION_FAILURE = -79 integer, parameter,public :: GRIB_UNABLE_TO_COMPARE_ACCESSORS = -78 integer, parameter,public :: GRIB_TYPE_AND_VALUE_MISMATCH = -77 integer, parameter,public :: GRIB_TYPE_MISMATCH = -76 diff --git a/src/eccodes.h b/src/eccodes.h index 9509afe10..bded1a49c 100644 --- a/src/eccodes.h +++ b/src/eccodes.h @@ -1618,5 +1618,7 @@ Error codes returned by the eccodes functions. #define CODES_TYPE_AND_VALUE_MISMATCH GRIB_TYPE_AND_VALUE_MISMATCH /** Unable to compare accessors */ #define CODES_UNABLE_TO_COMPARE_ACCESSORS GRIB_UNABLE_TO_COMPARE_ACCESSORS +/** Assertion failure */ +#define CODES_ASSERTION_FAILURE GRIB_ASSERTION_FAILURE /*! @}*/ #endif diff --git a/src/grib_api.h b/src/grib_api.h index 7c830e495..cc0ddb5cc 100644 --- a/src/grib_api.h +++ b/src/grib_api.h @@ -1812,5 +1812,7 @@ Error codes returned by the grib_api functions. #define GRIB_TYPE_AND_VALUE_MISMATCH -77 /** Unable to compare accessors */ #define GRIB_UNABLE_TO_COMPARE_ACCESSORS -78 +/** Assertion failure */ +#define GRIB_ASSERTION_FAILURE -79 /*! @}*/ #endif diff --git a/src/grib_api_internal.h b/src/grib_api_internal.h index 5a39ca0ba..d47de3a9b 100644 --- a/src/grib_api_internal.h +++ b/src/grib_api_internal.h @@ -1562,9 +1562,3 @@ typedef struct j2k_encode_helper #endif -/* This part is automatically generated by ./errors.pl, do not edit */ -#ifndef grib_errors_internal_H -#define grib_errors_internal_H -/** Assertion failure */ -#define GRIB_ASSERTION_FAILURE 13 -#endif diff --git a/src/grib_errors.cc b/src/grib_errors.cc index 97b384c83..ac61a6154 100644 --- a/src/grib_errors.cc +++ b/src/grib_errors.cc @@ -91,7 +91,7 @@ static const char *errors[] = { "Type mismatch", /* -76 GRIB_TYPE_MISMATCH */ "Type and value mismatch", /* -77 GRIB_TYPE_AND_VALUE_MISMATCH */ "Unable to compare accessors", /* -78 GRIB_UNABLE_TO_COMPARE_ACCESSORS */ -"Assertion failure", /* 2 GRIB_ASSERTION_FAILURE */ +"Assertion failure", /* -79 GRIB_ASSERTION_FAILURE */ }; #define NUMBER(a) sizeof(a)/sizeof(a[0]) diff --git a/src/grib_errors.txt b/src/grib_errors.txt index 3d592da57..6019f6601 100644 --- a/src/grib_errors.txt +++ b/src/grib_errors.txt @@ -84,3 +84,4 @@ GRIB_NAME_MISMATCH Name mismatch GRIB_TYPE_MISMATCH Type mismatch GRIB_TYPE_AND_VALUE_MISMATCH Type and value mismatch GRIB_UNABLE_TO_COMPARE_ACCESSORS Unable to compare accessors +GRIB_ASSERTION_FAILURE Assertion failure diff --git a/src/grib_errors_internal.txt b/src/grib_errors_internal.txt index 3f88945d1..e69de29bb 100644 --- a/src/grib_errors_internal.txt +++ b/src/grib_errors_internal.txt @@ -1 +0,0 @@ -GRIB_ASSERTION_FAILURE Assertion failure From 4e5146d6813191f181a9a25b5d46ecd07830c89c Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 28 Jul 2023 10:21:21 +0000 Subject: [PATCH 064/372] ECC-1648: GRIB2: Update encodings of accumulated tendency parameters (part 1) --- .../grib1/localConcepts/ecmf/cfVarName.def | 56 +++++++++---------- definitions/grib1/localConcepts/ecmf/name.def | 56 +++++++++---------- .../grib1/localConcepts/ecmf/paramId.def | 28 +++++----- .../grib1/localConcepts/ecmf/shortName.def | 28 +++++----- .../grib1/localConcepts/ecmf/units.def | 28 +++++----- .../grib2/localConcepts/ecmf/cfVarName.def | 46 +++++++-------- definitions/grib2/localConcepts/ecmf/name.def | 56 +++++++++---------- .../grib2/localConcepts/ecmf/paramId.def | 28 +++++----- .../grib2/localConcepts/ecmf/shortName.def | 28 +++++----- .../grib2/localConcepts/ecmf/units.def | 28 +++++----- 10 files changed, 191 insertions(+), 191 deletions(-) diff --git a/definitions/grib1/localConcepts/ecmf/cfVarName.def b/definitions/grib1/localConcepts/ecmf/cfVarName.def index 806e24d2a..9a1427af6 100644 --- a/definitions/grib1/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib1/localConcepts/ecmf/cfVarName.def @@ -13834,73 +13834,73 @@ table2Version = 162 ; indicatorOfParameter = 87 ; } -#Tendency of short wave radiation -'p100.162' = { +#Time-integrated temperature tendency due to short-wave radiation +'srta' = { table2Version = 162 ; indicatorOfParameter = 100 ; } -#Tendency of long wave radiation -'p101.162' = { +#Time-integrated temperature tendency due to long-wave radiation +'trta' = { table2Version = 162 ; indicatorOfParameter = 101 ; } -#Tendency of clear sky short wave radiation -'p102.162' = { +#Time-integrated temperature tendency due to short wave radiation, clear sky +'srtca' = { table2Version = 162 ; indicatorOfParameter = 102 ; } -#Tendency of clear sky long wave radiation -'p103.162' = { +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'trtca' = { table2Version = 162 ; indicatorOfParameter = 103 ; } -#Updraught mass flux -'p104.162' = { +#Time-integrated updraught mass flux +'umfa' = { table2Version = 162 ; indicatorOfParameter = 104 ; } -#Downdraught mass flux -'p105.162' = { +#Time-integrated downdraught mass flux +'dmfa' = { table2Version = 162 ; indicatorOfParameter = 105 ; } -#Updraught detrainment rate -'p106.162' = { +#Time-integrated updraught detrainment rate +'udra' = { table2Version = 162 ; indicatorOfParameter = 106 ; } -#Downdraught detrainment rate -'p107.162' = { +#Time-integrated downdraught detrainment rate +'ddra' = { table2Version = 162 ; indicatorOfParameter = 107 ; } -#Total precipitation flux -'p108.162' = { +#Time-integrated total precipitation flux +'tpfa' = { table2Version = 162 ; indicatorOfParameter = 108 ; } -#Turbulent diffusion coefficient for heat -'p109.162' = { +#Time-integrated turbulent diffusion coefficient for heat +'tdcha' = { table2Version = 162 ; indicatorOfParameter = 109 ; } -#Tendency of temperature due to physics -'p110.162' = { +#Time-integrated temperature tendency due to parametrisations +'ttpha' = { table2Version = 162 ; indicatorOfParameter = 110 ; } -#Tendency of specific humidity due to physics -'p111.162' = { +#Time-integrated specific humidity tendency due to parametrisations +'qtpha' = { table2Version = 162 ; indicatorOfParameter = 111 ; } -#Tendency of u component due to physics -'p112.162' = { +#Time-integrated eastward wind tendency due to parametrisations +'utpha' = { table2Version = 162 ; indicatorOfParameter = 112 ; } -#Tendency of v component due to physics -'p113.162' = { +#Time-integrated northward wind tendency due to parametrisations +'vtpha' = { table2Version = 162 ; indicatorOfParameter = 113 ; } diff --git a/definitions/grib1/localConcepts/ecmf/name.def b/definitions/grib1/localConcepts/ecmf/name.def index 32e58bb5f..035d18919 100644 --- a/definitions/grib1/localConcepts/ecmf/name.def +++ b/definitions/grib1/localConcepts/ecmf/name.def @@ -13834,73 +13834,73 @@ table2Version = 162 ; indicatorOfParameter = 87 ; } -#Tendency of short wave radiation -'Tendency of short wave radiation' = { +#Time-integrated temperature tendency due to short-wave radiation +'Time-integrated temperature tendency due to short-wave radiation' = { table2Version = 162 ; indicatorOfParameter = 100 ; } -#Tendency of long wave radiation -'Tendency of long wave radiation' = { +#Time-integrated temperature tendency due to long-wave radiation +'Time-integrated temperature tendency due to long-wave radiation' = { table2Version = 162 ; indicatorOfParameter = 101 ; } -#Tendency of clear sky short wave radiation -'Tendency of clear sky short wave radiation' = { +#Time-integrated temperature tendency due to short wave radiation, clear sky +'Time-integrated temperature tendency due to short wave radiation, clear sky' = { table2Version = 162 ; indicatorOfParameter = 102 ; } -#Tendency of clear sky long wave radiation -'Tendency of clear sky long wave radiation' = { +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'Time-integrated temperature tendency due to long-wave radiation, clear sky' = { table2Version = 162 ; indicatorOfParameter = 103 ; } -#Updraught mass flux -'Updraught mass flux' = { +#Time-integrated updraught mass flux +'Time-integrated updraught mass flux' = { table2Version = 162 ; indicatorOfParameter = 104 ; } -#Downdraught mass flux -'Downdraught mass flux' = { +#Time-integrated downdraught mass flux +'Time-integrated downdraught mass flux' = { table2Version = 162 ; indicatorOfParameter = 105 ; } -#Updraught detrainment rate -'Updraught detrainment rate' = { +#Time-integrated updraught detrainment rate +'Time-integrated updraught detrainment rate' = { table2Version = 162 ; indicatorOfParameter = 106 ; } -#Downdraught detrainment rate -'Downdraught detrainment rate' = { +#Time-integrated downdraught detrainment rate +'Time-integrated downdraught detrainment rate' = { table2Version = 162 ; indicatorOfParameter = 107 ; } -#Total precipitation flux -'Total precipitation flux' = { +#Time-integrated total precipitation flux +'Time-integrated total precipitation flux' = { table2Version = 162 ; indicatorOfParameter = 108 ; } -#Turbulent diffusion coefficient for heat -'Turbulent diffusion coefficient for heat' = { +#Time-integrated turbulent diffusion coefficient for heat +'Time-integrated turbulent diffusion coefficient for heat' = { table2Version = 162 ; indicatorOfParameter = 109 ; } -#Tendency of temperature due to physics -'Tendency of temperature due to physics' = { +#Time-integrated temperature tendency due to parametrisations +'Time-integrated temperature tendency due to parametrisations' = { table2Version = 162 ; indicatorOfParameter = 110 ; } -#Tendency of specific humidity due to physics -'Tendency of specific humidity due to physics' = { +#Time-integrated specific humidity tendency due to parametrisations +'Time-integrated specific humidity tendency due to parametrisations' = { table2Version = 162 ; indicatorOfParameter = 111 ; } -#Tendency of u component due to physics -'Tendency of u component due to physics' = { +#Time-integrated eastward wind tendency due to parametrisations +'Time-integrated eastward wind tendency due to parametrisations' = { table2Version = 162 ; indicatorOfParameter = 112 ; } -#Tendency of v component due to physics -'Tendency of v component due to physics' = { +#Time-integrated northward wind tendency due to parametrisations +'Time-integrated northward wind tendency due to parametrisations' = { table2Version = 162 ; indicatorOfParameter = 113 ; } diff --git a/definitions/grib1/localConcepts/ecmf/paramId.def b/definitions/grib1/localConcepts/ecmf/paramId.def index 9a548e3e0..ad2c54d37 100644 --- a/definitions/grib1/localConcepts/ecmf/paramId.def +++ b/definitions/grib1/localConcepts/ecmf/paramId.def @@ -13834,72 +13834,72 @@ table2Version = 162 ; indicatorOfParameter = 87 ; } -#Tendency of short wave radiation +#Time-integrated temperature tendency due to short-wave radiation '162100' = { table2Version = 162 ; indicatorOfParameter = 100 ; } -#Tendency of long wave radiation +#Time-integrated temperature tendency due to long-wave radiation '162101' = { table2Version = 162 ; indicatorOfParameter = 101 ; } -#Tendency of clear sky short wave radiation +#Time-integrated temperature tendency due to short wave radiation, clear sky '162102' = { table2Version = 162 ; indicatorOfParameter = 102 ; } -#Tendency of clear sky long wave radiation +#Time-integrated temperature tendency due to long-wave radiation, clear sky '162103' = { table2Version = 162 ; indicatorOfParameter = 103 ; } -#Updraught mass flux +#Time-integrated updraught mass flux '162104' = { table2Version = 162 ; indicatorOfParameter = 104 ; } -#Downdraught mass flux +#Time-integrated downdraught mass flux '162105' = { table2Version = 162 ; indicatorOfParameter = 105 ; } -#Updraught detrainment rate +#Time-integrated updraught detrainment rate '162106' = { table2Version = 162 ; indicatorOfParameter = 106 ; } -#Downdraught detrainment rate +#Time-integrated downdraught detrainment rate '162107' = { table2Version = 162 ; indicatorOfParameter = 107 ; } -#Total precipitation flux +#Time-integrated total precipitation flux '162108' = { table2Version = 162 ; indicatorOfParameter = 108 ; } -#Turbulent diffusion coefficient for heat +#Time-integrated turbulent diffusion coefficient for heat '162109' = { table2Version = 162 ; indicatorOfParameter = 109 ; } -#Tendency of temperature due to physics +#Time-integrated temperature tendency due to parametrisations '162110' = { table2Version = 162 ; indicatorOfParameter = 110 ; } -#Tendency of specific humidity due to physics +#Time-integrated specific humidity tendency due to parametrisations '162111' = { table2Version = 162 ; indicatorOfParameter = 111 ; } -#Tendency of u component due to physics +#Time-integrated eastward wind tendency due to parametrisations '162112' = { table2Version = 162 ; indicatorOfParameter = 112 ; } -#Tendency of v component due to physics +#Time-integrated northward wind tendency due to parametrisations '162113' = { table2Version = 162 ; indicatorOfParameter = 113 ; diff --git a/definitions/grib1/localConcepts/ecmf/shortName.def b/definitions/grib1/localConcepts/ecmf/shortName.def index 73e8b7fc8..bc3f286fe 100644 --- a/definitions/grib1/localConcepts/ecmf/shortName.def +++ b/definitions/grib1/localConcepts/ecmf/shortName.def @@ -13834,72 +13834,72 @@ table2Version = 162 ; indicatorOfParameter = 87 ; } -#Tendency of short wave radiation +#Time-integrated temperature tendency due to short-wave radiation 'srta' = { table2Version = 162 ; indicatorOfParameter = 100 ; } -#Tendency of long wave radiation +#Time-integrated temperature tendency due to long-wave radiation 'trta' = { table2Version = 162 ; indicatorOfParameter = 101 ; } -#Tendency of clear sky short wave radiation +#Time-integrated temperature tendency due to short wave radiation, clear sky 'srtca' = { table2Version = 162 ; indicatorOfParameter = 102 ; } -#Tendency of clear sky long wave radiation +#Time-integrated temperature tendency due to long-wave radiation, clear sky 'trtca' = { table2Version = 162 ; indicatorOfParameter = 103 ; } -#Updraught mass flux +#Time-integrated updraught mass flux 'umfa' = { table2Version = 162 ; indicatorOfParameter = 104 ; } -#Downdraught mass flux +#Time-integrated downdraught mass flux 'dmfa' = { table2Version = 162 ; indicatorOfParameter = 105 ; } -#Updraught detrainment rate +#Time-integrated updraught detrainment rate 'udra' = { table2Version = 162 ; indicatorOfParameter = 106 ; } -#Downdraught detrainment rate +#Time-integrated downdraught detrainment rate 'ddra' = { table2Version = 162 ; indicatorOfParameter = 107 ; } -#Total precipitation flux +#Time-integrated total precipitation flux 'tpfa' = { table2Version = 162 ; indicatorOfParameter = 108 ; } -#Turbulent diffusion coefficient for heat +#Time-integrated turbulent diffusion coefficient for heat 'tdcha' = { table2Version = 162 ; indicatorOfParameter = 109 ; } -#Tendency of temperature due to physics +#Time-integrated temperature tendency due to parametrisations 'ttpha' = { table2Version = 162 ; indicatorOfParameter = 110 ; } -#Tendency of specific humidity due to physics +#Time-integrated specific humidity tendency due to parametrisations 'qtpha' = { table2Version = 162 ; indicatorOfParameter = 111 ; } -#Tendency of u component due to physics +#Time-integrated eastward wind tendency due to parametrisations 'utpha' = { table2Version = 162 ; indicatorOfParameter = 112 ; } -#Tendency of v component due to physics +#Time-integrated northward wind tendency due to parametrisations 'vtpha' = { table2Version = 162 ; indicatorOfParameter = 113 ; diff --git a/definitions/grib1/localConcepts/ecmf/units.def b/definitions/grib1/localConcepts/ecmf/units.def index 7a47cce75..6df0d3fae 100644 --- a/definitions/grib1/localConcepts/ecmf/units.def +++ b/definitions/grib1/localConcepts/ecmf/units.def @@ -13834,72 +13834,72 @@ table2Version = 162 ; indicatorOfParameter = 87 ; } -#Tendency of short wave radiation +#Time-integrated temperature tendency due to short-wave radiation 'K' = { table2Version = 162 ; indicatorOfParameter = 100 ; } -#Tendency of long wave radiation +#Time-integrated temperature tendency due to long-wave radiation 'K' = { table2Version = 162 ; indicatorOfParameter = 101 ; } -#Tendency of clear sky short wave radiation +#Time-integrated temperature tendency due to short wave radiation, clear sky 'K' = { table2Version = 162 ; indicatorOfParameter = 102 ; } -#Tendency of clear sky long wave radiation +#Time-integrated temperature tendency due to long-wave radiation, clear sky 'K' = { table2Version = 162 ; indicatorOfParameter = 103 ; } -#Updraught mass flux +#Time-integrated updraught mass flux 'kg m**-2' = { table2Version = 162 ; indicatorOfParameter = 104 ; } -#Downdraught mass flux +#Time-integrated downdraught mass flux 'kg m**-2' = { table2Version = 162 ; indicatorOfParameter = 105 ; } -#Updraught detrainment rate +#Time-integrated updraught detrainment rate 'kg m**-3' = { table2Version = 162 ; indicatorOfParameter = 106 ; } -#Downdraught detrainment rate +#Time-integrated downdraught detrainment rate 'kg m**-3' = { table2Version = 162 ; indicatorOfParameter = 107 ; } -#Total precipitation flux +#Time-integrated total precipitation flux 'kg m**-2' = { table2Version = 162 ; indicatorOfParameter = 108 ; } -#Turbulent diffusion coefficient for heat +#Time-integrated turbulent diffusion coefficient for heat 'm**2' = { table2Version = 162 ; indicatorOfParameter = 109 ; } -#Tendency of temperature due to physics +#Time-integrated temperature tendency due to parametrisations 'K' = { table2Version = 162 ; indicatorOfParameter = 110 ; } -#Tendency of specific humidity due to physics +#Time-integrated specific humidity tendency due to parametrisations 'kg kg**-1' = { table2Version = 162 ; indicatorOfParameter = 111 ; } -#Tendency of u component due to physics +#Time-integrated eastward wind tendency due to parametrisations 'm s**-1' = { table2Version = 162 ; indicatorOfParameter = 112 ; } -#Tendency of v component due to physics +#Time-integrated northward wind tendency due to parametrisations 'm s**-1' = { table2Version = 162 ; indicatorOfParameter = 113 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index 78aba86ea..376c7a6ad 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -10960,7 +10960,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 ; @@ -10969,7 +10969,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 ; @@ -12298,7 +12298,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 ; @@ -12307,7 +12307,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 ; @@ -13552,7 +13552,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 ; @@ -13561,7 +13561,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 ; @@ -13620,7 +13620,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 ; @@ -13630,7 +13630,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 ; @@ -13640,7 +13640,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 ; @@ -17677,85 +17677,85 @@ parameterCategory = 162 ; parameterNumber = 87 ; } -#Tendency of short wave radiation +#Time-integrated temperature tendency due to short-wave radiation 'srta' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 100 ; } -#Tendency of long wave radiation +#Time-integrated temperature tendency due to long-wave radiation 'trta' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 101 ; } -#Tendency of clear sky short wave radiation +#Time-integrated temperature tendency due to short wave radiation, clear sky 'srtca' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 102 ; } -#Tendency of clear sky long wave radiation +#Time-integrated temperature tendency due to long-wave radiation, clear sky 'trtca' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 103 ; } -#Updraught mass flux +#Time-integrated updraught mass flux 'umfa' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 104 ; } -#Downdraught mass flux +#Time-integrated downdraught mass flux 'dmfa' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 105 ; } -#Updraught detrainment rate +#Time-integrated updraught detrainment rate 'udra' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 106 ; } -#Downdraught detrainment rate +#Time-integrated downdraught detrainment rate 'ddra' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 107 ; } -#Total precipitation flux +#Time-integrated total precipitation flux 'tpfa' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 108 ; } -#Turbulent diffusion coefficient for heat +#Time-integrated turbulent diffusion coefficient for heat 'tdcha' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 109 ; } -#Tendency of temperature due to physics +#Time-integrated temperature tendency due to parametrisations 'ttpha' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 110 ; } -#Tendency of specific humidity due to physics +#Time-integrated specific humidity tendency due to parametrisations 'qtpha' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 111 ; } -#Tendency of u component due to physics +#Time-integrated eastward wind tendency due to parametrisations 'utpha' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 112 ; } -#Tendency of v component due to physics +#Time-integrated northward wind tendency due to parametrisations 'vtpha' = { discipline = 192 ; parameterCategory = 162 ; diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index ffe0c174a..e01d37d06 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -17677,86 +17677,86 @@ parameterCategory = 162 ; parameterNumber = 87 ; } -#Tendency of short wave radiation -'Tendency of short wave radiation' = { +#Time-integrated temperature tendency due to short-wave radiation +'Time-integrated temperature tendency due to short-wave radiation' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 100 ; } -#Tendency of long wave radiation -'Tendency of long wave radiation' = { +#Time-integrated temperature tendency due to long-wave radiation +'Time-integrated temperature tendency due to long-wave radiation' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 101 ; } -#Tendency of clear sky short wave radiation -'Tendency of clear sky short wave radiation' = { +#Time-integrated temperature tendency due to short wave radiation, clear sky +'Time-integrated temperature tendency due to short wave radiation, clear sky' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 102 ; } -#Tendency of clear sky long wave radiation -'Tendency of clear sky long wave radiation' = { +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'Time-integrated temperature tendency due to long-wave radiation, clear sky' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 103 ; } -#Updraught mass flux -'Updraught mass flux' = { +#Time-integrated updraught mass flux +'Time-integrated updraught mass flux' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 104 ; } -#Downdraught mass flux -'Downdraught mass flux' = { +#Time-integrated downdraught mass flux +'Time-integrated downdraught mass flux' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 105 ; } -#Updraught detrainment rate -'Updraught detrainment rate' = { +#Time-integrated updraught detrainment rate +'Time-integrated updraught detrainment rate' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 106 ; } -#Downdraught detrainment rate -'Downdraught detrainment rate' = { +#Time-integrated downdraught detrainment rate +'Time-integrated downdraught detrainment rate' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 107 ; } -#Total precipitation flux -'Total precipitation flux' = { +#Time-integrated total precipitation flux +'Time-integrated total precipitation flux' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 108 ; } -#Turbulent diffusion coefficient for heat -'Turbulent diffusion coefficient for heat' = { +#Time-integrated turbulent diffusion coefficient for heat +'Time-integrated turbulent diffusion coefficient for heat' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 109 ; } -#Tendency of temperature due to physics -'Tendency of temperature due to physics' = { +#Time-integrated temperature tendency due to parametrisations +'Time-integrated temperature tendency due to parametrisations' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 110 ; } -#Tendency of specific humidity due to physics -'Tendency of specific humidity due to physics' = { +#Time-integrated specific humidity tendency due to parametrisations +'Time-integrated specific humidity tendency due to parametrisations' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 111 ; } -#Tendency of u component due to physics -'Tendency of u component due to physics' = { +#Time-integrated eastward wind tendency due to parametrisations +'Time-integrated eastward wind tendency due to parametrisations' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 112 ; } -#Tendency of v component due to physics -'Tendency of v component due to physics' = { +#Time-integrated northward wind tendency due to parametrisations +'Time-integrated northward wind tendency due to parametrisations' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 113 ; diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index 71cc6caf3..66111dec2 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -17677,85 +17677,85 @@ parameterCategory = 162 ; parameterNumber = 87 ; } -#Tendency of short wave radiation +#Time-integrated temperature tendency due to short-wave radiation '162100' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 100 ; } -#Tendency of long wave radiation +#Time-integrated temperature tendency due to long-wave radiation '162101' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 101 ; } -#Tendency of clear sky short wave radiation +#Time-integrated temperature tendency due to short wave radiation, clear sky '162102' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 102 ; } -#Tendency of clear sky long wave radiation +#Time-integrated temperature tendency due to long-wave radiation, clear sky '162103' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 103 ; } -#Updraught mass flux +#Time-integrated updraught mass flux '162104' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 104 ; } -#Downdraught mass flux +#Time-integrated downdraught mass flux '162105' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 105 ; } -#Updraught detrainment rate +#Time-integrated updraught detrainment rate '162106' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 106 ; } -#Downdraught detrainment rate +#Time-integrated downdraught detrainment rate '162107' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 107 ; } -#Total precipitation flux +#Time-integrated total precipitation flux '162108' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 108 ; } -#Turbulent diffusion coefficient for heat +#Time-integrated turbulent diffusion coefficient for heat '162109' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 109 ; } -#Tendency of temperature due to physics +#Time-integrated temperature tendency due to parametrisations '162110' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 110 ; } -#Tendency of specific humidity due to physics +#Time-integrated specific humidity tendency due to parametrisations '162111' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 111 ; } -#Tendency of u component due to physics +#Time-integrated eastward wind tendency due to parametrisations '162112' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 112 ; } -#Tendency of v component due to physics +#Time-integrated northward wind tendency due to parametrisations '162113' = { discipline = 192 ; parameterCategory = 162 ; diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index 4e095b0fa..663766887 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -17677,85 +17677,85 @@ parameterCategory = 162 ; parameterNumber = 87 ; } -#Tendency of short wave radiation +#Time-integrated temperature tendency due to short-wave radiation 'srta' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 100 ; } -#Tendency of long wave radiation +#Time-integrated temperature tendency due to long-wave radiation 'trta' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 101 ; } -#Tendency of clear sky short wave radiation +#Time-integrated temperature tendency due to short wave radiation, clear sky 'srtca' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 102 ; } -#Tendency of clear sky long wave radiation +#Time-integrated temperature tendency due to long-wave radiation, clear sky 'trtca' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 103 ; } -#Updraught mass flux +#Time-integrated updraught mass flux 'umfa' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 104 ; } -#Downdraught mass flux +#Time-integrated downdraught mass flux 'dmfa' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 105 ; } -#Updraught detrainment rate +#Time-integrated updraught detrainment rate 'udra' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 106 ; } -#Downdraught detrainment rate +#Time-integrated downdraught detrainment rate 'ddra' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 107 ; } -#Total precipitation flux +#Time-integrated total precipitation flux 'tpfa' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 108 ; } -#Turbulent diffusion coefficient for heat +#Time-integrated turbulent diffusion coefficient for heat 'tdcha' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 109 ; } -#Tendency of temperature due to physics +#Time-integrated temperature tendency due to parametrisations 'ttpha' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 110 ; } -#Tendency of specific humidity due to physics +#Time-integrated specific humidity tendency due to parametrisations 'qtpha' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 111 ; } -#Tendency of u component due to physics +#Time-integrated eastward wind tendency due to parametrisations 'utpha' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 112 ; } -#Tendency of v component due to physics +#Time-integrated northward wind tendency due to parametrisations 'vtpha' = { discipline = 192 ; parameterCategory = 162 ; diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index 73bc8485e..497819237 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -17677,85 +17677,85 @@ parameterCategory = 162 ; parameterNumber = 87 ; } -#Tendency of short wave radiation +#Time-integrated temperature tendency due to short-wave radiation 'K' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 100 ; } -#Tendency of long wave radiation +#Time-integrated temperature tendency due to long-wave radiation 'K' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 101 ; } -#Tendency of clear sky short wave radiation +#Time-integrated temperature tendency due to short wave radiation, clear sky 'K' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 102 ; } -#Tendency of clear sky long wave radiation +#Time-integrated temperature tendency due to long-wave radiation, clear sky 'K' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 103 ; } -#Updraught mass flux +#Time-integrated updraught mass flux 'kg m**-2' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 104 ; } -#Downdraught mass flux +#Time-integrated downdraught mass flux 'kg m**-2' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 105 ; } -#Updraught detrainment rate +#Time-integrated updraught detrainment rate 'kg m**-3' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 106 ; } -#Downdraught detrainment rate +#Time-integrated downdraught detrainment rate 'kg m**-3' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 107 ; } -#Total precipitation flux +#Time-integrated total precipitation flux 'kg m**-2' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 108 ; } -#Turbulent diffusion coefficient for heat +#Time-integrated turbulent diffusion coefficient for heat 'm**2' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 109 ; } -#Tendency of temperature due to physics +#Time-integrated temperature tendency due to parametrisations 'K' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 110 ; } -#Tendency of specific humidity due to physics +#Time-integrated specific humidity tendency due to parametrisations 'kg kg**-1' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 111 ; } -#Tendency of u component due to physics +#Time-integrated eastward wind tendency due to parametrisations 'm s**-1' = { discipline = 192 ; parameterCategory = 162 ; parameterNumber = 112 ; } -#Tendency of v component due to physics +#Time-integrated northward wind tendency due to parametrisations 'm s**-1' = { discipline = 192 ; parameterCategory = 162 ; From 6420ca9b7425ad3565237cebe450995da7bc2c95 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 28 Jul 2023 10:43:05 +0000 Subject: [PATCH 065/372] ECC-1648: GRIB2: Update encodings of accumulated tendency parameters (part 2) --- .../grib2/localConcepts/ecmf/cfVarName.def | 84 ------------------- .../localConcepts/ecmf/cfVarName.legacy.def | 84 +++++++++++++++++++ definitions/grib2/localConcepts/ecmf/name.def | 84 ------------------- .../grib2/localConcepts/ecmf/name.legacy.def | 84 +++++++++++++++++++ .../grib2/localConcepts/ecmf/paramId.def | 84 ------------------- .../localConcepts/ecmf/paramId.legacy.def | 84 +++++++++++++++++++ .../grib2/localConcepts/ecmf/shortName.def | 84 ------------------- .../localConcepts/ecmf/shortName.legacy.def | 84 +++++++++++++++++++ .../grib2/localConcepts/ecmf/units.def | 84 ------------------- .../grib2/localConcepts/ecmf/units.legacy.def | 84 +++++++++++++++++++ 10 files changed, 420 insertions(+), 420 deletions(-) diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index 376c7a6ad..c54aaa707 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -17677,90 +17677,6 @@ parameterCategory = 162 ; parameterNumber = 87 ; } -#Time-integrated temperature tendency due to short-wave radiation -'srta' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 100 ; - } -#Time-integrated temperature tendency due to long-wave radiation -'trta' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 101 ; - } -#Time-integrated temperature tendency due to short wave radiation, clear sky -'srtca' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 102 ; - } -#Time-integrated temperature tendency due to long-wave radiation, clear sky -'trtca' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 103 ; - } -#Time-integrated updraught mass flux -'umfa' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 104 ; - } -#Time-integrated downdraught mass flux -'dmfa' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 105 ; - } -#Time-integrated updraught detrainment rate -'udra' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 106 ; - } -#Time-integrated downdraught detrainment rate -'ddra' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 107 ; - } -#Time-integrated total precipitation flux -'tpfa' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 108 ; - } -#Time-integrated turbulent diffusion coefficient for heat -'tdcha' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 109 ; - } -#Time-integrated temperature tendency due to parametrisations -'ttpha' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 110 ; - } -#Time-integrated specific humidity tendency due to parametrisations -'qtpha' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 111 ; - } -#Time-integrated eastward wind tendency due to parametrisations -'utpha' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 112 ; - } -#Time-integrated northward wind tendency due to parametrisations -'vtpha' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 113 ; - } #Variance of geopotential 'p206.162' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def index f68e3dbea..459bd6661 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def @@ -1003,3 +1003,87 @@ parameterCategory = 210 ; parameterNumber = 197 ; } +#Time-integrated temperature tendency due to short-wave radiation +'srta' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 100 ; +} +#Time-integrated temperature tendency due to long-wave radiation +'trta' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 101 ; +} +#Time-integrated temperature tendency due to short wave radiation, clear sky +'srtca' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 102 ; +} +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'trtca' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 103 ; +} +#Time-integrated updraught mass flux +'umfa' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 104 ; +} +#Time-integrated downdraught mass flux +'dmfa' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 105 ; +} +#Time-integrated updraught detrainment rate +'udra' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 106 ; +} +#Time-integrated downdraught detrainment rate +'ddra' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 107 ; +} +#Time-integrated total precipitation flux +'tpfa' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 108 ; +} +#Time-integrated turbulent diffusion coefficient for heat +'tdcha' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 109 ; +} +#Time-integrated temperature tendency due to parametrisations +'ttpha' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 110 ; +} +#Time-integrated specific humidity tendency due to parametrisations +'qtpha' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 111 ; +} +#Time-integrated eastward wind tendency due to parametrisations +'utpha' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 112 ; +} +#Time-integrated northward wind tendency due to parametrisations +'vtpha' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 113 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index e01d37d06..fe9584cec 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -17677,90 +17677,6 @@ parameterCategory = 162 ; parameterNumber = 87 ; } -#Time-integrated temperature tendency due to short-wave radiation -'Time-integrated temperature tendency due to short-wave radiation' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 100 ; - } -#Time-integrated temperature tendency due to long-wave radiation -'Time-integrated temperature tendency due to long-wave radiation' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 101 ; - } -#Time-integrated temperature tendency due to short wave radiation, clear sky -'Time-integrated temperature tendency due to short wave radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 102 ; - } -#Time-integrated temperature tendency due to long-wave radiation, clear sky -'Time-integrated temperature tendency due to long-wave radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 103 ; - } -#Time-integrated updraught mass flux -'Time-integrated updraught mass flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 104 ; - } -#Time-integrated downdraught mass flux -'Time-integrated downdraught mass flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 105 ; - } -#Time-integrated updraught detrainment rate -'Time-integrated updraught detrainment rate' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 106 ; - } -#Time-integrated downdraught detrainment rate -'Time-integrated downdraught detrainment rate' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 107 ; - } -#Time-integrated total precipitation flux -'Time-integrated total precipitation flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 108 ; - } -#Time-integrated turbulent diffusion coefficient for heat -'Time-integrated turbulent diffusion coefficient for heat' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 109 ; - } -#Time-integrated temperature tendency due to parametrisations -'Time-integrated temperature tendency due to parametrisations' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 110 ; - } -#Time-integrated specific humidity tendency due to parametrisations -'Time-integrated specific humidity tendency due to parametrisations' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 111 ; - } -#Time-integrated eastward wind tendency due to parametrisations -'Time-integrated eastward wind tendency due to parametrisations' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 112 ; - } -#Time-integrated northward wind tendency due to parametrisations -'Time-integrated northward wind tendency due to parametrisations' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 113 ; - } #Variance of geopotential 'Variance of geopotential' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/name.legacy.def b/definitions/grib2/localConcepts/ecmf/name.legacy.def index 7519aaa8e..2ab7c2816 100644 --- a/definitions/grib2/localConcepts/ecmf/name.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/name.legacy.def @@ -1003,3 +1003,87 @@ parameterCategory = 210 ; parameterNumber = 197 ; } +#Time-integrated temperature tendency due to short-wave radiation +'Time-integrated temperature tendency due to short-wave radiation' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 100 ; +} +#Time-integrated temperature tendency due to long-wave radiation +'Time-integrated temperature tendency due to long-wave radiation' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 101 ; +} +#Time-integrated temperature tendency due to short wave radiation, clear sky +'Time-integrated temperature tendency due to short wave radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 102 ; +} +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'Time-integrated temperature tendency due to long-wave radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 103 ; +} +#Time-integrated updraught mass flux +'Time-integrated updraught mass flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 104 ; +} +#Time-integrated downdraught mass flux +'Time-integrated downdraught mass flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 105 ; +} +#Time-integrated updraught detrainment rate +'Time-integrated updraught detrainment rate' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 106 ; +} +#Time-integrated downdraught detrainment rate +'Time-integrated downdraught detrainment rate' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 107 ; +} +#Time-integrated total precipitation flux +'Time-integrated total precipitation flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 108 ; +} +#Time-integrated turbulent diffusion coefficient for heat +'Time-integrated turbulent diffusion coefficient for heat' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 109 ; +} +#Time-integrated temperature tendency due to parametrisations +'Time-integrated temperature tendency due to parametrisations' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 110 ; +} +#Time-integrated specific humidity tendency due to parametrisations +'Time-integrated specific humidity tendency due to parametrisations' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 111 ; +} +#Time-integrated eastward wind tendency due to parametrisations +'Time-integrated eastward wind tendency due to parametrisations' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 112 ; +} +#Time-integrated northward wind tendency due to parametrisations +'Time-integrated northward wind tendency due to parametrisations' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 113 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index 66111dec2..1a959e7ef 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -17677,90 +17677,6 @@ parameterCategory = 162 ; parameterNumber = 87 ; } -#Time-integrated temperature tendency due to short-wave radiation -'162100' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 100 ; - } -#Time-integrated temperature tendency due to long-wave radiation -'162101' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 101 ; - } -#Time-integrated temperature tendency due to short wave radiation, clear sky -'162102' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 102 ; - } -#Time-integrated temperature tendency due to long-wave radiation, clear sky -'162103' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 103 ; - } -#Time-integrated updraught mass flux -'162104' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 104 ; - } -#Time-integrated downdraught mass flux -'162105' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 105 ; - } -#Time-integrated updraught detrainment rate -'162106' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 106 ; - } -#Time-integrated downdraught detrainment rate -'162107' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 107 ; - } -#Time-integrated total precipitation flux -'162108' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 108 ; - } -#Time-integrated turbulent diffusion coefficient for heat -'162109' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 109 ; - } -#Time-integrated temperature tendency due to parametrisations -'162110' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 110 ; - } -#Time-integrated specific humidity tendency due to parametrisations -'162111' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 111 ; - } -#Time-integrated eastward wind tendency due to parametrisations -'162112' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 112 ; - } -#Time-integrated northward wind tendency due to parametrisations -'162113' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 113 ; - } #Variance of geopotential '162206' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def index 8c86a6ba1..36542f75a 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def @@ -1003,3 +1003,87 @@ parameterCategory = 210 ; parameterNumber = 197 ; } +#Time-integrated temperature tendency due to short-wave radiation +'162100' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 100 ; +} +#Time-integrated temperature tendency due to long-wave radiation +'162101' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 101 ; +} +#Time-integrated temperature tendency due to short wave radiation, clear sky +'162102' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 102 ; +} +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'162103' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 103 ; +} +#Time-integrated updraught mass flux +'162104' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 104 ; +} +#Time-integrated downdraught mass flux +'162105' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 105 ; +} +#Time-integrated updraught detrainment rate +'162106' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 106 ; +} +#Time-integrated downdraught detrainment rate +'162107' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 107 ; +} +#Time-integrated total precipitation flux +'162108' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 108 ; +} +#Time-integrated turbulent diffusion coefficient for heat +'162109' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 109 ; +} +#Time-integrated temperature tendency due to parametrisations +'162110' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 110 ; +} +#Time-integrated specific humidity tendency due to parametrisations +'162111' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 111 ; +} +#Time-integrated eastward wind tendency due to parametrisations +'162112' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 112 ; +} +#Time-integrated northward wind tendency due to parametrisations +'162113' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 113 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index 663766887..4469da383 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -17677,90 +17677,6 @@ parameterCategory = 162 ; parameterNumber = 87 ; } -#Time-integrated temperature tendency due to short-wave radiation -'srta' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 100 ; - } -#Time-integrated temperature tendency due to long-wave radiation -'trta' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 101 ; - } -#Time-integrated temperature tendency due to short wave radiation, clear sky -'srtca' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 102 ; - } -#Time-integrated temperature tendency due to long-wave radiation, clear sky -'trtca' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 103 ; - } -#Time-integrated updraught mass flux -'umfa' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 104 ; - } -#Time-integrated downdraught mass flux -'dmfa' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 105 ; - } -#Time-integrated updraught detrainment rate -'udra' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 106 ; - } -#Time-integrated downdraught detrainment rate -'ddra' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 107 ; - } -#Time-integrated total precipitation flux -'tpfa' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 108 ; - } -#Time-integrated turbulent diffusion coefficient for heat -'tdcha' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 109 ; - } -#Time-integrated temperature tendency due to parametrisations -'ttpha' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 110 ; - } -#Time-integrated specific humidity tendency due to parametrisations -'qtpha' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 111 ; - } -#Time-integrated eastward wind tendency due to parametrisations -'utpha' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 112 ; - } -#Time-integrated northward wind tendency due to parametrisations -'vtpha' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 113 ; - } #Variance of geopotential '~' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def index 571b8bd00..87ce1ee34 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def @@ -1003,3 +1003,87 @@ parameterCategory = 210 ; parameterNumber = 197 ; } +#Time-integrated temperature tendency due to short-wave radiation +'srta' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 100 ; +} +#Time-integrated temperature tendency due to long-wave radiation +'trta' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 101 ; +} +#Time-integrated temperature tendency due to short wave radiation, clear sky +'srtca' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 102 ; +} +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'trtca' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 103 ; +} +#Time-integrated updraught mass flux +'umfa' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 104 ; +} +#Time-integrated downdraught mass flux +'dmfa' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 105 ; +} +#Time-integrated updraught detrainment rate +'udra' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 106 ; +} +#Time-integrated downdraught detrainment rate +'ddra' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 107 ; +} +#Time-integrated total precipitation flux +'tpfa' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 108 ; +} +#Time-integrated turbulent diffusion coefficient for heat +'tdcha' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 109 ; +} +#Time-integrated temperature tendency due to parametrisations +'ttpha' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 110 ; +} +#Time-integrated specific humidity tendency due to parametrisations +'qtpha' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 111 ; +} +#Time-integrated eastward wind tendency due to parametrisations +'utpha' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 112 ; +} +#Time-integrated northward wind tendency due to parametrisations +'vtpha' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 113 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index 497819237..cb1656a5f 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -17677,90 +17677,6 @@ parameterCategory = 162 ; parameterNumber = 87 ; } -#Time-integrated temperature tendency due to short-wave radiation -'K' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 100 ; - } -#Time-integrated temperature tendency due to long-wave radiation -'K' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 101 ; - } -#Time-integrated temperature tendency due to short wave radiation, clear sky -'K' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 102 ; - } -#Time-integrated temperature tendency due to long-wave radiation, clear sky -'K' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 103 ; - } -#Time-integrated updraught mass flux -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 104 ; - } -#Time-integrated downdraught mass flux -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 105 ; - } -#Time-integrated updraught detrainment rate -'kg m**-3' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 106 ; - } -#Time-integrated downdraught detrainment rate -'kg m**-3' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 107 ; - } -#Time-integrated total precipitation flux -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 108 ; - } -#Time-integrated turbulent diffusion coefficient for heat -'m**2' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 109 ; - } -#Time-integrated temperature tendency due to parametrisations -'K' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 110 ; - } -#Time-integrated specific humidity tendency due to parametrisations -'kg kg**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 111 ; - } -#Time-integrated eastward wind tendency due to parametrisations -'m s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 112 ; - } -#Time-integrated northward wind tendency due to parametrisations -'m s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 113 ; - } #Variance of geopotential 'm**4 s**-4' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/units.legacy.def b/definitions/grib2/localConcepts/ecmf/units.legacy.def index 7248d1494..027a7ffe8 100644 --- a/definitions/grib2/localConcepts/ecmf/units.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/units.legacy.def @@ -1003,3 +1003,87 @@ parameterCategory = 210 ; parameterNumber = 197 ; } +#Time-integrated temperature tendency due to short-wave radiation +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 100 ; +} +#Time-integrated temperature tendency due to long-wave radiation +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 101 ; +} +#Time-integrated temperature tendency due to short wave radiation, clear sky +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 102 ; +} +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 103 ; +} +#Time-integrated updraught mass flux +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 104 ; +} +#Time-integrated downdraught mass flux +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 105 ; +} +#Time-integrated updraught detrainment rate +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 106 ; +} +#Time-integrated downdraught detrainment rate +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 107 ; +} +#Time-integrated total precipitation flux +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 108 ; +} +#Time-integrated turbulent diffusion coefficient for heat +'m**2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 109 ; +} +#Time-integrated temperature tendency due to parametrisations +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 110 ; +} +#Time-integrated specific humidity tendency due to parametrisations +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 111 ; +} +#Time-integrated eastward wind tendency due to parametrisations +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 112 ; +} +#Time-integrated northward wind tendency due to parametrisations +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 113 ; +} From b33977198270d326f9c8208b180ab6967b4de945 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 28 Jul 2023 11:57:44 +0000 Subject: [PATCH 066/372] ECC-1648: GRIB2: Update encodings of accumulated tendency parameters (part 3) --- definitions/grib2/cfVarName.def | 98 +++++++++++++++++++++++++++++++++ definitions/grib2/name.def | 98 +++++++++++++++++++++++++++++++++ definitions/grib2/paramId.def | 98 +++++++++++++++++++++++++++++++++ definitions/grib2/shortName.def | 98 +++++++++++++++++++++++++++++++++ definitions/grib2/units.def | 98 +++++++++++++++++++++++++++++++++ 5 files changed, 490 insertions(+) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index 3974f1ae2..13f51db91 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -7022,6 +7022,104 @@ typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 8 ; } +#Time-integrated temperature tendency due to short-wave radiation +'srta' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to long-wave radiation +'trta' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to short wave radiation, clear sky +'srtca' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'trtca' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated updraught mass flux +'umfa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated downdraught mass flux +'dmfa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated updraught detrainment rate +'udra' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated downdraught detrainment rate +'ddra' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated total precipitation flux +'tpfa' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated turbulent diffusion coefficient for heat +'tdcha' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to parametrisations +'ttpha' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated specific humidity tendency due to parametrisations +'qtpha' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated eastward wind tendency due to parametrisations +'utpha' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated northward wind tendency due to parametrisations +'vtpha' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 1 ; + } #Surface runoff 'sro' = { discipline = 2 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index 91524b578..640259cef 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -7022,6 +7022,104 @@ typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 8 ; } +#Time-integrated temperature tendency due to short-wave radiation +'Time-integrated temperature tendency due to short-wave radiation' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to long-wave radiation +'Time-integrated temperature tendency due to long-wave radiation' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to short wave radiation, clear sky +'Time-integrated temperature tendency due to short wave radiation, clear sky' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'Time-integrated temperature tendency due to long-wave radiation, clear sky' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated updraught mass flux +'Time-integrated updraught mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated downdraught mass flux +'Time-integrated downdraught mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated updraught detrainment rate +'Time-integrated updraught detrainment rate' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated downdraught detrainment rate +'Time-integrated downdraught detrainment rate' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated total precipitation flux +'Time-integrated total precipitation flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated turbulent diffusion coefficient for heat +'Time-integrated turbulent diffusion coefficient for heat' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to parametrisations +'Time-integrated temperature tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated specific humidity tendency due to parametrisations +'Time-integrated specific humidity tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated eastward wind tendency due to parametrisations +'Time-integrated eastward wind tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated northward wind tendency due to parametrisations +'Time-integrated northward wind tendency due to parametrisations' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 1 ; + } #Surface runoff 'Surface runoff' = { discipline = 2 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index df2913d8f..335d53ae5 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -7022,6 +7022,104 @@ typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 8 ; } +#Time-integrated temperature tendency due to short-wave radiation +'162100' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to long-wave radiation +'162101' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to short wave radiation, clear sky +'162102' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'162103' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated updraught mass flux +'162104' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated downdraught mass flux +'162105' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated updraught detrainment rate +'162106' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated downdraught detrainment rate +'162107' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated total precipitation flux +'162108' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated turbulent diffusion coefficient for heat +'162109' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to parametrisations +'162110' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated specific humidity tendency due to parametrisations +'162111' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated eastward wind tendency due to parametrisations +'162112' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated northward wind tendency due to parametrisations +'162113' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 1 ; + } #Surface runoff '174008' = { discipline = 2 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index b27dae912..ba5929c07 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -7022,6 +7022,104 @@ typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 8 ; } +#Time-integrated temperature tendency due to short-wave radiation +'srta' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to long-wave radiation +'trta' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to short wave radiation, clear sky +'srtca' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'trtca' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated updraught mass flux +'umfa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated downdraught mass flux +'dmfa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated updraught detrainment rate +'udra' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated downdraught detrainment rate +'ddra' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated total precipitation flux +'tpfa' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated turbulent diffusion coefficient for heat +'tdcha' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to parametrisations +'ttpha' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated specific humidity tendency due to parametrisations +'qtpha' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated eastward wind tendency due to parametrisations +'utpha' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated northward wind tendency due to parametrisations +'vtpha' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 1 ; + } #Surface runoff 'sro' = { discipline = 2 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index aa34db1f0..824416ccf 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -7022,6 +7022,104 @@ typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 8 ; } +#Time-integrated temperature tendency due to short-wave radiation +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to long-wave radiation +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to short wave radiation, clear sky +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to long-wave radiation, clear sky +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated updraught mass flux +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 27 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated downdraught mass flux +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated updraught detrainment rate +'kg m**-3' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 29 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated downdraught detrainment rate +'kg m**-3' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 30 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated total precipitation flux +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated turbulent diffusion coefficient for heat +'m**2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated temperature tendency due to parametrisations +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated specific humidity tendency due to parametrisations +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 108 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated eastward wind tendency due to parametrisations +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-integrated northward wind tendency due to parametrisations +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfStatisticalProcessing = 1 ; + } #Surface runoff 'kg m**-2' = { discipline = 2 ; From 17a13c1d7ad120813fef865eb75444aa3275785f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 28 Jul 2023 15:11:32 +0000 Subject: [PATCH 067/372] ECC-1649: GRIB2: Add WMO encodings for wave parameters --- definitions/grib2/cfVarName.def | 156 ++++++++++++++++++++++++++++++++ definitions/grib2/name.def | 156 ++++++++++++++++++++++++++++++++ definitions/grib2/paramId.def | 156 ++++++++++++++++++++++++++++++++ definitions/grib2/shortName.def | 156 ++++++++++++++++++++++++++++++++ definitions/grib2/units.def | 156 ++++++++++++++++++++++++++++++++ 5 files changed, 780 insertions(+) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index 13f51db91..eb9039051 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -684,6 +684,42 @@ parameterCategory = 0 ; parameterNumber = 92 ; } +#Wave directional width of first swell partition +'wdw1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + } +#Wave frequency width of first swell partition +'wfw1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + } +#Wave directional width of second swell partition +'wdw2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + } +#Wave frequency width of second swell partition +'wfw2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + } +#Wave directional width of third swell partition +'wdw3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + } +#Wave frequency width of third swell partition +'wfw3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + } #Wave energy flux magnitude 'wefxm' = { discipline = 10 ; @@ -696,6 +732,126 @@ parameterCategory = 0 ; parameterNumber = 79 ; } +#Significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'h1012' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'h1214' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'h1417' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'h1721' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'h2125' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'h2530' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Significant wave height of first swell partition +'swh1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + } +#Mean wave direction of first swell partition +'mwd1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + } +#Mean wave period of first swell partition +'mwp1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + } +#Significant wave height of second swell partition +'swh2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + } +#Mean wave direction of second swell partition +'mwd2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + } +#Mean wave period of second swell partition +'mwp2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + } +#Significant wave height of third swell partition +'swh3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + } +#Mean wave direction of third swell partition +'mwd3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + } +#Mean wave period of third swell partition +'mwp3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + } #Wave Spectral Skewness 'wss' = { discipline = 10 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index 640259cef..7b5d53dbe 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -684,6 +684,42 @@ parameterCategory = 0 ; parameterNumber = 92 ; } +#Wave directional width of first swell partition +'Wave directional width of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + } +#Wave frequency width of first swell partition +'Wave frequency width of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + } +#Wave directional width of second swell partition +'Wave directional width of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + } +#Wave frequency width of second swell partition +'Wave frequency width of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + } +#Wave directional width of third swell partition +'Wave directional width of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + } +#Wave frequency width of third swell partition +'Wave frequency width of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + } #Wave energy flux magnitude 'Wave energy flux magnitude' = { discipline = 10 ; @@ -696,6 +732,126 @@ parameterCategory = 0 ; parameterNumber = 79 ; } +#Significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'Significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'Significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'Significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'Significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'Significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'Significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Significant wave height of first swell partition +'Significant wave height of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + } +#Mean wave direction of first swell partition +'Mean wave direction of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + } +#Mean wave period of first swell partition +'Mean wave period of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + } +#Significant wave height of second swell partition +'Significant wave height of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + } +#Mean wave direction of second swell partition +'Mean wave direction of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + } +#Mean wave period of second swell partition +'Mean wave period of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + } +#Significant wave height of third swell partition +'Significant wave height of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + } +#Mean wave direction of third swell partition +'Mean wave direction of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + } +#Mean wave period of third swell partition +'Mean wave period of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + } #Wave Spectral Skewness 'Wave Spectral Skewness' = { discipline = 10 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 335d53ae5..95e57d50c 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -684,6 +684,42 @@ parameterCategory = 0 ; parameterNumber = 92 ; } +#Wave directional width of first swell partition +'140106' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + } +#Wave frequency width of first swell partition +'140107' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + } +#Wave directional width of second swell partition +'140108' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + } +#Wave frequency width of second swell partition +'140109' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + } +#Wave directional width of third swell partition +'140110' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + } +#Wave frequency width of third swell partition +'140111' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + } #Wave energy flux magnitude '140112' = { discipline = 10 ; @@ -696,6 +732,126 @@ parameterCategory = 0 ; parameterNumber = 79 ; } +#Significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'140114' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'140115' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'140116' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'140117' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'140118' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'140119' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Significant wave height of first swell partition +'140121' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + } +#Mean wave direction of first swell partition +'140122' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + } +#Mean wave period of first swell partition +'140123' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + } +#Significant wave height of second swell partition +'140124' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + } +#Mean wave direction of second swell partition +'140125' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + } +#Mean wave period of second swell partition +'140126' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + } +#Significant wave height of third swell partition +'140127' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + } +#Mean wave direction of third swell partition +'140128' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + } +#Mean wave period of third swell partition +'140129' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + } #Wave Spectral Skewness '140207' = { discipline = 10 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index ba5929c07..1749997c6 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -684,6 +684,42 @@ parameterCategory = 0 ; parameterNumber = 92 ; } +#Wave directional width of first swell partition +'wdw1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + } +#Wave frequency width of first swell partition +'wfw1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + } +#Wave directional width of second swell partition +'wdw2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + } +#Wave frequency width of second swell partition +'wfw2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + } +#Wave directional width of third swell partition +'wdw3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + } +#Wave frequency width of third swell partition +'wfw3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + } #Wave energy flux magnitude 'wefxm' = { discipline = 10 ; @@ -696,6 +732,126 @@ parameterCategory = 0 ; parameterNumber = 79 ; } +#Significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'h1012' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'h1214' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'h1417' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'h1721' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'h2125' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'h2530' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Significant wave height of first swell partition +'swh1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + } +#Mean wave direction of first swell partition +'mwd1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + } +#Mean wave period of first swell partition +'mwp1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + } +#Significant wave height of second swell partition +'swh2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + } +#Mean wave direction of second swell partition +'mwd2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + } +#Mean wave period of second swell partition +'mwp2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + } +#Significant wave height of third swell partition +'swh3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + } +#Mean wave direction of third swell partition +'mwd3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + } +#Mean wave period of third swell partition +'mwp3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + } #Wave Spectral Skewness 'wss' = { discipline = 10 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 824416ccf..432279fc3 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -684,6 +684,42 @@ parameterCategory = 0 ; parameterNumber = 92 ; } +#Wave directional width of first swell partition +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + } +#Wave frequency width of first swell partition +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 59 ; + } +#Wave directional width of second swell partition +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 57 ; + } +#Wave frequency width of second swell partition +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 60 ; + } +#Wave directional width of third swell partition +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 58 ; + } +#Wave frequency width of third swell partition +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 61 ; + } #Wave energy flux magnitude 'W m**-1' = { discipline = 10 ; @@ -696,6 +732,126 @@ parameterCategory = 0 ; parameterNumber = 79 ; } +#Significant wave height of all waves with periods within the inclusive range from 10 to 12 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 10 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 12 ; + } +#Significant wave height of all waves with periods within the inclusive range from 12 to 14 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 12 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 14 ; + } +#Significant wave height of all waves with periods within the inclusive range from 14 to 17 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 14 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 17 ; + } +#Significant wave height of all waves with periods within the inclusive range from 17 to 21 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 17 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 21 ; + } +#Significant wave height of all waves with periods within the inclusive range from 21 to 25 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 21 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 25 ; + } +#Significant wave height of all waves with periods within the inclusive range from 25 to 30 seconds +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfWavePeriodInterval = 7 ; + scaleFactorOfLowerWavePeriodLimit = 0 ; + scaledValueOfLowerWavePeriodLimit = 25 ; + scaleFactorOfUpperWavePeriodLimit = 0 ; + scaledValueOfUpperWavePeriodLimit = 30 ; + } +#Significant wave height of first swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + } +#Mean wave direction of first swell partition +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + } +#Mean wave period of first swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + } +#Significant wave height of second swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + } +#Mean wave direction of second swell partition +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + } +#Mean wave period of second swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + } +#Significant wave height of third swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + } +#Mean wave direction of third swell partition +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + } +#Mean wave period of third swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + } #Wave Spectral Skewness 'Numeric' = { discipline = 10 ; From 600673bb0fb5edb742bbdfee2704a348a126d93a Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 28 Jul 2023 16:44:56 +0100 Subject: [PATCH 068/372] Refactoring --- src/grib_iterator_class_gaussian_reduced.cc | 31 ++++++++------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/src/grib_iterator_class_gaussian_reduced.cc b/src/grib_iterator_class_gaussian_reduced.cc index 30404b3d7..ee81bfce5 100644 --- a/src/grib_iterator_class_gaussian_reduced.cc +++ b/src/grib_iterator_class_gaussian_reduced.cc @@ -207,8 +207,15 @@ static int iterate_reduced_gaussian_subarea_legacy(grib_iterator* iter, grib_han return err; } -/* ECC-747 */ -static int iterate_reduced_gaussian_subarea_algorithm2(grib_iterator* iter, grib_handle* h, +// ECC-747 +// Try legacy approach, if that fails try the next algorithm +// int err = iterate_reduced_gaussian_subarea(iter, h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize, 0); +// if (err == GRIB_WRONG_GRID) { +// /* ECC-445: First attempt failed. Try again with a different algorithm */ +// err = iterate_reduced_gaussian_subarea_algorithm2(iter, h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize); +// } +// return err; +static int iterate_reduced_gaussian_subarea(grib_iterator* iter, grib_handle* h, double lat_first, double lon_first, double lat_last, double lon_last, double* lats, long* pl, size_t plsize, size_t numlats) @@ -273,22 +280,6 @@ static int iterate_reduced_gaussian_subarea_algorithm2(grib_iterator* iter, grib return err; } -static int iterate_reduced_gaussian_subarea_wrapper(grib_iterator* iter, grib_handle* h, - double lat_first, double lon_first, - double lat_last, double lon_last, - double* lats, long* pl, size_t plsize, size_t numlats) -{ - return iterate_reduced_gaussian_subarea_algorithm2(iter, h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize, numlats); - - // Try legacy approach, if that fails try the next algorithm - // int err = iterate_reduced_gaussian_subarea(iter, h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize, 0); - // if (err == GRIB_WRONG_GRID) { - // /* ECC-445: First attempt failed. Try again with a different algorithm */ - // err = iterate_reduced_gaussian_subarea_algorithm2(iter, h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize); - // } - // return err; -} - static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) { int ret = GRIB_SUCCESS, j, is_global = 0; @@ -375,7 +366,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) is_global = is_gaussian_global(lat_first, lat_last, lon_first, lon_last, max_pl, lats, angular_precision); if (!is_global) { /*sub area*/ - ret = iterate_reduced_gaussian_subarea_wrapper(iter, h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize, numlats); + ret = iterate_reduced_gaussian_subarea(iter, h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize, numlats); } else { /*global*/ @@ -392,7 +383,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) /*grib_context_log(h->context,GRIB_LOG_ERROR, "Failed to initialise reduced Gaussian iterator (global)");*/ /*return GRIB_WRONG_GRID;*/ /*Try now as NON-global*/ - ret = iterate_reduced_gaussian_subarea_wrapper(iter, h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize, numlats); + ret = iterate_reduced_gaussian_subarea(iter, h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize, numlats); if (ret != GRIB_SUCCESS) grib_context_log(h->context, GRIB_LOG_ERROR, "Failed to initialise reduced Gaussian iterator (global)"); goto finalise; From 6aae2f51bc3e3fa29dd867a638f5e828b5db7d42 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 28 Jul 2023 22:43:46 +0100 Subject: [PATCH 069/372] Update list of keys and hash --- src/grib_hash_keys.cc | 13729 +++++++++++++++++++--------------------- tests/keys | 1837 +++--- 2 files changed, 7447 insertions(+), 8119 deletions(-) diff --git a/src/grib_hash_keys.cc b/src/grib_hash_keys.cc index 550481324..c5407cab7 100644 --- a/src/grib_hash_keys.cc +++ b/src/grib_hash_keys.cc @@ -34,12 +34,12 @@ struct grib_keys_hash { char* name; int id;}; #include -#define TOTAL_KEYWORDS 2487 +#define TOTAL_KEYWORDS 2486 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 74 #define MIN_HASH_VALUE 3 -#define MAX_HASH_VALUE 34316 -/* maximum key range = 34314, duplicates = 0 */ +#define MAX_HASH_VALUE 30696 +/* maximum key range = 30694, duplicates = 0 */ #ifdef __GNUC__ __inline @@ -53,32 +53,32 @@ hash_keys (const char *str, size_t len) { static const unsigned short asso_values[] = { - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 2, 34317, 34317, 1, 34317, 34317, 320, 2507, - 2365, 2344, 2145, 2487, 2277, 2572, 64, 43, 3, 2, - 1, 34317, 34317, 34317, 34317, 2043, 3384, 2134, 276, 2123, - 145, 4454, 3774, 926, 575, 173, 102, 1646, 779, 158, - 966, 21, 629, 68, 50, 5392, 1844, 3354, 605, 3874, - 1, 1, 3, 34317, 34317, 2581, 34317, 5, 494, 54, - 1, 2, 53, 83, 173, 10, 3062, 3321, 71, 7, - 1, 20, 29, 1231, 1, 8, 4, 65, 291, 211, - 1560, 203, 1838, 4, 581, 1, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, - 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317, 34317 + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 2, 30697, 30697, 1, 30697, 30697, 60, 2144, + 1488, 1414, 1282, 1945, 2131, 2782, 4, 83, 2, 1, + 1, 30697, 30697, 30697, 30697, 1406, 5347, 2917, 173, 2354, + 207, 4643, 3405, 1479, 445, 31, 308, 2021, 789, 247, + 924, 212, 542, 140, 85, 4819, 1866, 4035, 699, 5481, + 1, 1, 2, 30697, 30697, 1590, 30697, 5, 697, 54, + 1, 2, 123, 254, 109, 10, 2434, 3862, 71, 7, + 1, 20, 29, 975, 1, 8, 4, 65, 270, 177, + 1423, 7, 2285, 260, 1415, 2, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, + 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697, 30697 }; unsigned int hval = len; @@ -165,1165 +165,1019 @@ hash_keys (const char *str, size_t len) static const unsigned char lengthtable[] = { 0, 0, 0, 1, 0, 2, 2, 3, 2, 1, 0, 2, 2, 2, - 0, 1, 0, 0, 4, 0, 0, 4, 3, 0, 4, 0, 0, 5, + 0, 1, 0, 2, 4, 0, 4, 4, 3, 3, 4, 0, 0, 5, 3, 4, 0, 0, 0, 4, 0, 0, 5, 0, 0, 0, 6, 4, - 0, 5, 0, 0, 8, 0, 0, 0, 3, 6, 5, 0, 0, 0, - 7, 4, 7, 5, 0, 0, 0, 0, 0, 0, 9, 9, 0, 9, - 9, 0, 6, 0, 0, 0, 4, 7, 4, 0, 0, 0, 10, 4, - 10, 7, 6, 0, 0, 7, 0, 8, 0, 6, 8, 8, 5, 6, - 10, 5, 4, 5, 0, 0, 6, 10, 0, 7, 6, 0, 10, 6, - 8, 9, 4, 0, 7, 10, 0, 10, 0, 7, 0, 0, 0, 10, - 0, 0, 5, 9, 0, 0, 6, 10, 0, 0, 0, 7, 3, 0, - 0, 0, 4, 7, 0, 9, 5, 0, 0, 0, 6, 0, 2, 5, - 0, 0, 10, 0, 8, 5, 0, 8, 3, 9, 10, 0, 0, 1, - 3, 0, 0, 0, 8, 2, 0, 10, 0, 5, 10, 8, 5, 0, - 6, 3, 9, 7, 0, 9, 2, 5, 9, 13, 5, 0, 0, 11, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 8, 0, 10, 10, 11, - 0, 0, 6, 6, 6, 0, 4, 0, 0, 0, 7, 0, 0, 0, - 5, 0, 14, 0, 0, 0, 0, 0, 0, 5, 0, 8, 0, 8, - 4, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 2, - 7, 0, 0, 0, 0, 0, 3, 0, 10, 0, 0, 0, 4, 0, - 0, 0, 9, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, - 0, 5, 0, 10, 0, 14, 8, 10, 0, 10, 0, 0, 0, 6, - 0, 0, 0, 5, 2, 4, 0, 9, 0, 13, 13, 0, 11, 0, - 6, 8, 0, 2, 8, 0, 0, 8, 7, 8, 0, 10, 0, 0, - 0, 0, 9, 0, 8, 0, 0, 0, 0, 5, 0, 0, 12, 9, - 0, 8, 0, 0, 0, 7, 0, 5, 0, 0, 0, 1, 0, 9, - 14, 10, 0, 10, 0, 0, 0, 0, 0, 17, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 8, 10, 0, 0, 10, 6, 11, - 0, 0, 0, 6, 0, 5, 0, 7, 0, 0, 0, 8, 20, 0, - 10, 11, 0, 10, 0, 6, 7, 0, 0, 0, 0, 0, 19, 0, - 20, 0, 0, 2, 8, 0, 0, 0, 0, 3, 9, 8, 0, 0, - 0, 0, 0, 12, 0, 12, 0, 0, 0, 13, 0, 6, 0, 0, - 0, 0, 0, 0, 0, 11, 11, 14, 0, 8, 0, 0, 8, 0, - 0, 0, 0, 0, 10, 0, 0, 10, 6, 0, 0, 6, 0, 11, - 10, 9, 0, 3, 0, 0, 14, 0, 0, 8, 0, 0, 18, 14, - 0, 0, 0, 0, 0, 12, 0, 14, 12, 0, 14, 0, 0, 0, - 0, 5, 7, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, 2, 0, 0, 5, 0, 0, 0, 8, - 0, 9, 12, 0, 13, 0, 14, 0, 15, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 19, 10, 0, 3, 0, 0, 0, 9, 15, 0, 0, 0, - 0, 0, 3, 6, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 23, 0, 0, 0, 0, 16, 0, 11, 0, 11, 0, 0, 8, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 2, 13, 0, - 17, 9, 0, 17, 0, 0, 12, 13, 0, 0, 13, 14, 12, 11, - 0, 0, 0, 0, 15, 0, 0, 15, 0, 0, 17, 13, 11, 0, - 0, 0, 0, 2, 0, 0, 0, 0, 8, 0, 0, 13, 0, 13, - 3, 27, 4, 0, 3, 0, 0, 2, 0, 0, 0, 0, 12, 0, - 0, 0, 14, 13, 0, 0, 13, 0, 0, 0, 0, 18, 2, 0, - 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 15, 0, 0, 0, 0, 2, - 0, 0, 13, 19, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, - 0, 17, 18, 18, 9, 0, 0, 0, 15, 0, 0, 25, 0, 12, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 13, 9, 11, 0, 0, - 0, 0, 0, 17, 22, 0, 0, 0, 0, 14, 0, 18, 0, 7, - 14, 12, 11, 0, 9, 0, 0, 10, 0, 0, 0, 39, 40, 2, - 0, 0, 0, 0, 17, 7, 8, 0, 0, 0, 0, 0, 0, 0, - 27, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 12, 6, 23, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 12, 0, 0, 10, - 0, 0, 0, 14, 15, 0, 0, 11, 0, 24, 0, 0, 0, 12, - 0, 0, 0, 18, 10, 0, 15, 0, 0, 0, 37, 0, 0, 0, - 0, 0, 0, 12, 0, 0, 0, 0, 14, 0, 0, 0, 0, 2, - 13, 0, 0, 0, 0, 2, 0, 0, 0, 0, 15, 9, 0, 10, - 21, 0, 8, 0, 0, 0, 0, 0, 18, 9, 21, 9, 6, 0, - 0, 0, 0, 0, 15, 0, 8, 0, 0, 0, 0, 0, 0, 0, - 0, 13, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, 19, 0, - 0, 17, 0, 13, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 0, 0, 2, 0, 0, 0, 0, 11, 0, 0, 0, - 7, 14, 0, 0, 16, 0, 0, 16, 0, 0, 23, 0, 0, 0, - 13, 18, 9, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 9, - 10, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 14, 15, 0, - 11, 10, 0, 0, 16, 30, 0, 21, 0, 0, 0, 0, 11, 0, - 20, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8, 0, 0, 8, 0, 0, 10, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 10, - 0, 0, 0, 0, 31, 0, 22, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 10, 0, 0, 27, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 15, 0, 0, - 0, 0, 17, 1, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 12, - 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, - 17, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 10, 11, - 16, 0, 11, 15, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, - 15, 0, 0, 0, 0, 0, 24, 21, 0, 0, 3, 0, 15, 31, - 13, 0, 31, 0, 0, 0, 0, 3, 0, 13, 0, 0, 0, 0, - 19, 0, 0, 0, 11, 0, 0, 25, 0, 0, 0, 0, 0, 0, - 12, 15, 0, 0, 0, 0, 0, 0, 0, 30, 0, 15, 0, 14, - 0, 0, 0, 3, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, - 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 29, 0, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 18, 0, 0, 0, 0, - 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 24, - 11, 10, 0, 0, 0, 0, 20, 0, 0, 0, 0, 3, 44, 0, - 0, 0, 0, 10, 9, 0, 0, 0, 0, 0, 16, 0, 0, 8, - 18, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 21, 0, 0, 0, 0, 15, 0, 15, 0, 0, 0, 0, 16, - 0, 11, 0, 14, 0, 0, 16, 48, 0, 22, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, - 0, 12, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 30, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 11, 0, 0, 0, 18, 13, 22, 0, 0, - 0, 0, 9, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 18, - 0, 0, 11, 0, 31, 0, 0, 0, 0, 0, 0, 21, 19, 0, - 23, 0, 0, 30, 0, 0, 19, 0, 12, 0, 25, 0, 0, 0, - 10, 42, 0, 0, 9, 1, 0, 0, 0, 0, 0, 12, 0, 0, - 0, 22, 0, 13, 0, 0, 0, 27, 0, 0, 0, 0, 0, 3, - 0, 0, 0, 14, 16, 15, 0, 3, 0, 0, 0, 0, 31, 0, - 15, 16, 17, 0, 0, 0, 0, 0, 12, 0, 31, 0, 0, 0, - 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 17, 0, - 0, 0, 0, 14, 0, 0, 35, 26, 0, 0, 30, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 15, 14, 0, 0, - 0, 0, 0, 0, 0, 0, 34, 24, 5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 26, 0, 0, 18, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 18, 16, - 0, 0, 6, 0, 0, 0, 0, 0, 9, 21, 0, 13, 0, 0, - 0, 0, 16, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 0, 23, 0, 9, 26, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 26, 0, 0, 0, 12, 0, 0, - 19, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, - 0, 0, 0, 19, 9, 0, 0, 0, 12, 0, 0, 0, 10, 0, - 19, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, - 23, 11, 17, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 13, - 0, 18, 0, 2, 0, 0, 0, 32, 0, 0, 0, 0, 26, 0, - 0, 20, 0, 0, 8, 0, 5, 16, 0, 4, 0, 25, 0, 11, - 13, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 0, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, - 0, 20, 0, 0, 0, 0, 10, 0, 0, 0, 27, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 32, 0, 0, 0, 22, 8, 12, 10, - 0, 0, 0, 0, 15, 0, 0, 13, 0, 0, 0, 0, 28, 0, - 0, 0, 13, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 0, 0, 8, 0, 4, 6, 3, 6, 5, 0, 0, 0, + 7, 4, 7, 5, 0, 0, 0, 1, 0, 0, 9, 9, 0, 9, + 9, 0, 6, 0, 0, 0, 4, 0, 4, 8, 0, 0, 10, 4, + 10, 7, 6, 0, 0, 7, 0, 0, 0, 6, 0, 8, 5, 6, + 10, 5, 0, 5, 0, 0, 6, 0, 0, 7, 6, 0, 10, 0, + 8, 9, 0, 8, 7, 10, 0, 0, 0, 7, 0, 0, 0, 5, + 8, 0, 5, 8, 8, 0, 0, 10, 0, 0, 0, 7, 3, 0, + 0, 0, 0, 0, 0, 9, 0, 7, 8, 0, 6, 0, 0, 5, + 8, 0, 0, 0, 0, 5, 5, 0, 3, 0, 0, 0, 7, 0, + 0, 0, 0, 0, 8, 2, 4, 10, 8, 5, 10, 0, 5, 0, + 6, 6, 9, 7, 0, 9, 7, 2, 0, 10, 10, 0, 0, 2, + 0, 10, 7, 9, 4, 6, 0, 0, 0, 6, 0, 0, 10, 8, + 8, 0, 4, 7, 0, 7, 5, 0, 0, 0, 0, 9, 8, 0, + 3, 0, 13, 0, 10, 0, 0, 0, 0, 8, 0, 9, 0, 0, + 0, 0, 0, 0, 11, 0, 0, 0, 0, 6, 10, 8, 0, 0, + 0, 0, 4, 5, 0, 2, 0, 0, 8, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 5, 4, 0, 0, 0, 8, 0, 0, 0, 0, + 0, 11, 10, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, + 0, 0, 8, 5, 8, 0, 0, 0, 11, 6, 10, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 0, 10, 0, 17, 0, 0, 7, 7, + 5, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 9, + 9, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 10, + 8, 0, 0, 0, 0, 6, 0, 9, 0, 10, 0, 9, 0, 0, + 0, 0, 0, 2, 0, 0, 11, 0, 0, 9, 3, 13, 0, 0, + 10, 3, 0, 0, 10, 0, 0, 0, 0, 0, 5, 3, 3, 0, + 0, 0, 7, 9, 8, 12, 0, 8, 0, 0, 0, 0, 11, 0, + 0, 0, 0, 0, 10, 13, 19, 0, 8, 0, 9, 11, 6, 0, + 14, 8, 0, 0, 0, 0, 0, 14, 0, 0, 0, 10, 0, 6, + 7, 6, 0, 0, 6, 9, 0, 0, 0, 0, 0, 0, 0, 11, + 0, 0, 8, 10, 0, 0, 10, 11, 0, 0, 0, 0, 0, 12, + 0, 0, 12, 11, 0, 0, 0, 6, 0, 0, 0, 0, 5, 0, + 0, 0, 0, 10, 0, 0, 18, 0, 11, 0, 0, 0, 0, 6, + 14, 13, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, + 0, 0, 24, 13, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 13, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 11, + 0, 12, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 0, 0, 7, 10, 9, 0, 0, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 7, 0, 0, 17, 10, 20, 0, 6, 12, 2, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0, 0, 0, 18, 0, 14, 0, 0, 11, 0, - 0, 10, 0, 9, 13, 0, 0, 25, 0, 9, 0, 0, 0, 15, - 10, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 10, 0, - 0, 20, 0, 0, 18, 27, 25, 0, 0, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 14, - 0, 0, 0, 29, 0, 0, 13, 9, 14, 0, 0, 0, 0, 13, - 0, 0, 0, 0, 0, 0, 12, 18, 0, 0, 11, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 30, 12, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 0, 0, 0, - 27, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 11, 20, 0, 14, 6, 0, 0, 0, 0, - 9, 0, 0, 0, 0, 0, 16, 0, 0, 0, 8, 0, 0, 0, - 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 24, 6, 0, 14, 0, 21, 0, 0, 14, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 18, 0, 0, 0, 0, - 14, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 0, 0, - 0, 0, 27, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, - 13, 14, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 10, 0, 10, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 9, 0, 0, 30, - 11, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 13, 0, 0, - 14, 0, 10, 0, 0, 0, 21, 19, 0, 13, 0, 0, 0, 23, - 0, 0, 0, 35, 0, 0, 0, 12, 0, 0, 0, 11, 0, 0, - 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 26, 0, - 0, 25, 0, 18, 0, 0, 15, 0, 0, 12, 0, 0, 0, 0, - 22, 0, 33, 0, 0, 0, 0, 0, 22, 0, 16, 0, 11, 0, - 0, 12, 17, 0, 0, 0, 0, 18, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 27, 3, 0, 0, 0, 0, 0, 20, 33, - 0, 0, 22, 17, 0, 0, 0, 0, 0, 10, 0, 0, 32, 0, - 0, 15, 0, 0, 0, 0, 0, 13, 42, 0, 20, 0, 0, 0, - 11, 0, 28, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, - 0, 0, 0, 13, 0, 0, 0, 0, 0, 19, 0, 0, 0, 28, - 11, 22, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, - 17, 35, 0, 0, 0, 0, 0, 0, 0, 20, 15, 0, 0, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, - 0, 0, 0, 19, 11, 21, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 0, 0, 0, 0, 9, 13, 0, 0, 16, 15, 0, 0, 0, - 19, 0, 0, 3, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, - 0, 30, 6, 23, 0, 0, 18, 30, 0, 18, 0, 12, 27, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, - 12, 0, 0, 0, 0, 0, 11, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 20, 0, 0, 18, 16, 13, 0, 0, 0, 0, 23, 0, - 0, 22, 0, 13, 0, 18, 0, 0, 0, 0, 24, 0, 13, 0, - 25, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, - 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 31, 24, 12, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 0, - 0, 0, 0, 18, 0, 17, 0, 0, 0, 0, 0, 0, 14, 0, - 17, 3, 0, 0, 0, 0, 0, 11, 0, 0, 0, 2, 0, 0, - 0, 0, 0, 18, 0, 0, 9, 0, 9, 8, 20, 0, 0, 21, - 15, 11, 0, 0, 11, 0, 0, 24, 0, 14, 9, 0, 13, 0, - 9, 9, 0, 0, 39, 0, 0, 15, 0, 36, 13, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 23, 15, 0, 0, 0, 3, 0, - 23, 0, 0, 11, 29, 0, 0, 0, 2, 29, 0, 0, 0, 0, - 0, 0, 15, 45, 10, 0, 17, 0, 0, 0, 0, 7, 29, 0, - 0, 0, 0, 0, 14, 0, 29, 10, 0, 17, 0, 0, 0, 0, - 10, 0, 20, 9, 17, 0, 22, 0, 0, 0, 0, 0, 0, 0, - 0, 20, 23, 10, 33, 0, 0, 0, 15, 9, 17, 16, 17, 19, - 0, 20, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, - 16, 19, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 28, - 0, 10, 0, 0, 0, 11, 0, 0, 19, 0, 0, 0, 15, 0, - 0, 0, 0, 9, 9, 0, 0, 0, 24, 0, 10, 31, 0, 0, - 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, - 0, 10, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 4, 9, 0, 0, 0, 0, 0, 0, 21, 15, 15, 0, - 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, - 18, 28, 0, 0, 24, 0, 0, 0, 0, 0, 0, 15, 0, 0, - 19, 0, 0, 0, 0, 14, 0, 0, 0, 0, 16, 0, 0, 0, - 30, 0, 15, 0, 0, 22, 0, 0, 19, 23, 18, 24, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 11, 0, 12, 0, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, - 0, 0, 0, 0, 0, 30, 14, 0, 20, 22, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 12, 0, - 0, 0, 0, 0, 15, 0, 15, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, - 28, 0, 10, 0, 32, 0, 0, 15, 0, 14, 0, 20, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 15, 0, 33, 0, 31, 0, 0, - 0, 2, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 3, - 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, - 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 27, 0, 0, 0, 0, 0, 0, 25, 0, - 0, 28, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 25, 0, 27, 0, 23, 0, - 0, 15, 0, 30, 2, 0, 0, 14, 0, 0, 0, 0, 0, 0, - 20, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 11, 0, 0, 0, 14, 0, 0, 0, 21, 0, 0, - 11, 23, 0, 0, 14, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10, 3, 0, 0, 18, 0, 0, 0, 0, 21, 0, 0, - 3, 0, 0, 1, 0, 0, 0, 0, 28, 26, 0, 0, 0, 22, - 0, 0, 0, 0, 0, 15, 21, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 23, 17, 0, 0, 0, 0, - 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, - 22, 0, 0, 0, 0, 0, 0, 28, 16, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 2, 4, 0, 21, - 0, 0, 0, 0, 18, 10, 0, 30, 0, 0, 0, 0, 35, 0, - 18, 0, 10, 24, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 0, 0, 0, 0, 0, 11, 0, 0, 0, 17, - 0, 0, 15, 0, 0, 0, 22, 0, 0, 8, 14, 31, 16, 0, - 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, - 31, 0, 0, 0, 0, 0, 0, 0, 0, 14, 11, 0, 0, 0, - 23, 32, 0, 12, 0, 0, 0, 0, 16, 0, 12, 0, 0, 0, - 0, 0, 14, 15, 0, 18, 0, 0, 18, 0, 0, 0, 9, 0, - 0, 0, 17, 12, 0, 0, 0, 18, 0, 0, 0, 13, 23, 18, - 30, 0, 33, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 22, - 0, 0, 0, 0, 0, 0, 0, 19, 31, 26, 0, 21, 0, 0, - 0, 0, 0, 0, 31, 0, 0, 0, 0, 29, 16, 0, 0, 0, - 0, 0, 0, 15, 0, 0, 15, 8, 15, 12, 0, 0, 0, 0, - 0, 0, 0, 21, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, - 22, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 13, - 0, 6, 13, 33, 25, 0, 0, 0, 10, 0, 35, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, - 0, 0, 0, 22, 0, 0, 0, 0, 17, 0, 0, 0, 27, 0, - 0, 16, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 18, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 20, 0, 0, 0, - 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, - 0, 0, 17, 12, 0, 0, 0, 15, 29, 0, 0, 0, 0, 16, - 0, 0, 0, 13, 0, 4, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 33, 33, 14, 0, 38, 15, 0, 30, 0, 0, 0, 0, 0, - 0, 0, 42, 0, 20, 13, 0, 0, 15, 0, 0, 0, 6, 15, - 12, 0, 0, 0, 0, 0, 0, 11, 37, 0, 0, 0, 0, 9, - 11, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 13, - 13, 29, 0, 0, 0, 0, 7, 19, 15, 0, 0, 0, 0, 34, - 0, 0, 0, 0, 0, 0, 10, 34, 0, 0, 26, 0, 0, 0, - 0, 0, 13, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 11, 0, 0, 0, 15, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 10, 37, 20, - 0, 0, 0, 0, 14, 0, 0, 32, 33, 2, 0, 0, 3, 8, - 37, 32, 0, 0, 9, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 15, 0, 10, 31, 23, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 15, 0, 0, 0, 0, 7, 0, 0, 24, 37, 17, 24, 0, - 14, 30, 14, 0, 0, 24, 0, 0, 3, 0, 17, 0, 25, 0, - 0, 0, 13, 0, 0, 3, 0, 0, 0, 11, 24, 26, 0, 0, - 0, 14, 0, 0, 22, 0, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 10, 0, 14, 18, 0, 18, 0, 0, 29, 0, - 20, 0, 0, 23, 16, 0, 0, 0, 19, 0, 0, 0, 11, 0, - 13, 0, 0, 0, 12, 25, 0, 0, 11, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 10, 0, 13, 0, 0, 0, 0, 0, - 15, 0, 40, 0, 11, 26, 15, 16, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 28, - 10, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 14, 37, 35, - 0, 0, 25, 9, 0, 0, 0, 0, 0, 0, 0, 12, 12, 0, - 0, 0, 0, 0, 22, 0, 0, 0, 0, 23, 20, 9, 0, 0, - 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 29, 0, 35, 0, 0, 0, 22, 13, 0, 0, 0, 0, 0, 0, - 16, 0, 9, 0, 0, 17, 0, 20, 13, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, - 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 27, 0, 14, 0, 0, 17, 0, 14, 0, 0, 0, - 0, 0, 0, 26, 20, 0, 15, 0, 0, 0, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 19, 27, 0, 16, 0, 23, 0, 0, - 14, 20, 0, 0, 20, 12, 25, 0, 0, 0, 18, 0, 0, 0, - 0, 0, 0, 19, 0, 23, 12, 0, 41, 0, 0, 0, 0, 0, - 10, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 42, 21, - 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 14, 0, 20, 13, 13, 0, 24, 0, 0, 0, 20, - 11, 0, 0, 0, 0, 16, 18, 13, 0, 0, 0, 0, 0, 17, - 0, 0, 0, 0, 22, 35, 0, 0, 11, 0, 19, 0, 0, 0, - 0, 6, 29, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 22, - 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 29, 50, 0, 0, 0, 0, 0, 0, 0, 13, - 0, 0, 21, 0, 0, 0, 0, 12, 0, 12, 0, 0, 0, 0, - 0, 8, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, - 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 31, 30, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 19, 0, 16, - 0, 15, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, - 0, 0, 0, 2, 0, 0, 0, 0, 0, 21, 0, 11, 0, 0, - 0, 16, 47, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 15, - 0, 0, 8, 0, 17, 0, 0, 0, 6, 0, 0, 0, 50, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 17, 0, 0, - 0, 17, 0, 0, 0, 15, 0, 0, 20, 0, 0, 21, 0, 0, - 13, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 35, 24, 0, - 0, 0, 25, 0, 15, 15, 0, 0, 0, 21, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 13, 11, 0, 0, 0, 26, 14, 0, 14, 14, 0, 0, 11, - 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 14, 0, 0, - 0, 0, 0, 0, 0, 0, 11, 0, 0, 21, 0, 0, 0, 8, - 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 35, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 11, 15, 0, 0, - 16, 2, 0, 0, 0, 18, 0, 12, 0, 0, 0, 0, 0, 0, - 0, 14, 0, 0, 24, 22, 0, 0, 0, 23, 0, 0, 0, 0, - 0, 0, 0, 32, 0, 0, 0, 0, 13, 0, 3, 0, 0, 0, - 0, 2, 0, 0, 0, 0, 28, 6, 0, 0, 0, 0, 8, 0, - 0, 0, 0, 0, 0, 21, 0, 0, 15, 0, 0, 0, 27, 17, - 0, 0, 23, 0, 0, 0, 8, 0, 22, 43, 3, 11, 0, 0, - 0, 15, 0, 0, 0, 0, 18, 6, 0, 29, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 15, 0, 0, 38, 0, 11, 0, 0, - 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 11, 0, 38, 34, 0, 13, 0, 0, 0, 0, 3, 0, 4, 0, - 0, 25, 0, 0, 0, 24, 0, 0, 0, 31, 23, 3, 0, 4, - 6, 0, 0, 39, 0, 27, 31, 0, 0, 0, 0, 29, 0, 0, - 0, 0, 0, 29, 0, 22, 0, 0, 15, 0, 0, 13, 0, 0, - 19, 33, 0, 0, 0, 0, 0, 0, 0, 11, 0, 15, 0, 0, - 0, 0, 0, 14, 0, 0, 16, 0, 0, 14, 0, 0, 0, 16, - 0, 0, 0, 15, 0, 0, 15, 28, 0, 0, 14, 0, 10, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, - 0, 0, 0, 0, 26, 12, 0, 0, 0, 0, 0, 31, 34, 0, - 0, 20, 0, 22, 13, 21, 0, 0, 22, 0, 0, 0, 0, 0, - 0, 11, 0, 12, 25, 0, 0, 15, 0, 0, 0, 27, 15, 0, - 23, 11, 43, 0, 0, 0, 0, 32, 0, 0, 32, 0, 0, 0, - 0, 35, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 6, 0, 14, 0, 0, 30, 0, - 0, 0, 0, 0, 11, 0, 0, 0, 0, 22, 22, 0, 0, 0, - 0, 0, 0, 14, 9, 0, 28, 9, 0, 2, 0, 0, 7, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 6, 28, 0, - 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 8, - 0, 26, 23, 14, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 0, 15, 0, 0, 0, 22, 0, 0, 0, 18, - 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 8, 0, 26, - 3, 20, 4, 0, 0, 0, 0, 35, 0, 12, 2, 0, 0, 0, - 30, 3, 11, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12, 0, 0, 0, 0, 0, 0, 16, 12, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 19, 0, 0, 0, - 14, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 11, 13, 11, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, - 0, 17, 0, 14, 11, 0, 0, 24, 0, 0, 0, 0, 0, 0, - 0, 8, 0, 0, 0, 0, 12, 0, 12, 14, 0, 0, 0, 0, - 0, 14, 0, 0, 0, 0, 0, 26, 0, 22, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 46, 15, 0, 13, 12, 0, 0, - 15, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, - 0, 20, 0, 0, 16, 0, 0, 0, 0, 0, 30, 0, 15, 3, - 0, 0, 0, 0, 15, 15, 0, 24, 9, 14, 0, 9, 0, 0, - 0, 0, 25, 2, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, - 0, 38, 0, 19, 0, 0, 12, 0, 0, 34, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, - 21, 0, 0, 0, 0, 0, 0, 35, 0, 73, 74, 12, 23, 0, - 0, 12, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, 0, 30, 0, 0, 27, 0, 0, 34, - 0, 0, 0, 0, 0, 0, 0, 31, 0, 23, 0, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 13, 0, - 23, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 16, 14, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 21, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 19, 0, 0, 28, 0, 24, 0, 0, 0, 0, 0, - 28, 0, 19, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 34, 0, 0, 11, 16, 0, 0, 17, 0, 0, 23, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, - 0, 0, 19, 0, 0, 0, 0, 2, 19, 0, 0, 0, 30, 0, - 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 27, - 0, 0, 15, 0, 0, 15, 16, 0, 0, 0, 31, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 27, 0, 27, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, - 15, 15, 0, 12, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 20, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 13, 15, 18, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 24, 0, 0, 13, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 15, 0, 13, 0, 0, - 0, 0, 0, 0, 0, 0, 12, 72, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 32, 35, 31, 16, 24, 30, 0, 0, 0, - 23, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 10, 0, 0, 0, 0, 19, 18, 0, 27, 0, 0, 0, 11, 0, - 37, 0, 0, 28, 0, 31, 0, 0, 17, 0, 13, 0, 0, 0, - 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, - 0, 0, 0, 27, 0, 0, 11, 0, 0, 27, 0, 0, 13, 0, - 11, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 33, - 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 11, 0, 25, - 0, 12, 24, 0, 0, 20, 0, 18, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15, 18, 0, 19, 0, 0, 12, 0, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 28, - 0, 22, 0, 0, 0, 0, 0, 0, 37, 0, 23, 0, 0, 0, - 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 16, 0, 24, 0, - 11, 0, 0, 0, 0, 0, 15, 0, 0, 0, 12, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, - 0, 0, 0, 21, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 18, 0, 29, 0, 20, 13, 15, - 0, 0, 30, 0, 0, 25, 32, 0, 0, 0, 0, 0, 0, 18, - 0, 31, 14, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, - 23, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 19, 0, - 13, 0, 0, 0, 23, 0, 26, 0, 0, 21, 18, 0, 0, 0, - 0, 22, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 26, 0, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, - 0, 18, 0, 0, 0, 0, 39, 0, 0, 0, 31, 0, 0, 2, - 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 13, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 26, 18, 15, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 44, - 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 0, 0, 0, 30, 0, 0, 0, 25, 0, 0, 0, 0, 14, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 16, 0, 0, 0, - 0, 17, 0, 0, 0, 0, 0, 18, 0, 0, 0, 31, 0, 26, - 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 21, 0, 3, 0, 13, 0, 0, 0, 26, 0, 0, 0, 0, 19, - 12, 13, 0, 0, 9, 0, 0, 24, 0, 0, 0, 19, 0, 0, - 25, 0, 0, 0, 0, 0, 10, 17, 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 30, 14, 0, 0, 0, 0, 0, 18, 14, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 34, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 14, 0, 0, 14, 0, - 0, 0, 14, 0, 2, 0, 0, 0, 0, 39, 0, 40, 0, 0, - 0, 0, 23, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 23, - 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 13, 0, 0, 0, 0, 0, 0, 19, 0, 18, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 18, 15, 29, 0, 0, 0, 0, - 0, 0, 11, 18, 0, 0, 0, 0, 0, 0, 21, 0, 35, 18, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8, 0, 0, 0, 19, 0, 0, 17, 0, 0, 24, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 26, 0, 0, 0, 0, 0, 18, 0, 0, 0, 18, 0, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 0, 18, 0, 28, 0, 0, 29, 0, 0, - 24, 0, 0, 0, 25, 0, 0, 23, 0, 0, 0, 0, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 14, 0, 0, 0, - 0, 0, 27, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 43, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, - 0, 21, 13, 0, 0, 0, 0, 18, 0, 0, 18, 0, 0, 19, - 32, 0, 4, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 12, - 0, 0, 41, 18, 0, 0, 0, 0, 0, 23, 0, 0, 0, 36, - 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 24, 0, 0, 0, 0, 0, - 4, 14, 0, 0, 14, 0, 0, 29, 0, 0, 0, 18, 0, 0, - 0, 24, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 18, 15, 28, 0, 27, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 0, 28, 0, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 23, 0, 15, 0, 0, 18, 0, 0, 0, 6, 17, - 0, 0, 0, 0, 0, 27, 0, 0, 0, 7, 28, 0, 0, 0, - 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 29, 27, 0, - 0, 19, 14, 0, 8, 0, 30, 0, 38, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 43, 0, 15, 0, 14, 21, 0, 26, - 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, - 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 0, 0, 2, 0, 0, 18, 0, 0, 36, 0, 24, 0, 0, - 0, 0, 33, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, - 0, 35, 0, 0, 0, 0, 0, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 11, - 27, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 27, - 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 14, 0, 0, 11, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 14, 0, 0, 0, 13, 14, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 36, 0, 0, - 21, 0, 0, 36, 0, 0, 0, 0, 14, 0, 0, 15, 0, 0, - 0, 0, 13, 0, 0, 0, 28, 21, 0, 0, 15, 0, 0, 21, - 0, 0, 0, 24, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 10, 11, 0, 0, 0, 0, 0, 30, 10, - 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 14, 0, - 0, 0, 0, 0, 0, 25, 0, 0, 14, 0, 22, 0, 0, 0, - 0, 0, 22, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, - 0, 14, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 32, - 29, 11, 15, 0, 13, 9, 0, 8, 0, 0, 0, 0, 0, 0, - 0, 0, 34, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 10, 26, 0, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 29, 11, 25, 0, 0, 0, 0, 0, 0, - 0, 0, 29, 0, 0, 0, 10, 0, 0, 0, 0, 13, 0, 0, - 0, 0, 0, 18, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, - 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, - 0, 0, 0, 29, 0, 0, 0, 0, 0, 22, 0, 14, 0, 6, - 0, 0, 0, 24, 30, 0, 0, 0, 0, 0, 29, 0, 0, 0, - 0, 0, 0, 14, 18, 0, 26, 0, 0, 0, 0, 31, 0, 9, - 0, 32, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, - 0, 29, 0, 22, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, - 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 14, 0, - 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 29, 0, 43, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 12, - 0, 0, 0, 0, 0, 0, 24, 0, 29, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 11, - 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 29, 0, 0, 3, 13, 0, 0, 0, 0, 0, 0, 0, 22, 29, - 0, 0, 0, 2, 34, 0, 0, 30, 0, 0, 0, 0, 14, 0, - 0, 0, 0, 0, 10, 22, 0, 0, 0, 0, 0, 0, 0, 0, - 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, - 0, 0, 0, 0, 16, 0, 14, 0, 37, 22, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 21, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, - 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, - 0, 0, 0, 9, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, - 16, 0, 30, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 23, 35, 10, 0, - 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 0, 0, 0, 0, 16, 0, 3, 0, 0, 0, 22, 0, 0, - 29, 0, 0, 0, 0, 16, 0, 0, 0, 0, 20, 0, 0, 0, - 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, - 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, - 0, 8, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 15, 0, 0, 24, 35, - 27, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 28, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 21, 11, 0, 25, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 37, 0, - 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 16, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, - 0, 0, 10, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, - 0, 0, 0, 0, 0, 22, 0, 0, 30, 0, 30, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 33, 0, 22, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, - 0, 0, 23, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 23, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 11, 22, 0, 0, 0, 0, 0, - 0, 0, 0, 17, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, - 0, 22, 0, 7, 19, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 11, 0, 19, 0, 0, 0, 0, 0, 0, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 0, 0, 0, 33, 17, 0, 0, 0, - 22, 0, 0, 0, 0, 15, 0, 0, 0, 0, 19, 22, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 22, 16, 0, 0, 0, 0, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 11, 0, 0, - 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 0, 0, 14, 0, 16, 0, 0, 22, 0, - 0, 0, 0, 0, 0, 0, 28, 0, 15, 0, 0, 29, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 13, 27, 22, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 27, 0, - 0, 0, 0, 27, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, - 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 19, 0, 0, 0, 0, 11, 0, 0, 43, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 22, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 25, 0, - 0, 0, 0, 15, 0, 0, 0, 29, 22, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 27, 0, 28, 18, 0, 0, 0, 22, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 35, 20, 0, 0, 0, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 29, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 13, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 6, 0, 28, 0, 0, 28, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, - 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 27, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, - 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 27, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 27, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, - 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 24, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 18, 0, 0, 24, 0, 0, 0, 0, 30, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 16, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, - 0, 0, 43, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 8, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 24, 0, 0, 5, 24, 22, 0, 13, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 7, 0, - 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 29, 0, 0, 0, 21, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 30, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, - 13, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 38, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, - 0, 26, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 14, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 22, 0, 0, - 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 25, 0, 0, 0, 15, - 0, 0, 0, 0, 26, 0, 0, 0, 24, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 13, 0, 33, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, - 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 17, 0, 0, - 0, 33, 40, 0, 0, 0, 0, 14, 17, 14, 0, 0, 0, 0, - 0, 0, 27, 0, 17, 0, 0, 27, 33, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 20, 14, 0, 0, 0, 0, 24, 0, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 20, 0, 0, 17, 0, 0, 0, 43, - 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 25, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 31, 0, 0, 0, 0, 17, 0, 0, 0, 33, 0, 0, 0, - 0, 25, 0, 0, 0, 15, 15, 6, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, - 0, 25, 0, 0, 0, 15, 4, 0, 0, 0, 0, 0, 24, 0, - 24, 0, 15, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 0, 17, 0, 0, 0, 20, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 25, 0, 0, - 16, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 14, 17, 0, 0, 0, 0, 0, 0, - 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 25, 14, 0, 7, 15, 0, 17, 0, 0, - 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 32, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 25, 0, 0, 32, 31, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 31, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 22, - 0, 0, 0, 0, 0, 0, 6, 0, 24, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 17, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 36, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, - 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 4, 0, 0, 0, 0, 13, 10, 12, 0, 0, 10, 0, + 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 23, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 18, 0, + 13, 0, 0, 0, 0, 0, 0, 0, 12, 10, 0, 0, 0, 13, + 0, 14, 10, 0, 11, 0, 0, 0, 0, 0, 0, 13, 0, 0, + 0, 12, 0, 8, 11, 0, 19, 0, 0, 4, 0, 4, 0, 0, + 0, 0, 14, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 2, + 17, 0, 0, 7, 0, 14, 0, 0, 12, 0, 0, 0, 0, 2, + 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 9, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 14, 20, 0, 14, + 0, 0, 0, 0, 0, 0, 7, 14, 0, 0, 6, 0, 0, 15, + 14, 8, 3, 6, 0, 0, 0, 23, 0, 2, 12, 0, 17, 12, + 0, 0, 22, 0, 15, 12, 0, 2, 0, 0, 0, 0, 14, 2, + 10, 0, 8, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 15, + 0, 0, 0, 0, 0, 7, 0, 18, 0, 0, 9, 0, 0, 0, + 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 17, 9, 13, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 14, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12, 0, 14, 0, 0, 0, 0, 22, 1, 13, 0, 0, 13, + 0, 0, 19, 0, 0, 0, 17, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, + 0, 0, 18, 0, 10, 0, 0, 22, 11, 0, 0, 14, 0, 0, + 16, 0, 0, 0, 9, 17, 0, 13, 0, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 15, 0, 0, 9, + 15, 0, 0, 0, 0, 7, 0, 0, 6, 0, 0, 19, 0, 0, + 0, 10, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 15, + 0, 0, 8, 16, 0, 0, 0, 0, 0, 0, 0, 0, 22, 9, + 0, 0, 0, 8, 11, 0, 0, 0, 0, 0, 0, 0, 27, 13, + 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 10, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 12, 0, + 18, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 0, 0, 0, 0, 0, 0, 13, 10, 9, 0, 0, 0, + 0, 0, 0, 0, 11, 0, 8, 0, 0, 10, 0, 0, 19, 3, + 0, 11, 24, 0, 0, 0, 0, 0, 10, 0, 0, 21, 0, 0, + 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 25, 0, + 9, 0, 10, 0, 0, 0, 0, 0, 0, 8, 48, 0, 0, 12, + 0, 0, 0, 0, 18, 0, 14, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, + 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 0, 13, 0, 11, 6, 0, 3, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 30, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, + 0, 27, 0, 0, 0, 0, 0, 13, 17, 0, 0, 0, 16, 12, + 0, 0, 0, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 57, 0, 0, 0, 39, 40, 0, 0, 0, 0, 0, 15, 0, 0, + 15, 0, 27, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 14, + 21, 0, 0, 11, 0, 16, 0, 0, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, + 15, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, + 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 0, 0, 0, 11, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 23, 25, 0, 2, 0, 0, 13, 0, 0, 3, + 0, 3, 0, 0, 0, 0, 12, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, + 21, 0, 30, 0, 30, 0, 0, 0, 0, 0, 0, 18, 0, 0, + 0, 14, 14, 0, 0, 0, 20, 0, 0, 0, 0, 0, 20, 0, + 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, + 0, 22, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 16, 0, 7, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, + 0, 17, 0, 0, 0, 9, 0, 17, 0, 0, 0, 0, 0, 0, + 0, 24, 15, 0, 18, 0, 0, 10, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 13, 23, 0, 0, 0, 0, 19, 0, 23, 0, 18, + 0, 18, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 12, 31, + 0, 0, 31, 9, 0, 0, 22, 0, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 20, 0, 24, + 0, 30, 8, 0, 13, 0, 25, 0, 0, 0, 0, 0, 0, 42, + 0, 0, 0, 10, 0, 15, 0, 0, 0, 0, 0, 6, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, + 0, 19, 0, 0, 0, 29, 0, 0, 0, 0, 19, 9, 0, 0, + 0, 8, 0, 0, 15, 0, 0, 12, 13, 0, 11, 0, 9, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 6, 9, 0, 0, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 21, + 0, 0, 0, 26, 0, 11, 21, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 18, 0, 0, 11, 0, 5, 0, 10, 0, 0, 2, 0, + 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, + 11, 0, 0, 12, 32, 0, 0, 2, 18, 0, 0, 0, 18, 0, + 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, + 8, 39, 0, 23, 0, 0, 0, 7, 0, 10, 10, 0, 0, 0, + 0, 18, 0, 0, 0, 0, 13, 0, 15, 0, 0, 0, 0, 0, + 0, 48, 0, 0, 0, 0, 22, 0, 0, 0, 18, 0, 9, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 27, 0, 0, 0, 16, 0, 0, 0, 0, 0, 2, + 0, 0, 0, 0, 11, 0, 0, 22, 0, 0, 14, 0, 12, 9, + 0, 0, 17, 0, 0, 0, 0, 9, 9, 0, 0, 23, 0, 30, + 0, 0, 24, 16, 3, 13, 10, 0, 19, 0, 26, 0, 0, 24, + 0, 0, 0, 0, 0, 0, 0, 10, 26, 0, 0, 14, 0, 0, + 0, 31, 14, 21, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 10, 12, 19, 11, 0, 0, 34, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 0, 0, 0, 19, 0, 35, 0, 27, 0, 0, 0, 0, 0, 10, + 0, 0, 0, 0, 0, 0, 0, 12, 0, 31, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 6, + 0, 0, 20, 13, 0, 23, 0, 0, 13, 0, 0, 0, 0, 14, + 0, 0, 14, 12, 32, 0, 0, 0, 0, 0, 0, 10, 0, 0, + 0, 0, 16, 0, 0, 0, 10, 0, 20, 0, 0, 0, 10, 0, + 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 24, 0, + 0, 16, 20, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 25, 0, 0, 15, 26, 0, 18, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, + 0, 19, 16, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 22, 27, 14, 0, 0, 0, 0, 9, 14, 18, 0, 0, 0, 22, + 0, 13, 15, 0, 0, 14, 0, 18, 23, 0, 12, 0, 0, 0, + 0, 2, 0, 9, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, + 25, 0, 11, 0, 0, 0, 10, 0, 16, 0, 0, 14, 0, 0, + 0, 0, 0, 27, 9, 0, 0, 27, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, + 0, 0, 0, 13, 8, 0, 13, 0, 0, 0, 0, 0, 0, 0, + 33, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, + 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 11, 11, 15, + 0, 0, 19, 0, 32, 0, 0, 0, 0, 26, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 2, 0, 0, 0, 0, 0, 23, + 0, 0, 13, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 13, 0, 5, 0, 0, 4, 0, 0, 0, 0, 16, + 0, 0, 10, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 23, + 24, 0, 0, 0, 0, 0, 0, 0, 0, 32, 17, 0, 21, 18, + 18, 0, 3, 14, 18, 0, 0, 0, 0, 0, 11, 0, 0, 0, + 0, 0, 12, 11, 0, 0, 11, 0, 0, 12, 0, 31, 0, 0, + 0, 0, 0, 0, 12, 0, 0, 25, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 25, 11, 0, 0, 0, 11, 9, + 5, 0, 0, 13, 0, 10, 0, 0, 0, 0, 0, 14, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 20, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 8, 17, + 0, 0, 0, 15, 0, 39, 0, 18, 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 23, + 0, 0, 0, 10, 0, 0, 0, 0, 29, 0, 0, 0, 27, 16, + 0, 0, 25, 28, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, + 0, 11, 0, 0, 0, 0, 0, 14, 23, 0, 9, 0, 0, 0, + 0, 10, 0, 0, 0, 0, 20, 0, 22, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 15, 0, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 18, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0, 9, 12, 0, 0, 0, 0, 0, 0, 42, 0, + 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 23, 0, + 0, 13, 14, 0, 33, 0, 0, 0, 0, 0, 21, 0, 0, 19, + 0, 0, 0, 0, 0, 20, 0, 2, 0, 0, 30, 0, 0, 0, + 0, 14, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 17, 38, 0, 0, 0, 0, 0, 0, 0, 0, 8, 13, 0, + 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, + 18, 31, 0, 0, 0, 0, 0, 23, 0, 0, 23, 13, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 11, 19, + 26, 21, 0, 0, 10, 0, 10, 0, 0, 20, 0, 0, 0, 20, + 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 21, 0, 0, 13, 12, 0, 0, 0, 24, 22, + 0, 13, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 18, 0, 22, 0, 0, + 0, 9, 0, 0, 16, 19, 13, 0, 0, 13, 0, 12, 0, 0, + 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12, 0, 13, 13, 0, 0, 0, 0, 0, 0, 0, 28, 0, + 22, 0, 0, 2, 15, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 20, 0, 15, 18, 0, 27, 2, 0, 0, 0, 0, 19, 12, + 0, 0, 0, 0, 0, 3, 0, 9, 0, 15, 25, 0, 3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 6, 0, 11, 0, 16, + 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 30, 0, + 0, 0, 0, 28, 0, 21, 0, 29, 0, 22, 0, 0, 17, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, + 4, 0, 19, 0, 0, 0, 0, 10, 23, 0, 22, 0, 14, 0, + 0, 0, 0, 7, 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 10, 0, 15, 0, + 0, 0, 0, 0, 30, 24, 0, 0, 0, 0, 20, 21, 0, 0, + 0, 0, 0, 15, 15, 0, 3, 15, 30, 0, 24, 2, 0, 0, + 0, 0, 0, 6, 17, 18, 0, 0, 0, 0, 0, 0, 10, 0, + 14, 0, 0, 15, 0, 0, 0, 0, 0, 9, 17, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 22, 24, 15, 0, 16, 0, 0, 0, + 0, 0, 17, 6, 0, 0, 0, 0, 0, 0, 20, 20, 17, 22, + 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 12, 36, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, + 0, 17, 0, 0, 22, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 9, 0, 14, 0, 0, 15, 0, + 0, 0, 0, 13, 0, 0, 0, 0, 0, 3, 0, 0, 19, 0, + 17, 0, 0, 0, 0, 0, 2, 0, 10, 0, 0, 0, 0, 0, + 0, 0, 11, 14, 0, 16, 0, 11, 0, 0, 22, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 14, 0, 21, 0, 0, 0, 19, 0, + 0, 16, 0, 0, 0, 0, 0, 15, 0, 0, 0, 15, 0, 0, + 0, 0, 0, 16, 0, 3, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 21, + 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 24, 16, 0, 0, 0, 0, 0, 9, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, + 0, 0, 3, 32, 4, 0, 0, 16, 18, 0, 0, 0, 0, 0, + 0, 24, 0, 3, 0, 4, 6, 0, 0, 0, 0, 0, 0, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 15, + 0, 0, 0, 16, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, + 0, 12, 0, 0, 0, 0, 15, 0, 0, 23, 0, 0, 34, 30, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 22, 0, + 0, 0, 0, 0, 22, 0, 30, 0, 0, 22, 0, 0, 0, 17, + 16, 0, 0, 0, 0, 0, 15, 14, 0, 25, 20, 25, 0, 30, + 0, 0, 13, 28, 0, 15, 0, 0, 0, 0, 15, 42, 13, 0, + 0, 0, 0, 22, 32, 0, 0, 0, 0, 0, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 24, 0, 13, 28, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 21, 0, 0, + 24, 0, 16, 0, 0, 0, 0, 0, 0, 15, 0, 31, 0, 0, + 0, 16, 34, 0, 0, 0, 15, 0, 0, 0, 27, 0, 15, 0, + 0, 0, 0, 0, 0, 13, 0, 0, 0, 22, 20, 12, 24, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 18, 16, 0, 0, 0, 0, + 0, 0, 17, 0, 0, 0, 10, 0, 0, 20, 0, 0, 15, 0, + 0, 25, 0, 23, 0, 30, 0, 0, 0, 0, 0, 20, 0, 0, + 0, 14, 0, 0, 0, 0, 19, 0, 0, 0, 0, 19, 33, 0, + 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 19, 29, 13, 0, + 15, 11, 15, 26, 0, 0, 15, 0, 0, 29, 0, 5, 29, 0, + 0, 12, 0, 0, 0, 16, 14, 0, 12, 14, 0, 19, 0, 0, + 0, 0, 15, 14, 0, 0, 11, 0, 0, 0, 0, 0, 0, 11, + 0, 0, 0, 15, 0, 11, 21, 0, 14, 11, 0, 0, 11, 0, + 0, 48, 0, 0, 0, 0, 20, 0, 0, 0, 0, 2, 14, 0, + 0, 13, 18, 13, 0, 0, 0, 11, 14, 0, 0, 0, 15, 0, + 22, 27, 0, 0, 0, 0, 0, 0, 0, 28, 0, 30, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 2, 0, 0, 24, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 0, 3, 0, 0, 45, 0, 9, 0, + 0, 0, 16, 0, 3, 19, 10, 0, 0, 10, 0, 0, 9, 11, + 0, 0, 0, 24, 0, 13, 9, 0, 14, 11, 0, 0, 0, 0, + 0, 25, 0, 0, 15, 18, 0, 9, 31, 11, 0, 0, 0, 0, + 40, 0, 24, 0, 0, 0, 0, 31, 21, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 0, 0, 14, 0, 0, 0, 13, 0, 28, + 0, 0, 0, 0, 0, 0, 12, 20, 0, 26, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 11, 18, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 26, 0, 0, 17, 0, 29, 19, 0, 15, 0, 0, + 27, 0, 0, 0, 0, 0, 0, 13, 0, 30, 0, 0, 15, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 33, 0, 0, + 0, 10, 27, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, + 0, 12, 0, 14, 14, 26, 0, 0, 0, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 35, 0, + 20, 0, 21, 0, 50, 14, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 35, 0, 23, 0, 0, 0, 0, + 0, 20, 12, 0, 0, 0, 4, 13, 0, 12, 0, 0, 0, 16, + 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 13, 0, 0, + 0, 10, 0, 19, 0, 21, 0, 0, 12, 0, 0, 24, 13, 0, + 0, 12, 0, 0, 24, 0, 15, 0, 0, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 8, 0, 0, 8, 0, 10, 0, 0, 0, 27, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 12, 41, + 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 30, 29, 6, 0, + 0, 0, 23, 0, 0, 0, 0, 23, 0, 38, 0, 1, 0, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 15, 14, 0, + 25, 0, 25, 3, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 8, 22, 31, 0, + 0, 12, 0, 22, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 0, 20, 19, 0, 23, 25, 0, 0, 10, 12, 0, 14, 0, + 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 12, 0, 0, + 0, 0, 0, 0, 23, 7, 16, 14, 0, 0, 0, 15, 0, 18, + 11, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, + 0, 23, 0, 0, 0, 0, 0, 15, 0, 0, 11, 0, 0, 0, + 0, 0, 0, 15, 0, 0, 22, 11, 0, 0, 0, 0, 15, 0, + 15, 15, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, + 0, 0, 31, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 2, 0, 0, 0, 26, 21, 0, 0, + 31, 0, 4, 13, 0, 14, 26, 18, 16, 0, 0, 0, 0, 21, + 11, 15, 0, 0, 25, 0, 15, 0, 0, 0, 0, 0, 0, 13, + 15, 0, 0, 0, 0, 0, 9, 22, 13, 35, 0, 0, 0, 0, + 20, 0, 0, 0, 0, 18, 0, 0, 0, 0, 12, 14, 0, 12, + 0, 21, 0, 0, 22, 11, 0, 0, 0, 0, 23, 0, 0, 0, + 0, 25, 25, 0, 17, 35, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 24, 0, 0, 14, 35, 0, 0, 0, 16, 25, 10, 0, 0, + 0, 15, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, + 0, 0, 0, 0, 0, 0, 0, 23, 17, 18, 0, 0, 0, 13, + 31, 32, 11, 0, 0, 22, 0, 0, 17, 15, 42, 0, 0, 0, + 0, 8, 0, 13, 0, 0, 0, 0, 0, 17, 0, 22, 15, 6, + 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 8, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 11, + 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 15, 0, + 0, 9, 14, 0, 0, 0, 0, 0, 0, 18, 0, 0, 15, 0, + 0, 2, 0, 9, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, + 0, 21, 0, 0, 0, 14, 11, 0, 0, 0, 0, 0, 13, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 32, 26, 0, 0, + 0, 0, 0, 0, 0, 0, 35, 0, 0, 14, 0, 0, 0, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 15, + 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 15, 0, 9, 0, 0, 0, 0, 14, 13, 34, 0, 0, + 0, 0, 0, 27, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 0, 33, 0, 0, 0, 0, 0, 32, 0, + 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 47, 0, 19, 0, 9, 19, 0, 10, 28, 0, 0, 0, + 0, 0, 0, 14, 0, 0, 0, 0, 0, 37, 0, 0, 3, 0, + 4, 0, 12, 0, 0, 0, 0, 0, 0, 13, 0, 38, 0, 3, + 0, 4, 6, 0, 20, 0, 15, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 10, + 0, 0, 0, 0, 0, 0, 19, 11, 0, 14, 0, 0, 0, 0, + 0, 0, 20, 0, 0, 0, 0, 0, 0, 27, 31, 0, 9, 15, + 0, 0, 0, 0, 0, 0, 0, 24, 0, 8, 30, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, + 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, + 15, 0, 0, 0, 18, 18, 0, 12, 0, 0, 0, 14, 0, 0, + 0, 0, 0, 10, 0, 24, 0, 0, 0, 0, 23, 0, 0, 27, + 8, 0, 26, 0, 0, 16, 0, 0, 26, 42, 0, 0, 0, 0, + 0, 0, 0, 0, 23, 29, 0, 0, 12, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 13, 0, 29, 0, 0, 0, 0, 13, 0, + 0, 0, 14, 0, 18, 0, 0, 0, 11, 0, 0, 0, 0, 0, + 0, 11, 0, 0, 0, 28, 14, 0, 13, 0, 0, 0, 0, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 19, 20, + 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 14, 0, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 23, 15, 0, 0, 0, 0, + 0, 0, 0, 21, 0, 0, 10, 0, 0, 22, 0, 46, 34, 0, + 0, 0, 6, 0, 18, 0, 27, 28, 15, 0, 15, 25, 14, 0, + 0, 0, 9, 0, 0, 0, 20, 0, 0, 20, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 25, 17, 8, 0, 0, 0, 14, 0, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 50, 0, + 0, 0, 0, 0, 0, 15, 0, 27, 0, 0, 12, 0, 0, 0, + 0, 30, 0, 0, 0, 32, 0, 0, 0, 7, 0, 29, 0, 0, + 33, 0, 14, 0, 0, 12, 0, 0, 15, 11, 0, 0, 0, 0, + 0, 13, 0, 0, 24, 2, 29, 0, 18, 33, 25, 0, 0, 34, + 0, 25, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 3, + 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, + 0, 0, 28, 0, 17, 0, 0, 0, 0, 20, 0, 0, 20, 0, + 0, 0, 0, 2, 0, 0, 11, 0, 9, 23, 0, 0, 0, 21, + 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12, 12, 0, 0, 21, 0, 14, 0, 0, 10, 2, 0, 0, + 0, 0, 13, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 0, 0, 10, 0, 12, 0, 0, 0, + 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 13, 0, 0, 0, 0, 0, 0, 0, 33, 14, 0, 0, 0, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, + 16, 0, 0, 0, 15, 0, 0, 0, 0, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 18, 0, 0, 0, 28, 0, 0, 12, 0, 0, + 0, 0, 0, 15, 0, 13, 2, 0, 0, 0, 0, 0, 0, 14, + 0, 0, 0, 11, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 20, 0, 32, + 13, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, + 0, 22, 0, 10, 0, 0, 0, 0, 26, 0, 0, 0, 0, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 26, 20, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 11, 0, 0, + 0, 0, 0, 0, 14, 0, 0, 31, 0, 13, 17, 0, 0, 0, + 43, 28, 0, 0, 0, 31, 0, 0, 0, 33, 33, 0, 0, 0, + 0, 0, 14, 14, 0, 0, 0, 0, 0, 22, 42, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 0, 10, 0, 22, 0, 37, 28, 27, 0, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 28, 0, 31, + 0, 0, 0, 27, 18, 0, 0, 0, 13, 21, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 14, 13, 0, 22, 16, 0, + 31, 9, 0, 15, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 11, 28, 31, 0, 0, 13, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 23, 35, 17, 8, 0, 0, 0, 2, 14, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 24, 0, 0, 0, 21, 0, 0, 0, 0, 0, 11, 0, + 0, 0, 9, 26, 0, 28, 20, 0, 0, 11, 0, 28, 0, 0, + 14, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 39, 0, + 0, 0, 0, 0, 0, 0, 21, 11, 0, 0, 0, 0, 34, 0, + 11, 0, 0, 0, 0, 16, 22, 0, 0, 0, 0, 0, 0, 0, + 13, 18, 0, 0, 0, 0, 15, 10, 0, 0, 22, 16, 0, 0, + 0, 0, 6, 2, 0, 0, 0, 0, 0, 13, 0, 0, 18, 0, + 0, 8, 50, 0, 0, 0, 0, 0, 8, 29, 0, 13, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 14, 26, 30, 0, + 0, 34, 0, 0, 0, 0, 43, 0, 9, 16, 0, 0, 0, 0, + 0, 15, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 16, + 11, 0, 0, 0, 0, 11, 0, 0, 31, 0, 0, 7, 0, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, + 6, 0, 0, 18, 0, 0, 6, 18, 0, 0, 0, 15, 0, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 19, + 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, + 0, 0, 18, 0, 0, 0, 37, 0, 0, 31, 0, 14, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, + 0, 12, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 22, 0, 0, 0, 0, 20, 0, 35, 0, 0, 0, 0, 27, + 14, 0, 0, 22, 10, 11, 0, 0, 0, 0, 13, 0, 32, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 30, 0, 0, 8, + 0, 0, 0, 0, 0, 14, 0, 0, 8, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 44, 0, 0, 0, 0, + 30, 11, 22, 13, 0, 0, 24, 14, 21, 0, 0, 0, 0, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 10, 0, 0, 0, + 0, 10, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 17, 10, + 22, 0, 0, 0, 0, 24, 0, 0, 28, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 23, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, + 0, 0, 32, 0, 0, 32, 21, 0, 0, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 34, 17, 32, + 0, 0, 0, 0, 0, 0, 0, 16, 0, 22, 16, 0, 0, 14, + 0, 0, 0, 0, 21, 0, 0, 0, 0, 25, 0, 10, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 35, 0, 19, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 14, 0, + 7, 31, 0, 0, 0, 15, 0, 0, 0, 0, 0, 14, 0, 0, + 0, 0, 0, 11, 0, 0, 0, 25, 0, 0, 14, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 27, 0, + 30, 0, 0, 0, 0, 19, 35, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 31, + 0, 0, 0, 0, 0, 0, 0, 14, 0, 16, 0, 0, 17, 0, + 0, 11, 0, 0, 38, 0, 0, 12, 0, 23, 0, 0, 15, 0, + 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, + 0, 11, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, + 0, 19, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 16, 0, + 18, 0, 0, 0, 0, 0, 14, 0, 0, 0, 32, 0, 0, 0, + 0, 24, 16, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, + 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 26, 12, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, + 19, 0, 0, 30, 0, 0, 0, 17, 0, 0, 15, 0, 12, 0, + 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 38, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 15, 16, 0, 19, + 29, 0, 0, 0, 0, 23, 0, 0, 15, 4, 0, 0, 0, 0, + 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, + 0, 0, 0, 0, 0, 19, 0, 23, 0, 0, 0, 0, 0, 30, + 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 27, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 23, 28, 0, 0, 0, 0, 0, 28, 0, 0, + 0, 3, 0, 28, 0, 15, 73, 74, 0, 13, 0, 0, 0, 0, + 40, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, + 0, 0, 11, 0, 23, 0, 0, 0, 0, 11, 0, 0, 0, 0, + 0, 29, 17, 0, 23, 0, 0, 21, 0, 0, 0, 0, 19, 0, + 14, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 34, 32, 0, 14, + 12, 30, 0, 0, 24, 0, 0, 0, 0, 0, 0, 15, 0, 41, + 0, 0, 0, 0, 0, 0, 36, 15, 0, 0, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 0, 0, 3, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 19, 0, 7, 24, 0, 0, 0, 0, 0, + 14, 0, 17, 0, 0, 0, 0, 39, 0, 11, 0, 0, 0, 0, + 15, 0, 0, 29, 0, 0, 26, 0, 0, 0, 0, 23, 0, 0, + 0, 0, 0, 0, 0, 0, 25, 0, 30, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 29, 0, 13, 0, 0, 0, 0, + 0, 0, 13, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 23, + 0, 0, 0, 0, 22, 0, 0, 30, 0, 0, 0, 0, 0, 0, + 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, + 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 8, 0, + 0, 0, 0, 0, 14, 21, 0, 0, 24, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 30, 24, 0, + 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 22, 26, 23, 0, 29, 26, 0, 0, 24, 0, 0, 30, 0, 0, + 30, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 23, 0, + 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, + 0, 0, 0, 24, 0, 0, 0, 20, 12, 0, 0, 0, 7, 0, + 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, + 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, + 0, 0, 0, 19, 0, 7, 0, 0, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 13, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 0, 19, 15, 29, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 43, 0, + 0, 38, 0, 0, 14, 0, 0, 0, 0, 18, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, + 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 23, 0, 0, 0, + 29, 0, 25, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 25, + 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 0, 0, + 0, 0, 0, 28, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 11, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, + 16, 0, 0, 0, 29, 0, 0, 0, 0, 8, 9, 0, 0, 0, + 0, 19, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 8, 0, 0, 26, + 0, 15, 0, 11, 0, 0, 0, 0, 29, 0, 0, 0, 29, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 34, 0, 0, 0, 0, + 0, 10, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 22, + 32, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 15, 20, 0, 0, 0, 0, 13, 25, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 12, 0, 0, 0, 0, 21, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, + 25, 28, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 34, + 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, + 20, 0, 0, 43, 0, 0, 0, 0, 0, 19, 14, 0, 0, 36, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 16, 37, 0, 0, 0, 0, 15, + 0, 19, 0, 0, 0, 21, 0, 0, 0, 7, 22, 0, 0, 0, + 0, 24, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 29, + 0, 0, 0, 0, 0, 29, 25, 29, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 25, 0, 0, 0, 0, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 27, 21, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, + 0, 0, 14, 6, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 0, 13, 25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 23, 0, 0, 0, 0, 0, 26, 0, 35, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 0, 15, 0, 36, 0, 0, 0, 28, + 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 8, 28, 0, 0, 20, 0, 0, 0, 0, 0, 27, 0, 0, + 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 24, 29, 0, 0, + 0, 35, 0, 0, 0, 35, 7, 0, 0, 0, 0, 0, 0, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 26, 0, 33, 0, 15, 21, 0, 24, 0, + 0, 0, 0, 13, 25, 9, 0, 0, 0, 0, 0, 72, 0, 30, + 0, 23, 0, 0, 4, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 4, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 29, 0, 0, 0, 0, 28, 0, 30, 0, 0, 23, 0, + 0, 14, 0, 0, 21, 0, 0, 0, 0, 23, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 14, 14, 0, 14, 0, 28, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, 0, 31, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 18, 0, 0, 18, 0, 0, 0, 0, + 0, 0, 0, 18, 0, 14, 0, 0, 0, 39, 25, 0, 0, 0, + 0, 15, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 16, 0, 0, + 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, + 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 18, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, + 0, 0, 0, 0, 0, 0, 17, 23, 0, 0, 0, 10, 0, 0, + 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 0, 0, 26, 0, 0, 0, 0, 0, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 22, 0, 0, 0, 0, 19, + 22, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 22, 0, 0, 24, 0, 0, 18, 0, 0, 0, 0, 24, 0, + 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 23, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 22, 0, 20, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 25, 2, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, + 0, 27, 0, 0, 0, 31, 27, 0, 0, 0, 0, 0, 0, 0, + 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 17, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 28, 0, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 22, 0, 20, 35, 0, 36, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 16, 0, 0, 0, 0, 0, 0, 16, 32, + 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 37, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 29, + 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 16, 24, + 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 30, 0, 24, 0, 0, 0, 13, 0, 0, 33, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 11, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 0, 28, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 30, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 15, 0, 17, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 33, 0, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 11, 15, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, + 0, 0, 9, 0, 31, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 14, 0, + 0, 0, 0, 0, 29, 0, 0, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, + 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 28, 0, 0, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 31, 0, 0, 0, + 0, 0, 0, 28, 0, 0, 0, 22, 12, 29, 0, 0, 20, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 22, 0, 0, 15, 16, 0, 0, 0, 0, + 31, 0, 16, 0, 22, 0, 0, 0, 0, 0, 15, 22, 0, 0, + 0, 43, 0, 0, 0, 0, 0, 0, 18, 31, 0, 0, 0, 0, + 0, 0, 0, 0, 33, 0, 25, 0, 0, 0, 0, 0, 0, 16, + 0, 36, 15, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 0, 15, 0, 0, 0, 0, 13, 0, 19, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 0, 14, 0, 0, 0, 0, 0, 0, 0, 11, 0, 27, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 21, 15, 0, 10, 0, 0, + 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, + 0, 0, 0, 0, 0, 15, 0, 30, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 0, 0, 24, 0, 0, 0, 0, 22, 0, 17, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 13, 0, 0, 0, 0, 11, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, + 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 25, 2, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 17, 0, 30, 0, 0, 0, 22, 0, 0, 0, 13, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 33, 0, 0, 6, 0, 16, 0, 0, 0, 0, 0, + 0, 15, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, + 24, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 15, 0, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 29, 0, 0, 0, 0, 6, 33, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 36, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 14, 0, 15, - 0, 0, 0, 36, 15, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, - 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 4, - 15, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 15, 17, 0, 0, - 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 4, 0, - 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 6, - 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 15, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, + 24, 17, 17, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 33, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 0, 0, + 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 17, 0, 35, 0, 0, 0, 0, 27, + 6, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 0, 0, 0, 0, 20, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 28, 0, 22, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, + 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 19, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 16, 26, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, + 17, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 17, 22, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 33, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 15, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 35, 0, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0, 28, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 6, 0, 17, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 24, 0, 13, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 0, 0, 6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 24, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 17, 0, + 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, + 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 16, 6, 0, 0, + 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 34, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 0, 0, 0, 0, 17, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 38, + 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 33, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 28, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, - 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 28, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 28, 0, 19, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, - 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 21, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, + 0, 17, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, + 0, 2, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 23, 0, 17, 0, 0, 0, 0, 17, 0, + 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1332,12 +1186,12 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1349,14 +1203,14 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, + 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1367,15 +1221,15 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, + 0, 0, 13, 0, 0, 17, 0, 0, 19, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1384,54 +1238,76 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, - 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, + 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1439,195 +1315,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1637,10 +1325,12 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1648,8 +1338,11 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 17, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1661,6 +1354,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1672,13 +1366,16 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1693,6 +1390,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1706,6 +1404,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1723,13 +1422,13 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1791,6 +1490,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1803,7 +1503,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1838,11 +1537,13 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1865,6 +1566,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1907,11 +1609,296 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1921,9 +1908,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1937,6 +1922,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2081,10 +2067,10 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2108,6 +2094,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2137,7 +2124,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2150,12 +2136,12 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2218,6 +2204,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2349,6 +2336,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2368,254 +2356,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 31 + 0, 0, 0, 0, 0, 0, 0, 0, 14 }; static const struct grib_keys_hash wordlist[] = @@ -2626,47 +2367,53 @@ static const struct grib_keys_hash wordlist[] = {"nd",1359}, {"ed",729}, {"nnn",1363}, - {"td",2215}, - {"t",2204}, + {"td",2214}, + {"t",2203}, {""}, {"nt",1378}, - {"sd",1985}, + {"sd",1984}, {"na",1352}, {""}, {"m",1225}, - {""}, {""}, + {""}, + {"dy",719}, {"date",649}, - {""}, {""}, + {""}, + {"year",2476}, {"name",1353}, {"min",1308}, - {""}, + {"day",661}, {"data",630}, {""}, {""}, {"ident",966}, {"one",1558}, - {"time",2241}, + {"time",2240}, {""}, {""}, {""}, {"mars",1228}, {""}, {""}, {"names",1358}, {""}, {""}, {""}, - {"stream",2176}, - {"sort",2120}, + {"stream",2175}, + {"sort",2119}, {""}, {"enorm",771}, {""}, {""}, {"metadata",1304}, - {""}, {""}, {""}, + {""}, + {"type",2288}, + {"system",2201}, {"eps",776}, {"domain",712}, - {"spare",2137}, + {"spare",2136}, {""}, {""}, {""}, {"edition",730}, - {"oper",1570}, - {"present",1721}, - {"param",1669}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"parameter",1675}, + {"oper",1569}, + {"present",1720}, + {"param",1668}, + {""}, {""}, {""}, + {"K",95}, + {""}, {""}, + {"parameter",1674}, {"iteration",1041}, {""}, {"assertion",320}, @@ -2674,4870 +2421,4525 @@ static const struct grib_keys_hash wordlist[] = {""}, {"centre",404}, {""}, {""}, {""}, - {"step",2165}, - {"refdate",1814}, - {"true",2278}, - {""}, {""}, {""}, - {"parameters",1683}, - {"core",605}, - {"timerepres",2255}, - {"opttime",1577}, - {"points",1709}, + {"step",2164}, + {""}, + {"true",2277}, + {"dataKeys",635}, {""}, {""}, - {"rectime",1808}, + {"parameters",1682}, + {"core",605}, + {"timerepres",2254}, + {"opttime",1576}, + {"points",1708}, + {""}, {""}, + {"rectime",1807}, + {""}, {""}, {""}, + {"second",1985}, {""}, - {"dateTime",659}, - {""}, - {"second",1986}, - {"dataTime",645}, - {"stepZero",2175}, + {"stepZero",2174}, {"const",578}, {"minute",1310}, - {"restricted",1850}, - {"range",1788}, - {"grid",915}, - {"units",2346}, + {"restricted",1849}, + {"dummy",714}, + {""}, + {"units",2345}, {""}, {""}, - {"radius",1783}, - {"identifier",970}, + {"radius",1782}, + {""}, {""}, + {"section",2010}, + {"status",2163}, {""}, - {"section",2011}, - {"status",2164}, + {"partitions",1687}, {""}, - {"partitions",1688}, - {"isSens",1027}, {"leadtime",1106}, {"direction",698}, - {"nref",1377}, {""}, - {"radials",1782}, + {"section8",2049}, + {"radials",1781}, {"instrument",998}, - {""}, - {"dataStream",643}, - {""}, + {""}, {""}, {""}, {"minimum",1309}, {""}, {""}, {""}, - {"marsStream",1253}, - {""}, {""}, - {"Latin",113}, - {"reference",1815}, - {""}, {""}, - {"origin",1582}, - {"statistics",2163}, - {""}, {""}, {""}, - {"process",1751}, - {"ucs",2337}, - {""}, {""}, {""}, - {"file",855}, - {"endStep",763}, + {"three",2227}, + {"dateTime",659}, {""}, - {"precision",1716}, - {"false",848}, + {"hdate",937}, + {"dataTime",645}, + {"landtype",1063}, + {""}, {""}, + {"statistics",2162}, {""}, {""}, {""}, - {"offset",1521}, + {"process",1750}, + {"ucs",2336}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"precision",1715}, + {""}, + {"refdate",1813}, + {"dataType",646}, + {""}, + {"method",1305}, + {""}, {""}, + {"count",619}, + {"marsType",1256}, + {""}, {""}, {""}, {""}, + {"class",432}, + {"phase",1701}, + {""}, + {"uco",2335}, + {""}, {""}, {""}, + {"country",623}, + {""}, {""}, {""}, {""}, {""}, + {"latitude",1071}, + {"pl",1705}, + {"char",429}, + {"identifier",970}, + {"stepType",2170}, + {"model",1329}, + {"correction",610}, + {""}, + {"total",2256}, + {""}, + {"normal",1366}, + {"isSens",1027}, + {"consensus",576}, + {"product",1752}, + {""}, + {"latitudes",1102}, + {"hundred",958}, + {"Dy",42}, + {""}, + {"dataStream",643}, + {"reportType",1828}, + {""}, {""}, + {"Di",30}, + {""}, + {"marsStream",1253}, + {"million",1307}, + {"reference",1814}, + {"hour",948}, + {"dummyc",717}, + {""}, {""}, {""}, + {"Dstart",38}, + {""}, {""}, + {"discipline",704}, + {"dataDate",633}, + {"codeType",556}, + {""}, + {"file",855}, + {"marsDir",1232}, + {""}, + {"endStep",763}, + {"false",848}, + {""}, {""}, {""}, {""}, + {"masterDir",1261}, + {"thousand",2226}, + {""}, + {"two",2286}, + {""}, + {"elementsTable",735}, + {""}, + {"operStream",1570}, + {""}, {""}, {""}, {""}, + {"marsStep",1252}, + {""}, + {"startStep",2156}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"temperature",2216}, + {""}, {""}, {""}, {""}, + {"yFirst",2474}, + {"marsDomain",1233}, + {"fcperiod",852}, + {""}, {""}, {""}, {""}, + {"nref",1377}, + {"month",1336}, {""}, {"TT",239}, - {"count",619}, {""}, {""}, - {"operStream",1571}, - {""}, - {"anoffset",315}, - {"class",432}, - {""}, - {"marsStep",1252}, - {"uco",2336}, - {"startStep",2157}, - {"offsetdate",1555}, - {""}, {""}, - {"g",892}, - {"Lap",108}, + {"accuracy",295}, + {"partitionTable",1686}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"range",1787}, + {"grid",915}, {""}, {""}, {""}, - {"latitude",1071}, - {"pl",1706}, + {"platform",1706}, + {""}, {""}, {""}, {""}, {""}, + {"oceanStream",1519}, + {"rectimeDay",1808}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"notDecoded",1376}, + {"offset",1521}, + {""}, {""}, {""}, {""}, {""}, + {"reserved",1832}, + {"local",1148}, + {"anoffset",315}, + {""}, {""}, {""}, + {"endTimeStep",765}, + {"origin",1581}, + {"offsetdate",1555}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"KS",96}, {""}, {"offsettime",1556}, {""}, - {"model",1329}, - {"correction",610}, - {"fcperiod",852}, - {"total",2257}, - {""}, - {"normal",1366}, - {"Lop",142}, - {"consensus",576}, - {"product",1753}, - {""}, - {"latitudes",1102}, - {"TS",237}, - {"three",2228}, - {"signature",2103}, - {"elementsTable",735}, - {"hdate",937}, + {"standardDeviation",2148}, {""}, {""}, - {"endTimeStep",765}, - {""}, {""}, - {"million",1307}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"platform",1707}, - {""}, - {"categories",387}, - {"discipline",704}, - {"oceanStream",1519}, - {""}, {""}, - {"daLoop",629}, - {"fgTime",854}, - {"method",1305}, - {""}, - {"year",2477}, - {""}, {""}, {""}, - {"padding",1598}, - {""}, {""}, {""}, - {"phase",1702}, - {""}, - {"partitionTable",1687}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"flags",872}, - {""}, - {"section8",2050}, - {""}, - {"efiOrder",733}, - {"char",429}, - {""}, {""}, {""}, {""}, {""}, - {"type",2289}, - {"system",2202}, - {""}, {""}, {""}, {""}, {""}, - {"gg",904}, - {"hundred",958}, - {""}, {""}, {""}, {""}, {""}, - {"two",2287}, - {""}, - {"diagnostic",691}, - {""}, {""}, {""}, - {"hour",948}, - {""}, {""}, {""}, - {"longitude",1184}, - {""}, {""}, {""}, {""}, - {"upperLimit",2368}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"eight",734}, - {""}, - {"longitudes",1215}, - {""}, - {"selectedSecond",2087}, - {"thousand",2227}, - {"ieeeFloats",971}, - {""}, - {"dataOrigin",637}, - {""}, {""}, {""}, - {"crcrlf",624}, - {""}, {""}, {""}, - {"local",1148}, - {"Di",30}, - {"flag",867}, + {"version",2399}, + {"channel",427}, + {"varno",2394}, {""}, + {"Ly",153}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Latin",113}, + {"threshold",2228}, {"localTime",1176}, - {""}, - {"dataSelection",642}, - {"userTimeStart",2377}, - {""}, - {"temperature",2217}, - {""}, - {"Dstart",38}, - {"dataType",646}, - {""}, - {"KS",96}, - {"dataDate",633}, - {""}, {""}, - {"marsType",1256}, - {"marsDir",1232}, - {"reserved",1833}, - {""}, - {"coefsFirst",560}, {""}, {""}, {""}, {""}, - {"masterDir",1261}, - {""}, - {"landtype",1063}, + {"yLast",2475}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ieeeFloats",971}, + {"hideThis",942}, {""}, {""}, {""}, {""}, - {"yLast",2476}, - {""}, {""}, - {"marsQuantile",1249}, - {"windSpeed",2447}, - {""}, - {"stepType",2171}, - {""}, {""}, {""}, - {"version",2400}, - {""}, - {"varno",2395}, - {""}, {""}, {""}, - {"K",95}, + {"eleven",737}, {""}, {"matchSort",1268}, - {"forecastperiod",884}, - {"marsDomain",1233}, {""}, - {"reportType",1829}, + {"conceptDir",568}, + {""}, + {"signature",2102}, {""}, {""}, {""}, {""}, {""}, - {"truncateLaplacian",2281}, + {"TS",237}, {""}, {""}, - {"TScalc",238}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"codeType",556}, - {"unitOfTime",2343}, + {"aerosolType",302}, {""}, {""}, - {"countTotal",622}, - {"eleven",737}, - {"coefsSecond",561}, + {"windSpeed",2446}, + {"Lap",108}, + {"dataSelection",642}, + {""}, {""}, + {"categories",387}, + {"Lcy",120}, + {""}, {""}, + {"typicalDay",2326}, + {""}, {""}, {""}, {""}, {""}, + {"eight",734}, + {"Lop",142}, + {"Luy",149}, {""}, {""}, {""}, - {"yFirst",2475}, + {"levtype",1130}, + {"elevation",736}, + {"efiOrder",733}, + {"spectralType",2146}, {""}, - {"month",1336}, - {""}, - {"channel",427}, - {""}, {""}, {""}, {"gridType",924}, - {"instrumentIdentifier",999}, - {""}, - {"notDecoded",1376}, - {"unitsFactor",2352}, - {""}, - {"codeFigure",555}, - {""}, - {"dummyc",717}, - {"average",324}, + {""}, {""}, {""}, {""}, + {"typicalTime",2331}, {""}, {""}, {""}, {""}, {""}, + {"countTotal",622}, + {"userTimeStart",2376}, {"additionalParameter",300}, {""}, - {"indicatorOfParameter",984}, - {""}, {""}, - {"dy",719}, - {"dataFlag",634}, - {""}, {""}, {""}, {""}, - {"day",661}, - {"elevation",736}, - {"dataKeys",635}, - {""}, {""}, {""}, {""}, {""}, - {"forecastTime",883}, - {""}, - {"logTransform",1183}, - {""}, {""}, {""}, - {"forecastSteps",882}, - {""}, - {"fgDate",853}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"isSatellite",1025}, - {"oneThousand",1569}, - {"offsetSection9",1552}, - {""}, - {"hideThis",942}, - {""}, {""}, - {"isFillup",1021}, - {""}, {""}, {""}, {""}, {""}, - {"lowerLimit",1218}, - {""}, {""}, - {"ccsdsFlags",393}, - {"values",2383}, - {""}, {""}, - {"levels",1129}, - {""}, - {"localSecond",1171}, - {"conceptDir",568}, - {"threshold",2229}, - {""}, - {"avg",328}, - {""}, {""}, - {"aerosolpacking",305}, - {""}, {""}, - {"levelist",1128}, - {""}, {""}, - {"statisticalProcess",2161}, - {"dateOfForecast",651}, - {""}, {""}, {""}, {""}, {""}, - {"marsLatitude",1243}, - {""}, - {"offsetSection8",1551}, - {"siteLatitude",2111}, - {""}, - {"timeOfForecast",2248}, - {""}, {""}, {""}, {""}, - {"dummy",714}, - {"fcmonth",851}, - {""}, {""}, {""}, {""}, {""}, - {"statisticalProcessesList",2162}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"band",332}, - {""}, {""}, {""}, - {"Ly",153}, - {""}, {""}, - {"level",1123}, - {""}, {""}, {""}, {"localDir",1157}, {""}, {"localDate",1149}, - {"isOctahedral",1023}, + {"productType",1757}, + {"daLoop",629}, {""}, - {"userDateStart",2373}, + {"forecastperiod",884}, + {"localDay",1151}, + {""}, {""}, {""}, {""}, {""}, + {"selectedSecond",2086}, + {""}, {""}, {""}, + {"diagnostic",691}, {""}, - {"longitudesList",1216}, - {""}, - {"satelliteSeries",1915}, - {""}, - {"rdbtime",1794}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"centreForLocal",406}, + {"crcrlf",624}, + {"fcmonth",851}, + {"values",2382}, {""}, {""}, - {"periodOfTime",1698}, + {"levels",1129}, + {"longitude",1184}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"country",623}, + {"isSatellite",1025}, + {""}, {""}, + {"levelist",1128}, + {"coefsFirst",560}, + {""}, {""}, + {"longitudes",1215}, + {"unitsFactor",2351}, + {""}, {""}, {""}, {""}, {""}, + {"marsQuantile",1249}, + {""}, {""}, + {"forecastTime",883}, + {"recDateTime",1804}, {""}, {""}, {""}, - {"latitudeSexagesimal",1099}, - {"dataLength",636}, + {"TScalc",238}, + {""}, {""}, {""}, {""}, + {"flags",872}, + {""}, {""}, {""}, {""}, + {"upperLimit",2367}, + {""}, {""}, + {"statisticalProcess",2160}, {""}, - {"Lcy",120}, + {"typicalDate",2324}, + {""}, {""}, {""}, {""}, + {"fgTime",854}, + {"endDescriptors",742}, + {"userDateStart",2372}, + {"level",1123}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"centreDescription",405}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"statisticalProcessesList",2161}, + {"forecastSteps",882}, + {"isFillup",1021}, + {"g",892}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"windDirection",2435}, + {""}, {""}, {""}, {""}, {""}, + {"overlayTemplate",1591}, + {""}, {""}, {""}, {""}, + {"runwayState",1908}, + {""}, + {"optionalData",1575}, + {"satelliteSeries",1914}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"isOctahedral",1023}, + {""}, {""}, + {"average",324}, + {"dataOrigin",637}, + {"levelType",1125}, + {""}, {""}, {""}, {""}, {""}, + {"referenceDate",1815}, + {""}, {""}, {""}, {""}, {""}, + {"padding",1597}, + {""}, {""}, + {"truncateLaplacian",2280}, + {"unitOfTime",2342}, + {"indicatorOfParameter",984}, + {""}, + {"fgDate",853}, + {"categoryType",388}, + {"pv",1766}, {""}, {""}, {""}, - {"marsLevel",1244}, + {"offsetSection8",1551}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"aerosolTypeName",303}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"localDateTime",1150}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"lev",1121}, + {""}, + {"nlev",1362}, + {""}, {""}, {""}, {""}, + {"startTimeStep",2158}, + {"lowerLimit",1218}, + {"validityTime",2381}, + {""}, {""}, + {"codeFigure",555}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"fireTemplate",857}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"laplacianOperator",1064}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"unitsDecimalScaleFactor",2349}, + {""}, {""}, {""}, + {"LaD",105}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"coordinatesPresent",604}, + {""}, + {"marsStartStep",1251}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"periodOfTime",1697}, + {"waveDomain",2423}, + {""}, {""}, {""}, + {"referenceStep",1823}, + {""}, + {"offsetSection0",1541}, + {"ccsdsFlags",393}, + {""}, + {"coefsSecond",561}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"pressureLevel",1740}, + {""}, {""}, {""}, + {"logTransform",1183}, + {""}, + {"ccsdsRsi",394}, + {"localSecond",1171}, + {""}, + {"parameterDiscipline",1677}, + {""}, {""}, + {"band",332}, + {""}, + {"flag",867}, + {""}, {""}, {""}, {""}, + {"firstDimension",858}, + {""}, {""}, {""}, {""}, {"datasetForLocal",648}, {""}, {""}, {""}, {""}, {""}, - {"Luy",149}, - {"number",1379}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"bitmap",370}, - {""}, {""}, {""}, - {"referenceSampleInterval",1823}, - {""}, {""}, {""}, {""}, - {"forecastLeadTime",875}, - {""}, - {"aerosolType",302}, - {""}, - {"recDateTime",1805}, + {"JS",94}, + {"userDateTimeStart",2374}, {""}, {""}, - {"topLevel",2256}, + {"rdbtime",1793}, {""}, - {"centreDescription",405}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"levtype",1130}, - {""}, - {"pv",1767}, - {"startTimeStep",2159}, - {""}, - {"standardDeviation",2149}, - {"localFlag",1159}, - {""}, - {"laplacianOperator",1064}, + {"offsetSection9",1552}, {""}, {""}, - {"spectralType",2147}, - {"referenceDate",1816}, - {""}, {""}, - {"marsStartStep",1251}, - {"endDescriptors",742}, - {"fireTemplate",857}, - {"typicalTime",2332}, - {""}, {""}, {""}, {""}, - {"aerosolTypeName",303}, - {""}, {""}, - {"centreLongitude",410}, - {""}, {""}, - {"computeStatistics",567}, - {"referenceStep",1824}, - {"productType",1758}, + {"freeFormData",887}, {""}, {""}, {""}, {""}, {"Xo",272}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"computeStatistics",567}, + {""}, {""}, {""}, {""}, {""}, + {"marsLevel",1244}, {""}, {""}, {""}, {""}, - {"accuracy",295}, - {""}, {""}, - {"latitudesList",1103}, - {""}, - {"windDirection",2436}, - {"lev",1121}, - {"originalSubCentreIdentifier",1586}, - {"nlev",1362}, - {""}, - {"LaD",105}, - {""}, {""}, {"Xp",273}, {""}, {""}, {""}, {""}, - {"optionalData",1576}, - {""}, {""}, {""}, - {"yearOfForecast",2481}, - {"localDateTime",1150}, - {""}, {""}, - {"anoffsetFirst",316}, - {""}, {""}, {""}, {""}, - {"coordinatesPresent",604}, - {"Dy",42}, - {""}, {""}, {""}, {""}, - {"unitsDecimalScaleFactor",2350}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfCentrePoint",1188}, - {""}, {""}, {""}, {""}, - {"laplacianOperatorIsSet",1065}, - {""}, {""}, {""}, {""}, - {"overlayTemplate",1592}, - {""}, {""}, {""}, {""}, - {"JS",94}, - {""}, {""}, - {"dimensionType",697}, - {"preferLocalConcepts",1720}, - {""}, {""}, {""}, {""}, - {"hourOfForecast",951}, + {"gg",904}, + {""}, + {"dateOfForecast",651}, + {"instrumentIdentifier",999}, + {""}, + {"yearOfForecast",2480}, {""}, {""}, {""}, {""}, {""}, {""}, - {"templatesLocalDir",2219}, - {"setLocalDefinition",2094}, - {"incrementOfLengths",975}, - {"levelType",1125}, - {""}, {""}, {""}, - {"derivedForecast",689}, - {""}, {""}, - {"generatingProcessTemplate",901}, - {""}, - {"freeFormData",887}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"distinctLatitudes",706}, - {""}, - {"pressureLevel",1741}, - {"marsRange",1250}, - {"runwayState",1909}, - {""}, {""}, {""}, {""}, {""}, - {"offsetDescriptors",1535}, - {"controlForecastCluster",583}, - {""}, {""}, {""}, {""}, - {"gridDefinition",917}, - {""}, - {"referenceOfLengths",1819}, - {""}, {"obstype",1516}, - {"firstDimension",858}, - {"anoffsetLast",318}, - {"rdbtimeTime",1801}, - {""}, - {"stepRange",2169}, + {"timeOfForecast",2247}, {""}, {""}, - {"rectimeDay",1809}, + {"number",1379}, + {""}, {""}, + {"derivedForecast",689}, + {"longitudesList",1216}, + {"topLevel",2255}, + {"avg",328}, + {"bitmap",370}, {""}, {""}, {""}, - {"integerScalingFactorAppliedToDirections",1003}, - {"integerScalingFactorAppliedToFrequencies",1004}, - {"Nr",200}, - {""}, {""}, {""}, {""}, - {"userDateTimeStart",2375}, - {"rdbType",1792}, - {"ccsdsRsi",394}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"generatingProcessIdentifier",900}, - {""}, {""}, - {"Ni",198}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"anoffsetFrequency",317}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"categoryType",388}, - {"global",905}, {"localDecimalScaleFactor",1152}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"parameterDiscipline",1678}, - {""}, {""}, {""}, {""}, {""}, - {"angleDivisor",309}, - {""}, {""}, - {"waveDomain",2424}, - {""}, {""}, {""}, - {"groupSplitting",928}, - {"monthOfForecast",1339}, - {""}, {""}, - {"typicalDate",2325}, {""}, - {"centreLongitudeInDegrees",411}, - {""}, {""}, {""}, - {"ensembleSize",774}, - {""}, {""}, {""}, - {"integerScaleFactor",1002}, - {"upperRange",2369}, + {"Nr",200}, + {"marsLatitude",1243}, + {""}, + {"offsetDescriptors",1535}, + {"siteLatitude",2110}, + {""}, {""}, + {"laplacianOperatorIsSet",1065}, {""}, {"analysisOffsets",308}, - {""}, {""}, {""}, - {"generatingProcessIdentificationNumber",899}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"validityTime",2382}, - {""}, {""}, {""}, {""}, - {"lcwfvSuiteName",1105}, - {""}, {""}, {""}, {""}, - {"NT",190}, - {"parameterName",1680}, - {""}, {""}, {""}, {""}, - {"Nf",197}, + {"marsKeywords",1240}, + {""}, + {"Ny",207}, {""}, {""}, {""}, {""}, + {"aerosolpacking",305}, + {"Ni",198}, + {"dataLength",636}, + {""}, + {"dataFlag",634}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"anoffsetFrequency",317}, + {""}, {""}, {"localDefinition",1155}, - {"suiteName",2195}, - {""}, - {"tubeDomain",2285}, - {"localTimeForecastList",1177}, - {""}, - {"gridName",922}, {""}, {""}, {""}, {""}, {""}, - {"decimalScaleFactor",671}, - {"modelName",1332}, - {"latitudeOfCentrePoint",1076}, - {"Nassigned",193}, - {"cfName",415}, - {""}, {""}, {""}, {""}, {""}, - {"heightLevelName",939}, + {"rdbType",1791}, {""}, - {"localDay",1151}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"reservedOctet",1838}, - {""}, {""}, {""}, {""}, {""}, - {"conceptsLocalDirAll",571}, + {"setLocalDefinition",2093}, + {""}, {""}, + {"marsRange",1250}, + {""}, {""}, {""}, + {"latitudesList",1103}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endOfRange",762}, - {"typeOfLevel",2303}, + {"validityDate",2380}, + {"distinctLatitudes",706}, + {"stepRange",2168}, + {"anoffsetFirst",316}, + {"Ncy",196}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"gridDefinition",917}, {""}, - {"setDecimalPrecision",2093}, + {"Nuy",205}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"angleDivisor",309}, + {""}, + {"centreForLocal",406}, + {""}, {""}, {""}, {""}, + {"controlForecastCluster",583}, + {"J",93}, + {"parameterName",1679}, + {""}, {""}, + {"reservedOctet",1837}, + {""}, {""}, + {"setDecimalPrecision",2092}, + {""}, {""}, {""}, + {"templatesLocalDir",2218}, + {"suiteName",2194}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"modelName",1332}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"rdbtimeDay",1795}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"referenceSampleInterval",1822}, + {""}, {""}, {""}, + {"decimalScaleFactor",671}, + {""}, + {"upperRange",2368}, + {""}, {""}, + {"verticalDomainTemplate",2409}, + {"rdbtimeTime",1800}, + {""}, {""}, + {"hourOfForecast",951}, + {""}, {""}, + {"scaledDirections",1945}, + {""}, {""}, {""}, + {"shortName",2098}, {"lengthDescriptors",1111}, {""}, {"dayOfForecast",664}, - {""}, {""}, - {"siteId",2110}, + {""}, + {"NT",190}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"marsIdent",1239}, + {""}, + {"localTimeForecastList",1177}, + {""}, {""}, {""}, + {"matchTimeRepres",1269}, + {""}, {""}, + {"marsParam",1248}, + {"centreLongitude",410}, + {""}, {""}, {""}, {""}, + {"subSetK",2190}, + {""}, {""}, + {"cfName",415}, + {""}, {""}, + {"preferLocalConcepts",1719}, + {""}, {""}, {""}, + {"tubeDomain",2284}, + {""}, {""}, {""}, + {"latitudeOfCentrePoint",1076}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"monthOfForecast",1339}, + {""}, {""}, + {"epsPoint",778}, + {"forecastLeadTime",875}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfCentrePoint",1188}, + {"localFlag",1159}, + {""}, {""}, {""}, + {"realPart",1802}, + {"rdbtimeDate",1794}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"originalSubCentreIdentifier",1585}, + {"editionNumber",731}, + {""}, + {"Nf",197}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"incrementOfLengths",975}, + {""}, {"oldSubtype",1557}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"paramId",1670}, - {""}, {""}, - {"NL",186}, - {""}, {""}, {""}, {""}, - {"rdbtimeDate",1795}, - {""}, {""}, {""}, - {"subSetK",2191}, - {"offsetSection0",1541}, - {""}, {""}, - {"secondOfForecast",1993}, - {""}, {""}, - {"minuteOfForecast",1313}, - {""}, {""}, - {"listOfScaledFrequencies",1145}, - {""}, {""}, {""}, - {"matchLandType",1267}, - {"representationType",1831}, - {"shortName",2099}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"marsLevelist",1245}, - {""}, {""}, {""}, - {"marsParam",1248}, - {"iIncrement",963}, - {""}, {""}, - {"marsKeywords",1240}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfFloats",1427}, - {"boustrophedonic",377}, + {"latitudeSexagesimal",1099}, + {"anoffsetLast",318}, {""}, - {"rdbDateTime",1790}, - {"lowerRange",1219}, - {""}, {""}, - {"scaledDirections",1946}, - {"multiplicationFactorForLatLong",1348}, - {""}, - {"gridDefinitionSection",919}, - {""}, {""}, {""}, {""}, - {"bottomLevel",376}, - {""}, - {"longitudeSexagesimal",1214}, - {""}, - {"epsPoint",778}, + {"integerScaleFactor",1002}, + {"ensembleSize",774}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"realPart",1803}, - {""}, {""}, + {""}, {""}, {""}, {""}, + {"gridName",922}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"sectionNumber",2058}, + {"lowerRange",1219}, + {"Nassigned",193}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfLevel",2302}, + {""}, {"ifsParam",972}, {""}, {""}, - {"typicalDay",2327}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"editionNumber",731}, - {""}, - {"newSubtype",1361}, - {""}, {""}, {""}, {""}, - {"longitudinalDirectionGridLength",1217}, - {""}, - {"verticalDomainTemplate",2410}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfGridPoints",1195}, - {""}, {"energyNorm",770}, {""}, {""}, - {"typeOfStatisticalProcessing",2316}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"conceptsLocalDirAll",571}, + {"qfe",1768}, {""}, - {"typeOfStatisticalPostProcessingOfEnsembleMembers",2315}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"sectionNumber",2059}, - {""}, {""}, {""}, {""}, - {"modelIdentifier",1331}, - {""}, {""}, {""}, {""}, - {"numberOfTimeSteps",1492}, - {"J",93}, - {""}, {""}, {""}, {""}, - {"matchTimeRepres",1269}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfSection",1483}, - {""}, {""}, {""}, {""}, + {"rdbDateTime",1789}, {"northernLatitudeOfDomain",1374}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"bufrTemplate",382}, - {""}, {""}, - {"defaultName",675}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Ny",207}, - {""}, {""}, - {"minuteOfReference",1316}, - {""}, {""}, {""}, - {"numberingOrderOfDiamonds",1508}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfStatisticalProcessingForTimeRangeForReferencePeriod",2317}, - {""}, {""}, {""}, - {"rdbtimeDay",1796}, - {"headersOnly",938}, - {"defaultStepUnits",679}, - {""}, - {"selectedDay",2082}, - {"dateOfReference",656}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"overlayTemplateNumber",1593}, - {""}, - {"timeOfReference",2251}, {""}, {""}, {""}, {""}, {""}, - {"southernLatitudeOfDomain",2131}, - {"stepTypeForConversion",2172}, + {"visibility",2413}, {""}, {""}, - {"Ncy",196}, + {"stepTypeForConversion",2171}, + {""}, {""}, {""}, + {"secondOfForecast",1992}, + {""}, {""}, + {"minuteOfForecast",1313}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"generatingProcessTemplate",901}, + {""}, + {"sequences",2089}, + {""}, + {"newSubtype",1361}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"quantile",1778}, + {"typeOfStatisticalPostProcessingOfEnsembleMembers",2314}, + {""}, {""}, + {"marsLevelist",1245}, + {""}, {""}, {""}, {""}, + {"referenceOfLengths",1818}, + {""}, + {"lcwfvSuiteName",1105}, + {"gridDefinitionSection",919}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"southernLatitudeOfDomain",2130}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"endOfRange",762}, {""}, - {"numberOfSubsets",1488}, - {"secondOfForecastUsedInLocalTime",1994}, {"clusterNumber",548}, {""}, - {"minuteOfForecastUsedInLocalTime",1314}, - {""}, {""}, {""}, {""}, - {"Nuy",205}, + {"defaultName",675}, + {"global",905}, {""}, - {"perturbedType",1701}, - {""}, {""}, {""}, {""}, - {"numberOfFrequencies",1434}, - {""}, {""}, {""}, - {"faFieldName",845}, - {""}, {""}, - {"gridDefinitionDescription",918}, + {"qnh",1771}, {""}, {""}, {""}, {""}, {""}, {""}, - {"validityDate",2381}, - {"ccccIdentifiers",390}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeOfCentrePointInDegrees",1077}, - {""}, - {"angleOfRotation",311}, - {""}, - {"forecastPeriod",878}, + {"gridDefinitionDescription",918}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"qfe",1769}, + {"atmosphericChemicalOrPhysicalConstituentType",321}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"channelNumber",428}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"longitudinalDirectionGridLength",1217}, + {""}, {""}, + {"spectralDataRepresentationType",2144}, + {"frequency",888}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"spectralDataRepresentationMode",2143}, + {""}, {""}, + {"generatingProcessIdentifier",900}, + {""}, {""}, {""}, {""}, {""}, + {"rectimeSecond",1811}, + {"minuteOfReference",1316}, + {""}, {""}, {""}, + {"standardParallel",2149}, + {"uerraSection",2338}, + {""}, {""}, {""}, + {"waveLevType",2425}, + {"crraSection",627}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfStatisticalProcessingForTimeRangeForReferencePeriod",2316}, + {""}, {""}, {""}, + {"integerScalingFactorAppliedToDirections",1003}, + {"integerScalingFactorAppliedToFrequencies",1004}, + {""}, {""}, {""}, {""}, {""}, + {"dateOfReference",656}, + {""}, {""}, + {"yearOfReference",2483}, + {""}, + {"typeOfStatisticalProcessing",2315}, + {""}, {""}, {""}, {""}, {""}, + {"timeOfReference",2250}, + {""}, + {"optimisationTime",1573}, + {""}, {""}, + {"forecastPeriod",878}, + {"longitudeOfGridPoints",1195}, + {""}, {""}, + {"windPresent",2445}, {""}, {"defaultParameter",676}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"orderOfSpatialDifferencing",1579}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"generatingProcessIdentificationNumber",899}, + {""}, {""}, {""}, {""}, {""}, + {"heightLevelName",939}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"faFieldName",845}, {""}, - {"standardParallel",2150}, + {"boustrophedonic",377}, + {""}, + {"sectionPosition",2059}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"visibility",2414}, - {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"typicalSecond",2330}, + {""}, {""}, {""}, {""}, {""}, {""}, {"observedData",1515}, - {""}, {""}, {""}, {""}, - {"scaleFactorOfSecondSize",1935}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"unitOfOffsetFromReferenceTime",2342}, - {""}, {""}, {""}, {""}, {""}, - {"channelNumber",428}, - {""}, {""}, {""}, {""}, - {"epsStatisticsPoint",780}, - {""}, {""}, {""}, {""}, {""}, - {"forecastPeriodTo",880}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"LaR",107}, - {""}, {""}, - {"numberOfLocalDefinitions",1444}, - {"waveLevType",2426}, - {"rdbSubtype",1791}, - {""}, {""}, {""}, {""}, - {"climatologicalRegime",436}, - {""}, {""}, {""}, {""}, - {"LoR",127}, - {"atmosphericChemicalOrPhysicalConstituentType",321}, - {""}, {""}, {""}, {""}, - {"modeNumber",1328}, - {"sequences",2090}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfForcasts",1428}, - {""}, {""}, - {"quantile",1779}, - {"numberOfDirections",1417}, - {""}, {""}, {""}, {""}, - {"satelliteIdentifier",1913}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"localDefinitionNumber",1156}, - {""}, {""}, {""}, {""}, - {"yearOfReference",2484}, {""}, - {"sectionPosition",2060}, - {""}, {""}, {""}, {""}, - {"stretchingFactor",2178}, - {""}, - {"windPresent",2446}, - {""}, - {"partitionItems",1685}, - {""}, {""}, - {"numberOfDiamonds",1416}, - {"numberOfStatisticallyProcessedFieldsForLocalTime",1486}, - {""}, - {"scaleFactorOfFirstSize",1924}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"rectimeSecond",1812}, - {""}, {""}, {""}, {""}, {""}, - {"uerraSection",2339}, - {""}, {""}, {""}, {""}, - {"crraSection",627}, - {""}, {""}, {""}, {""}, {""}, - {"hourOfReference",954}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"oceanLevName",1518}, - {""}, {""}, {""}, {""}, - {"spectralDataRepresentationMode",2144}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"angleOfRotationInDegrees",312}, - {""}, {""}, {""}, {""}, - {"faLevelName",846}, - {""}, {""}, {""}, - {"forecastPeriodFrom",879}, - {"endOfInterval",759}, - {"stretchingFactorScaled",2179}, - {""}, {""}, {""}, {""}, - {"legNumber",1109}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"originalParameterNumber",1584}, - {""}, {""}, {""}, - {"offsetFreeFormData",1537}, - {""}, {""}, - {"totalNumber",2261}, - {""}, - {"generatingProcessTemplateNumber",902}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"trueLengthOfLastGroup",2279}, - {"referencePeriodList",1821}, - {""}, - {"numberOfForecastsInTube",1432}, - {""}, {""}, - {"scaleFactorOfStandardDeviation",1937}, - {""}, {""}, - {"dewPointTemperature",690}, - {""}, - {"endOfProduct",761}, - {""}, - {"standardParallelInDegrees",2151}, - {""}, {""}, {""}, - {"diffInDays",693}, - {"scaleFactorOfStandardDeviationInTheCluster",1938}, - {""}, {""}, - {"probPoint",1747}, - {"N",171}, - {""}, {""}, {""}, {""}, {""}, - {"tiggeSection",2235}, - {""}, {""}, {""}, - {"treatmentOfMissingData",2277}, - {""}, - {"createNewData",625}, - {""}, {""}, {""}, - {"significanceOfReferenceTime",2105}, - {""}, {""}, {""}, {""}, {""}, - {"qnh",1772}, - {""}, {""}, {""}, - {"groupLeafNodeK",926}, - {"monthOfReference",1342}, - {"climateDateFrom",434}, - {""}, - {"SPD",227}, - {""}, {""}, {""}, {""}, - {"numberOfOperationalForecastTube",1455}, - {""}, - {"missingDataFlag",1320}, - {"optimisationTime",1574}, - {"masterTableNumber",1262}, - {""}, {""}, {""}, {""}, {""}, - {"localSection",1172}, - {""}, - {"scaleFactorOfSecondFixedSurface",1934}, - {""}, {""}, {""}, {""}, {""}, - {"defaultFaFieldName",672}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"bufrTemplate",382}, {""}, {""}, {""}, {"levTypeName",1122}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"longitudeOfFirstGridPoint",1193}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"neitherPresent",1360}, - {"changingPrecision",426}, {""}, {""}, {""}, {""}, - {"postProcessing",1712}, - {""}, {""}, - {"listOfDistributionFunctionParameter",1141}, - {"indicatorOfUnitOfTimeRange",990}, - {""}, {""}, - {"scaleFactorOfFirstFixedSurface",1923}, - {""}, {""}, - {"spectralDataRepresentationType",2145}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"maximum",1274}, - {"numberOfRadials",1475}, - {"levelIndicator",1124}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"powerOfTenUsedToScaleClimateWeight",1713}, - {"computeLaplacianOperator",566}, - {"xLast",2469}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"longitudeOfIcosahedronPole",1196}, - {""}, {""}, - {"defaultFaLevelName",673}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"secondOrderFlags",1997}, - {""}, {""}, - {"widthOfFirstOrderValues",2432}, + {"groupSplitting",928}, + {""}, {""}, {""}, {""}, {""}, + {"LaR",107}, {""}, {""}, {""}, - {"defaultShortName",678}, + {"listOfScaledFrequencies",1145}, + {"standardParallelInDegrees",2150}, + {""}, + {"NL",186}, + {""}, {""}, + {"createNewData",625}, + {""}, {""}, + {"SPD",227}, + {""}, + {"LoR",127}, + {""}, {""}, {""}, {""}, + {"localSection",1172}, + {""}, + {"forecastPeriodTo",880}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"defaultStepUnits",679}, + {""}, {""}, + {"bottomLevel",376}, + {""}, {""}, {""}, {""}, {""}, + {"overlayTemplateNumber",1592}, + {""}, + {"latitudeOfCentrePointInDegrees",1077}, + {""}, + {"multiplicationFactorForLatLong",1348}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"epsStatisticsPoint",780}, + {""}, {""}, {""}, + {"numberOfFloats",1427}, + {"neitherPresent",1360}, + {""}, {""}, {""}, + {"yDirectionGridLength",2471}, + {""}, {""}, {""}, {""}, {""}, + {"climatologicalRegime",436}, + {""}, {""}, + {"dewPointTemperature",690}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"hourOfReference",954}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"averagingPeriod",327}, + {"angleOfRotation",311}, + {""}, {""}, {""}, {""}, {""}, + {"Adelta",13}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"siteId",2109}, + {""}, + {"treatmentOfMissingData",2276}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"marsIdent",1239}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"paramId",1669}, + {"monthOfReference",1342}, + {""}, + {"maximum",1274}, + {"isAuto",1011}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfTimeSteps",1492}, + {""}, {""}, {""}, + {"corr4Data",609}, + {""}, + {"productDefinition",1753}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"centreLongitudeInDegrees",411}, + {"secondDimension",1986}, {""}, {"defaultTypeOfLevel",680}, - {"clusteringMethod",551}, {""}, {""}, - {"xFirst",2468}, + {"iIncrement",963}, + {""}, {""}, {""}, + {"N",171}, {""}, {""}, {""}, {""}, {""}, - {"expoffset",799}, - {"periodOfTimeIntervals",1699}, - {""}, - {"typicalSecond",2331}, + {"dimensionType",697}, + {"originalParameterNumber",1583}, {""}, {""}, {""}, {""}, - {"stepTypeInternal",2173}, + {"referencePeriodList",1820}, {""}, - {"numberOfForecastsUsedInLocalTime",1433}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfSecondSize",1934}, + {""}, + {"numberOfDirections",1417}, + {""}, + {"forecastPeriodFrom",879}, {""}, {""}, {""}, {""}, - {"subcentreOfAnalysis",2193}, - {"Nb",194}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"modeNumber",1328}, {""}, {""}, {""}, {""}, {""}, - {"MS",158}, - {""}, - {"boustrophedonicOrdering",378}, - {""}, - {"molarMass",1335}, - {"typeOfDistributionFunction",2294}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"subSetJ",2190}, - {"observablePropertyTemplate",1510}, - {""}, {""}, {""}, - {"methodNumber",1306}, + {"oceanLevName",1518}, + {"secondOfForecastUsedInLocalTime",1993}, {""}, {""}, - {"unitOfTimeIncrement",2344}, + {"minuteOfForecastUsedInLocalTime",1314}, + {"auxiliary",323}, + {""}, {""}, + {"scaleFactorOfFirstSize",1923}, {""}, - {"ensembleForecastNumbers",772}, + {"correction1Part",612}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"applicationIdentifier",319}, - {""}, {""}, {""}, - {"waveDirectionNumber",2423}, - {"frequency",888}, - {""}, {""}, {""}, - {"systemNumber",2203}, - {""}, {""}, {""}, - {"orderOfSPD",1578}, - {""}, - {"iDirectionIncrement",959}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"marsModel",1247}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"iteratorDisableUnrotate",1043}, - {"pvlLocation",1768}, - {"productDefinition",1754}, - {""}, {""}, {""}, - {"clutterFilterIndicator",552}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"firstLatitude",861}, - {""}, - {"simpleThinningSkip",2107}, - {""}, - {"XR",270}, - {""}, {""}, {""}, - {"observablePropertyTemplateNumber",1511}, {""}, {""}, {""}, {""}, - {"addressOfFileFreeSpaceInfo",301}, - {""}, {""}, - {"yDirectionGridLength",2472}, + {"numberOfSection",1483}, {""}, {""}, + {"longitudeSexagesimal",1214}, + {""}, + {"computeLaplacianOperator",566}, + {""}, + {"scaleFactorOfStandardDeviation",1936}, {"extraDim",802}, {""}, - {"zeros",2487}, - {"unsignedIntegers",2361}, - {""}, - {"zero",2486}, + {"dataAccessors",631}, {""}, {"inputDataPresentIndicator",991}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfStandardDeviationInTheCluster",1937}, + {""}, {""}, {""}, + {"rdbSubtype",1790}, {""}, - {"DiInDegrees",32}, - {"rdbtimeSecond",1800}, + {"numberOfSubsets",1488}, + {""}, {""}, {""}, {""}, {""}, + {"xFirst",2467}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfDiamonds",1416}, + {""}, {""}, + {"waveDirectionNumber",2422}, + {""}, {""}, {""}, {""}, {""}, + {"iDirectionIncrement",959}, + {""}, {""}, {""}, + {"temperatureAndDewpointPresent",2217}, + {""}, {""}, {""}, {""}, + {"numberOfFrequencies",1434}, + {"corr3Data",608}, + {""}, {""}, {""}, + {"is_uerra",1036}, + {""}, {""}, + {"modelIdentifier",1331}, + {""}, {""}, + {"endOfProduct",761}, + {"expandedTypes",793}, + {""}, + {"faLevelName",846}, + {""}, + {"section_8",2078}, + {""}, {""}, {""}, + {"defaultShortName",678}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"TAFstr",235}, + {"probPoint",1746}, + {""}, {""}, {""}, + {"tiggeSection",2234}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"expver",800}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"marsLongitude",1246}, - {"operatingMode",1572}, - {""}, - {"siteLongitude",2112}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"applicationIdentifier",319}, {""}, {""}, {""}, - {"longitudeOfCentrePointInDegrees",1189}, + {"orderOfSpatialDifferencing",1578}, {""}, - {"bitmapSectionPresent",372}, + {"totalNumber",2260}, + {"localDefinitionNumber",1156}, {""}, {""}, {""}, {""}, - {"tubeNumber",2286}, - {""}, {""}, {""}, - {"ensembleForecastNumbersList",773}, + {"expoffset",799}, {""}, {""}, {""}, {""}, - {"P",211}, - {""}, {""}, {""}, {""}, - {"typeOfRelationToReferenceDataset",2311}, - {""}, {""}, {""}, - {"changeDecimalPrecision",421}, - {"meanSize",1296}, - {"indexingTime",980}, - {"theMessage",2222}, - {""}, {""}, {""}, {""}, - {"secondDimension",1987}, + {"defaultFaFieldName",672}, {""}, {""}, - {"FirstLatitude",67}, - {""}, {""}, {""}, {""}, - {"lengthOfProjectLocalTemplate",1118}, - {""}, {""}, {""}, - {"indexTemplate",976}, + {"selectedDay",2081}, {""}, - {"typeOfTimeIncrement",2318}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"xLast",2468}, {""}, - {"centreLatitude",408}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"numberOfDistinctSection9s",1424}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfIterations",1442}, - {""}, - {"secondLatitude",1990}, + {"short_name",2101}, {""}, {""}, - {"tableNumber",2207}, - {""}, {""}, - {"tiggeModel",2234}, - {""}, - {"firstSize",866}, - {"localLatitude",1162}, - {""}, {""}, - {"numberOfDistinctSection8s",1423}, - {""}, - {"datumSize",660}, - {""}, {""}, {""}, - {"angleMultiplier",310}, - {"secondSize",2000}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"representationMode",1830}, - {""}, {""}, - {"dataValues",647}, - {""}, {""}, - {"latitudeOfGridPoints",1080}, - {""}, {""}, - {"oneMillionConstant",1560}, - {"angleOfRotationOfProjection",313}, - {"unitsOfSecondFixedSurface",2355}, - {""}, {""}, - {"NR",188}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"simpleThinningStart",2108}, - {""}, {""}, {""}, - {"SecondLatitude",228}, - {""}, {""}, {""}, - {"temperatureAndDewpointPresent",2218}, - {""}, {""}, - {"expandedTypes",793}, - {"PLPresent",214}, - {"referenceValue",1825}, - {""}, {""}, {""}, {""}, - {"earthIsOblate",720}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"marsLamModel",1242}, - {"numberOfPartitions",1459}, - {""}, {""}, - {"DyInDegrees",43}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"binaryScaleFactor",368}, - {""}, {""}, {""}, {""}, - {"indicatorOfUnitForForecastTime",986}, - {"scanningMode",1978}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"memberNumber",1302}, - {"spectralMode",2146}, - {""}, {""}, {""}, - {"dayOfStartOfReferencePeriod",668}, - {""}, {""}, {""}, {""}, - {"inputDelayedDescriptorReplicationFactor",992}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"localMinute",1168}, - {"typeOfPostProcessing",2307}, - {""}, - {"clusterMember9",547}, - {"Adelta",13}, - {""}, {""}, {""}, {""}, - {"auxiliary",323}, - {""}, {""}, {""}, {""}, {""}, - {"verificationDate",2396}, - {""}, {""}, {""}, - {"floatVal",873}, - {""}, {""}, {""}, {""}, {""}, - {"LaDInDegrees",106}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfLastGridPoint",1197}, - {"isAuto",1011}, - {""}, - {"clusterMember8",546}, - {""}, - {"latitudeLastInDegrees",1073}, - {""}, {""}, - {"earthMinorAxis",723}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"isEps",1020}, - {""}, - {"dataRepresentation",638}, - {""}, {""}, {""}, {""}, - {"thisMarsStream",2225}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"widthOfSPD",2434}, - {""}, {""}, - {"isConstant",1017}, - {""}, {""}, {""}, {""}, - {"scalingFactorForFrequencies",1976}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"additionalFlagPresent",299}, - {""}, {""}, {""}, {""}, - {"scanningMode8",1983}, - {"localLongitude",1165}, - {""}, {""}, - {"numberOfInts",1441}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"charValues",430}, - {""}, - {"localMonth",1169}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"TAFstr",235}, - {""}, {""}, {""}, {""}, {""}, - {"marsClass",1229}, - {""}, {""}, - {"interpretationOfNumberOfPoints",1008}, - {"marsEndStep",1234}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"eastLongitudeOfCluster",725}, - {""}, {""}, {""}, - {"dataAccessors",631}, - {""}, {""}, - {"startOfMessage",2155}, - {""}, - {"qfePresent",1770}, - {""}, {""}, {""}, - {"numberOfReservedBytes",1480}, - {"optimizeScaleFactor",1575}, - {""}, - {"parameterCode",1677}, - {""}, {""}, {""}, - {"totalNumberOfdimensions",2276}, - {""}, {""}, {""}, - {"secondDimensionPhysicalSignificance",1989}, - {""}, {""}, {""}, - {"thisMarsType",2226}, - {""}, {""}, {""}, - {"clusterSize",549}, - {""}, {""}, {""}, - {"conceptsLocalMarsDirAll",573}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"scanPosition",1977}, - {""}, {""}, {""}, {""}, - {"dataRepresentationTemplate",639}, - {""}, {""}, - {"ensembleStandardDeviation",775}, - {""}, - {"totalNumberOfTubes",2272}, - {""}, {""}, - {"internalVersion",1006}, - {""}, {""}, - {"indexingDate",979}, - {""}, {""}, {""}, {""}, - {"listOfModelIdentifiers",1143}, - {""}, - {"versionNumOfFilesFreeSpaceStorage",2401}, - {""}, {""}, {""}, {""}, {""}, - {"northLatitudeOfCluster",1367}, - {""}, - {"diagnosticNumber",692}, - {""}, - {"userTimeEnd",2376}, - {""}, {""}, - {"globalDomain",906}, - {"angleSubdivisions",314}, - {""}, {""}, {""}, {""}, - {"secondsOfReference",2010}, - {""}, - {"codedValues",559}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaleFactorAtReferencePoint",1916}, - {"TAF",234}, - {""}, {""}, {""}, {""}, {""}, - {"roundedMarsLongitude",1856}, - {"numberOfReferencePeriodTimeRanges",1476}, - {""}, {""}, - {"totalNumberOfQuantiles",2269}, - {"gridPointPosition",923}, - {""}, {""}, {""}, {""}, {""}, - {"qnhPresent",1774}, - {""}, {""}, - {"dataRepresentationTemplateNumber",640}, - {""}, {""}, - {"correction1Part",612}, - {""}, {""}, {""}, {""}, {""}, - {"setCalendarId",2092}, - {"scaleFactorOfDistributionFunctionParameter",1920}, - {""}, - {"orientationOfTheGrid",1580}, - {""}, {""}, {""}, - {"oneConstant",1559}, - {""}, - {"gridDefinitionTemplateNumber",920}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"southLatitudeOfCluster",2127}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"timeIncrement",2245}, - {""}, {""}, {""}, {""}, {""}, - {"roundedMarsLatitude",1854}, - {""}, {""}, {""}, - {"verticalDomainTemplateNumber",2411}, - {"floatValues",874}, - {"dataRepresentationType",641}, - {""}, - {"section9Pointer",2055}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"iScansNegatively",964}, - {""}, {""}, - {"calendarIdPresent",384}, - {"scaleFactorOfRadiusOfSphericalEarth",1933}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"representativeMember",1832}, - {"section8Pointer",2052}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"westLongitudeOfCluster",2428}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"numberOfIntegers",1440}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"horizontalCoordinateDefinition",943}, - {""}, {""}, {""}, {""}, {""}, - {"expandedDescriptors",787}, - {"tiggeCentre",2231}, - {"biFourierMakeTemplate",360}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfTimeIncrementsOfForecastsUsedInLocalTime",1490}, - {""}, {""}, {""}, {""}, - {"corr4Data",609}, - {"tablesVersion",2211}, - {""}, {""}, - {"decimalPrecision",670}, - {"localTimeMethod",1178}, - {""}, {""}, {""}, - {"roundedMarsLevelist",1855}, - {""}, {""}, - {"ITN",92}, - {""}, {""}, {""}, - {"correction3Part",616}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"monthOfForecastUsedInLocalTime",1340}, - {"g2grid",895}, - {"heightOrPressureOfLevel",940}, - {""}, {""}, - {"offsetAfterPadding",1526}, - {"horizontalCoordinateSupplement",944}, - {""}, - {"tileClassification",2239}, - {""}, - {"nosigPresent",1375}, - {"meaningOfVerticalCoordinate",1301}, - {""}, - {"totalNumberOfFrequencies",2266}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"CDFstr",22}, - {"stringValues",2180}, - {""}, {""}, {""}, {""}, {""}, - {"userDateEnd",2372}, - {"dayOfReference",667}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"radialAngularSpacing",1781}, - {""}, {""}, - {"parameterIndicator",1679}, - {"iScansPositively",965}, - {"falseNorthing",850}, - {""}, {""}, {""}, {""}, - {"totalNumberOfDirections",2264}, - {""}, {""}, - {"targetCompressionRatio",2214}, - {""}, - {"siteElevation",2109}, - {""}, - {"centuryOfReference",413}, - {""}, {""}, {""}, {""}, - {"groupSplittingMethodUsed",929}, - {""}, - {"expandedNames",788}, - {""}, - {"longitudeOfStretchingPole",1205}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"indicatorOfUnitForTimeRange",988}, - {""}, {""}, {""}, {""}, - {"functionCode",891}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"calendarIdentification",385}, - {"offsetAfterLocalSection",1525}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"dateOfForecastRun",652}, - {""}, {""}, {""}, {""}, {""}, - {"productDefinitionTemplateNumber",1755}, - {"latitudeOfStretchingPole",1090}, - {"latLonValues",1070}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {"_T",288}, {""}, {""}, - {"is_uerra",1036}, - {""}, {""}, {""}, {""}, - {"verticalCoordinate",2408}, - {""}, - {"conceptsMasterDir",574}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"isAccumulation",1010}, - {""}, - {"spatialProcessing",2142}, - {"CDF",21}, - {""}, {""}, {""}, {""}, {""}, - {"md5Section9",1289}, - {""}, {""}, {""}, - {"NP",187}, - {""}, {""}, {""}, {""}, {""}, - {"perturbationNumber",1700}, - {""}, {""}, - {"subCentre",2181}, - {""}, - {"corr3Data",608}, - {"_endStep",291}, - {"conceptsLocalDirECMF",572}, - {""}, {""}, - {"numberOfRemaininChars",1478}, - {"section0Pointer",2013}, - {"md5Section8",1288}, - {""}, {""}, - {"levelValues",1126}, - {""}, {""}, - {"numberOfMembersInCluster",1446}, - {""}, - {"tableReference",2208}, - {"_anoffset",290}, - {""}, - {"extractSubset",833}, - {""}, - {"tableCode",2206}, {"corr2Data",607}, - {""}, {""}, - {"productDefinitionTemplateNumberInternal",1756}, - {""}, {""}, - {"correction2Part",614}, {""}, - {"calendarIdentificationTemplateNumber",386}, - {"sizeOfOffsets",2114}, + {"section_08",2067}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cfVarName",418}, + {"verificationDate",2395}, {""}, {""}, {""}, - {"monthlyVerificationTime",1346}, - {"userDateTimeEnd",2374}, + {"pvlLocation",1767}, + {""}, {""}, + {"systemNumber",2202}, + {"typeOfRelationToReferenceDataset",2310}, + {""}, {""}, + {"XR",270}, + {"dataRepresentation",638}, + {""}, {""}, {""}, + {"defaultFaLevelName",673}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"unitOfOffsetFromReferenceTime",2341}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"_endStep",291}, + {"inputDelayedDescriptorReplicationFactor",992}, + {""}, + {"widthOfFirstOrderValues",2431}, + {""}, {""}, {""}, + {"subSetJ",2189}, + {""}, + {"orderOfSPD",1577}, + {"is_aerosol",1028}, + {""}, {""}, {""}, {""}, + {"simpleThinningSkip",2106}, + {""}, {""}, {""}, {""}, + {"indexTemplate",976}, + {""}, + {"ccccIdentifiers",390}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfStatisticallyProcessedFieldsForLocalTime",1486}, + {""}, {""}, {""}, {""}, + {"changeDecimalPrecision",421}, + {""}, {""}, {""}, + {"representationType",1830}, + {""}, + {"cnmc_isac",554}, + {""}, {""}, + {"P",211}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"significanceOfReferenceTime",2104}, + {""}, {""}, {""}, + {"numberOfForcasts",1428}, + {""}, {""}, {""}, {""}, {""}, + {"NR",188}, + {""}, {""}, {""}, {""}, + {"headersOnly",938}, + {""}, {""}, + {"dataRepresentationType",641}, + {""}, {""}, + {"partitionItems",1684}, + {""}, + {"methodNumber",1306}, + {"_anoffset",290}, + {""}, {""}, + {"changingPrecision",426}, + {""}, {""}, {""}, {""}, + {"local_use",1182}, + {"legNumber",1109}, + {""}, {""}, + {"numberOfForecastsInTube",1432}, + {""}, + {"scaleFactorOfFirstFixedSurface",1922}, + {""}, {""}, + {"numberOfLocalDefinitions",1444}, + {"clusteringMethod",551}, + {"TAF",234}, + {"rdbtimeSecond",1799}, + {"efas_model",732}, + {""}, + {"typeOfTimeIncrement",2317}, + {""}, + {"typeOfDistributionFunction",2293}, + {""}, {""}, + {"numberingOrderOfDiamonds",1508}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section_09",2068}, + {"indicatorOfUnitOfTimeRange",990}, + {""}, {""}, + {"groupLeafNodeK",926}, + {""}, {""}, {""}, + {"generatingProcessTemplateNumber",902}, + {"postProcessing",1711}, + {"trueLengthOfLastGroup",2278}, + {""}, {""}, + {"cnmc_cmcc",553}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"averagingPeriod",327}, + {"diffInDays",693}, + {"indexingTime",980}, + {"unitOfTimeIncrement",2343}, + {"is_chemical",1030}, + {""}, {""}, + {"powerOfTenUsedToScaleClimateWeight",1712}, {""}, {""}, {""}, {"_TS",289}, - {""}, - {"biFourierTruncationType",367}, - {""}, {""}, - {"faModelName",847}, - {"offsetAfterCentreLocalSection",1523}, - {""}, {""}, {""}, - {"II",88}, - {"numberInTheGridCoordinateList",1383}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"tablesMasterDir",2210}, - {"indicatorOfUnitForTimeRangeForReferencePeriod",989}, - {"tigge_name",2237}, - {""}, - {"parameterCategory",1676}, - {""}, {""}, {""}, {""}, - {"md5Data",1275}, - {"orientationOfTheGridInDegrees",1581}, {""}, {""}, {""}, {""}, {""}, - {"numberOfModels",1452}, - {""}, - {"monthOfStartOfReferencePeriod",1343}, - {"is_aerosol",1028}, - {""}, - {"productIdentifier",1757}, - {""}, {""}, {""}, {""}, - {"short_name",2102}, - {""}, - {"identificationNumber",967}, - {"section_8",2079}, - {"marsForecastMonth",1237}, - {""}, - {"minutesAfterDataCutoff",1318}, + {"dataRepresentationTemplate",639}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"plusOneinOrdersOfSPD",1708}, - {"longitudeFirstInDegrees",1185}, - {"efas_model",732}, - {"lengthIncrementForTheGroupLengths",1112}, + {"climateDateFrom",434}, {""}, {""}, {""}, - {"correction4Part",618}, - {"cnmc_isac",554}, - {"localDefNumberOne",1153}, - {"streamOfAnalysis",2177}, - {"clusterIdentifier",537}, - {"indexTemplateNumber",977}, + {"simpleThinningStart",2107}, {""}, - {"accumulationInterval",294}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfFirstGridPointInDegrees",1194}, - {""}, {""}, {""}, {""}, - {"startStepInHours",2158}, - {"tablesVersionLatest",2212}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"observationGeneratingProcessIdentifier",1513}, - {""}, {""}, - {"iDirectionIncrementInDegrees",962}, + {"listOfDistributionFunctionParameter",1141}, {""}, + {"dayOfStartOfReferencePeriod",668}, + {""}, {""}, {""}, {""}, {""}, {"gts_header",935}, - {""}, {""}, {""}, - {"baseAddress",333}, - {""}, {""}, - {"localSectionPresent",1173}, - {""}, {""}, {""}, - {"lengthOfMessage",1116}, - {""}, {""}, {""}, {""}, - {"corr1Data",606}, - {"local_use",1182}, - {""}, {""}, {""}, - {"totalNumberOfRepetitions",2270}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"is_localtime",1033}, {""}, - {"DiInMetres",33}, - {"totalNumberOfTileAttributePairs",2271}, + {"scaleFactorOfSecondFixedSurface",1933}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"centreLatitude",408}, + {""}, {""}, {""}, {""}, + {"g2grid",895}, + {""}, {""}, + {"latitudeOfGridPoints",1080}, + {"matchLandType",1267}, + {""}, + {"iteratorDisableUnrotate",1043}, + {""}, {""}, + {"endOfInterval",759}, + {""}, {""}, {""}, {""}, + {"isAccumulation",1010}, + {""}, {""}, + {"secondLatitude",1989}, + {"scanPosition",1976}, + {"dataRepresentationTemplateNumber",640}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"qnhPresent",1773}, + {""}, {""}, {""}, {""}, + {"stepTypeInternal",2172}, + {""}, {""}, {""}, + {"dataValues",647}, + {""}, + {"orientationOfTheGrid",1579}, + {""}, {""}, {""}, + {"qfePresent",1769}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"satelliteIdentifier",1912}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"numberOfOperationalForecastTube",1455}, {""}, {""}, {""}, {""}, {""}, + {"angleOfRotationInDegrees",312}, + {""}, {""}, + {"stretchingFactor",2177}, + {"bitmapSectionPresent",372}, + {""}, {""}, + {"widthOfSPD",2433}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"masterTableNumber",1262}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"section8Pointer",2051}, + {""}, {""}, + {"numberOfDistinctSection8s",1423}, + {""}, {""}, + {"numberOfRadials",1475}, + {"longitudeOfIcosahedronPole",1196}, + {""}, + {"secondsOfReference",2009}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"tigge_name",2236}, + {""}, + {"sensitiveAreaDomain",2088}, + {"streamOfAnalysis",2176}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"md5Data",1275}, + {""}, {""}, {""}, + {"minutesAfterDataCutoff",1318}, + {"angleOfRotationOfProjection",313}, + {"referenceValue",1824}, + {""}, {""}, {""}, {""}, + {"molarMass",1335}, + {"SecondLatitude",228}, + {"centuryOfReference",413}, + {""}, {""}, {""}, + {"stretchingFactorScaled",2178}, + {""}, + {"firstLatitude",861}, + {"section0Pointer",2012}, + {""}, {""}, + {"levelIndicator",1124}, + {""}, + {"offsetFreeFormData",1537}, + {"ensembleForecastNumbers",772}, + {""}, + {"indexingDate",979}, + {""}, {""}, {""}, {""}, + {"Nb",194}, + {""}, + {"PLPresent",214}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section9Pointer",2054}, + {""}, {""}, + {"numberOfDistinctSection9s",1424}, + {""}, + {"md5Section8",1288}, + {""}, {""}, {""}, + {"charValues",430}, + {""}, {"minuteOfAnalysis",1311}, {""}, {""}, - {"indicatorOfUnitForTimeIncrement",987}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"LyInMetres",154}, - {""}, {""}, {""}, {""}, - {"typeOfEnsembleForecast",2295}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"NAT",174}, + {"dayOfReference",667}, + {""}, {""}, {""}, {""}, {""}, + {"scaleFactorAtReferencePoint",1915}, + {"marsModel",1247}, {""}, {""}, - {"NFSP",181}, - {"cnmc_cmcc",553}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfCompressionUsed",2293}, - {"parameterNumber",1681}, - {"iterationNumber",1042}, - {""}, {""}, - {"dimensionNumber",696}, + {"scalingFactorForFrequencies",1975}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"secondDimensionPhysicalSignificance",1988}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"dayOfAnalysis",662}, + {"floatVal",873}, + {""}, + {"localLatitude",1162}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"versionNumOfFilesFreeSpaceStorage",2400}, + {"FirstLatitude",67}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"gts_ddhh00",934}, + {""}, {""}, {""}, {""}, + {"lengthOfProjectLocalTemplate",1118}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"md5Section9",1289}, + {"sfc_levtype",2095}, + {"correction2Part",614}, + {""}, {""}, + {"expandedDescriptors",787}, + {""}, + {"numberOfForecastsUsedInLocalTime",1433}, + {""}, {""}, {""}, {""}, + {"observablePropertyTemplate",1510}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"decimalPrecision",670}, + {""}, + {"MS",158}, + {""}, {""}, {""}, {""}, {""}, + {"offsetAfterLocalSection",1525}, + {""}, {""}, + {"marsLongitude",1246}, + {""}, {""}, + {"siteLongitude",2111}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"perturbedType",1700}, + {""}, + {"zeros",2486}, + {""}, {""}, + {"zero",2485}, + {""}, {""}, {""}, {""}, + {"dirty_statistics",702}, + {""}, {""}, + {"tubeNumber",2285}, + {""}, {""}, {""}, {""}, + {"internalVersion",1006}, + {""}, {""}, {""}, {""}, {""}, + {"boustrophedonicOrdering",378}, + {"longitudeOfLastGridPoint",1197}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"observablePropertyTemplateNumber",1511}, + {"angleSubdivisions",314}, + {""}, + {"periodOfTimeIntervals",1698}, + {"numberOfPartitions",1459}, + {"representationMode",1829}, + {""}, + {"NAT",174}, + {"clusterMember8",546}, + {"offsetAfterPadding",1526}, + {""}, {""}, {""}, {""}, {""}, + {"codedValues",559}, + {""}, {""}, {""}, {""}, {""}, + {"globalDomain",906}, + {"DyInDegrees",43}, + {""}, {""}, + {"DiInDegrees",32}, + {""}, {""}, + {"thisMarsType",2225}, + {""}, + {"productDefinitionTemplateNumber",1754}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"nosigPresent",1375}, + {""}, {""}, + {"unitsOfSecondFixedSurface",2354}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"longitudeOfFirstGridPoint",1193}, + {"tableNumber",2206}, + {""}, {""}, {""}, + {"baseAddress",333}, + {"corr1Data",606}, + {"isEps",1020}, + {""}, {""}, + {"expandedNames",788}, + {""}, + {"theMessage",2221}, + {""}, {""}, {""}, {""}, {""}, + {"localLongitude",1165}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"localMinute",1168}, + {""}, {""}, {""}, + {"typeOfPostProcessing",2306}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"memberNumber",1302}, + {"meanSize",1296}, + {"gridPointPosition",923}, + {""}, {""}, {""}, + {"correction3Part",616}, + {""}, + {"productDefinitionTemplateNumberInternal",1755}, + {""}, + {"oneMillionConstant",1560}, + {""}, {""}, + {"md5Structure",1290}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetAfterCentreLocalSection",1523}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"totalNumberOfdimensions",2275}, + {""}, {""}, {""}, + {"localMonth",1169}, + {""}, {""}, {""}, {""}, + {"orientationOfTheGridInDegrees",1580}, + {""}, {""}, {""}, + {"ensembleForecastNumbersList",773}, + {"secondOrderFlags",1996}, + {""}, {""}, + {"ensembleStandardDeviation",775}, + {"verticalDomainTemplateNumber",2410}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"thisMarsStream",2224}, + {""}, {""}, {""}, + {"floatValues",874}, + {""}, {""}, {""}, {""}, {""}, + {"clusterMember9",547}, + {"monthlyVerificationTime",1346}, + {""}, + {"datumSize",660}, + {""}, {""}, {""}, {""}, + {"secondSize",1999}, + {""}, {""}, {""}, {""}, + {"radialAngularSpacing",1780}, + {""}, + {"clutterFilterIndicator",552}, + {""}, + {"internationalDataSubCategory",1007}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"scaleFactorOfRadiusOfSphericalEarth",1932}, + {""}, {""}, {""}, + {"missingDataFlag",1320}, + {""}, + {"angleMultiplier",310}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"marsEndStep",1234}, + {"totalNumberOfTubes",2271}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"spatialProcessing",2141}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"spectralMode",2145}, + {""}, + {"firstSize",866}, + {"marsLamModel",1242}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfDistributionFunctionParameter",1919}, + {""}, {""}, + {"tableReference",2207}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"spare4",2140}, + {"monthlyVerificationDate",1344}, + {""}, {""}, + {"operatingMode",1571}, + {"md5DataSection",1276}, + {""}, + {"numberOfReferencePeriodTimeRanges",1476}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfReservedBytes",1480}, + {""}, {""}, + {"localSectionPresent",1173}, + {""}, {""}, {""}, {""}, {""}, + {"md5TimeDomainSection",1291}, + {""}, + {"NP",187}, + {""}, {""}, + {"interpretationOfNumberOfPoints",1008}, + {""}, {""}, {""}, {""}, + {"earthMinorAxis",723}, + {"localDefNumberOne",1153}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"unsignedIntegers",2360}, + {""}, + {"binaryScaleFactor",368}, + {"observationGeneratingProcessIdentifier",1513}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section4",2032}, + {"timeIncrement",2244}, + {""}, {""}, {""}, + {"perturbationNumber",1699}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"stringValues",2179}, + {""}, {""}, {""}, + {"is_aerosol_optical",1029}, + {"longitudeOfCentrePointInDegrees",1189}, + {""}, {""}, {""}, {""}, {""}, + {"totalNumberOfDirections",2263}, + {""}, {""}, + {"heightOrPressureOfLevel",940}, + {"falseNorthing",850}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"gridDefinitionTemplateNumber",920}, + {""}, + {"levelValues",1126}, + {"indexTemplateNumber",977}, + {"addressOfFileFreeSpaceInfo",301}, + {"latitudeLastInDegrees",1073}, + {""}, {""}, + {"tiggeModel",2233}, + {""}, + {"jdSelected",1053}, + {""}, {""}, + {"identificationNumber",967}, + {""}, {""}, {""}, + {"representativeMember",1831}, + {""}, + {"dateOfForecastRun",652}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfRemaininChars",1478}, + {""}, {""}, + {"tablesVersion",2210}, + {"scanningMode",1977}, + {""}, {""}, {""}, + {"totalNumberOfFrequencies",2265}, + {"northLatitudeOfCluster",1367}, + {""}, + {"scanningMode8",1982}, + {""}, {""}, + {"clusterSize",549}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"localTimeMethod",1178}, + {""}, {""}, + {"is_chemical_distfn",1031}, + {""}, + {"totalNumberOfQuantiles",2268}, + {""}, {""}, {""}, + {"julianDay",1054}, + {""}, {""}, + {"diagnosticNumber",692}, + {"subcentreOfAnalysis",2192}, {"bitmapPresent",371}, {""}, {""}, - {"defaultFaModelName",674}, - {"internationalDataSubCategory",1007}, - {""}, {""}, - {"latitudeOfFirstGridPoint",1078}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"partitionNumber",1686}, - {""}, {""}, - {"sensitiveAreaDomain",2089}, + {"extractSubset",833}, + {""}, + {"LaDInDegrees",106}, + {""}, {""}, {""}, + {"userTimeEnd",2375}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"radiusInMetres",1784}, - {""}, {""}, {""}, {""}, - {"endOfFileAddress",757}, - {""}, {""}, {""}, - {"versionNumberOfGribLocalTables",2405}, + {"latLonValues",1070}, {""}, - {"directionNumber",699}, - {""}, {""}, - {"originOfPostProcessing",1583}, - {""}, {""}, - {"typeOfPreProcessing",2308}, - {"monthlyVerificationDate",1344}, - {"thresholdIndicator",2230}, - {"unitsOfFirstFixedSurface",2354}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"verticalCoordinateDefinition",2409}, - {""}, - {"is_chemical",1030}, - {""}, - {"md5Structure",1290}, - {""}, {""}, {""}, {""}, - {"totalNumberOfForecastProbabilities",2265}, + {"siteElevation",2108}, + {"earthIsOblate",720}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"complexPacking",563}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"standardParallelInMicrodegrees",2152}, - {"libraryVersion",1131}, - {""}, - {"numberOfDataMatrices",1411}, - {"numberOfVerticalPoints",1503}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"yearOfStartOfReferencePeriod",2485}, - {""}, {""}, {""}, - {"is_localtime",1033}, - {""}, {""}, {""}, {""}, {""}, - {"classOfAnalysis",433}, - {""}, - {"satelliteNumber",1914}, - {"NDSP",179}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"numberOfVerticalCoordinateValues",1501}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"DyInMetres",44}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"hourOfStartOfReferencePeriod",955}, - {""}, - {"section_09",2069}, - {""}, - {"extractedDateTimeNumberOfSubsets",838}, - {""}, {""}, - {"bufrDataEncoded",379}, - {""}, - {"numberOfPoints",1460}, - {""}, - {"md5TimeDomainSection",1291}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"monthOfAnalysis",1337}, - {""}, - {"longitudeOfLastGridPointInDegrees",1198}, - {""}, - {"numberOfVerticalGridDescriptors",1502}, - {""}, {""}, {""}, - {"dx",718}, - {"dataCategory",632}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"dayOfAnalysis",662}, - {"max",1272}, - {""}, {""}, - {"section_08",2068}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"extractSubsetList",836}, - {""}, - {"forecastProbabilityNumber",881}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"listMembersUsed",1136}, - {"tablesVersionLatestOfficial",2213}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfMembersInEnsemble",1447}, - {""}, {""}, {"centuryOfReferenceTimeOfData",414}, - {""}, {""}, {""}, - {"numberOfChars",1398}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfSecondSize",1966}, + {""}, + {"southLatitudeOfCluster",2126}, + {""}, {""}, + {"n3",1351}, + {"offsetSection10",1543}, + {"calendarIdPresent",384}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"plusOneinOrdersOfSPD",1707}, {""}, - {"numberOfMissing",1448}, - {""}, {""}, - {"scanningModeForOneDiamond",1984}, + {"truncateDegrees",2279}, + {"numberOfIterations",1442}, {""}, - {"isotopeIdentificationNumber",1040}, - {""}, - {"scaleFactorOfLowerLimit",1928}, - {""}, {""}, - {"bitMapIndicator",369}, - {""}, - {"implementationDateOfModelCycle",974}, - {"Lx",151}, - {""}, {""}, - {"md5DataSection",1276}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"xDirectionGridLength",2465}, - {""}, - {"numberOfLevelValues",1443}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"isEPS",1019}, - {""}, {""}, - {"LcyInMetres",121}, - {""}, {""}, {""}, - {"dateOfAnalysis",650}, - {""}, {""}, {""}, - {"biFourierCoefficients",359}, - {""}, {""}, - {"LuyInMetres",150}, - {"nameOfFirstFixedSurface",1356}, - {""}, {""}, - {"timeOfAnalysis",2247}, - {""}, - {"normAtInitialTime",1365}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"jdSelected",1053}, - {"Lcx",118}, - {""}, {""}, - {"timeRangeIndicator",2252}, + {"meaningOfVerticalCoordinate",1301}, + {"dx",718}, {""}, {""}, {""}, {""}, - {"windVariableDirection",2457}, - {""}, {""}, - {"Lux",147}, - {""}, {""}, - {"M",155}, - {""}, {""}, {""}, {""}, - {"originalParameterTableNumber",1585}, - {"operationalForecastCluster",1573}, - {""}, {""}, {""}, - {"scaledValueOfFirstSize",1955}, - {""}, {""}, {""}, {""}, {""}, - {"defaultSequence",677}, - {"extraDimensionPresent",803}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfModeOfDistribution",1451}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"totalNumberOfIterations",2268}, - {"localDefNumberTwo",1154}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"northernLatitudeOfClusterDomain",1373}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"projString",1761}, - {""}, - {"totalInitialConditions",2259}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"yDirectionGridLengthInMetres",2473}, - {"numberOfAnalysis",1387}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"jdLocal",1052}, - {""}, {""}, {""}, {""}, - {"Dx",39}, - {"kurt",1060}, - {""}, - {"lengthOfIndexTemplate",1115}, - {""}, {""}, {""}, {""}, - {"is_aerosol_optical",1029}, - {"lsdate_bug",1223}, - {""}, - {"scaledValueOfStandardDeviation",1968}, - {""}, {""}, {""}, {""}, - {"numberOfMissingInStatisticalProcess",1449}, - {""}, - {"numberOfCharacters",1397}, - {""}, - {"lstime_bug",1224}, - {"centralClusterDefinition",400}, - {""}, - {"scaledValueOfStandardDeviationInTheCluster",1969}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"southernLatitudeOfClusterDomain",2130}, - {""}, {""}, {""}, {""}, {""}, - {"DxInDegrees",40}, - {""}, {""}, {""}, - {"originatingCentre",1587}, - {""}, {""}, - {"coordinate1Flag",590}, - {""}, {""}, {""}, - {"directionScalingFactor",701}, - {""}, {""}, - {"kurtosis",1061}, - {"yearOfAnalysis",2478}, - {"listOfContributingSpectralBands",1140}, - {"modelVersionTime",1334}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"projectLocalTemplate",1763}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfSecondFixedSurface",1965}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfAnalysis",2290}, - {"sfc_levtype",2096}, - {""}, {""}, {""}, - {"typeOfFirstFixedSurface",2297}, - {"numberOfOctectsForNumberOfPoints",1453}, - {""}, - {"isCorrection",1018}, - {""}, {""}, {""}, {""}, - {"stepRangeInHours",2170}, - {""}, + {"roundedMarsLatitude",1853}, {"grib3divider",911}, {""}, {""}, {""}, {""}, {""}, - {"hourOfAnalysis",949}, - {"offsetSection10",1543}, + {"max",1272}, {""}, - {"numberOfCategories",1396}, - {""}, {""}, - {"groupInternalNodeK",925}, - {""}, {""}, {""}, - {"unitsBias",2347}, - {""}, {""}, {""}, - {"scaledFrequencies",1947}, - {"grib2divider",910}, - {""}, {""}, {""}, - {"verticalVisibility",2412}, - {""}, {""}, {""}, - {"rectimeMinute",1811}, - {"numberOfEffectiveValues",1426}, - {"numberOfDataPoints",1412}, - {"scaledValueOfFirstFixedSurface",1954}, + {"cfVarName",418}, {""}, - {"yDirectionGridLengthInMillimetres",2474}, + {"userDateTimeEnd",2373}, + {"longitudeOfStretchingPole",1205}, + {""}, + {"sp3",2133}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"xDirectionGridLength",2464}, + {"spare3",2139}, + {""}, + {"userDateEnd",2371}, + {""}, + {"endOfFileAddress",757}, {""}, {""}, {""}, {""}, - {"gridCoordinate",916}, + {"param_value_min",1673}, + {""}, + {"numberOfAnalysis",1387}, {""}, {""}, {""}, {""}, {""}, - {"preProcessingParameter",1715}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"matchAerosolPacking",1266}, - {"timeRangeIndicatorFromStepRange",2253}, - {"coordinate3OfLastGridPoint",597}, - {""}, - {"coordinateIndexNumber",603}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"referenceReflectivityForEchoTop",1822}, + {"indicatorOfUnitForForecastTime",986}, {""}, {""}, {""}, {""}, - {"gridDescriptionSectionPresent",921}, - {"dirty_statistics",702}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"section4Padding",2035}, - {""}, {""}, - {"truncateDegrees",2280}, - {"skewness",2118}, - {"coordinate3Flag",595}, - {"numberOfRows",1481}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"unitsConversionOffset",2348}, - {""}, {""}, {""}, - {"simpleThinningMissingRadius",2106}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"laplacianScalingFactor",1066}, - {""}, {""}, {""}, - {"driverInformationBlockAddress",713}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"selectedMonth",2086}, + {"yearOfStartOfReferencePeriod",2484}, {""}, - {"keySat",1058}, - {"forecastMonth",876}, - {"latitudeOfStretchingPoleInDegrees",1091}, - {"localNumberOfObservations",1170}, + {"additionalFlagPresent",299}, + {""}, + {"monthOfStartOfReferencePeriod",1343}, + {""}, + {"eastLongitudeOfCluster",725}, + {""}, {""}, + {"conceptsMasterDir",574}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"section2Present",2025}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"grib2divider",910}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"biFourierTruncationType",367}, {""}, {""}, {""}, + {"optimizeScaleFactor",1574}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"calendarIdentification",385}, + {""}, {""}, {""}, {""}, + {"NDSP",179}, + {""}, + {"roundedMarsLevelist",1854}, + {""}, {""}, {""}, {""}, + {"lsdate_bug",1223}, + {"conceptsLocalMarsDirAll",573}, + {""}, + {"directionScalingFactor",701}, + {""}, + {"startOfMessage",2154}, + {""}, {""}, {""}, {""}, + {"jdLocal",1052}, + {"lstime_bug",1224}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"n2",1350}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"NFSP",181}, + {""}, {""}, {""}, + {"isConstant",1017}, + {""}, + {"defaultSequence",677}, + {""}, {""}, {""}, {""}, {""}, + {"horizontalCoordinateSupplement",944}, + {"totalNumberOfRepetitions",2269}, + {""}, {""}, {""}, {""}, + {"roundedMarsLongitude",1855}, + {"extraDimensionPresent",803}, + {""}, {""}, {""}, {""}, {""}, + {"parameterNumber",1680}, + {"iterationNumber",1042}, + {""}, + {"sp2",2132}, + {"dimensionNumber",696}, + {"horizontalCoordinateDefinition",943}, + {""}, + {"unitsOfFirstFixedSurface",2353}, + {"Dx",39}, + {""}, {""}, {""}, {""}, {""}, + {"spare2",2138}, + {"secondsOfAnalysis",2008}, + {"parameterIndicator",1678}, + {""}, {""}, {""}, {""}, {""}, {""}, {"md5Product",1279}, {""}, - {"codedNumberOfFirstOrderPackedValues",557}, - {""}, {""}, {""}, {""}, {""}, - {"unknown",2356}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"numberOfForecastsInCluster",1429}, - {""}, {""}, {""}, - {"latitudeOfSouthernPole",1088}, - {""}, {""}, {""}, {""}, - {"referenceOfWidths",1820}, - {""}, {""}, {""}, - {"sampleSizeOfReferencePeriod",1911}, + {"libraryVersion",1131}, {""}, {""}, - {"centralLongitude",401}, - {""}, {""}, {""}, - {"grib1divider",907}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"is_chemical_distfn",1031}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"modelVersionDate",1333}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"crraLocalVersion",626}, - {""}, {""}, {""}, {""}, - {"predefined_grid",1718}, + {"partitionNumber",1685}, {""}, {""}, {""}, {""}, {""}, - {"numberOfPackedValues",1456}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"listMembersMissing",1132}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"epsStatisticsContinous",779}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"nameOfSecondFixedSurface",1357}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"identificationOfProject",969}, - {""}, {""}, {""}, {""}, {""}, - {"verificationMonth",2397}, - {"LoVInDegrees",129}, - {""}, {""}, {""}, - {"default_max_val",681}, - {"dayOfEndOfOverallTimeInterval",663}, - {""}, {""}, {""}, {""}, - {"originatingClass",1589}, - {""}, {""}, {""}, - {"primaryBitmap",1743}, - {""}, - {"skew",2117}, - {""}, {""}, {""}, - {"param_value_min",1674}, - {""}, {""}, {""}, {""}, {""}, - {"longitudeOfFirstDiamondCentreLine",1191}, - {"longitudeOfFirstDiamondCenterLine",1190}, - {"upperThreshold",2370}, - {""}, - {"numberOfDistributionFunctionParameters",1425}, - {"section3Padding",2030}, - {""}, - {"distanceFromTubeToEnsembleMean",705}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfFirstDiamondCentreLineInDegrees",1192}, - {""}, - {"projectionCenterFlag",1765}, - {"integerValues",1005}, - {""}, {""}, - {"coordinate2Flag",593}, - {""}, {""}, {""}, - {"LIMITS",98}, - {"section2Padding",2024}, - {"missingValue",1321}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"totalLength",2260}, - {"versionNumOfRootGroupSymbolTableEntry",2402}, - {""}, {""}, {""}, {""}, - {"PVPresent",216}, - {"legBaseTime",1108}, - {""}, {""}, {""}, {""}, - {"LoV",128}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typicalMinute",2329}, - {"numericValues",1509}, - {"numberOfForecastsInTheCluster",1431}, - {""}, {""}, {""}, {""}, - {"keyData",1056}, - {"g1conceptsMasterDir",894}, - {"rangeBinSpacing",1789}, - {""}, {""}, {""}, {""}, - {"longitudeOfStretchingPoleInDegrees",1206}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"XRInMetres",271}, - {"significanceOfReferenceDateAndTime",2104}, - {""}, {""}, - {"coordinate4OfLastGridPoint",600}, - {""}, {""}, {""}, {""}, {""}, - {"messageLength",1303}, - {""}, - {"easternLongitudeOfDomain",728}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"extraValues",806}, - {""}, {""}, {""}, - {"coordinate4Flag",598}, - {"tigge_short_name",2238}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"consensusCount",577}, - {""}, {""}, {""}, - {"isHindcast",1022}, - {"minutesAfterReferenceTimeOfDataCutoff",1319}, - {"projectionCentreFlag",1766}, - {""}, {""}, {""}, {""}, - {"verifyingMonth",2399}, - {""}, {""}, - {"longitudeOfNorthWestCornerOfArea",1199}, - {"latitudeOfFirstGridPointInDegrees",1079}, - {"Nx",206}, - {""}, {""}, - {"Azi",15}, - {"halfByte",936}, - {"latitudeOfCentralPointInClusterDomain",1075}, - {"scaleFactorOfPrimeMeridianOffset",1932}, - {""}, {""}, - {"julianDay",1054}, - {""}, {""}, {""}, {""}, {""}, - {"Yo",283}, - {""}, {""}, {""}, {""}, - {"section2Present",2026}, - {""}, - {"groupWidth",930}, - {"productionStatusOfProcessedData",1759}, - {"originatorLocalTemplate",1590}, + {"marsClass",1229}, + {"originatingCentre",1586}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Yp",284}, - {"section1Padding",2021}, - {""}, {""}, {""}, {""}, - {"subSetM",2192}, - {""}, {""}, - {"typeOfSecondFixedSurface",2313}, - {"scaleFactorOfDistanceFromEnsembleMean",1919}, - {"julianForecastDay",1055}, - {"extraLocalSectionPresent",805}, + {"scaledFrequencies",1946}, + {"listOfModelIdentifiers",1143}, + {"latitudeOfStretchingPole",1090}, + {"directionNumber",699}, {""}, - {"lowerThreshold",1220}, - {"numberOfOctetsExtraDescriptors",1454}, - {"twoOrdersOfSPD",2288}, - {""}, {""}, - {"timeCoordinateDefinition",2242}, - {""}, {""}, - {"Ncx",195}, - {""}, - {"secondsOfAnalysis",2009}, - {""}, - {"centralLongitudeInDegrees",402}, - {""}, {""}, {""}, - {"rdbtimeMinute",1798}, - {""}, {""}, - {"Nux",204}, - {""}, {""}, {""}, - {"packingType",1597}, - {"extractAreaWestLongitude",812}, - {"projectLocalTemplateNumber",1764}, - {""}, {""}, {""}, - {"averaging2Flag",326}, - {""}, {""}, - {"inputProcessIdentifier",996}, - {""}, {""}, {""}, {""}, - {"constituentType",581}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"gts_ddhh00",934}, - {""}, - {"typeOfCalendar",2292}, - {"timeDomainTemplate",2243}, - {""}, - {"typeOfSizeInterval",2314}, - {""}, {""}, - {"biFourierResolutionParameterN",363}, - {""}, - {"fileConsistencyFlags",856}, - {""}, {""}, - {"extraLocalSectionNumber",804}, - {"aerosolbinnumber",304}, - {""}, {""}, {""}, - {"constituentTypeName",582}, - {""}, {""}, {""}, - {"rectimeHour",1810}, - {""}, - {"climateDateTo",435}, - {""}, {""}, {""}, - {"groupLengths",927}, - {"latitudeOfIcosahedronPole",1081}, - {""}, {""}, - {"legBaseDate",1107}, - {""}, {""}, {""}, {""}, - {"isSatelliteType",1026}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"marsExpver",1236}, - {""}, - {"expandedCodes",783}, + {"startStepInHours",2157}, {""}, {""}, {""}, {""}, {""}, - {"secondaryBitmap",2002}, - {""}, - {"secondDimensionCoordinateValueDefinition",1988}, - {""}, - {"groupWidths",931}, - {"biFourierSubTruncationType",366}, - {"offsetBSection9",1530}, - {"section10Pointer",2016}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"westernLongitudeOfDomain",2431}, - {""}, {""}, {""}, {""}, - {"BufrTemplate",19}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfSubSatellitePoint",1207}, - {"jIncrement",1048}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"sectionLengthLimitForEnsembles",2057}, - {""}, - {"instrumentType",1000}, - {"longitudeOfSubSatellitePointInDegrees",1208}, - {"typeOfIntervalForFirstAndSecondSize",2301}, - {""}, {""}, - {"numberOfDistinctSection4s",1419}, - {"localHour",1161}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"selectedYear",2088}, - {"epsContinous",777}, - {""}, {""}, {""}, {""}, {""}, - {"secondaryBitmapPresent",2003}, - {""}, {""}, {""}, {""}, - {"deleteExtraLocalSection",686}, - {"addExtraLocalSection",298}, - {"localYear",1180}, - {""}, {""}, {""}, - {"startOfRange",2156}, - {""}, - {"averaging1Flag",325}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"listOfEnsembleForecastNumbers",1142}, - {""}, - {"biFourierResolutionSubSetParameterN",365}, - {""}, {""}, {""}, - {"radiusOfCentralCluster",1785}, - {"Lar2InDegrees",112}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetBeforeData",1532}, - {""}, - {"tileIndex",2240}, - {""}, {""}, - {"parametersVersion",1684}, - {""}, - {"marsExperimentOffset",1235}, - {"Lor2InDegrees",146}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"paleontologicalOffset",1668}, - {""}, {""}, {""}, {""}, - {"listOfParametersUsedForClustering",1144}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"extractSubsetIntervalEnd",834}, - {""}, {""}, - {"numberOfForecastsInEnsemble",1430}, - {""}, - {"widthOfLengths",2433}, - {""}, {""}, {"centuryOfAnalysis",412}, - {""}, - {"qualityControl",1776}, + {"dummy2",716}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractSubsetIntervalStart",835}, - {"directionOfVariation",700}, + {"accumulationInterval",294}, + {"projectLocalTemplate",1762}, + {"productIdentifier",1756}, + {"westLongitudeOfCluster",2427}, {""}, - {"percentileValue",1697}, - {""}, {""}, {""}, {""}, - {"attributeOfTile",322}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"numberOfDistinctSection6s",1421}, - {""}, - {"typicalDateTime",2326}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"primaryMissingValue",1744}, - {"resolutionAndComponentFlags",1842}, - {""}, - {"mAngleMultiplier",1226}, - {""}, - {"centreLatitudeInDegrees",409}, - {""}, {""}, - {"numberOfValues",1500}, - {"secondOfModelVersion",1995}, - {""}, {""}, - {"minuteOfModelVersion",1315}, - {"La2InDegrees",104}, - {"typeOfOriginalFieldValues",2305}, - {""}, {""}, {""}, - {"numberOfComponents",1406}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"referenceValueError",1826}, - {""}, - {"secondLatitudeInDegrees",1991}, - {"Lo2InDegrees",126}, - {""}, - {"typeOfIntervalForFirstAndSecondWavelength",2302}, - {""}, {""}, {""}, {""}, {""}, - {"LxInMetres",152}, + {"hourOfStartOfReferencePeriod",955}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Lar1InDegrees",110}, - {""}, {""}, - {"scaledValueOfDistributionFunctionParameter",1951}, - {"conceptsMasterMarsDir",575}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfDistinctSection3s",1418}, - {""}, {""}, {""}, {""}, - {"Lor1InDegrees",144}, + {"numberOfInts",1441}, + {"calendarIdentificationTemplateNumber",386}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"marsForecastMonth",1237}, {""}, {""}, {""}, {""}, {""}, {""}, - {"startOfHeaders",2154}, - {""}, - {"SecondOfModelVersion",229}, - {"probContinous",1746}, - {"postAuxiliary",1710}, - {""}, - {"reservedNeedNotBePresent",1837}, - {""}, {""}, {""}, - {"typeOfHorizontalLine",2300}, - {"typicalHour",2328}, - {""}, {""}, {""}, {""}, - {"secondaryBitmaps",2004}, - {"sphericalHarmonics",2148}, - {"local_padding",1181}, + {"clusterIdentifier",537}, + {""}, {""}, + {"laplacianScalingFactor",1066}, {""}, {""}, {""}, {""}, {""}, - {"stepForClustering",2166}, - {""}, {""}, {""}, {""}, - {"predefined_grid_values",1719}, - {"scaledValueOfRadiusOfSphericalEarth",1964}, - {""}, {""}, - {"typicalYear",2333}, - {""}, - {"waveFrequencyNumber",2425}, - {""}, {""}, {""}, {""}, - {"spare4",2141}, - {"primaryMissingValueSubstitute",1745}, + {"correction4Part",618}, {""}, {""}, {""}, {""}, {""}, - {"coordinate1Start",591}, + {"reserved3",1835}, {""}, {""}, {""}, {""}, - {"earthMinorAxisInMetres",724}, - {""}, {""}, - {"resolutionAndComponentFlags8",1849}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"doExtractDateTime",709}, - {""}, - {"extremeClockwiseWindDirection",839}, - {"scaleFactorOfAdditionalParameterForReferencePeriod",1917}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"thisMarsClass",2224}, - {""}, {""}, - {"secondaryBitmapsCount",2005}, - {""}, {""}, {""}, {""}, - {"La1InDegrees",102}, - {""}, - {"boot_edition",375}, - {""}, {""}, {""}, {""}, {""}, - {"section4",2033}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Lo1InDegrees",124}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"uerraLocalVersion",2338}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"lengthOfOriginatorLocalTemplate",1117}, - {"yCoordinateOfSubSatellitePoint",2471}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"numberOfDistinctSection5s",1420}, - {""}, {""}, - {"monthOfModelVersion",1341}, - {""}, - {"level_value_list",1127}, - {""}, - {"lengthOfHeaders",1114}, - {""}, {""}, {""}, {""}, - {"DxInMetres",41}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"rdbtimeHour",1797}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberInTheAuxiliaryArray",1382}, - {""}, {""}, {""}, - {"NV",192}, - {""}, {""}, {""}, {""}, {""}, - {"constantFieldHalfByte",580}, - {""}, - {"rdbtimeYear",1802}, - {""}, {""}, {""}, - {"numberOfLogicals",1445}, - {"inputExtendedDelayedDescriptorReplicationFactor",993}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfLengthOfSemiMinorAxis",1927}, - {""}, {""}, {""}, - {"frequencyNumber",889}, - {""}, {""}, - {"marsGrid",1238}, - {""}, - {"offsetAfterBitmap",1522}, - {""}, {""}, {""}, - {"LLCOSP",99}, - {""}, {""}, {""}, - {"totalNumberOfDataValuesMissingInStatisticalProcess",2263}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"numberOfDistinctSection7s",1422}, - {""}, - {"tiggeLocalVersion",2233}, - {""}, {""}, {""}, - {"lengthOfTimeRange",1119}, - {""}, {""}, {""}, - {"startingAzimuth",2160}, - {""}, {""}, - {"typeOfEnsembleMember",2296}, - {""}, {""}, - {"versionOfModelClimate",2407}, - {""}, {""}, - {"shortNameECMF",2100}, - {""}, {""}, {""}, {""}, - {"variationOfVisibilityDirection",2385}, - {""}, {""}, {""}, {""}, {""}, - {"variationOfVisibilityDirectionAngle",2386}, - {"formatVersionMajorNumber",885}, - {""}, {""}, {""}, - {"masterTablesVersionNumber",1263}, - {""}, - {"numberOfColumns",1405}, - {"section4Pointer",2036}, - {""}, {""}, {""}, - {"expandedAbbreviations",782}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"firstOrderValues",865}, - {""}, {""}, - {"backgroundProcess",331}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"Experiment_Identifier",55}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"GTSstr",79}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"yearOfCentury",2479}, - {"LcxInMetres",119}, - {""}, {""}, {""}, - {"typeOfAuxiliaryInformation",2291}, - {"selectedMinute",2085}, - {""}, - {"compressedData",565}, - {"missing_values",1325}, - {""}, {""}, - {"LuxInMetres",148}, - {""}, {""}, - {"secondOrderValuesDifferentWidths",1999}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"sampleSizeOfModelClimate",1910}, - {"typeOfWavePeriodInterval",2322}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"deleteCalendarId",685}, - {""}, {""}, - {"GTS",78}, + {"marsType2",1258}, {""}, {"offsetSection4",1547}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"qnhAPresent",1773}, {""}, {""}, - {"variationOfVisibility",2384}, - {""}, {""}, {""}, - {"section6",2042}, + {"satelliteNumber",1913}, + {""}, {""}, {""}, {""}, + {"postAuxiliary",1709}, {""}, {""}, {""}, {""}, {""}, - {"masterTablesVersionNumberLatest",1264}, + {"ITN",92}, + {""}, {""}, + {"matchAerosolPacking",1266}, + {""}, + {"julianForecastDay",1055}, {""}, {""}, {""}, {""}, {""}, - {"lengthOfTimeRangeForReferencePeriod",1120}, + {"Lx",151}, + {""}, + {"projString",1760}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"faModelName",847}, + {"numberOfPoints",1460}, + {""}, + {"centralLongitude",401}, + {""}, + {"oneConstant",1559}, + {""}, {""}, + {"typeOfEnsembleForecast",2294}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"yCoordinateOfOriginOfSectorImage",2470}, - {""}, {""}, - {"reducedGrid",1813}, - {"section6Pointer",2044}, - {""}, {""}, - {"coordinate2Start",594}, - {"n3",1351}, - {""}, {""}, {""}, - {"distinctLongitudes",707}, + {"complexPacking",563}, {""}, - {"numberOfBits",1388}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typicalCentury",2324}, - {""}, {""}, - {"monthlyVerificationMonth",1345}, - {"inputOriginatingCentre",994}, + {"biFourierMakeTemplate",360}, {""}, {""}, {""}, - {"shapeOfVerificationArea",2098}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"sectionLengthLimitForProbability",2058}, - {""}, {""}, {""}, {""}, - {"mars_labeling",1259}, + {"typeOfPreProcessing",2307}, + {""}, {""}, + {"modelVersionTime",1334}, + {""}, {""}, {""}, {""}, {""}, + {"tablesMasterDir",2209}, + {""}, {""}, {""}, + {"windSpeedTrend4",2450}, + {""}, {""}, {""}, {""}, {""}, + {"iScansPositively",965}, {""}, - {"sp3",2134}, - {""}, {""}, {""}, {""}, - {"n2",1350}, - {""}, {""}, {""}, {""}, - {"xDirectionGridLengthInMetres",2466}, - {"spare3",2140}, - {""}, {""}, {""}, {""}, - {"deletePV",688}, + {"Lcx",118}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"normAtInitialTime",1365}, + {""}, {""}, + {"Lux",147}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"identificationOfProject",969}, + {""}, {""}, + {"minutesAfterReferenceTimeOfDataCutoff",1319}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"parameterCode",1676}, + {""}, + {"windVariableDirection",2456}, {""}, {""}, {""}, {""}, {""}, {""}, - {"gribDataQualityChecks",912}, - {""}, {""}, - {"section3Pointer",2031}, - {""}, {""}, {""}, - {"scaleFactorOfWaveDirections",1942}, - {"numberOfTimeRange",1491}, - {""}, {""}, - {"numberOfWaveFrequencies",1506}, - {""}, {""}, {""}, - {"windGust",2441}, - {""}, - {"localFlagLatestVersion",1160}, - {"scaleFactorOfWaveDirectionSequenceParameter",1941}, - {"sp2",2133}, - {"marsStream1",1254}, - {""}, {""}, {""}, - {"section2Pointer",2025}, - {""}, {""}, {""}, {""}, - {"numberOfDataValues",1414}, - {"spare2",2139}, - {""}, - {"originatorLocalTemplateNumber",1591}, + {"tablesVersionLatest",2211}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfWaveFrequencies",1943}, + {"default_max_val",681}, {""}, {""}, - {"shapeOfTheEarth",2097}, - {""}, {""}, - {"longitudeOfCentralPointInClusterDomain",1187}, - {""}, - {"correction3",615}, - {""}, {""}, {""}, {""}, - {"spatialSmoothingOfProduct",2143}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"selectedFcIndex",2083}, - {"swapScanningLat",2198}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"swapScanningLon",2199}, + {"easternLongitudeOfDomain",728}, + {"tigge_short_name",2237}, {""}, {""}, {""}, {""}, {""}, - {"correction1",611}, + {"reserved2",1834}, + {"modelVersionDate",1333}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"basicAngleOfTheInitialProductionDomain",338}, - {"flagForIrregularGridCoordinateList",869}, - {""}, - {"quantileValue",1780}, - {""}, {""}, {""}, {""}, + {"windDirectionTrend4",2439}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"La2",103}, - {""}, + {"extractedDateTimeNumberOfSubsets",838}, {"Lar2",111}, {""}, {""}, - {"selectStepTemplateInstant",2080}, - {""}, {""}, {""}, - {"timeDomainTemplateNumber",2244}, - {""}, {""}, {""}, - {"monthOfEndOfOverallTimeInterval",1338}, - {"latitudeLongitudeValues",1074}, + {"iScansNegatively",964}, + {"thresholdIndicator",2229}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"groupSplittingMethodUsed",929}, + {""}, {"Lo2",125}, {""}, {"Lor2",145}, {"Latin2",116}, - {""}, {""}, - {"firstDimensionCoordinateValueDefinition",859}, - {""}, - {"secondOrderOfDifferentWidth",1998}, - {"latitudeOfSouthernPoleInDegrees",1089}, - {""}, {""}, {""}, {""}, - {"biFourierResolutionParameterM",362}, - {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfSecondWavelength",1936}, - {""}, - {"indicatorOfTypeOfLevel",985}, - {""}, {""}, - {"section10Length",2015}, - {""}, {""}, - {"table2Version",2205}, - {""}, {""}, - {"jDirectionIncrement",1044}, - {"xDirectionGridLengthInMillimetres",2467}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"correction4",617}, - {""}, - {"section5Pointer",2040}, - {""}, {""}, {""}, {""}, {""}, - {"section9Length",2054}, - {""}, {""}, - {"doSimpleThinning",711}, - {""}, {""}, - {"offsetSection6",1549}, - {""}, {""}, {""}, - {"bufrHeaderCentre",380}, - {""}, {""}, {""}, - {"section1Pointer",2022}, - {""}, {""}, - {"windSpeedTrend4",2451}, - {"numberOfRepresentativeMember",1479}, - {""}, {""}, - {"section8Length",2051}, - {""}, - {"typeOfGrid",2299}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"DjInDegrees",36}, - {""}, {""}, {""}, {""}, - {"unitsConversionScaleFactor",2349}, - {"extendedFlag",801}, - {""}, {""}, {""}, {""}, {""}, - {"latitudeOfNorthWestCornerOfArea",1084}, - {"southEastLatitudeOfVerficationArea",2124}, - {""}, {""}, - {"missingValuesPresent",1324}, - {""}, - {"frequencyScalingFactor",890}, - {"scaleValuesBy",1945}, - {"expandedOriginalCodes",789}, - {""}, {""}, - {"expandedOriginalWidths",792}, {""}, {""}, {""}, {""}, {""}, {""}, - {"marsStream2",1255}, - {""}, - {"tiggeLAMName",2232}, - {"numberOfCoordinatesValues",1409}, - {""}, {""}, - {"default_min_val",682}, - {""}, {""}, {""}, - {"indexedStorageInternalNodeK",978}, - {"section7Pointer",2048}, - {""}, - {"unpackedSubsetPrecision",2359}, - {"md5Section6",1286}, - {"scaleFactorOfWaveFrequencySequenceParameter",1944}, - {""}, {""}, {""}, {""}, - {"secondOfEndOfOverallTimeInterval",1992}, - {""}, {""}, - {"minuteOfEndOfOverallTimeInterval",1312}, - {""}, {""}, {""}, {""}, - {"biFourierResolutionSubSetParameterM",364}, - {""}, {""}, {""}, {""}, {""}, - {"reserved3",1836}, + {"CDFstr",22}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"dummy2",716}, - {""}, - {"offsetBeforePL",1533}, {""}, {""}, - {"yearOfEndOfOverallTimeInterval",2480}, - {""}, {""}, {""}, {""}, {""}, - {"correction2",613}, + {"totalNumberOfTileAttributePairs",2270}, + {""}, + {"predefined_grid",1717}, + {""}, {""}, {""}, + {"originatingClass",1588}, {""}, {""}, {""}, {""}, - {"expandedOriginalScales",791}, - {"numberOfWaveDirections",1505}, + {"tileClassification",2238}, {""}, {""}, {""}, {""}, {""}, {""}, + {"boot_edition",375}, + {""}, {""}, {""}, {""}, + {"section4Padding",2034}, + {""}, {""}, + {"scaledValueOfSecondSize",1965}, + {""}, {""}, + {"significanceOfReferenceDateAndTime",2103}, + {"monthOfForecastUsedInLocalTime",1340}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"centralLongitudeInDegrees",402}, + {"preProcessingParameter",1714}, + {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfFirstSize",1954}, + {""}, + {"versionNumberOfGribLocalTables",2404}, + {""}, {""}, + {"numberOfVerticalPoints",1503}, + {""}, {""}, {""}, + {"extractSubsetList",836}, + {"section10Pointer",2015}, + {""}, {""}, {""}, {""}, {""}, + {"section4Pointer",2035}, {"offsetSection3",1546}, - {"marsType2",1258}, {""}, - {"numberOfDataBinsAlongRadials",1410}, - {"reserved2",1835}, + {"numberOfDistinctSection4s",1419}, + {"conceptsLocalDirECMF",572}, + {"forecastProbabilityNumber",881}, {""}, - {"NC",176}, + {"scaledValueOfStandardDeviation",1967}, {""}, {""}, - {"DiGiven",31}, + {"setCalendarId",2091}, + {"yDirectionGridLengthInMetres",2472}, {""}, - {"sp1",2132}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"dayOfTheYearDate",669}, - {""}, - {"spare1",2138}, - {"rootGroupObjectHeaderAddress",1851}, - {""}, {""}, {""}, {""}, {""}, - {"hourOfEndOfOverallTimeInterval",950}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section5",2038}, - {""}, - {"expandedOriginalReferences",790}, - {"scaledValueOfLowerLimit",1959}, - {"offsetSection2",1545}, - {""}, {""}, {""}, - {"unstructuredGrid",2362}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfCodedValues",1402}, + {"monthOfAnalysis",1337}, {""}, {""}, {""}, {""}, + {"classOfAnalysis",433}, + {"scaledValueOfStandardDeviationInTheCluster",1968}, + {"local_padding",1181}, + {""}, {""}, {""}, {""}, + {"originOfPostProcessing",1582}, + {"numberOfVerticalCoordinateValues",1501}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"versionNumOfRootGroupSymbolTableEntry",2401}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"westernLongitudeOfDomain",2430}, + {""}, + {"messageLength",1303}, + {"iDirectionIncrementInDegrees",962}, + {""}, {""}, {""}, {"centreForTable2",407}, - {""}, {""}, {""}, - {"definitionFilesVersion",684}, - {""}, {""}, {""}, - {"localTablesVersion",1174}, - {""}, {""}, {""}, {""}, - {"numberOfParallelsBetweenAPoleAndTheEquator",1457}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"section1",2014}, - {""}, - {"southEastLatitudeOfLPOArea",2123}, - {"La1",101}, - {"unstructuredGridType",2364}, - {"Lar1",109}, - {""}, {""}, {""}, {""}, - {"totalNumberOfValuesInUnpackedSubset",2273}, - {""}, - {"endOfMessage",760}, - {"YR",279}, - {""}, {""}, {""}, - {"latitudinalDirectionGridLength",1104}, - {"Lo1",123}, - {"stepInHours",2168}, - {"Lor1",143}, - {"Latin1",114}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"bitsPerValue",373}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfClusters",1401}, - {"cloudsTitle3",527}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"tiggeSuiteID",2236}, - {"windDirectionTrend4",2440}, - {""}, {""}, {""}, - {"section0Length",2012}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"conceptsDir1",569}, - {""}, {""}, {""}, - {"cloudsTitle1",517}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"clusterMember10",539}, - {""}, {""}, {""}, {""}, {""}, - {"keyMore",1057}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"diffInHours",694}, - {"rootTablesDir",1853}, - {"md5Section5",1285}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfFirstWavelength",1925}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"identificationOfOriginatingGeneratingCentre",968}, + {"verticalCoordinate",2407}, + {"numberOfDataPoints",1412}, + {"paleontologicalOffset",1667}, + {""}, {""}, + {"extractAreaWestLongitude",812}, + {""}, + {"numberOfIntegers",1440}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"windSpeedTrend3",2449}, + {""}, + {"numberOfVerticalGridDescriptors",1502}, {""}, {""}, {""}, - {"stepHumanReadable",2167}, + {"coordinate1Start",591}, + {"totalNumberOfForecastProbabilities",2264}, + {""}, {""}, {""}, + {"coordinate1Flag",590}, + {""}, {""}, {""}, + {"indicatorOfUnitForTimeRange",988}, {""}, - {"earthMajorAxis",721}, - {"md5Section7",1287}, + {"section3Padding",2029}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"sizeOfOffsets",2113}, + {""}, {""}, {""}, + {"targetCompressionRatio",2213}, + {"projectionCenterFlag",1764}, + {"startOfRange",2155}, + {"latitudeOfFirstGridPoint",1078}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"CDF",21}, + {"verticalVisibility",2411}, + {"level_value_list",1127}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"parameterCategory",1675}, + {""}, {""}, {""}, + {"isHindcast",1022}, {""}, {""}, - {"longitudeOfTangencyPoint",1209}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section7",2046}, + {"runwaySideCodeState4",1907}, + {""}, {""}, + {"section3Pointer",2030}, + {""}, {""}, + {"numberOfDistinctSection3s",1418}, + {""}, + {"longitudeFirstInDegrees",1185}, + {""}, + {"standardParallelInMicrodegrees",2151}, + {""}, {""}, {""}, {""}, {""}, + {"projectionCentreFlag",1765}, + {""}, {""}, {""}, + {"offsetSection2",1545}, {""}, {""}, {""}, {""}, - {"cloudsTitle4",532}, + {"windDirectionTrend3",2438}, + {""}, {""}, {""}, {""}, + {"runwayDepositState4",1867}, + {"yDirectionGridLengthInMillimetres",2473}, + {""}, {""}, {""}, + {"section2Padding",2023}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfLevelValues",1443}, + {"driverInformationBlockAddress",713}, + {"selectedMonth",2085}, {""}, - {"endDayTrend3",740}, - {"matrixOfValues",1271}, - {""}, {""}, {""}, {""}, {""}, - {"tablesLocalDir",2209}, - {""}, {""}, {""}, {""}, {""}, - {"selectStepTemplateInterval",2081}, - {""}, - {"numberOfPointsInDomain",1471}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"numberOfAdditionalParametersForReferencePeriod",1386}, - {"tsectionNumber4",2283}, - {""}, - {"isRotatedGrid",1024}, - {"endDayTrend1",738}, + {"tsectionNumber4",2282}, + {"tiggeCentre",2230}, + {"bufrDataEncoded",379}, + {"coordinate3OfLastGridPoint",597}, {""}, {""}, {"isectionNumber4",1039}, {""}, {""}, - {"updateSequenceNumber",2367}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"dummy1",715}, - {""}, {""}, {""}, - {"runwaySideCodeState4",1908}, + {"gridDescriptionSectionPresent",921}, + {""}, + {"isEPS",1019}, + {"numberInTheGridCoordinateList",1383}, {""}, {""}, - {"reservedSection3",1840}, - {""}, {""}, {""}, {""}, {""}, - {"longitudeOfThePoleOfStretching",1210}, + {"grib1divider",907}, + {""}, {""}, {""}, + {"crraLocalVersion",626}, + {"dateOfAnalysis",650}, {""}, - {"windSpeedTrend3",2450}, - {"WMO",263}, + {"functionCode",891}, + {"yearOfAnalysis",2477}, + {""}, + {"g1conceptsMasterDir",894}, {""}, {""}, {""}, {""}, - {"probabilityType",1749}, - {"_numberOfValues",293}, + {"section2Pointer",2024}, + {"timeOfAnalysis",2246}, + {""}, {""}, + {"correction1",611}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"correction2",613}, + {""}, {""}, {""}, + {"windSpeedTrend2",2448}, {""}, - {"grib2LocalSectionPresent",909}, - {"marsType1",1257}, - {"offsetSection5",1548}, + {"marsStream1",1254}, + {"typeOfCompressionUsed",2292}, {""}, - {"reserved1",1834}, + {"typeOfAnalysis",2289}, + {"qnhAPresent",1772}, + {""}, {""}, + {"marsStream2",1255}, + {""}, {""}, + {"numberOfTimeIncrementsOfForecastsUsedInLocalTime",1490}, {""}, {""}, {""}, {""}, - {"ijDirectionIncrementGiven",973}, + {"numberOfDataMatrices",1411}, + {""}, {""}, {""}, {""}, + {"Nx",206}, + {"missing_values",1325}, + {""}, {""}, + {"forecastMonth",876}, + {"defaultFaModelName",674}, + {"numericValues",1509}, + {""}, {""}, {""}, + {"rectimeHour",1809}, + {"numberOfModels",1452}, + {""}, {""}, {""}, + {"lengthOfMessage",1116}, + {""}, + {"latitudeOfSouthernPole",1088}, + {"tablesVersionLatestOfficial",2212}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"verticalCoordinateDefinition",2408}, + {""}, + {"scaledValueOfFirstFixedSurface",1953}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"referenceReflectivityForEchoTop",1821}, {"X2",268}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"gribTablesVersionNo",914}, - {""}, {""}, {""}, {""}, - {"longitudeOfTheSouthernPoleOfProjection",1213}, - {""}, - {"probabilityTypeName",1750}, {""}, {""}, - {"endDayTrend4",741}, - {""}, {""}, - {"firstDimensionPhysicalSignificance",860}, - {""}, {""}, - {"windSpeedTrend2",2449}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetSection1",1542}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"localExtensionPadding",1158}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfDaysInClimateSamplingWindow",1415}, - {""}, - {"numberOfCoefficientsOrValuesUsedToSpecifyFirstDimensionCoordinateFunction",1403}, - {"numberOfCoefficientsOrValuesUsedToSpecifySecondDimensionCoordinateFunction",1404}, - {"conceptsDir2",570}, - {"grib2LocalSectionNumber",908}, - {""}, {""}, - {"cloudsTitle2",522}, - {""}, {""}, {""}, {""}, - {"expandBy",781}, + {"numberOfMembersInCluster",1446}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"reservedSection4",1841}, {""}, {""}, - {"sourceOfGridDefinition",2121}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"P_INST",217}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"preBitmapValues",1714}, - {""}, {""}, {""}, {""}, - {"centralLongitudeInMicrodegrees",403}, - {""}, {""}, - {"windVariableDirectionTrend4",2461}, - {""}, {""}, - {"firstMonthUsedToBuildClimateMonth2",864}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayFrictionCoefficientState4",1904}, - {""}, - {"numberIncludedInAverage",1384}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"versionNumberOfExperimentalSuite",2404}, - {""}, {""}, {""}, {""}, {""}, - {"missingValueManagement",1322}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"stepUnits",2174}, + {"Ncx",195}, {""}, {""}, {""}, - {"verticalVisibilityCoded",2413}, + {"windDirectionTrend2",2437}, {""}, {""}, {""}, {""}, {""}, {""}, - {"maxLevelValue",1273}, - {""}, - {"NrInRadiusOfEarthScaled",202}, - {"endDayTrend2",739}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetSection7",1550}, + {"Nux",204}, {""}, {""}, - {"TIDE",236}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"N2",173}, + {"indicatorOfUnitForTimeRangeForReferencePeriod",989}, {""}, - {"jScansNegatively",1050}, - {"componentIndex",564}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"reservedSection2",1839}, - {""}, - {"secondaryMissingValue",2007}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDepositState4",1868}, - {""}, {""}, - {"extractedAreaNumberOfSubsets",837}, - {""}, - {"extractDateTimeYearStart",832}, - {""}, {""}, {""}, {""}, {""}, - {"flagForAnyFurtherInformation",868}, - {""}, - {"windDirectionTrend3",2439}, - {""}, - {"selectedHour",2084}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"firstMonthUsedToBuildClimateMonth1",863}, - {""}, {""}, - {"baseTimeEPS",336}, - {"is_ocean3d_param",1035}, - {""}, {""}, - {"NrInRadiusOfEarth",201}, - {""}, {""}, - {"unstructuredGridSubtype",2363}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"is_ocean2d_param",1034}, + {"subCentre",2180}, {""}, {""}, {""}, - {"windDirectionTrend2",2438}, - {""}, {""}, {""}, {""}, - {"X1",266}, - {"upperThresholdValue",2371}, + {"stepRangeInHours",2169}, + {""}, + {"Azi",15}, + {"waveFrequencyNumber",2424}, + {"DyInMetres",44}, + {""}, {""}, + {"DiInMetres",33}, + {""}, {""}, + {"localHour",1161}, + {"correction3",615}, {""}, {""}, {""}, - {"forecastOrSingularVectorNumber",877}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"verificationYear",2398}, + {"nameOfSecondFixedSurface",1357}, + {""}, + {"rectimeMinute",1810}, + {"tableCode",2205}, + {""}, + {"widthOfLengths",2432}, + {"extraValues",806}, {""}, {""}, {""}, {""}, {""}, - {"windVariableDirectionTrend3",2460}, + {"scanningModeForOneDiamond",1983}, {""}, {""}, - {"windSpeedTrend1",2448}, - {""}, {""}, - {"normAtFinalTime",1364}, - {"jScansPositively",1051}, - {""}, {""}, {""}, - {"runwayFrictionCoefficientState3",1903}, - {""}, {""}, - {"windUnits",2452}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"windVariableDirectionTrend2",2459}, - {""}, - {"latitudeOfSubSatellitePoint",1092}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayFrictionCoefficientState2",1902}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Model_Identifier",168}, - {""}, {""}, - {"unpackedError",2358}, - {"tsectionNumber3",2282}, - {"secondaryBitMap",2001}, - {""}, - {"wrongPadding",2462}, - {""}, {""}, - {"isectionNumber3",1038}, - {"observationType",1514}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"P2",213}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"runwaySideCodeState3",1907}, - {""}, - {"packingError",1596}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentTrend4",1725}, - {"patch_precip_fp",1693}, + {"patch_precip_fp",1692}, {"default_step_units",683}, + {""}, + {"PVPresent",216}, + {"productionStatusOfProcessedData",1758}, + {"typicalHour",2327}, + {""}, {""}, {""}, {""}, + {"secondDimensionCoordinateValueDefinition",1987}, + {""}, + {"typeOfSecondFixedSurface",2312}, + {""}, {""}, {""}, {""}, + {"scaledValueOfSecondFixedSurface",1964}, + {"coordinateIndexNumber",603}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"N2",173}, + {""}, {""}, {""}, {""}, {""}, + {"hourOfAnalysis",949}, + {""}, {""}, {""}, + {"integerValues",1005}, + {""}, + {"originalParameterTableNumber",1584}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"missingValue",1321}, + {"runwaySideCodeState3",1906}, + {""}, + {"projectLocalTemplateNumber",1763}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"DxInDegrees",40}, + {"timeRangeIndicator",2251}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"verificationMonth",2396}, + {"typeOfAuxiliaryInformation",2290}, + {""}, {""}, + {"localDefNumberTwo",1154}, + {""}, + {"dayOfEndOfOverallTimeInterval",663}, + {"runwayDepositState3",1866}, + {""}, + {"listMembersUsed",1136}, + {""}, {""}, + {"isotopeIdentificationNumber",1040}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"typicalMinute",2328}, + {""}, + {"sectionLengthLimitForEnsembles",2056}, + {""}, {""}, + {"tsectionNumber3",2281}, + {""}, {""}, {""}, {""}, {""}, + {"isectionNumber3",1038}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfLastGridPointInDegrees",1198}, + {""}, {""}, {""}, + {"LyInMetres",154}, + {"simpleThinningMissingRadius",2105}, + {""}, {""}, {""}, {""}, {""}, + {"conceptsDir1",569}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"conceptsDir2",570}, + {""}, + {"radiusInMetres",1783}, + {"twoOrdersOfSPD",2287}, + {"biFourierSubTruncationType",366}, + {""}, {""}, {""}, + {"is_ocean3d_param",1035}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"doExtractSubsets",710}, + {"sphericalHarmonics",2147}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"P2",213}, + {""}, + {"typeOfIntervalForFirstAndSecondSize",2300}, + {""}, + {"typeOfHorizontalLine",2299}, + {""}, + {"constantFieldHalfByte",580}, + {""}, + {"scaleFactorOfAdditionalParameterForReferencePeriod",1916}, + {"verifyingMonth",2398}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"codedNumberOfFirstOrderPackedValues",557}, + {""}, + {"numberOfEffectiveValues",1426}, + {""}, {""}, {""}, {""}, {""}, + {"runwaySideCodeState2",1905}, + {"cloudsTitle1",517}, + {""}, {""}, {""}, + {"kurt",1060}, + {"presentTrend4",1724}, + {""}, + {"cloudsTitle2",522}, + {""}, {""}, {""}, + {"is_ocean2d_param",1034}, + {""}, {""}, {""}, {""}, + {"lengthIncrementForTheGroupLengths",1112}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Lar2InDegrees",112}, + {""}, {""}, {""}, + {"section_10",2070}, + {""}, + {"runwayDepositState2",1865}, + {""}, + {"expandedAbbreviations",782}, + {""}, {""}, + {"endDayTrend1",738}, + {""}, {""}, + {"extraLocalSectionPresent",805}, + {"Lor2InDegrees",146}, + {""}, {""}, + {"endDayTrend2",739}, + {""}, {""}, + {"centralClusterDefinition",400}, + {""}, + {"default_min_val",682}, + {""}, {""}, {""}, {""}, {""}, {"isectionNumber2",1037}, - {""}, {""}, {""}, - {"extractDateTimeHourStart",819}, - {""}, {""}, - {"remarkPresent",1828}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwaySideCodeState2",1906}, - {""}, - {"subDefinitions2",2183}, - {""}, - {"section3Flags",2028}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typicalMonth",2330}, - {"typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing",2319}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"scaledValueOfPrimeMeridianOffset",1963}, - {"southEastLongitudeOfVerficationArea",2126}, - {"reflectivityCalibrationConstant",1827}, - {"gaussianGridName",896}, - {"formatVersionMinorNumber",886}, - {"xCoordinateOfSubSatellitePoint",2464}, - {""}, {""}, {""}, - {"experimentVersionNumber",795}, - {""}, {""}, {""}, - {"longitudeOfSouthEastCornerOfArea",1202}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"N1",172}, - {"GDSPresent",68}, - {""}, {""}, {""}, {""}, - {"lowerThresholdValue",1221}, - {"coordAveragingTims",588}, - {""}, - {"windVariableDirectionTrend1",2458}, - {""}, {""}, {""}, - {"baseDateEPS",334}, - {""}, - {"scaledValueOfDistanceFromEnsembleMean",1950}, - {""}, {""}, - {"numberOfClusterLowResolution",1400}, - {""}, - {"runwayFrictionCoefficientState1",1901}, - {""}, {""}, - {"getNumberOfValues",903}, - {""}, - {"pressureUnits",1742}, - {""}, {""}, {""}, - {"numberOfBytesPerInteger",1395}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"section_10",2071}, - {""}, {""}, {""}, - {"totalNumberOfWaveDirections",2274}, - {""}, {""}, - {"satelliteID",1912}, - {""}, {""}, - {"originatingCentreOfAnalysis",1588}, - {""}, {""}, - {"spaceUnitFlag",2135}, - {""}, - {"mBasicAngle",1227}, - {""}, {""}, {""}, - {"unitOfTimeRange",2345}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberInMixedCoordinateDefinition",1381}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"totalNumberOfWaveFrequencies",2275}, - {""}, {""}, - {"crraSuiteID",628}, - {""}, - {"heightPressureEtcOfLevels",941}, - {""}, - {"packedValues",1595}, - {"numberOfPointsAlongXAxis",1467}, - {""}, {""}, - {"MinuteOfModelVersion",159}, - {""}, - {"dateOfModelVersion",655}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"coordinateFlag2",602}, - {"timeOfModelVersion",2250}, - {""}, - {"windDirectionTrend1",2437}, - {""}, {""}, - {"rdbtimeMonth",1799}, - {""}, {""}, {""}, {""}, - {"swapScanningX",2200}, {""}, {""}, {""}, {""}, {""}, - {"section1Flags",2019}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"jDirectionIncrementInDegrees",1047}, + {"kurtosis",1061}, + {""}, {""}, + {"section5",2037}, {""}, - {"typeOfReferenceDataset",2310}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"backgroundGeneratingProcessIdentifier",330}, - {""}, - {"oceanAtmosphereCoupling",1517}, - {""}, {""}, {""}, {""}, {""}, - {"longitudeOfThePolePoint",1211}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"DjInMetres",37}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"jIncrement",1048}, {""}, {""}, {""}, - {"runwayDepositState3",1867}, - {"dateSSTFieldUsed",658}, - {""}, - {"localTablesVersionNumber",1175}, - {""}, - {"_leg_number",292}, - {""}, {""}, {""}, {""}, {""}, - {"tsectionNumber5",2284}, - {""}, {""}, {""}, - {"sizeOfLength",2113}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"P1",212}, - {""}, {""}, {""}, - {"offsetEndSection4",1536}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"totalNumberOfClusters",2262}, - {""}, {""}, {""}, {""}, {""}, - {"runwayDepositState2",1866}, + {"sampleSizeOfReferencePeriod",1910}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"subLocalDefinition2",2185}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"clusteringDomain",550}, - {""}, {""}, - {"endOfHeadersMarker",758}, - {""}, - {"numberOfClusterHighResolution",1399}, - {""}, - {"runwaySideCodeState1",1905}, - {"marsKeywords1",1241}, - {"subDefinitions1",2182}, - {""}, {""}, - {"numberOfBytesInLocalDefinition",1393}, - {""}, {""}, - {"longitudeOfReferencePoint",1200}, - {"xCoordinateOfOriginOfSectorImage",2463}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"integerPointValues",1001}, - {""}, - {"easternLongitudeOfClusterDomain",727}, - {"azimuthalWidth",329}, + {"groupInternalNodeK",925}, + {"isCorrection",1018}, + {"typeOfIntervalForFirstAndSecondWavelength",2301}, {""}, {""}, {""}, - {"coordinate1End",589}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeOfTangencyPoint",1094}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeLastInDegrees",1186}, + {"aerosolbinnumber",304}, + {""}, {""}, + {"mars_labeling",1259}, + {""}, {""}, {""}, + {"implementationDateOfModelCycle",974}, + {"biFourierResolutionParameterN",363}, + {"keySat",1058}, + {""}, {""}, {""}, + {"extraLocalSectionNumber",804}, {""}, {""}, {""}, {""}, - {"MonthOfModelVersion",170}, + {"totalNumberOfIterations",2267}, {""}, - {"doExtractArea",708}, - {""}, {""}, {""}, - {"latitudeOfLastGridPoint",1082}, + {"numberOfDistributionFunctionParameters",1425}, {""}, - {"produceLargeConstantFields",1752}, - {""}, {""}, - {"deleteLocalDefinition",687}, - {"yearOfModelVersion",2483}, - {""}, {""}, {""}, {""}, - {"latitudeFirstInDegrees",1072}, + {"M",155}, {""}, - {"numberOfControlForecastTube",1408}, + {"lengthOfTimeRange",1119}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsTitle3",527}, + {""}, + {"section5Pointer",2039}, + {"section8Length",2050}, + {""}, + {"numberOfDistinctSection5s",1420}, + {""}, + {"localNumberOfObservations",1170}, + {"LoV",128}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"keyData",1056}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfFirstGridPointInDegrees",1194}, {""}, {""}, {""}, - {"startDateOfReferencePeriod",2153}, + {"skewness",2117}, + {"inputOriginatingCentre",994}, + {"northernLatitudeOfClusterDomain",1373}, + {""}, {""}, + {"endDayTrend3",740}, + {""}, + {"frequencyScalingFactor",890}, {""}, {""}, {""}, {""}, - {"northWestLatitudeOfVerficationArea",1370}, - {""}, {""}, {""}, - {"presentTrend3",1724}, + {"scaleFactorOfDistanceFromEnsembleMean",1918}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfPackedValues",1456}, + {"jDirectionIncrement",1044}, + {""}, + {"nameOfFirstFixedSurface",1356}, + {"spatialSmoothingOfProduct",2142}, + {""}, {""}, + {"marsExpver",1236}, + {"La2InDegrees",104}, + {""}, + {"section0Length",2011}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfLowerLimit",1927}, + {""}, {""}, {""}, {""}, + {"Lo2InDegrees",126}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfFirstFixedSurface",2296}, + {"unknown",2355}, + {"coordinate2Start",594}, + {"section9Length",2053}, {""}, {""}, {""}, + {"coordinate2Flag",593}, + {""}, {"cloudsTitle1Trend4",521}, - {""}, {""}, {""}, {""}, - {"numberOfWaveFrequencySequenceParameters",1507}, - {""}, {""}, {""}, - {"secondaryMissingValueSubstitute",2008}, - {""}, {""}, - {"AA",6}, - {""}, {""}, - {"hourOfModelVersion",953}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"endGridDefinition",743}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"secondaryBitmapsSize",2006}, + {"md5Section5",1285}, {""}, - {"presentTrend2",1723}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"kindOfProduct",1059}, + {"mAngleMultiplier",1226}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"southernLatitudeOfClusterDomain",2129}, + {""}, + {"shapeOfVerificationArea",2097}, + {""}, {""}, {""}, {""}, {""}, + {"subDefinitions2",2182}, {""}, {""}, - {"matrixBitmapsPresent",1270}, - {"southPoleOnProjectionPlane",2129}, - {"Product_Identifier",220}, - {"coordinateFlag1",601}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"timeIncrementBetweenSuccessiveFields",2246}, + {"LcyInMetres",121}, {""}, {""}, {""}, {""}, {""}, {""}, - {"inputShortDelayedDescriptorReplicationFactor",997}, + {"swapScanningLat",2197}, + {""}, {""}, + {"predefined_grid_values",1718}, + {"LuyInMetres",150}, + {""}, {""}, {""}, {""}, + {"swapScanningLon",2198}, + {""}, + {"section10Length",2014}, + {"frequencyNumber",889}, + {"distinctLongitudes",707}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"startOfHeaders",2153}, + {""}, {""}, {""}, + {"timeRangeIndicatorFromStepRange",2252}, + {""}, {""}, + {"presentTrend3",1723}, + {""}, {""}, {""}, + {"reservedSection2",1838}, + {""}, {""}, {""}, {""}, + {"section1Padding",2020}, {""}, {""}, {""}, {""}, {""}, - {"INBITS",89}, + {"AA",6}, + {""}, {""}, {""}, + {"coordinate4OfLastGridPoint",600}, + {"lengthOfIndexTemplate",1115}, + {""}, {""}, + {"indicatorOfUnitForTimeIncrement",987}, + {""}, + {"skew",2116}, + {"table2Version",2204}, + {""}, + {"gridCoordinate",916}, + {"numberOfModeOfDistribution",1451}, + {"typeOfSizeInterval",2313}, + {"doSimpleThinning",711}, + {""}, {""}, {""}, {""}, + {"unitsConversionOffset",2347}, + {"correction4",617}, + {"section6Pointer",2043}, + {""}, {""}, + {"numberOfDistinctSection6s",1421}, + {""}, + {"numberOfMissing",1448}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"section3Flags",2027}, + {"section1Pointer",2021}, + {""}, {""}, {""}, {""}, {""}, + {"section_4",2074}, + {"inputProcessIdentifier",996}, + {"numberOfChars",1398}, + {"lengthOfTimeRangeForReferencePeriod",1120}, + {""}, {""}, {""}, {""}, + {"marsExperimentOffset",1235}, + {""}, {""}, {""}, {""}, + {"cloudsTitle1Trend3",520}, + {""}, {""}, {""}, {""}, + {"numberOfRows",1481}, + {"upperThreshold",2369}, + {""}, + {"realPartOf00",1803}, + {""}, + {"expandedOriginalCodes",789}, + {""}, {""}, + {"expandedOriginalWidths",792}, + {"rdbtimeHour",1796}, + {""}, {""}, {""}, {""}, + {"deleteExtraLocalSection",686}, + {""}, {""}, {""}, {""}, + {"typeOfOriginalFieldValues",2304}, + {"numberInTheAuxiliaryArray",1382}, + {""}, + {"offsetAfterBitmap",1522}, + {"biFourierResolutionSubSetParameterN",365}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"timeCoordinateDefinition",2241}, + {""}, {""}, + {"averaging2Flag",326}, + {"scaledValueOfRadiusOfSphericalEarth",1963}, + {""}, {""}, {""}, + {"reservedSection3",1839}, + {"numberOfMembersInEnsemble",1447}, + {"section_04",2063}, + {""}, {""}, {""}, + {"coordinate3Flag",595}, + {"sp1",2131}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"spare1",2137}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"latitudeLongitudeValues",1074}, + {"referenceOfWidths",1819}, + {"cloudsTitle1Trend2",519}, + {""}, {""}, {""}, + {"presentTrend2",1722}, + {"lengthOfOriginatorLocalTemplate",1117}, + {"scaleFactorOfPrimeMeridianOffset",1931}, + {"_leg_number",292}, + {""}, {""}, + {"expandedOriginalScales",791}, + {""}, {""}, + {"doExtractDateTime",709}, + {"shapeOfTheEarth",2096}, + {"scaledValueOfDistributionFunctionParameter",1950}, + {""}, {""}, {""}, {""}, + {"section6",2041}, + {""}, + {"rdbtimeMinute",1797}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfTimeRange",1491}, + {""}, + {"epsStatisticsContinous",779}, + {"startingAzimuth",2159}, + {"dummy1",715}, + {""}, {""}, {""}, {""}, + {"listMembersMissing",1132}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"nameECMF",1354}, - {""}, {""}, {""}, - {"scaleFactorOfCentralWaveNumber",1918}, - {""}, {""}, {""}, - {"bufrdcExpandedDescriptors",383}, + {"section1",2013}, {""}, {""}, {""}, {""}, - {"modelErrorType",1330}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfAdditionalParameterForReferencePeriod",1948}, - {"section11Pointer",2018}, - {""}, {""}, {""}, {""}, - {"dayOfModelVersion",666}, + {"numberOfLogicals",1445}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"md5Section6",1286}, {""}, {""}, {""}, {""}, {""}, - {"cloudsTitle3Trend4",531}, - {""}, {""}, {""}, - {"westernLongitudeOfClusterDomain",2430}, - {""}, - {"accuracyMultipliedByFactor",296}, - {""}, {""}, {""}, {""}, - {"mixedCoordinateFieldFlag",1327}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"matchAerosolBinNumber",1265}, - {""}, - {"NUT",191}, - {""}, - {"typeOfPacking",2306}, - {""}, {""}, {""}, - {"northWestLatitudeOfLPOArea",1369}, - {""}, {""}, {""}, {""}, - {"runwayDepositState1",1865}, - {"realPartOf00",1804}, - {"cfVarNameECMF",419}, + {"extendedFlag",801}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"bitMapIndicator",369}, {""}, {""}, - {"unitsECMF",2351}, + {"tileIndex",2239}, + {"lowerThreshold",1220}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfCharacters",1397}, {""}, {""}, - {"iDirectionIncrementGiven",960}, + {"constituentType",581}, + {""}, {""}, + {"II",88}, + {""}, + {"marsType1",1257}, + {""}, {""}, + {"distanceFromTubeToEnsembleMean",705}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"biFourierCoefficients",359}, {""}, {""}, {""}, - {"subLocalDefinition1",2184}, - {""}, {""}, - {"subLocalDefinitionLength2",2187}, + {"offsetSection5",1548}, + {"packingType",1596}, {""}, {""}, {""}, {""}, {""}, - {"md5Headers",1278}, - {"cavokOrVisibility",389}, + {"quantileValue",1779}, + {""}, {""}, {""}, {""}, {""}, + {"ijDirectionIncrementGiven",973}, + {""}, {""}, {""}, {""}, {""}, + {"sectionLengthLimitForProbability",2057}, + {"expandedOriginalReferences",790}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfMissingInStatisticalProcess",1449}, {""}, {""}, + {"numberOfValues",1500}, + {""}, {""}, {""}, + {"qualityControl",1775}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"LoVInDegrees",129}, + {""}, + {"lengthOfHeaders",1114}, + {""}, {""}, {""}, + {"timeDomainTemplate",2242}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"NV",192}, + {"isSatelliteType",1026}, + {""}, + {"section_3",2073}, + {""}, {""}, {""}, {""}, + {"consensusCount",577}, + {"climateDateTo",435}, + {"longitudeOfStretchingPoleInDegrees",1206}, + {""}, {""}, {""}, {""}, {""}, + {"windVariableDirectionTrend4",2460}, + {""}, {""}, + {"typicalDateTime",2325}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"selectedFcIndex",2082}, + {""}, {""}, {""}, + {"latitudeOfStretchingPoleInDegrees",1091}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfOctectsForNumberOfPoints",1453}, + {""}, {""}, + {"subLocalDefinition2",2184}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsTitle4",532}, + {""}, {""}, {""}, {""}, {""}, + {"inputExtendedDelayedDescriptorReplicationFactor",993}, + {""}, + {"referenceValueError",1825}, + {""}, + {"reserved1",1833}, + {"primaryMissingValue",1743}, + {""}, + {"section_03",2062}, + {"longitudeOfSubSatellitePoint",1207}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"selectedMinute",2084}, + {""}, {""}, {""}, {""}, {""}, + {"longitudeOfSubSatellitePointInDegrees",1208}, + {""}, {""}, + {"La1",101}, + {""}, + {"Lar1",109}, + {""}, + {"endDayTrend4",741}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Lar1InDegrees",110}, + {""}, + {"basicAngleOfTheInitialProductionDomain",338}, + {""}, + {"Lo1",123}, + {""}, + {"Lor1",143}, + {"Latin1",114}, + {""}, + {"addExtraLocalSection",298}, + {""}, + {"clusterMember10",539}, + {""}, {""}, {""}, + {"Lor1InDegrees",144}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"reservedNeedNotBePresent",1836}, + {""}, {""}, + {"groupWidth",930}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"constituentTypeName",582}, + {"totalLength",2259}, + {""}, + {"typeOfCalendar",2291}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"updateSequenceNumber",2366}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"windVariableDirectionTrend3",2459}, + {"listOfContributingSpectralBands",1140}, + {""}, + {"section_2",2072}, {"coordAveraging0",584}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsTitle1Trend3",520}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endMinuteTrend4",752}, - {""}, {""}, {""}, {""}, - {"offsetFromReferenceOfFirstTime",1539}, - {"nameLegacyECMF",1355}, + {"monthlyVerificationMonth",1345}, + {""}, + {"marsGrid",1238}, + {"numberOfOctetsExtraDescriptors",1454}, + {""}, {""}, + {"originatingCentreOfAnalysis",1587}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"operationalForecastCluster",1572}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"dataCategory",632}, + {""}, + {"_numberOfValues",293}, + {""}, {""}, {""}, + {"coordAveragingTims",588}, + {"numberOfCategories",1396}, + {""}, + {"epsContinous",777}, + {""}, {""}, {""}, + {"typicalCentury",2323}, {""}, {""}, {""}, {""}, {""}, - {"cloudsTitle1Trend2",519}, - {"clusterMember4",542}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section_02",2061}, + {""}, + {"extractSubsetIntervalEnd",834}, + {""}, {""}, {""}, {""}, + {"centreLatitudeInDegrees",409}, {""}, {""}, - {"qualityControlIndicator",1777}, + {"windVariableDirectionTrend2",2458}, + {"deletePV",688}, + {""}, + {"numberOfForecastsInCluster",1429}, {""}, {""}, - {"scaledValueOfLengthOfSemiMinorAxis",1958}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfBytesOfFreeFormatData",1394}, + {"bufrHeaderCentre",380}, + {""}, {""}, + {"extractSubsetIntervalStart",835}, + {"numberOfParallelsBetweenAPoleAndTheEquator",1457}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"PUnset",215}, - {""}, {""}, {""}, {""}, - {"scanningMode4",1979}, - {""}, {""}, {""}, {""}, - {"offsetValuesBy",1554}, + {"secondLatitudeInDegrees",1990}, + {"primaryMissingValueSubstitute",1744}, {""}, {""}, - {"coordinate2End",592}, - {""}, {""}, {""}, - {"endStepInHours",764}, - {""}, - {"Dj",34}, - {""}, {""}, {""}, {""}, - {"numberOfWaveDirectionSequenceParameters",1504}, - {""}, - {"numberMissingFromAveragesOrAccumulations",1385}, - {""}, {""}, {""}, {""}, - {"referenceForGroupWidths",1818}, - {""}, {""}, {""}, - {"offsetICEFieldsUsed",1540}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"totalAerosolBinsNumbers",2258}, - {""}, - {"alternativeRowScanning",306}, + {"La1InDegrees",102}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"XRInMetres",271}, + {""}, {""}, {""}, {""}, {""}, + {"Lo1InDegrees",124}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"presentTrend1",1722}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfProcessedData",2309}, + {"expandedCodes",783}, {""}, - {"cloudsTitle3Trend3",530}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"listOfEnsembleForecastNumbers",1142}, + {""}, {""}, {""}, {""}, + {"scaleValuesBy",1944}, + {""}, {""}, {""}, + {"compressedData",565}, {""}, {"cloudsTitle2Trend4",526}, - {"dataSubCategory",644}, - {"scaledValuesOfWaveFrequencies",1975}, + {""}, {""}, {""}, + {"DjInDegrees",36}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ls_labeling",1222}, - {"cloudsTitle3Trend2",529}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"unexpandedDescriptors",2340}, + {"groupWidths",931}, + {""}, {""}, {""}, + {"xDirectionGridLengthInMetres",2465}, + {"coordinate1End",589}, {""}, - {"physicalMeaningOfVerticalCoordinate",1705}, - {"cloudsTitle1Trend1",518}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"flagShowingPostAuxiliaryArrayInUse",871}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"METARstr",157}, - {""}, {""}, {""}, - {"Ensemble_Identifier",51}, - {""}, {""}, - {"DayOfModelVersion",29}, - {""}, {""}, - {"extractDateTimeMinuteEnd",820}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractDateTimeMinuteStart",822}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsTitle4Trend4",536}, - {""}, {""}, {""}, - {"templatesMasterDir",2220}, + {"yearOfCentury",2478}, {""}, {""}, {""}, {""}, - {"unexpandedDescriptorsEncoded",2341}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"unstructuredGridUUID",2365}, - {""}, - {"dateOfSSTFieldUsed",657}, - {""}, - {"scaledValuesOfWaveDirections",1974}, - {""}, {""}, - {"iDirectionIncrementGridLength",961}, - {""}, {""}, - {"referenceForGroupLengths",1817}, - {""}, {""}, {""}, - {"subLocalDefinitionLength1",2186}, - {""}, {""}, - {"monthlyVerificationYear",1347}, - {""}, {""}, {""}, {""}, - {"expandedCrex_scales",784}, + {"offsetSection6",1549}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeOfSubSatellitePointInDegrees",1093}, - {"clusterMember6",544}, - {""}, {""}, {""}, {""}, {""}, - {"variationOfVisibilityTrend4",2394}, - {""}, {""}, - {"cloudsTitle3Trend1",528}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"reservedSection4",1840}, + {""}, + {"monthOfModelVersion",1341}, + {"missingValuesPresent",1324}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractDateTimeMonthEnd",823}, - {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfWaveDirectionSequenceParameter",1972}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractDateTimeMonthStart",825}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"jPointsAreConsecutive",1049}, - {"scanningMode6",1981}, + {"radiusOfCentralCluster",1784}, {""}, {""}, {""}, {""}, - {"expandedCrex_units",785}, - {""}, {""}, - {"cloudsTitle2Trend3",525}, - {""}, {""}, - {"codedNumberOfGroups",558}, - {"latitudeWhereDxAndDyAreSpecified",1100}, + {"offsetSection1",1542}, {""}, - {"mask",1260}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfSouthernPole",1203}, - {""}, {""}, {""}, - {"falseEasting",849}, - {""}, {""}, - {"latitudeWhereDxAndDyAreSpecifiedInDegrees",1101}, - {"cloudsTitle2Trend2",524}, - {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfUpperLimit",1939}, - {""}, {""}, {""}, - {"variationOfVisibilityDirectionTrend4",2390}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfContributingSpectralBands",1407}, - {""}, {""}, {""}, - {"HDF5str",81}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"qfeUnits",1771}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endMinuteTrend3",751}, - {""}, {""}, - {"section9UniqueIdentifier",2056}, - {""}, {""}, {""}, {""}, {""}, - {"pack",1594}, - {"localLatitude2",1164}, - {""}, {""}, - {"clusterMember3",541}, - {""}, {""}, - {"scaledValueOfSecondWavelength",1967}, - {""}, {""}, {""}, - {"cloudsTitle4Trend3",535}, - {""}, {""}, {""}, - {"section8UniqueIdentifier",2053}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"uuidOfVGrid",2379}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsTitle4Trend2",534}, - {"endMinuteTrend2",750}, - {"offsetFromOriginToInnerBound",1538}, - {""}, - {"thisExperimentVersionNumber",2223}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"clusterMember2",540}, - {""}, - {"dayOfForecastUsedInLocalTime",665}, - {""}, - {"parameterUnits",1682}, + {"shortNameECMF",2099}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"totalNumberOfGridPoints",2267}, - {""}, - {"offsetAfterData",1524}, - {""}, {""}, - {"typeOfSSTFieldUsed",2312}, - {""}, {""}, {""}, - {"unpack",2357}, - {"paramIdLegacyECMF",1672}, - {""}, {""}, {""}, {""}, {""}, - {"variationOfVisibilityTrend3",2393}, - {""}, {""}, {""}, - {"rdb_key",1793}, - {"Model_Additional_Information",167}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsTitle2Trend1",523}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfUnexpandedDescriptors",1493}, - {"variationOfVisibilityTrend2",2392}, - {""}, {""}, - {"expandedCrex_widths",786}, - {"beginDayTrend4",342}, - {""}, - {"qnhUnits",1775}, - {""}, - {"numberOfStepsUsedForClustering",1487}, - {""}, - {"numberOfPointsAlongXAxisInCouplingArea",1468}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"scaledValueOfWaveFrequencySequenceParameter",1973}, - {""}, - {"Latin2InDegrees",117}, - {""}, - {"numberOfGroups",1437}, - {"changeIndicatorTrend4",425}, - {""}, - {"numberOfUsedTileAttributes",1496}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"subLocalDefinitionNumber2",2189}, + {"originatorLocalTemplate",1589}, + {"coordinateFlag2",602}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"param_value_max",1673}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"indexingTimeMM",983}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"variationOfVisibilityDirectionTrend3",2389}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"conceptsMasterMarsDir",575}, {""}, {""}, {"gts_TTAAii",933}, {""}, {""}, - {"Nj",199}, - {""}, {""}, - {"cloudsTitle4Trend1",533}, - {""}, {""}, - {"variationOfVisibilityDirectionTrend2",2388}, + {"totalInitialConditions",2258}, {""}, - {"numberOfUsedSpatialTiles",1495}, - {""}, {""}, {""}, {""}, - {"numberOfBitsForScaledGroupLengths",1390}, - {""}, {""}, {""}, {""}, {""}, - {"countOfICEFieldsUsed",621}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"northWestLongitudeOfVerficationArea",1372}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"recentWeather",1806}, - {"unpackedValues",2360}, + {"numberOfAdditionalParametersForReferencePeriod",1386}, + {"scaleFactorOfLengthOfSemiMinorAxis",1926}, + {""}, {""}, {""}, + {"GTSstr",79}, + {""}, + {"numberOfDataValues",1414}, + {""}, + {"resolutionAndComponentFlags",1841}, + {"resolutionAndComponentFlags8",1848}, + {"section7Pointer",2047}, + {""}, + {"tsectionNumber5",2283}, + {"numberOfDistinctSection7s",1422}, + {"beginDayTrend4",342}, + {""}, {""}, {""}, + {"stepUnits",2173}, + {""}, {""}, {""}, + {"secondOfModelVersion",1994}, + {""}, {""}, + {"minuteOfModelVersion",1315}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"masterTablesVersionNumber",1263}, + {"stepHumanReadable",2166}, + {"windGust",2440}, + {""}, {""}, {""}, + {"clusterMember4",542}, + {""}, + {"windSpeedTrend1",2447}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsTitle2Trend3",525}, + {""}, + {"totalNumberOfDataValuesMissingInStatisticalProcess",2262}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"endMinuteTrend4",752}, + {""}, + {"numberOfForecastsInEnsemble",1430}, + {""}, {""}, + {"md5Section10",1281}, + {""}, {""}, {""}, {""}, + {"yCoordinateOfSubSatellitePoint",2470}, + {""}, {""}, {""}, + {"longitudeOfNorthWestCornerOfArea",1199}, + {""}, {""}, {""}, + {"subSetM",2191}, + {""}, + {"numberOfForecastsInTheCluster",1431}, + {""}, {""}, + {"xDirectionGridLengthInMillimetres",2466}, + {""}, + {"averaging1Flag",325}, + {""}, {""}, + {"endOfMessage",760}, + {""}, {""}, + {"coordinate4Flag",598}, + {"md5Section7",1287}, + {""}, {""}, {""}, {""}, {""}, + {"section1Flags",2018}, + {""}, {""}, + {"grib2LocalSectionPresent",909}, + {"X1",266}, + {"extremeClockwiseWindDirection",839}, + {""}, + {"cloudsTitle3Trend4",531}, + {"latitudeOfFirstGridPointInDegrees",1079}, + {"subLocalDefinitionLength2",2186}, + {""}, {""}, + {"flagForIrregularGridCoordinateList",869}, + {""}, + {"latitudeOfIcosahedronPole",1081}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsTitle1Trend1",518}, + {""}, {""}, + {"windDirectionTrend1",2436}, + {""}, {""}, + {"GTS",78}, + {"cloudsTitle2Trend2",524}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"formatVersionMajorNumber",885}, + {""}, {""}, + {"extractedAreaNumberOfSubsets",837}, + {""}, + {"stepForClustering",2165}, + {""}, {""}, {""}, {""}, + {"typeOfEnsembleMember",2295}, + {""}, {""}, + {"SecondOfModelVersion",229}, + {""}, {""}, {""}, {""}, + {"Dj",34}, + {""}, {""}, + {"reducedGrid",1812}, + {""}, + {"windUnits",2451}, + {"grib2LocalSectionNumber",908}, + {""}, {""}, {""}, + {"Experiment_Identifier",55}, + {""}, {""}, {""}, + {"firstMonthUsedToBuildClimateMonth2",864}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"wrongPadding",2461}, + {"selectedHour",2083}, + {""}, {""}, + {"secondaryMissingValue",2006}, + {""}, + {"earthMajorAxis",721}, + {""}, {""}, + {"typeOfGrid",2298}, + {"N1",172}, + {""}, {""}, {""}, {""}, + {"marsKeywords1",1241}, + {""}, {""}, {""}, {""}, {""}, + {"groupLengths",927}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"P_INST",217}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"earthMinorAxisInMetres",724}, + {""}, {""}, + {"DiGiven",31}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsTitle3Trend3",530}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"DxInMetres",41}, + {""}, + {"bitsPerValue",373}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfComponents",1406}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"probContinous",1745}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"listOfParametersUsedForClustering",1144}, + {"beginDayTrend3",341}, + {""}, {""}, {""}, + {"matrixOfValues",1271}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"visibilityInKilometresTrend4",2417}, + {"padding_sec1_loc",1661}, + {""}, {""}, {""}, + {"attributeOfTile",322}, + {""}, {""}, {""}, {""}, + {"clusterMember3",541}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsTitle3Trend2",529}, + {""}, {""}, {""}, + {"rootGroupObjectHeaderAddress",1850}, + {""}, {""}, + {"tiggeLAMName",2231}, + {""}, {""}, {""}, {""}, {""}, + {"endMinuteTrend3",751}, + {""}, + {"pressureUnits",1741}, + {"P1",212}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"localLatitude2",1164}, + {""}, {""}, {""}, + {"ls_labeling",1222}, + {"flagShowingPostAuxiliaryArrayInUse",871}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"masterTablesVersionNumberLatest",1264}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"runwaySideCodeState1",1904}, + {""}, + {"versionNumberOfExperimentalSuite",2403}, + {"swapScanningX",2199}, + {""}, + {"indexedStorageInternalNodeK",978}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"biFourierResolutionParameterM",362}, + {""}, {""}, {""}, + {"runwayDesignatorState4",1883}, + {""}, + {"LxInMetres",152}, + {""}, {""}, {""}, {""}, + {"southEastLatitudeOfLPOArea",2122}, + {""}, {""}, {""}, {""}, + {"runwayDepositState1",1864}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"southPoleOnProjectionPlane",2128}, + {"fileConsistencyFlags",856}, + {"scaleFactorOfWaveDirections",1941}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"scaleFactorOfWaveDirectionSequenceParameter",1940}, + {""}, {""}, {""}, + {"stepInHours",2167}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"beginDayTrend2",340}, + {""}, {""}, + {"runwayFrictionCoefficientState4",1903}, + {""}, + {"scanningMode4",1978}, + {"offsetEndSection4",1536}, + {""}, {""}, {""}, + {"scaleFactorOfWaveFrequencySequenceParameter",1943}, + {"scaleFactorOfWaveFrequencies",1942}, + {""}, {""}, {""}, + {"latitudeOfSouthernPoleInDegrees",1089}, + {""}, {""}, {""}, + {"longitudeOfFirstDiamondCentreLine",1191}, + {"longitudeOfFirstDiamondCenterLine",1190}, + {""}, {""}, {""}, {""}, {""}, + {"section4Length",2033}, + {"clusterMember2",540}, + {""}, {""}, {""}, {""}, {""}, + {"indicatorOfTypeOfLevel",985}, + {"longitudeOfFirstDiamondCentreLineInDegrees",1192}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"endMinuteTrend2",750}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"timeDomainTemplateNumber",2243}, + {""}, + {"sampleSizeOfModelClimate",1909}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"isRotatedGrid",1024}, + {""}, {""}, {""}, {""}, + {"md5Headers",1278}, + {""}, + {"runwayDesignatorState3",1882}, + {""}, + {"latitudeOfCentralPointInClusterDomain",1075}, + {"flagForAnyFurtherInformation",868}, + {"windVariableDirectionTrend1",2457}, + {""}, {""}, {""}, {""}, {""}, {""}, {"localLongitude2",1167}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"tempPressureUnits",2216}, {""}, - {"commonBlock",562}, - {"variationOfVisibilityTrend1",2391}, + {"maxLevelValue",1273}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"subLocalDefinitionNumber2",2188}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section_4",2075}, + {"typeOfWavePeriodInterval",2321}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"visibilityInKilometresTrend3",2416}, + {""}, + {"runwayFrictionCoefficientState3",1902}, + {""}, {""}, {""}, + {"secondOrderOfDifferentWidth",1997}, + {"Product_Identifier",220}, + {""}, {""}, {""}, + {"thisMarsClass",2223}, + {"jPointsAreConsecutive",1049}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"section3Length",2028}, + {"doExtractArea",708}, + {""}, + {"runwayDesignatorState2",1881}, + {"section11Pointer",2017}, + {""}, + {"latitudeOfNorthWestCornerOfArea",1084}, + {"unitsBias",2346}, + {""}, + {"subDefinitions1",2181}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"coordinate2End",592}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"centralLongitudeInMicrodegrees",403}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"diffInHours",694}, + {"numberOfRepresentativeMember",1479}, + {"runwayFrictionCoefficientState2",1901}, + {""}, {""}, + {"primaryBitmap",1742}, + {"Yo",283}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"unpackedSubsetPrecision",2358}, + {"biFourierResolutionSubSetParameterM",364}, + {"backgroundProcess",331}, + {"meanRVR4",1295}, + {""}, {""}, {""}, + {"Yp",284}, + {"section2Length",2022}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"postAuxiliaryArrayPresent",1710}, + {""}, {""}, {""}, + {"unstructuredGrid",2361}, {""}, {""}, {""}, {""}, {""}, - {"typeOfWaveFrequencySequence",2321}, + {"numberOfColumns",1405}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"numberOfPointsAlongXAxis",1467}, + {""}, {""}, {""}, + {"localExtensionPadding",1158}, + {""}, {""}, {""}, {""}, {""}, + {"LcxInMetres",119}, + {""}, {""}, {""}, + {"section_5",2075}, + {"startDateOfReferencePeriod",2152}, + {""}, + {"visibilityInKilometresTrend2",2415}, + {"unstructuredGridType",2363}, + {""}, {""}, + {"LuxInMetres",148}, + {""}, + {"Model_Additional_Information",167}, + {""}, {""}, + {"instrumentType",1000}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfWaveFrequencies",1506}, + {""}, {""}, {""}, {""}, + {"firstDimensionCoordinateValueDefinition",859}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"gribDataQualityChecks",912}, + {"md5Section1",1280}, + {""}, {""}, {""}, {""}, + {"southEastLatitudeOfVerficationArea",2123}, + {""}, + {"md5Section2",1282}, + {""}, {""}, {""}, {""}, + {"jScansPositively",1051}, + {"numberOfPointsInDomain",1471}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"rootTablesDir",1852}, + {"cloudsTitle4Trend4",536}, + {""}, {""}, {""}, {""}, + {"unitOfTimeRange",2344}, + {"section_05",2064}, + {""}, {""}, + {"numberOfWaveDirections",1505}, + {"Model_Identifier",168}, + {""}, {""}, {""}, {""}, + {"LIMITS",98}, + {"Nj",199}, + {""}, {""}, {""}, {""}, {""}, + {"presentTrend1",1721}, + {""}, {""}, + {"cloudsTitle2Trend1",523}, + {""}, {""}, + {"section7",2045}, + {"scaledValueOfAdditionalParameterForReferencePeriod",1947}, + {""}, {""}, {""}, {""}, {""}, + {"halfByte",936}, + {"scaleFactorOfSecondWavelength",1935}, + {""}, + {"spaceUnitFlag",2134}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"parametersVersion",1683}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"selectedYear",2087}, + {""}, + {"componentIndex",564}, + {"unitsConversionScaleFactor",2348}, + {"latitudinalDirectionGridLength",1104}, + {""}, {""}, + {"firstMonthUsedToBuildClimateMonth1",863}, + {""}, {""}, {""}, {""}, + {"identificationOfOriginatingGeneratingCentre",968}, + {""}, + {"localYear",1180}, + {"jScansNegatively",1050}, + {""}, {""}, {""}, {""}, {""}, + {"param_value_max",1672}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"originatorLocalTemplateNumber",1590}, + {""}, {""}, {""}, {""}, + {"doExtractSubsets",710}, + {"md5Section3",1283}, + {""}, {""}, {""}, {""}, + {"typicalYear",2332}, + {""}, {""}, + {"monthOfEndOfOverallTimeInterval",1338}, + {""}, {""}, + {"HDF5str",81}, + {""}, + {"normAtFinalTime",1364}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"yearOfEndOfOverallTimeInterval",2479}, + {""}, + {"PUnset",215}, + {""}, {""}, + {"integerPointValues",1001}, + {""}, {""}, + {"LLCOSP",99}, + {"cloudsTitle4Trend3",535}, + {""}, {""}, {""}, + {"secondaryBitmap",2001}, + {""}, + {"NUT",191}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"longitudeOfReferencePoint",1200}, + {""}, {""}, {""}, {""}, + {"meanRVR3",1294}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation4",452}, + {""}, {""}, {""}, + {"percentileValue",1696}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"missingValueManagement",1322}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"cloudsTitle4Trend2",534}, + {""}, {""}, {""}, {""}, + {"cloudsTitle3Trend1",528}, + {""}, {""}, {""}, + {"scaledValueOfDistanceFromEnsembleMean",1949}, + {""}, {""}, + {"secondaryMissingValueSubstitute",2007}, + {""}, + {"tablesLocalDir",2208}, + {"jDirectionIncrementInDegrees",1047}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"subLocalDefinition1",2183}, + {""}, {""}, {""}, + {"tiggeSuiteID",2235}, + {""}, {""}, + {"scaledValueOfLowerLimit",1958}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"sourceOfGridDefinition",2120}, + {""}, {""}, {""}, {""}, + {"directionOfVariation",700}, + {""}, + {"totalNumberOfValuesInUnpackedSubset",2272}, + {""}, {""}, {""}, {""}, + {"latitudeOfSubSatellitePoint",1092}, + {"endMonthTrend4",756}, + {""}, {""}, + {"secondaryBitmapPresent",2002}, + {"GDSPresent",68}, + {"legBaseTime",1108}, + {""}, {""}, {""}, {""}, + {"remarkPresent",1827}, + {""}, + {"yCoordinateOfOriginOfSectorImage",2469}, + {""}, {""}, {""}, + {"keyMore",1057}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"qnhUnits",1774}, + {""}, {""}, + {"hourOfEndOfOverallTimeInterval",950}, + {""}, {""}, + {"meanRVR2",1293}, + {""}, {""}, {""}, {""}, {""}, + {"parameterUnits",1681}, + {""}, {""}, + {"qfeUnits",1770}, + {""}, + {"section_6",2076}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"dateSSTFieldUsed",658}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"section_1",2069}, + {"inputShortDelayedDescriptorReplicationFactor",997}, + {""}, {""}, {""}, {""}, + {"offsetFromReferenceOfFirstTime",1539}, + {"legBaseDate",1107}, + {"typeOfReferenceDataset",2309}, + {"physicalFlag2",1703}, + {""}, {""}, + {"formatVersionMinorNumber",886}, + {"section5Length",2038}, + {"versionOfModelClimate",2406}, + {""}, {""}, {""}, {""}, + {"Latin2InDegrees",117}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractDateTimeYearStart",832}, {""}, {"marsClass2",1231}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Latin1InDegrees",115}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section4Length",2034}, - {""}, {""}, - {"cloudsCode3",507}, {""}, {""}, {""}, {""}, - {"WRAPstr",265}, + {"section_06",2065}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"secondaryBitmaps",2003}, {""}, {""}, {""}, {""}, {""}, - {"localLatitude1",1163}, - {""}, {""}, {""}, - {"offsetBBitmap",1527}, - {"clusterMember5",543}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsCode1",497}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"BufrTemplate",19}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractDateTimeHourStart",819}, {""}, {""}, - {"endMinuteTrend1",749}, + {"endGridDefinition",743}, + {"section_01",2060}, + {"alternativeRowScanning",306}, + {""}, {""}, {""}, {""}, + {"longitudeOfTangencyPoint",1209}, + {""}, {""}, + {"scaleFactorOfFirstWavelength",1924}, + {""}, {""}, {""}, {""}, {""}, + {"deleteCalendarId",685}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"variationOfVisibilityDirectionTrend1",2387}, - {""}, {""}, - {"changeIndicatorTrend3",424}, - {""}, {""}, - {"************_PRODUCT_***************",3}, - {""}, {""}, {""}, {""}, - {"clusterMember1",538}, - {""}, {""}, - {"section11Length",2017}, - {""}, {""}, {""}, {""}, - {"scanningMode5",1980}, + {"cloudsAbbreviation3",447}, + {"NrInRadiusOfEarthScaled",202}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"visibilityInKilometresTrend4",2418}, - {"changeIndicatorTrend2",423}, + {"selectStepTemplateInstant",2079}, + {""}, {""}, {""}, {""}, + {"secondOfEndOfOverallTimeInterval",1991}, + {""}, {""}, + {"minuteOfEndOfOverallTimeInterval",1312}, + {"secondaryBitmapsCount",2004}, + {""}, {""}, {""}, {""}, {""}, + {"observationType",1514}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"baseTimeEPS",336}, + {""}, {""}, {""}, + {"firstDimensionPhysicalSignificance",860}, + {"NrInRadiusOfEarth",201}, + {"scaledValueOfPrimeMeridianOffset",1962}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfClusters",1401}, + {""}, + {"runwayDesignatorState1",1880}, + {"clusteringDomain",550}, + {""}, {""}, + {"offsetSection7",1550}, + {""}, {""}, {""}, {""}, + {"variationOfVisibility",2383}, + {""}, {""}, {""}, {""}, + {"numberOfCoordinatesValues",1409}, + {""}, + {"DjInMetres",37}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetBeforeData",1532}, + {""}, {""}, {""}, + {"southEastLongitudeOfVerficationArea",2125}, + {""}, + {"upperThresholdValue",2370}, + {""}, {""}, {""}, + {"uerraLocalVersion",2337}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"endOfHeadersMarker",758}, + {"endMonthTrend3",755}, + {""}, + {"rdb_key",1792}, + {"runwayFrictionCoefficientState1",1900}, + {""}, {""}, {""}, + {"coordinateFlag1",601}, + {""}, {""}, {""}, {""}, {""}, + {"section6Length",2042}, + {""}, {""}, {""}, {""}, {""}, + {"baseDateEPS",334}, + {""}, {""}, {""}, + {"heightPressureEtcOfLevels",941}, + {""}, {""}, + {"section1Length",2019}, + {""}, {""}, {""}, + {"NRj",189}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"forecastOrSingularVectorNumber",877}, + {"swapScanningAlternativeRows",2196}, + {""}, + {"variationOfVisibilityDirection",2384}, + {""}, {""}, {""}, {""}, + {"cloudsAbbreviation2",442}, + {"variationOfVisibilityDirectionAngle",2385}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"oceanAtmosphereCoupling",1517}, + {""}, {""}, + {"easternLongitudeOfClusterDomain",727}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"clusterMember5",543}, + {""}, + {"gaussianGridName",896}, + {""}, {""}, + {"tempPressureUnits",2215}, + {""}, {""}, + {"md5Section4",1284}, + {""}, {""}, + {"longitudeOfTheSouthernPoleOfProjection",1213}, + {""}, {""}, + {"falseEasting",849}, + {""}, + {"unstructuredGridSubtype",2362}, + {""}, {""}, + {"section11Length",2016}, + {""}, {""}, + {"offsetBSection9",1530}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfPointsAlongAMeridian",1461}, + {""}, {""}, {""}, + {"rdbtimeYear",1801}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"deleteLocalDefinition",687}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"lowerThresholdValue",1221}, + {""}, {""}, {""}, {""}, + {"subLocalDefinitionLength1",2185}, + {""}, {""}, {""}, {""}, {""}, + {"firstOrderValues",865}, + {""}, + {"dateOfSSTFieldUsed",657}, + {""}, {""}, {""}, {""}, {""}, + {"endMonthTrend2",754}, + {""}, {""}, {""}, + {"secondOrderValuesDifferentWidths",1998}, + {""}, {""}, {""}, {""}, + {"iDirectionIncrementGiven",960}, + {"addEmptySection2",297}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"bufrdcExpandedDescriptors",383}, + {""}, {""}, {""}, {""}, + {"typeOfSSTFieldUsed",2311}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"produceLargeConstantFields",1751}, + {"packedValues",1594}, + {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfUpperLimit",1938}, + {""}, {""}, {""}, {""}, + {"numberOfCodedValues",1402}, + {""}, {""}, + {"xCoordinateOfSubSatellitePoint",2463}, + {""}, {""}, {""}, + {"padding_local40_1",1658}, {""}, {""}, {"localUsePresent",1179}, - {""}, {""}, - {"numberOfMissingValues",1450}, - {""}, {""}, {""}, - {"extractAreaNorthLatitude",810}, - {""}, {""}, {""}, - {"scaledValueOfFirstWavelength",1956}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"theHindcastMarsStream",2221}, - {"cfNameECMF",416}, - {"cloudsCode4",512}, + {"typicalMonth",2329}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"dayOfForecastUsedInLocalTime",665}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"longitudeOfCentralPointInClusterDomain",1187}, + {""}, + {"westernLongitudeOfClusterDomain",2429}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"secondOfStartOfReferencePeriod",1996}, - {"YRInMetres",280}, + {"METARstr",157}, + {""}, {""}, {""}, {""}, {""}, + {"dataSubCategory",644}, + {"dayOfTheYearDate",669}, {""}, - {"minuteOfStartOfReferencePeriod",1317}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"expandedCrex_scales",784}, + {"numberOfPointsAlongSecondAxis",1464}, + {""}, {""}, {""}, {""}, + {"verticalVisibilityCoded",2412}, {""}, {""}, - {"METAR",156}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"section6Length",2043}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"numberOfGridInReference",1435}, - {"subLocalDefinitionNumber1",2188}, + {"rangeBinSpacing",1788}, + {"TIDE",236}, + {""}, {""}, {""}, {""}, {""}, + {"unpackedError",2357}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"unexpandedDescriptors",2339}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfProcessedData",2308}, + {""}, + {"latitudeOfLastGridPoint",1082}, + {""}, {""}, {""}, {""}, {""}, + {"longitudeOfThePoleOfStretching",1210}, + {""}, + {"satelliteID",1911}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeOfReferencePoint",1085}, + {"selectStepTemplateInterval",2080}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"expandedCrex_units",785}, + {"cloudsTitle4Trend1",533}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfGroupsOfDataValues",1438}, + {"endStepInHours",764}, {""}, {""}, - {"clusterMember7",545}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"postAuxiliaryArrayPresent",1711}, - {""}, {""}, - {"section3Length",2029}, + {"totalNumberOfWaveDirections",2273}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ceilingAndVisibilityOK",395}, + {"localLatitude1",1163}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberIncludedInAverage",1384}, + {"unexpandedDescriptorsEncoded",2340}, {""}, {""}, {""}, {""}, {""}, - {"numberOfRadarSitesUsed",1474}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"changeIndicatorTrend1",422}, - {""}, {""}, {""}, {""}, {""}, - {"section2Length",2023}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"beginDayTrend3",341}, + {"numberOfPointsAlongAParallel",1462}, + {""}, {""}, {""}, + {"WMO",263}, + {""}, + {"totalNumberOfWaveFrequencies",2274}, + {""}, + {"offsetAfterData",1524}, + {"numberOfCoefficientsOrValuesUsedToSpecifyFirstDimensionCoordinateFunction",1403}, + {"numberOfCoefficientsOrValuesUsedToSpecifySecondDimensionCoordinateFunction",1404}, + {""}, + {"expandedUnits",794}, + {""}, {""}, {""}, {""}, + {"numberMissingFromAveragesOrAccumulations",1385}, + {"YR",279}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"crraSuiteID",628}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode1",497}, + {""}, + {"referenceForGroupWidths",1817}, {""}, {""}, {""}, {""}, - {"longitudeOfThePolePointInDegrees",1212}, - {"runwayFrictionCodeValueState4",1896}, {"cloudsCode2",502}, - {"localLongitude1",1166}, - {""}, - {"scanningMode7",1982}, - {"section_6",2077}, - {""}, - {"ITERATOR",91}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfReferencePointInDegrees",1201}, {""}, {""}, {""}, {""}, {""}, - {"firstLatitudeInDegrees",862}, + {"Original_Parameter_Identifier",210}, + {"tiggeLocalVersion",2232}, + {""}, + {"runwayDepositCodeState4",1863}, + {""}, {""}, + {"theHindcastMarsStream",2220}, + {""}, {""}, {""}, {""}, + {"Ensemble_Identifier",51}, + {""}, + {"beginDayTrend1",339}, + {"clusterMember6",544}, + {""}, + {"NC",176}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"scanningMode5",1979}, + {""}, {""}, {""}, {""}, + {"scaledValueOfLengthOfSemiMinorAxis",1957}, + {"latitudeWhereDxAndDyAreSpecified",1100}, + {""}, + {"clusterMember1",538}, + {"packingError",1595}, + {"runwayDepthOfDepositCodeState4",1871}, + {""}, {""}, + {"latitudeOfReferencePoint",1085}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Latin1InDegrees",115}, + {""}, + {"latitudeWhereDxAndDyAreSpecifiedInDegrees",1101}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"************_PRODUCT_***************",3}, + {"endMinuteTrend1",749}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfSouthEastCornerOfArea",1202}, + {""}, {""}, {""}, {""}, {""}, + {"NC2",178}, + {"padding_loc9_2",1654}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"marsClass1",1230}, + {"listMembersMissing4",1135}, + {""}, + {"Date_E4",28}, + {"referenceForGroupLengths",1816}, + {""}, {""}, {""}, {""}, {""}, + {"nameLegacyECMF",1355}, + {""}, + {"cavokOrVisibility",389}, + {""}, {""}, {""}, {""}, + {"numberOfWaveFrequencySequenceParameters",1507}, + {""}, + {"cloudsCode3",507}, + {""}, {""}, {""}, {""}, + {"localLongitude1",1166}, + {""}, {""}, + {"numberOfClusterHighResolution",1399}, + {""}, {""}, + {"numberOfUsedTileAttributes",1496}, + {""}, {""}, {""}, {""}, + {"longitudeOfThePolePoint",1211}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"subLocalDefinitionNumber1",2187}, + {""}, + {"numberOfStepsUsedForClustering",1487}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"iDirectionIncrementGridLength",961}, + {""}, + {"kindOfProduct",1059}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cfVarNameECMF",419}, + {""}, {""}, + {"numberOfWaveDirectionSequenceParameters",1504}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"latitudeOfTangencyPoint",1094}, + {""}, {""}, {""}, {""}, + {"localFlagLatestVersion",1160}, + {""}, {""}, + {"runwayDepthOfDepositCodeState3",1870}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"section2Used",2026}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"numberOfClusterLowResolution",1400}, + {""}, {""}, {""}, {""}, + {"Sub-Experiment_Identifier",233}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"expandedCrex_widths",786}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfPacking",2305}, + {""}, {""}, {""}, {""}, {""}, + {"expandBy",781}, + {""}, {""}, {""}, {""}, {""}, + {"section7Length",2046}, + {"totalNumberOfClusters",2261}, + {""}, {""}, + {"section8UniqueIdentifier",2052}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"MonthOfModelVersion",170}, + {"runwayDepthOfDepositCodeState2",1869}, + {"extractDateTimeMinuteEnd",820}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"extractAreaEastLongitude",807}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"latitudeFirstInDegrees",1072}, + {"extractDateTimeMinuteStart",822}, + {"runwayDepositCodeState3",1862}, + {""}, + {"numberOfUnexpandedDescriptors",1493}, + {"northWestLatitudeOfLPOArea",1369}, + {""}, {""}, + {"numberOfUsedSpatialTiles",1495}, + {""}, {""}, + {"secondOfStartOfReferencePeriod",1995}, + {""}, {""}, + {"minuteOfStartOfReferencePeriod",1317}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"thisExperimentVersionNumber",2222}, + {""}, {""}, + {"extractDateTimeMonthEnd",823}, + {""}, {""}, + {"visibilityInKilometresTrend1",2414}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"extractDateTimeMonthStart",825}, + {""}, {""}, {""}, {""}, + {"section9UniqueIdentifier",2055}, + {""}, {""}, {""}, + {"MinuteOfModelVersion",159}, + {"rdbtimeMonth",1798}, + {""}, {""}, {""}, + {"WRAPstr",265}, + {""}, {""}, {""}, {""}, + {"localTablesVersion",1174}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"pentagonalResolutionParameterK",1694}, + {""}, {""}, {""}, {""}, + {"qualityControlIndicator",1776}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"METAR",156}, + {""}, {""}, {""}, {""}, {""}, + {"listMembersMissing3",1134}, + {""}, + {"Date_E3",27}, + {""}, {""}, {""}, + {"numberOfBits",1388}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfCentralWaveNumber",1917}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetSection11",1544}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"constantAntennaElevationAngle",579}, + {""}, {""}, {""}, {""}, {""}, + {"scanningMode6",1980}, + {"Threshold_Or_Distribution_Units",249}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayDepositCodeState2",1861}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"verificationYear",2397}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractAreaNorthLatitude",810}, + {""}, {""}, + {"codedNumberOfGroups",558}, + {"probabilityType",1748}, + {"runwayFrictionCodeValueState4",1895}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"scaledValueOfWaveDirectionSequenceParameter",1971}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayDesignatorRVR4",1879}, + {""}, {""}, {""}, + {"scaledValueOfWaveFrequencySequenceParameter",1972}, + {""}, {""}, + {"numberOfPointsAlongXAxisInCouplingArea",1468}, + {""}, {""}, + {"md5GridSection",1277}, + {""}, {""}, {""}, {""}, + {"templatesMasterDir",2219}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"listMembersMissing2",1133}, + {""}, + {"Date_E2",26}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"numberOfRadarSitesUsed",1474}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"padding_local_35",1659}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"azimuthalWidth",329}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeLastInDegrees",1186}, + {""}, {""}, {""}, {""}, {""}, + {"generalExtended2ordr",898}, + {""}, {""}, {""}, {""}, + {"totalNumberOfGridPoints",2266}, + {""}, {""}, {""}, + {"runwayFrictionCodeValueState3",1894}, + {""}, + {"cloudsAbbreviation4Trend4",456}, + {""}, {""}, {""}, + {"experimentVersionNumber",795}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Total_Number_Members_Used",258}, + {""}, {""}, {""}, {""}, + {"SOH",226}, + {""}, {""}, {""}, {""}, {""}, + {"physicalMeaningOfVerticalCoordinate",1704}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfDataBinsAlongRadials",1410}, + {""}, {""}, {""}, + {"disableGrib1LocalSection",703}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"northWestLatitudeOfVerficationArea",1370}, + {"cloudsCode4",512}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"scaledValuesOfWaveDirections",1973}, + {""}, {""}, {""}, + {"listMembersUsed2",1137}, + {""}, {""}, {""}, + {"runwayFrictionCodeValueState2",1893}, + {""}, {""}, {""}, {""}, + {"meanRVR1",1292}, + {"section_7",2077}, + {""}, {""}, {""}, {""}, + {"probabilityTypeName",1749}, + {""}, {""}, + {"numberOfGroups",1437}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"mBasicAngle",1227}, + {""}, {""}, {""}, {""}, + {"ITERATOR",91}, + {""}, {""}, {"numberOfDataPointsExpected",1413}, {""}, - {"beginDayTrend2",340}, + {"beginHourTrend4",346}, + {""}, + {"uuidOfVGrid",2378}, + {""}, {""}, {""}, {""}, + {"scaledValuesOfWaveFrequencies",1974}, + {""}, {""}, {""}, + {"Total_Number_Members_Possible",257}, + {"physicalFlag1",1702}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation3Trend4",451}, + {"scaleFactorOfLengthOfSemiMajorAxis",1925}, + {""}, {""}, {""}, {""}, {""}, + {"section_07",2066}, + {""}, {""}, {""}, {""}, + {"marsClass1",1230}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"definitionFilesVersion",684}, + {"xCoordinateOfOriginOfSectorImage",2462}, + {""}, {""}, {""}, {""}, {""}, + {"runwayDesignatorRVR3",1878}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"pentagonalResolutionParameterJ",1693}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"listMembersUsed3",1138}, + {"unpackedValues",2359}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"backgroundGeneratingProcessIdentifier",330}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"coordAveraging3",587}, + {"unstructuredGridUUID",2364}, + {""}, {""}, {""}, {""}, + {"endHourTrend4",747}, + {"cloudsAbbreviation2Trend4",446}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"latitudeOfSubSatellitePointInDegrees",1093}, + {"sizeOfLength",2112}, + {""}, {""}, {""}, {""}, + {"changeIndicatorTrend4",425}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"preBitmapValues",1713}, + {""}, {""}, + {"variationOfVisibilityTrend4",2393}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfSecondWavelength",1966}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation4Trend3",455}, + {"resolutionAndComponentFlags4",1845}, + {""}, {""}, {""}, {""}, + {"longitudeOfSouthernPole",1203}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfReferencePointInDegrees",1201}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Used",138}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"dateOfIceFieldUsed",654}, + {""}, {""}, {""}, {""}, {""}, + {"runwayDesignatorRVR2",1877}, + {""}, {""}, + {"scaleFactorOfMajorAxisOfOblateSpheroidEarth",1929}, + {""}, {""}, {""}, {""}, {""}, + {"gribTablesVersionNo",914}, + {"offsetBeforePL",1533}, + {""}, {""}, + {"variationOfVisibilityDirectionTrend4",2389}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayDepthOfDepositCodeState1",1868}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"projSourceString",1759}, + {"versionNumOfSharedHeaderMessageFormat",2402}, + {""}, {""}, {""}, {""}, + {"coordAveraging2",586}, + {""}, + {"cloudsAbbreviation1",437}, + {""}, {""}, {""}, + {"changeIndicatorTrend3",424}, + {""}, {""}, {""}, + {"DjGiven",35}, + {"earthMajorAxisInMetres",722}, + {""}, {""}, {""}, {""}, + {"mixedCoordinateFieldFlag",1327}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"variationOfVisibilityTrend3",2392}, + {""}, {""}, {""}, {""}, + {"beginHourTrend3",345}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"dateOfForecastUsedInLocalTime",653}, - {"md5Section3",1283}, - {"Sub-Experiment_Identifier",233}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"timeOfForecastUsedInLocalTime",2249}, - {""}, {""}, {""}, - {"section_04",2064}, - {""}, {""}, {""}, {""}, - {"expandedUnits",794}, + {""}, {""}, + {"yearOfForecastUsedInLocalTime",2481}, {""}, {""}, {""}, {""}, {""}, - {"offsetBeforeBitmap",1531}, - {""}, {""}, {""}, {""}, {""}, - {"md5Section1",1280}, - {""}, {""}, {""}, {""}, - {"numberOfPointsAlongAMeridian",1461}, + {"Local_Number_Members_Possible",134}, + {"cloudsAbbreviation3Trend3",450}, + {"timeOfForecastUsedInLocalTime",2248}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"projTargetString",1761}, + {""}, + {"cloudsAbbreviation4Trend2",454}, + {""}, {""}, {""}, {""}, + {"NH",183}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"southEastLongitudeOfLPOArea",2124}, + {"changeIndicatorTrend2",423}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"variationOfVisibilityTrend2",2391}, + {""}, {""}, {""}, + {"endMonthTrend1",753}, + {"ZLMULT",287}, + {""}, + {"variationOfVisibilityDirectionTrend3",2388}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"padding_grid90_1",1604}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"endHourTrend3",746}, + {"cloudsAbbreviation2Trend3",445}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"lengthOf4DvarWindow",1113}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"HDF5",80}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfGeneratingProcess",2297}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfGroupsOfDataValues",1438}, + {""}, + {"hoursAfterReferenceTimeOfDataCutoff",957}, + {""}, {""}, {""}, + {"shortNameLegacyECMF",2100}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"beginHourTrend2",344}, + {""}, + {"variationOfVisibilityDirectionTrend2",2387}, + {""}, {""}, {""}, + {"resolutionAndComponentFlags3",1844}, + {""}, {""}, {""}, + {"typeOfWaveFrequencySequence",2320}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsAbbreviation3Trend2",449}, + {"nameECMF",1354}, + {"Total_Number_Members_Missing",256}, {""}, {""}, {"extractDateTimeStart",829}, - {""}, {""}, {""}, {""}, - {"eastLongitudeOfDomainOfTubing",726}, {""}, {""}, {""}, {""}, {""}, - {"runwayDesignatorState4",1884}, - {""}, - {"section5Length",2039}, - {""}, - {"ZLMULT",287}, + {"numberOfControlForecastTube",1408}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"mask",1260}, {""}, {""}, {""}, {"extractDateTimeSecondEnd",826}, - {"runwayDepthOfDepositCodeState4",1872}, - {""}, {""}, {""}, {""}, {""}, - {"gribMasterTablesVersionNumber",913}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"section1Length",2020}, - {"dateOfIceFieldUsed",654}, - {""}, - {"extractDateTimeSecondStart",828}, - {""}, {""}, {""}, {""}, - {"numberOfSecondOrderPackedValues",1482}, - {""}, - {"section_3",2074}, - {""}, - {"latitudeOfLastGridPointInDegrees",1083}, - {""}, {""}, - {"md5Section4",1284}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"md5GridSection",1277}, - {""}, {""}, {""}, - {"numberOfPointsAlongSecondAxis",1464}, - {""}, - {"earthMajorAxisInMetres",722}, - {""}, {""}, {""}, {""}, {""}, - {"meanRVR4",1295}, - {""}, {""}, {""}, - {"section_2",2073}, - {""}, {""}, {""}, {""}, - {"northLatitudeOfDomainOfTubing",1368}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section7Length",2047}, - {""}, {""}, {""}, {""}, - {"runwayFrictionCodeValueState3",1895}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"scaleFactorOfLowerWavePeriodLimit",1929}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayFrictionCodeValueState2",1894}, - {""}, - {"scaleFactorOfMajorAxisOfOblateSpheroidEarth",1930}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"visibilityInKilometresTrend3",2417}, - {"md5Section10",1281}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"disableGrib1LocalSection",703}, - {""}, - {"yearOfForecastUsedInLocalTime",2482}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"southLatitudeOfDomainOfTubing",2128}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"visibilityInKilometresTrend2",2416}, - {"md5Section2",1282}, - {""}, - {"runwayFrictionCoefficientCodeState4",1900}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {"hourOfForecastUsedInLocalTime",952}, - {""}, {""}, - {"NRj",189}, - {"widthOfWidths",2435}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDesignatorState3",1883}, - {"westLongitudeOfDomainOfTubing",2429}, {""}, {""}, {""}, - {"NB",175}, - {"scaleFactorOfLengthOfSemiMajorAxis",1926}, - {""}, {""}, - {"runwayDepthOfDepositCodeState3",1871}, - {""}, {""}, {""}, {""}, - {"beginDayTrend1",339}, - {""}, {""}, {""}, {""}, {""}, - {"section_06",2066}, - {"runwayDesignatorState2",1882}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDepthOfDepositCodeState2",1870}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"numberOfPointsAlongAParallel",1462}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"runwayFrictionCodeValueState1",1893}, - {""}, {""}, {""}, {""}, {""}, - {"addEmptySection2",297}, - {""}, - {"endMonthTrend4",756}, - {""}, - {"versionNumOfSharedHeaderMessageFormat",2403}, - {"extractDateTimeYearEnd",830}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"NC2",178}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section_5",2076}, - {"probProductDefinition",1748}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfSingularVectorsComputed",1484}, + {"numberOfDaysInClimateSamplingWindow",1415}, {""}, {""}, {""}, - {"pentagonalResolutionParameterK",1695}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"section_03",2063}, - {""}, {""}, {""}, {""}, - {"section_1",2070}, - {""}, {""}, {""}, - {"runwayDesignatorState1",1881}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_sec1_loc",1662}, - {""}, - {"runwayDepthOfDepositCodeState1",1869}, - {""}, - {"runwayFrictionCoefficientCodeState3",1899}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"legacyGaussSubarea",1110}, - {"runwayDepositCodeState4",1864}, - {"runwayFrictionCoefficientCodeState2",1898}, - {"section_02",2062}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractAreaEastLongitude",807}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"generalExtended2ordr",898}, - {""}, {""}, {""}, {""}, - {"recentWeatherTry",1807}, - {""}, - {"SOH",226}, - {""}, {""}, {""}, - {"extractDateTimeHourEnd",817}, - {""}, {""}, - {"Original_Parameter_Identifier",210}, - {""}, {""}, {""}, {""}, - {"listMembersUsed3",1138}, - {""}, {""}, {""}, {""}, - {"checkInternalVersion",431}, - {""}, {""}, {""}, {""}, {""}, - {"visibilityInKilometresTrend1",2415}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"numberOfHorizontalPoints",1439}, - {""}, - {"meanRVR3",1294}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"listOfWaveFrequencySequenceParameters",1147}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"section_7",2078}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"southEastLongitudeOfLPOArea",2125}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"meanRVR2",1293}, - {""}, - {"baseTimeOfThisLeg",337}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, + {"northWestLongitudeOfVerficationArea",1372}, {"NEAREST",180}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"extractDateTimeSecondStart",828}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"runwayDepthOfDepositState4",1875}, + {""}, + {"numberOfContributingSpectralBands",1407}, + {""}, + {"secondaryBitMap",2000}, + {"probProductDefinition",1747}, + {""}, + {"localTablesVersionNumber",1175}, {""}, {""}, {""}, {""}, - {"offsetSection11",1544}, + {"endHourTrend2",745}, + {"cloudsAbbreviation2Trend2",444}, + {"unitsECMF",2350}, + {""}, {""}, {""}, {""}, {""}, + {"typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing",2318}, + {""}, + {"inputOverriddenReferenceValues",995}, + {""}, + {"numberOfBytesPerInteger",1395}, {""}, {""}, - {"typeOfWavelengthInterval",2323}, - {"runwayFrictionCoefficientCodeState1",1897}, - {"swapScanningAlternativeRows",2197}, + {"pack",1593}, + {""}, + {"scaledValueOfFirstWavelength",1955}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"getNumberOfValues",903}, + {"WRAP",264}, + {"timeUnitFlag",2253}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"resolutionAndComponentFlags2",1843}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"windUnitsTrend4",2455}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"listMembersUsed4",1139}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"unpack",2356}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"listMembersMissing4",1135}, + {"matrixBitmapsPresent",1270}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"runwayFrictionCodeValueState1",1892}, + {""}, {""}, {""}, {""}, + {"numberOfPointsAlongFirstAxis",1463}, {""}, - {"horizontalDomainTemplate",946}, + {"numberOfSingularVectorsEvolved",1485}, + {""}, {""}, + {"monthlyVerificationYear",1347}, + {""}, {""}, + {"clusterMember7",545}, + {""}, {""}, + {"matchAerosolBinNumber",1265}, + {""}, {""}, {""}, {""}, + {"totalAerosolBinsNumbers",2257}, + {""}, {""}, {""}, {""}, + {"numberInMixedCoordinateDefinition",1381}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"NC1",177}, - {""}, {""}, {""}, {""}, {""}, - {"flagForNormalOrStaggeredGrid",870}, + {""}, {""}, + {"laplacianScalingFactorUnset",1067}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc18_2",1618}, + {""}, {""}, + {"modelErrorType",1330}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {"observationDiagnostic",1512}, - {"paramIdECMF",1671}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"NC1",177}, + {"padding_loc9_1",1653}, + {"padding_loc7_1",1652}, {""}, - {"spacingOfBinsAlongRadials",2136}, - {"WRAP",264}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc5_1",1650}, + {""}, + {"Local_Number_Members_Missing",130}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"indexingTimeMM",983}, {""}, {""}, - {"longitudeOfSouthernPoleInDegrees",1204}, - {""}, {""}, {""}, - {"numberOfReforecastYearsInModelClimate",1477}, - {""}, {""}, {""}, {""}, {""}, - {"section_05",2065}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"radiusOfTheEarth",1787}, + {"numberOfSingularVectorsComputed",1484}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"dateOfModelVersion",655}, + {""}, {""}, + {"yearOfModelVersion",2482}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"timeOfModelVersion",2249}, + {""}, + {"offsetValuesBy",1554}, + {""}, {""}, {""}, + {"numberOfPressureLevelsUsedForClustering",1473}, + {"cloudsAbbreviation1Trend4",441}, + {""}, {""}, {""}, {""}, + {"padding_loc19_2",1624}, + {""}, + {"runwayDepthOfDepositState3",1874}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc50_1",1649}, {""}, {""}, {""}, {""}, {""}, - {"endMonthTrend3",755}, + {"pastTendencyRVR1",1688}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"pastTendencyRVR2",1689}, + {""}, {""}, {""}, {""}, + {"padding_loc6_1",1651}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayFrictionCoefficientCodeState4",1899}, + {""}, {""}, {""}, {""}, {""}, + {"recentWeather",1805}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"legacyGaussSubarea",1110}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"section4UniqueIdentifier",2036}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"dayOfModelVersion",666}, + {"scaledValueOfUpperLimit",1969}, + {""}, {""}, {""}, + {"section_11",2071}, + {""}, {""}, {""}, + {"windUnitsTrend3",2454}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"listMembersUsed2",1137}, + {"latitudeOfReferencePointInDegrees",1086}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"radiusOfTheEarth",1786}, {""}, {""}, {""}, - {"section_01",2061}, - {""}, - {"cloudsAbbreviation4",452}, + {"accuracyMultipliedByFactor",296}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfHorizontalPoints",1439}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"horizontalDimensionProcessed",945}, + {"pastTendencyRVR3",1690}, + {""}, {""}, + {"reflectivityCalibrationConstant",1826}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endMonthTrend2",754}, + {""}, + {"runwayDepthOfDepositState2",1873}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"experimentVersionNumberOfAnalysis",798}, + {"hourOfModelVersion",953}, + {"ceilingAndVisibilityOK",395}, + {""}, {""}, {""}, {""}, + {"offsetICEFieldsUsed",1540}, + {"extractDateTimeYearEnd",830}, + {""}, {""}, {""}, + {"runwayFrictionCoefficientCodeState3",1898}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"horizontalDomainTemplate",946}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"extractDateTimeHourEnd",817}, + {""}, {""}, + {"section3UniqueIdentifier",2031}, + {""}, {""}, + {"numberOfPointsUsed",1472}, + {""}, {""}, {""}, {""}, + {"sizeOfPostAuxiliaryArray",2114}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"changeIndicatorTrend1",422}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfGridInReference",1435}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"windUnitsTrend2",2453}, + {"variationOfVisibilityTrend1",2390}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"runwayFrictionCoefficientCodeState2",1897}, + {""}, + {"DayOfModelVersion",29}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"cloudsAbbreviation1Trend3",440}, + {""}, + {"firstLatitudeInDegrees",862}, + {""}, + {"secondaryBitmapsSize",2005}, + {"scanningMode7",1981}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"runwayDepositCodeState1",1860}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"timeIncrementBetweenSuccessiveFields",2245}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"variationOfVisibilityDirectionTrend1",2386}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"baseDateOfThisLeg",335}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"cloudsBaseCoded1Trend4",481}, - {""}, {""}, - {"scaledValueOfCentralWaveNumber",1949}, - {""}, - {"pentagonalResolutionParameterJ",1694}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"beginMinuteTrend4",350}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"DjGiven",35}, + {"latitudeOfLastGridPointInDegrees",1083}, {""}, {""}, {""}, {""}, {""}, - {"latitudeOfReferencePointInDegrees",1086}, - {""}, - {"latitudeOfThePolePoint",1096}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"inputOverriddenReferenceValues",995}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section2Used",2027}, - {""}, {""}, - {"runwayDepositCodeState3",1863}, - {""}, {""}, - {"meanRVR1",1292}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"section_07",2067}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfGeneratingProcess",2298}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"runwayDepositCodeState2",1862}, - {""}, - {"numberOfSingularVectorsEvolved",1485}, + {"padding_sec2_3",1664}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"lengthOf4DvarWindow",1113}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded3Trend4",491}, + {"northLatitudeOfDomainOfTubing",1368}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"cloudsAbbreviation1Trend2",439}, + {"Y2",277}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfMinorAxisOfOblateSpheroidEarth",1930}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfPointsAlongTheXAxis",1465}, + {""}, + {"scaleFactorOfEarthMajorAxis",1920}, + {""}, {""}, {""}, + {"numberOfSecondOrderPackedValues",1482}, + {"scaleFactorOfEarthMinorAxis",1921}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"southLatitudeOfDomainOfTubing",2127}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"subdivisionsOfBasicAngle",2194}, + {"cloudsBaseCoded1Trend3",480}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase3",467}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"horizontalDimensionProcessed",945}, + {""}, + {"padding_sec2_2",1663}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase1",457}, - {"cloudsBaseCoded1Trend3",480}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"beginMinuteTrend3",349}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfPressureLevelsUsedForClustering",1473}, - {""}, {""}, {""}, {""}, {""}, + {"padding_loc190_1",1619}, + {""}, {""}, {""}, + {"padding_loc29_3",1639}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"eastLongitudeOfDomainOfTubing",726}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {"cloudsBaseCoded1Trend2",479}, {""}, - {"endMark",748}, - {"listMembersMissing3",1134}, + {"checkInternalVersion",431}, + {"Original_CodeTable_2_Version_Number",208}, + {""}, + {"Less_Than_Or_To_Overall_Distribution",122}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"beginMinuteTrend2",348}, + {"Threshold_Or_Distribution_0_no_1_yes",248}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"NH",183}, {""}, {""}, - {"endMonthTrend1",753}, + {"Minute_E4",162}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc2_2",1641}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"cloudsBase4",472}, {""}, - {"listMembersMissing2",1133}, + {"paramIdLegacyECMF",1671}, + {""}, + {"visibilityTrend1",2418}, {""}, {""}, {""}, {""}, {""}, {""}, - {"unusedBitsInBitmap",2366}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"cloudsBaseCoded3",487}, - {""}, {""}, {""}, - {"sourceSinkChemicalPhysicalProcess",2122}, - {"padding_local40_1",1659}, - {""}, {""}, {""}, - {"cloudsBaseCoded3Trend3",490}, - {""}, {""}, {""}, {""}, - {"setBitsPerValue",2091}, - {""}, {""}, {""}, {""}, - {"cloudsAbbreviation3",447}, - {"cloudsBaseCoded2Trend4",486}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded3Trend2",489}, - {"cloudsBaseCoded1",477}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded1Trend1",478}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"beginMinuteTrend1",347}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDepositCodeState1",1861}, - {""}, {""}, {""}, - {"cloudsAbbreviation2",442}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"pastTendencyRVR3",1691}, - {""}, {""}, {""}, {""}, - {"cloudsBase2",462}, - {""}, {""}, {""}, - {"projTargetString",1762}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"visibilityTrend2",2419}, + {"longitudeOfThePolePointInDegrees",1212}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded4",492}, - {""}, {""}, {""}, - {"offsetBeforePV",1534}, - {""}, - {"pastTendencyRVR1",1689}, - {""}, {""}, - {"cloudsBaseCoded4Trend4",496}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"resolutionAndComponentFlags4",1846}, - {""}, - {"offsetBSection6",1529}, - {""}, {""}, - {"latitudeOfThePoleOfStretching",1095}, + {"windGustTrend4",2444}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"projSourceString",1760}, - {""}, {""}, - {"scaledValueOfUpperLimit",1970}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"pastTendencyRVR4",1692}, - {""}, {""}, - {"physicalFlag2",1704}, - {"Ensemble_Combination_Number",50}, - {"cloudsBaseCoded3Trend1",488}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Y2",277}, + {"cfNameECMF",416}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"pastTendencyRVR4",1691}, {""}, - {"scaleFactorOfEarthMajorAxis",1921}, - {""}, {""}, {""}, {""}, - {"scaleFactorOfEarthMinorAxis",1922}, - {""}, {""}, {""}, {""}, - {"Total_Number_Members_Used",258}, + {"listOfWaveFrequencySequenceParameters",1147}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded2Trend3",485}, + {"padding_loc29_2",1638}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"scaledValueOfCentralWaveNumber",1948}, {""}, {""}, - {"cloudsBaseCoded2",482}, + {"westLongitudeOfDomainOfTubing",2428}, + {""}, {""}, {""}, + {"jDirectionIncrementGiven",1045}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded2Trend2",484}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"shortNameLegacyECMF",2101}, - {""}, {""}, {""}, {""}, - {"uuidOfHGrid",2378}, + {"visibilityTrend3",2420}, + {"extractAreaSouthLatitude",811}, {""}, {""}, - {"scaleFactorOfMinorAxisOfOblateSpheroidEarth",1931}, + {"beginMinuteTrend4",350}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"pastTendencyRVR2",1690}, - {""}, - {"cloudsBaseCoded4Trend3",495}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cfNameLegacyECMF",417}, {""}, {""}, {""}, - {"Local_Number_Members_Used",138}, - {""}, {""}, {""}, {""}, - {"typeOfLevelECMF",2304}, - {""}, {""}, {""}, - {"Total_Number_Members_Possible",257}, - {"cloudsBaseCoded4Trend2",494}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfBytesInLocalDefinition",1393}, {""}, - {"cloudsAbbreviation1",437}, + {"section5UniqueIdentifier",2040}, + {""}, {""}, {""}, + {"widthOfWidths",2434}, + {""}, {""}, + {"scaleFactorOfLowerWavePeriodLimit",1928}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"constantAntennaElevationAngle",579}, {""}, {""}, {""}, {""}, - {"unitsLegacyECMF",2353}, + {"runwayDesignatorRVR1",1876}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"coordinate3OfFirstGridPoint",596}, - {""}, - {"resolutionAndComponentFlags6",1847}, - {"numberOfPointsUsed",1472}, - {""}, {""}, {""}, - {"cloudsBaseCoded2Trend1",483}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"hoursAfterReferenceTimeOfDataCutoff",957}, - {"typicalYearOfCentury",2335}, - {""}, {""}, {""}, {""}, {""}, - {"timeUnitFlag",2254}, + {"uuidOfHGrid",2377}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Total_Number_Members_Missing",256}, + {"coordAveraging1",585}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section4UniqueIdentifier",2037}, - {"Local_Number_Members_Possible",134}, + {"Local_Number_Members_Possible_E4",137}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc30_2",1643}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Minute_E3",161}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"flagForNormalOrStaggeredGrid",870}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"beginMinuteTrend3",349}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation4Trend1",453}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"windGustTrend3",2443}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"pentagonalResolutionParameterM",1695}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"runwayFrictionCoefficientCodeState1",1896}, + {""}, {""}, {""}, {""}, {""}, + {"weightAppliedToClimateMonth1",2426}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section6UniqueIdentifier",2044}, + {""}, {""}, + {"padding_loc13_4",1610}, + {""}, + {"beginMinuteTrend2",348}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"gribMasterTablesVersionNumber",913}, + {""}, {""}, {""}, + {"experimentVersionNumberOfAnalysis",798}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Possible_E3",136}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"radiusOfClusterDomain",1786}, - {""}, {""}, {""}, - {"physicalFlag1",1703}, + {"cloudsBase1",457}, + {"beginHourTrend1",343}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsBase2",462}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Minute_E2",160}, + {""}, + {"Local_Number_Members_Missing_E4",133}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation3Trend1",448}, + {""}, {""}, {""}, {""}, + {"cloudsBaseCoded2Trend4",486}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"cloudsBaseCoded4Trend1",493}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Y1",275}, + {""}, {""}, {""}, {""}, + {"Local_Number_Members_Possible_E2",135}, + {""}, + {"windGustTrend2",2442}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfBytesOfFreeFormatData",1394}, + {""}, {""}, + {"scaledValueOfLengthOfSemiMajorAxis",1956}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"CLNOMA",23}, - {""}, - {"Local_Number_Members_Missing",130}, - {""}, {""}, - {"resolutionAndComponentFlags3",1845}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"DELETE",24}, + {""}, {""}, {""}, + {"endHourTrend1",744}, + {"cloudsAbbreviation2Trend1",443}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetBSection5",1528}, + {"cloudsBase3",467}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"resolutionAndComponentFlags2",1844}, + {"resolutionAndComponentFlags6",1846}, {""}, {""}, {""}, - {"section6UniqueIdentifier",2045}, + {"typeOfWavelengthInterval",2322}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"g1conceptsLocalDirAll",893}, + {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Missing_E3",132}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"resolutionAndComponentFlags1",1842}, + {""}, {""}, {""}, + {"cloudsBaseCoded2Trend3",485}, + {"typicalYear2",2333}, + {"jDirectionIncrementGridLength",1046}, + {""}, {""}, + {"countOfICEFieldsUsed",621}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"padding_grid1_2",1599}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractAreaSouthLatitude",811}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, + {"Ensemble_Combination_Number",50}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"northWestLongitudeOfLPOArea",1371}, - {""}, {""}, {""}, - {"laplacianScalingFactorUnset",1067}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"section3UniqueIdentifier",2032}, - {""}, - {"numberOfPointsAlongFirstAxis",1463}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"beginHourTrend4",346}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"beginYearTrend4",358}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"coordinate4OfFirstGridPoint",599}, + {"cloudsBaseCoded3Trend4",491}, {""}, {""}, - {"ccsdsCompressionOptionsMask",392}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfWaveDirectionSequence",2320}, - {""}, {""}, - {"isCavok",1012}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfPointsAlongYAxis",1469}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"pentagonalResolutionParameterM",1696}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"visibilityTrend3",2421}, - {"section5UniqueIdentifier",2041}, - {"HDF5",80}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"typicalYear2",2334}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"visibilityTrend1",2419}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc13_3",1609}, + {"cloudsBaseCoded1",477}, + {""}, {""}, {""}, {""}, + {"Local_Number_Members_Missing_E2",131}, + {""}, + {"cloudsBaseCoded2",482}, + {""}, + {"cloudsBaseCoded1Trend1",478}, {""}, {""}, {""}, {""}, {""}, - {"intervalBetweenTimes",1009}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc14_2",1613}, + {"cloudsBaseCoded2Trend2",484}, + {""}, {""}, {""}, + {"scaledValueOfMajorAxisOfOblateSpheroidEarth",1960}, {""}, {""}, {""}, {""}, {""}, {""}, - {"resolutionAndComponentFlags1",1843}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {"extractDateTimeEnd",816}, - {""}, {""}, - {"section7UniqueIdentifier",2049}, - {""}, {""}, {""}, {""}, - {"horizontalDomainTemplateNumber",947}, - {""}, {""}, {""}, {""}, - {"visibilityTrend4",2422}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Date_E4",28}, - {""}, - {"uvRelativeToGrid",2380}, - {""}, {""}, {""}, {""}, {""}, - {"sizeOfPostAuxiliaryArray",2115}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"scaledValueOfLowerWavePeriodLimit",1960}, + {"sizeOfPostAuxiliaryArrayPlusOne",2115}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfMajorAxisOfOblateSpheroidEarth",1961}, - {""}, {""}, {""}, {""}, - {"latitudeOfThePolePointInDegrees",1097}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"jDirectionIncrementGiven",1045}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"resolutionAndComponentFlags7",1848}, - {""}, {""}, {""}, {""}, - {"ICPLSIZE",87}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"presentWeather3Present",1736}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfBitsForScaledGroupLengths",1390}, {""}, - {"visibilityTrend2",2420}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather2Present",1731}, - {""}, {""}, {""}, - {"scaledValueOfLengthOfSemiMajorAxis",1957}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"runwayDepthOfDepositState4",1876}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"spacingOfBinsAlongRadials",2135}, {""}, {""}, {""}, {""}, {""}, {""}, - {"beginHourTrend3",345}, + {"visibilityTrend4",2421}, + {""}, + {"*********_EXTRA_DATA_***************",4}, + {"padding_loc18_1",1617}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"beginYearTrend4",358}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfBitsContainingEachPackedValue",1389}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"beginYearTrend3",357}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"beginHourTrend2",344}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"beginYearTrend2",356}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"numberOfPointsAlongTheXAxis",1465}, - {""}, {""}, {""}, - {"endHourTrend4",747}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"setToMissingIfOutOfRange",2095}, - {""}, {""}, - {"ECMWF",45}, - {"offsetToEndOf4DvarWindow",1553}, - {"presentWeather1Present",1726}, - {""}, - {"endYearTrend4",769}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetFromOriginToInnerBound",1538}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_local11_1",1655}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"mixedCoordinateDefinition",1326}, + {"padding_loc10_1",1605}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"padding_local1_1",1656}, + {"cloudsBaseCoded3",487}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBaseCoded3Trend3",490}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"longitudeOfSouthernPoleInDegrees",1204}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc13_2",1608}, + {""}, {""}, {""}, {""}, + {"endYearTrend4",769}, + {""}, {"countOfGroupLengths",620}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_local_7_1",1660}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"cloudsBaseCoded3Trend2",489}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"latitudeOfThePolePoint",1096}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"INBITS",89}, + {""}, + {"padding_loc4_2",1648}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"commonBlock",562}, + {""}, + {"coordinate4OfFirstGridPoint",599}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Ensemble_Identifier_E4",54}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"padding_grid50_1",1602}, + {""}, {""}, {""}, {""}, + {"runwayDepthOfDepositState1",1872}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfMissingValues",1450}, + {"beginYearTrend3",357}, + {""}, + {"YRInMetres",280}, + {""}, {""}, {""}, {""}, + {"offsetToEndOf4DvarWindow",1553}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"sourceSinkChemicalPhysicalProcess",2121}, + {""}, {""}, {""}, {""}, {""}, + {"windUnitsTrend1",2452}, + {""}, + {"numberOfUsefulPointsAlongXAxis",1497}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"recentWeatherTry",1806}, + {"cfVarNameLegacyECMF",420}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"jDirectionIncrementGridLength",1046}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section7UniqueIdentifier",2048}, + {""}, {""}, + {"subdivisionsOfBasicAngle",2193}, + {""}, {""}, {""}, {""}, + {"Ensemble_Identifier_E3",53}, + {""}, + {"beginMinuteTrend1",347}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"altitudeOfTheCameraFromTheEarthsCentreMeasuredInUnitsOfTheEarthsRadius",307}, + {"padding_grid4_1",1601}, + {""}, {""}, {""}, {""}, + {"endYearTrend3",768}, + {""}, {""}, {""}, {""}, + {"cloudsBase4",472}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Ensemble_Identifier_E2",52}, + {""}, {""}, {""}, {""}, + {"beginYearTrend2",356}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather3Present",1735}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"oneMinuteMeanMaximumRVR4",1564}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"endMark",748}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation1Trend1",438}, + {"Y1",275}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_grid3_1",1600}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfLevelECMF",2303}, {""}, {""}, - {"Date_E3",27}, + {"baseTimeOfThisLeg",337}, + {""}, + {"horizontalDomainTemplateNumber",947}, + {""}, {""}, {""}, + {"presentWeather2Present",1730}, + {""}, {""}, {""}, + {"endYearTrend2",767}, + {""}, {""}, {""}, {""}, + {"setToMissingIfOutOfRange",2094}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"radiusOfClusterDomain",1785}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"padding_sec2_1",1662}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"baseDateOfThisLeg",335}, + {""}, {""}, {""}, + {"cloudsBaseCoded4",492}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBaseCoded4Trend4",496}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBaseCoded2Trend1",483}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc2_1",1640}, + {""}, {""}, {""}, {""}, + {"padding_loc28_1",1636}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfWaveDirectionSequence",2319}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"runwayExtentOfContaminationState4",1891}, + {""}, {""}, + {"DELETE",24}, + {""}, + {"padding_loc192_1",1623}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetBSection5",1528}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc20_1",1625}, + {""}, {""}, + {"Hour_E4",85}, + {""}, {""}, {""}, + {"oneMinuteMeanMaximumRVR3",1563}, + {""}, {""}, {""}, + {"cloudsBaseCoded4Trend3",495}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"************_EXPERIMENT_************",2}, + {""}, + {"padding_loc29_1",1637}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode1Trend4",501}, + {"Time_Range_One_E4",252}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"padding_sec3_1",1665}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"NG",182}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsBaseCoded4Trend2",494}, + {""}, {""}, {""}, {""}, + {"cloudsBaseCoded3Trend1",488}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberInHorizontalCoordinates",1380}, - {""}, {""}, {""}, - {"g1conceptsLocalDirAll",893}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Date_E2",26}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"HourOfModelVersion",82}, + {"latitudeOfThePoleOfStretching",1095}, {""}, {""}, {""}, {""}, - {"rootGroupSymbolTableEntry",1852}, + {"RVR4_1",225}, + {"runwayExtentOfContaminationState3",1890}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"YearOfModelVersion",282}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"beginHourTrend1",343}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfUsefulPointsAlongXAxis",1497}, + {""}, + {"padding_loc3_1",1647}, {""}, {""}, {""}, {""}, - {"beginYearTrend1",355}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc38_1",1646}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDepthOfDepositState3",1875}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"weightAppliedToClimateMonth1",2427}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ZLBASE",286}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDepthOfDepositState2",1874}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"numberOfParametersUsedForClustering",1458}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endHourTrend3",746}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"listOfWaveDirectionSequenceParameters",1146}, - {""}, {""}, - {"endYearTrend3",768}, - {""}, - {"latitudeOfTheSouthernPoleOfProjection",1098}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endHourTrend2",745}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"endYearTrend2",767}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"extractDateTimeDayStart",815}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"TYPE_FF",243}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"TYPE_OF",245}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Threshold_Or_Distribution_Units",249}, - {""}, - {"numberOfTensOfThousandsOfYearsOfOffset",1489}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDesignatorRVR4",1880}, - {"numberOfPointsAlongYAxisInCouplingArea",1470}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsCode1Trend4",501}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"sizeOfPostAuxiliaryArrayPlusOne",2116}, - {""}, {""}, {""}, - {"runwayDepthOfDepositState1",1873}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"versionNumberOfSuperblock",2406}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_loc9_2",1655}, - {""}, - {"BUFR",18}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Original_CodeTable_2_Version_Number",208}, - {""}, - {"skipExtraKeyAttributes",2119}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section_11",2072}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"lBB",1062}, - {""}, {""}, - {"cloudsAbbreviation4Trend4",456}, - {""}, {""}, {""}, - {"windUnitsTrend4",2456}, - {""}, {""}, {""}, {""}, - {"superblockExtensionAddress",2196}, - {""}, {""}, {""}, - {"oneMinuteMeanMaximumRVR4",1564}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"cloudsCode3Trend4",511}, - {""}, - {"endHourTrend1",744}, - {""}, - {"runwayExtentOfContaminationState4",1892}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"endYearTrend1",766}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode1Trend3",500}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"cloudsCode1Trend2",499}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"coordAveraging3",587}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"coordAveraging2",586}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_local_35",1660}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation3Trend4",451}, - {""}, {""}, {""}, - {"cfVarNameLegacyECMF",420}, - {"is_chemical_srcsink",1032}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation2Trend4",446}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsCode3Trend3",510}, - {""}, {""}, {""}, - {"runwayExtentOfContaminationState3",1891}, - {"numberOfBitsUsedForTheScaledGroupLengths",1392}, - {""}, {""}, {""}, {""}, - {"padding_loc9_1",1654}, - {"cloudsCode2Trend4",506}, - {"padding_loc7_1",1653}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfEarthMajorAxis",1952}, - {""}, - {"cloudsCode3Trend2",509}, - {""}, {""}, - {"scaledValueOfEarthMinorAxis",1953}, - {"runwayExtentOfContaminationState2",1890}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsCode1Trend1",498}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"beginMonthTrend3",353}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"runwayDesignatorRVR3",1879}, - {"padding_loc6_1",1652}, - {""}, {""}, {""}, {""}, - {"experimentVersionNumber2",797}, - {""}, - {"windGustTrend4",2445}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"beginMonthTrend1",351}, - {""}, {""}, - {"padding_loc5_1",1651}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"runwayDesignatorRVR2",1878}, - {""}, {""}, - {"cloudsCode4Trend4",516}, - {""}, {""}, {""}, - {"scaledValueOfMinorAxisOfOblateSpheroidEarth",1962}, - {""}, {""}, {""}, {""}, {""}, - {"padding_grid90_1",1605}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"beginMonthTrend4",354}, - {"cloudsAbbreviation1Trend4",441}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"latitudeOfSouthEastCornerOfArea",1087}, - {""}, {""}, {""}, {""}, - {"cloudsCode3Trend1",508}, - {""}, {""}, {""}, - {"runwayExtentOfContaminationState1",1889}, - {""}, {""}, {""}, {""}, - {"cloudsAbbreviation4Trend3",455}, - {""}, {""}, {""}, - {"windUnitsTrend3",2455}, - {"XpInGridLengths",274}, - {"FMULTM",66}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"oneMinuteMeanMaximumRVR3",1563}, - {""}, {""}, {""}, {""}, {""}, - {"************_EXPERIMENT_************",2}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode2Trend3",505}, - {""}, {""}, {""}, - {"cloudsAbbreviation4Trend2",454}, - {""}, {""}, {""}, - {"windUnitsTrend2",2454}, - {"CCCC",20}, - {""}, {""}, {""}, {""}, {""}, - {"extractAreaLongitudeRank",809}, - {""}, {"oneMinuteMeanMaximumRVR2",1562}, - {""}, - {"coordAveraging1",585}, - {""}, - {"cloudsCode2Trend2",504}, + {""}, {""}, {""}, {""}, {""}, + {"experimentVersionNumber2",797}, + {"cloudsCode1Trend3",500}, + {"Time_Range_One_E3",251}, + {""}, {""}, {""}, + {"mixedCoordinateDefinition",1326}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"hoursAfterDataCutoff",956}, + {"padding_loc30_1",1642}, + {""}, + {"runwayExtentOfContaminationState2",1889}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"uvRelativeToGrid",2379}, + {"padding_local1_31",1657}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"superblockExtensionAddress",2195}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfMinorAxisOfOblateSpheroidEarth",1961}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsCode1Trend2",499}, + {"Time_Range_One_E2",250}, + {""}, + {"qualityValueAssociatedWithParameter",1777}, + {""}, {""}, {""}, {""}, + {"scaledValueOfEarthMajorAxis",1951}, + {"RVR3_1",224}, + {""}, {""}, {""}, + {"scaledValueOfEarthMinorAxis",1952}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"beginMonthTrend2",352}, - {""}, {""}, {""}, {""}, {""}, - {"Minute_E4",162}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"ccsdsBlockSize",391}, - {""}, {""}, {""}, - {"cloudsCode4Trend3",515}, + {"Hour_E3",84}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"cloudsCode4Trend2",514}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"experimentVersionNumber1",796}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"cloudsAbbreviation3Trend3",450}, - {""}, - {"cloudsCode2Trend1",503}, - {""}, {""}, {""}, - {"runwayDesignatorRVR1",1877}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation2Trend3",445}, - {""}, - {"padding_loc50_1",1650}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"TYPE_PF",247}, + {"padding_loc13_5",1611}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"cloudsAbbreviation3Trend2",449}, {""}, {""}, {""}, - {"missingValueManagementUsed",1323}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"************_ENSEMBLE_**************",1}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation2Trend2",444}, - {""}, {""}, - {"numberOfGridUsed",1436}, - {"qualityValueAssociatedWithParameter",1778}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"windGustTrend3",2444}, - {"cloudsCode4Trend1",513}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfUpperWavePeriodLimit",1940}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation4Trend1",453}, - {"windGustTrend2",2443}, - {""}, - {"TYPE_FX",244}, - {"windUnitsTrend1",2453}, - {""}, - {"padding_local11_1",1656}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"oneMinuteMeanMaximumRVR1",1561}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"Local_Number_Members_Possible_E4",137}, - {"Local_Number_Members_Missing_E4",133}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"cloudsAbbreviation1Trend3",440}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"TYPE_OR",246}, + {"padding_grid5_1",1603}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"RVR2_1",223}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation1Trend2",439}, + {"typicalYearOfCentury",2334}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"numberOfPointsAlongYAxis",1469}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"LSTCUM",100}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetBSection6",1529}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"windGustTrend1",2441}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_local_7_1",1661}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Hour_E2",83}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ccsdsCompressionOptionsMask",392}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Minute_E3",161}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"cloudsAbbreviation3Trend1",448}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Minute_E2",160}, + {"resolutionAndComponentFlags7",1847}, {""}, - {"cloudsAbbreviation2Trend1",443}, - {""}, {""}, - {"Local_Number_Members_Possible_E3",136}, - {"Local_Number_Members_Missing_E3",132}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"Local_Number_Members_Possible_E2",135}, - {"Local_Number_Members_Missing_E2",131}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"windGustTrend1",2442}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Ensemble_Identifier_E4",54}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ICEFieldsUsed",86}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather1Present",1725}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation1Trend1",438}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractAreaLatitudeRank",808}, - {""}, {""}, {""}, {""}, - {"cloudsBase1Trend4",461}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ceilingAndVisibilityOKTrend4",399}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Ensemble_Identifier_E3",53}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"isCavokTrend4",1016}, - {""}, {""}, {""}, {""}, {""}, - {"Ensemble_Identifier_E2",52}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"RENAME",221}, - {""}, {"oneMinuteMeanMinimumRVR4",1568}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase3Trend4",471}, + {"padding_grid1_1",1598}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"paramIdECMF",1670}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfLowerWavePeriodLimit",1959}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"padding_loc14_1",1612}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfParametersUsedForClustering",1458}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"latitudeOfSouthEastCornerOfArea",1087}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"offsetBeforePV",1534}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"is_chemical_srcsink",1032}, + {""}, {""}, {""}, + {"padding_loc191_1",1620}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc191_2",1621}, + {""}, {""}, + {"extractDateTimeDayStart",815}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"beginMonthTrend1",351}, + {"missingValueManagementUsed",1323}, + {""}, {""}, {""}, {""}, {""}, + {"beginMonthTrend2",352}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"padding_loc13_1",1607}, + {""}, + {"cloudsCode2Trend4",506}, + {""}, + {"padding_sec4_1",1666}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"XpInGridLengths",274}, + {""}, {""}, {""}, + {"oneMinuteMeanMinimumRVR3",1567}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"cloudsBaseCoded4Trend1",493}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc17_2",1616}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc191_3",1622}, + {""}, {""}, + {"padding_loc12_1",1606}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"beginMonthTrend3",353}, + {""}, {""}, {""}, + {"numberOfReforecastYearsInModelClimate",1477}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase1Trend3",460}, + {"cloudsCode2Trend3",505}, + {"skipExtraKeyAttributes",2118}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ceilingAndVisibilityOKTrend4",399}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayExtentOfContaminationState1",1888}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"oneMinuteMeanMinimumRVR2",1566}, + {""}, {""}, {""}, + {"cloudsCode3Trend4",511}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"cloudsCode1Trend1",498}, + {""}, {""}, + {"unitsLegacyECMF",2352}, + {""}, {""}, {""}, + {"cloudsCode2Trend2",504}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Extra_Data_FreeFormat_0_none",56}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"listOfWaveDirectionSequenceParameters",1146}, + {""}, {""}, {""}, {""}, {""}, + {"isCavok",1012}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"RVR1_1",222}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"isCavokTrend4",1016}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode3Trend3",510}, {"Number_Combination_Ensembles_1_none",203}, + {""}, + {"beginYearTrend1",355}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase1Trend2",459}, - {"FMULTE",65}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"YY",281}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"scaleFactorOfUpperWavePeriodLimit",1939}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"TYPE_FF",243}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"bufrHeaderSubCentre",381}, + {"cloudsCode3Trend2",509}, + {"offsetBBitmap",1527}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"TYPE_OF",245}, {""}, - {"cloudsBase3Trend3",470}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"cloudsBase2Trend4",466}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase3Trend2",469}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase1Trend1",458}, - {""}, {""}, - {"*********_EXTRA_DATA_***************",4}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {"ceilingAndVisibilityOKTrend3",398}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"endYearTrend1",766}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"latitudeOfThePolePointInDegrees",1097}, + {"hoursAfterDataCutoff",956}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"cloudsBase4Trend4",476}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfGridUsed",1436}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"padding_loc15_1",1614}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"biFourierPackingModeForAxes",361}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractAreaLongitudeRank",809}, + {""}, + {"isCavokTrend3",1015}, + {""}, {"ceilingAndVisibilityOKTrend2",397}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"isCavokTrend3",1015}, - {""}, {""}, - {"cloudsBase3Trend1",468}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"oneMinuteMeanMinimumRVR3",1567}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Extra_Data_FreeFormat_0_none",56}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"isCavokTrend2",1014}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase2Trend3",465}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"oneMinuteMeanMinimumRVR2",1566}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"cloudsBase2Trend2",464}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"LBC_Initial_Conditions",97}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"cloudsBase4Trend3",475}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"ECMWF_s",46}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase4Trend2",474}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"TYPE_CF",241}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"P_TACC",218}, + {""}, + {"numberInHorizontalCoordinates",1380}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractDateTimeDayEnd",813}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase2Trend1",463}, + {"beginMonthTrend4",354}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"latitudeOfTheSouthernPoleOfProjection",1098}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"rootGroupSymbolTableEntry",1851}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"versionNumberOfSuperblock",2405}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc23_1",1627}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ceilingAndVisibilityOKTrend1",396}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetBeforeBitmap",1531}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"isCavokTrend2",1014}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"padding_loc16_1",1615}, + {""}, + {"padding_loc27_2",1635}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase4Trend1",473}, + {"BUFR",18}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"oneMinuteMeanMaximumRVR1",1561}, + {""}, {""}, {""}, {""}, {""}, + {"experimentVersionNumber1",796}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"NB",175}, + {""}, {""}, + {"FMULTM",66}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"HourOfModelVersion",82}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode4Trend4",516}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode2Trend1",503}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"padding_loc37_2",1645}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Used_E4",141}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"extractAreaLatitudeRank",808}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc244_1",1628}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc244_2",1629}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"cloudsCode4Trend3",515}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode4Trend2",514}, + {""}, {""}, {""}, {""}, + {"cloudsCode3Trend1",508}, + {""}, + {"ECMWF",45}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc244_3",1630}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"TYPE_OR",246}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"TYPE_PF",247}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"RENAME",221}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"numberOfPointsAlongYAxisInCouplingArea",1470}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"altitudeOfTheCameraFromTheEarthsCentreMeasuredInUnitsOfTheEarthsRadius",307}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Used_E3",140}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ZLBASE",286}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"setBitsPerValue",2090}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ICPLSIZE",87}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Used_E2",139}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"TYPE_FX",244}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc26_1",1633}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cfNameLegacyECMF",417}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc21_1",1626}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"FMULTE",65}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"indexingTimeHH",981}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"X2InGridLengths",269}, + {""}, {""}, {""}, {""}, + {"oneMinuteMeanMinimumRVR1",1565}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"bufrHeaderSubCentre",381}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Ensemble_Combinat_Number_0_none_E4",49}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"unusedBitsInBitmap",2365}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"intervalBetweenTimes",1009}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ICEFieldsUsed",86}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"padding_loc245_1",1631}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc245_2",1632}, + {"LSTCUM",100}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"************_ENSEMBLE_**************",1}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"At_least__Or_Distribut_Proportion_Of",14}, + {""}, {""}, + {"Ensemble_Combinat_Number_0_none_E3",48}, + {""}, {""}, {""}, {"DIAG",25}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"isCavokTrend1",1013}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"oneMinuteMeanMinimumRVR1",1565}, + {"presentWeather3PresentTrend4",1739}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"runwayExtentOfContaminationCodeState4",1888}, - {""}, - {"Less_Than_Or_To_Overall_Distribution",122}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc19_2",1625}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"padding_loc18_2",1619}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"swapScanningY",2201}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"runwayExtentOfContaminationCodeState3",1887}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"padding_sec2_3",1665}, - {""}, {""}, {""}, {""}, {""}, - {"runwayExtentOfContaminationCodeState2",1886}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_sec2_2",1664}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc190_1",1620}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"octetAtWichPackedDataBegins",1520}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"padding_sec3_1",1666}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc2_2",1642}, - {""}, - {"padding_loc29_3",1640}, - {""}, {""}, {""}, - {"Threshold_Or_Distribution_0_no_1_yes",248}, - {"padding_loc18_1",1618}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_local1_1",1657}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayExtentOfContaminationCodeState1",1885}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"padding_grid4_1",1602}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc29_2",1639}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"padding_loc3_1",1648}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"padding_loc4_2",1649}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"extractDateTimeYearRank",831}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc30_2",1644}, - {""}, {""}, - {"GRIB",70}, - {"padding_grid1_2",1600}, - {""}, {""}, {""}, - {"scaledValueOfUpperWavePeriodLimit",1971}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"numberOfPointsAlongTheYAxis",1466}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc38_1",1647}, - {"numberOfVGridUsed",1499}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_local1_31",1658}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode4Trend1",513}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"RVR4_1",225}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"Hour_E4",85}, - {""}, {""}, - {"7777",5}, - {""}, {""}, {""}, {""}, {""}, - {"padding_sec2_1",1663}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"padding_grid3_1",1601}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractDateTimeHourRank",818}, - {"padding_loc10_1",1606}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"padding_loc2_1",1641}, - {""}, {""}, {""}, - {"padding_sec4_1",1667}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"X2InGridLengths",269}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc29_1",1638}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_grid50_1",1603}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Time_Range_One_E4",252}, - {""}, {""}, - {"padding_loc28_1",1637}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"padding_grid5_1",1604}, - {"RVR3_1",224}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfUsefulPointsAlongYAxis",1498}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc30_1",1643}, - {""}, {""}, {""}, - {"padding_grid1_1",1599}, - {""}, - {"RVR2_1",223}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"X1InGridLengths",267}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"extractDateTimeMinuteRank",821}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"TYPE_AN",240}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"RVR1_1",222}, - {""}, - {"Time_Range_One_E3",251}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Time_Range_One_E2",250}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Hour_E3",84}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"indexingTimeHH",981}, - {""}, {""}, {""}, {""}, - {"extractDateTimeMonthRank",824}, - {"padding_loc20_1",1626}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Missing_Model_LBC",163}, - {""}, {""}, {""}, - {"Hour_E2",83}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"gts_CCCC",932}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"GG",69}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"BBB",16}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"GRIBEditionNumber",74}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"presentWeather3PresentTrend4",1740}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"indexingTimeHHMM",982}, - {""}, {""}, {""}, {""}, {""}, - {"presentWeather2PresentTrend4",1735}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Ensemble_Combinat_Number_0_none_E4",49}, - {""}, {""}, {""}, {""}, - {"extractDateTimeDayRank",814}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather1PresentTrend4",1730}, - {"YpInGridLengths",285}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractDateTimeSecondRank",827}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"TYPE_FC",242}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Ensemble_Combinat_Number_0_none_E3",48}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {"Ensemble_Combinat_Number_0_none_E2",47}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"lastMonthUsedToBuildClimateMonth2",1069}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"presentWeather3PresentTrend3",1739}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"presentWeather2PresentTrend3",1734}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"presentWeather3PresentTrend2",1738}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"presentWeather2PresentTrend2",1733}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfBitsUsedForTheScaledGroupLengths",1392}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"presentWeather2PresentTrend4",1734}, {""}, {""}, {""}, {""}, - {"padding_loc13_4",1611}, + {"cloudsBase1Trend4",461}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"lastMonthUsedToBuildClimateMonth1",1068}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"presentWeather1PresentTrend3",1729}, - {""}, - {"genVertHeightCoords",897}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Model_LBC_Member_Identifier",169}, - {""}, {""}, {""}, {""}, - {"presentWeather1PresentTrend2",1728}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"presentWeather3PresentTrend1",1737}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc14_2",1614}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"presentWeather2PresentTrend1",1732}, - {""}, {""}, {""}, {""}, {""}, - {"INGRIB",90}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"precisionOfTheUnpackedSubset",1717}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extremeCounterClockwiseWindDirection",840}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather1PresentTrend1",1727}, - {""}, {""}, {""}, - {"padding_loc13_3",1610}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"padding_loc192_1",1624}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_loc13_2",1609}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_loc14_1",1613}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_loc191_3",1623}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_loc191_1",1621}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {"Original_Parameter_Iden_CodeTable2",209}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7546,75 +6948,79 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"padding_loc16_1",1616}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"padding_loc17_2",1617}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc13_5",1612}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_loc13_1",1608}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"padding_loc12_1",1607}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"padding_loc191_2",1622}, + {"ceilingAndVisibilityOKTrend1",396}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"NINT_RITZ_EXP",185}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc37_2",1646}, + {"cloudsBase1Trend3",460}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfBitsContainingEachPackedValue",1389}, + {"presentWeather3PresentTrend3",1738}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"cloudsBase1Trend2",459}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc15_1",1615}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"padding_loc26_1",1634}, + {"isCavokTrend1",1013}, + {"numberOfTensOfThousandsOfYearsOfOffset",1489}, + {""}, {""}, + {"presentWeather2PresentTrend3",1733}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc27_2",1636}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extremeValuesRVR4",844}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"runwayBrakingActionState4",1860}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc23_1",1628}, + {"padding_loc27_1",1634}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc37_1",1645}, + {"numberOfVGridUsed",1499}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"P_TACC",218}, + {""}, {""}, {""}, + {"runwayExtentOfContaminationCodeState4",1887}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"presentWeather3PresentTrend2",1737}, + {""}, {""}, {""}, {""}, + {"scaledValueOfUpperWavePeriodLimit",1970}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"X1InGridLengths",267}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractDateTimeDayEnd",813}, + {""}, {""}, {""}, + {"presentWeather2PresentTrend2",1732}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayExtentOfContaminationCodeState3",1886}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"padding_loc37_1",1644}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayExtentOfContaminationCodeState2",1885}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7629,21 +7035,189 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather1PresentTrend4",1729}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"cloudsBase2Trend4",466}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc21_1",1627}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"ECMWF_s",46}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"cloudsBase2Trend3",465}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfPointsAlongTheYAxis",1466}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"cloudsBase3Trend4",471}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"cloudsBase1Trend1",458}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase2Trend2",464}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather1PresentTrend3",1728}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"TYPE_AN",240}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsBase3Trend3",470}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"extremeValuesRVR4",844}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"YearOfModelVersion",282}, + {""}, {""}, {""}, {""}, + {"cloudsBase3Trend2",469}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather1PresentTrend2",1727}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"lastMonthUsedToBuildClimateMonth2",1069}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"Missing_Model_LBC",163}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"extremeValuesRVR3",843}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"runwayExtentOfContaminationCodeState1",1884}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"extremeValuesRVR2",842}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"NINT_RITZ_EXP",185}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"ccsdsBlockSize",391}, {""}, - {"padding_loc27_1",1635}, + {"Time_Range_Two_E4",255}, + {""}, {""}, {""}, {""}, {""}, + {"indexingTimeHHMM",982}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"TYPE_CF",241}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Time_Range_Two_E3",254}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"7777",5}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"Time_Range_Two_E2",253}, + {""}, {""}, {""}, + {"GG",69}, + {""}, {""}, {""}, {""}, + {"octetAtWichPackedDataBegins",1520}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase4Trend4",476}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase2Trend1",463}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase4Trend3",475}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"presentWeather3PresentTrend1",1736}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"extractDateTimeYearRank",831}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"extractDateTimeHourRank",818}, + {""}, + {"cloudsBase4Trend2",474}, + {""}, {""}, {""}, {""}, + {"cloudsBase3Trend1",468}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather2PresentTrend1",1731}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"lastMonthUsedToBuildClimateMonth1",1068}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7652,25 +7226,20 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Local_Number_Members_Used_E4",141}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"extremeValuesRVR1",841}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayBrakingActionState3",1859}, + {"numberOfUsefulPointsAlongYAxis",1498}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"runwayBrakingActionState2",1858}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7689,6 +7258,70 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractDateTimeMinuteRank",821}, + {""}, {""}, + {"CCCC",20}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractDateTimeMonthRank",824}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"swapScanningY",2200}, + {""}, {""}, + {"cloudsBase4Trend1",473}, + {""}, {""}, + {"genVertHeightCoords",897}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather1PresentTrend1",1726}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractDateTimeDayRank",814}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7698,51 +7331,196 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"GRIBEXSection1Problem",71}, - {""}, {""}, {""}, {""}, - {"Time_Range_Two_E4",255}, + {"runwayBrakingActionState4",1859}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"P_TAVG",219}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"bitsPerValueAndRepack",374}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"Local_Number_Members_Used_E3",140}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayBrakingActionState1",1857}, + {"precisionOfTheUnpackedSubset",1716}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"ExtremeValuesInMaximumRVR4",60}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"bitsPerValueAndRepack",374}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Local_Number_Members_Used_E2",139}, + {"runwayBrakingActionState3",1858}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"Time_Range_Two_E3",254}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Time_Range_Two_E2",253}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"meanValueRVR4",1300}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Y2InGridLengths",278}, + {"extractDateTimeSecondRank",827}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"ExtremeValuesInMaximumRVR3",59}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"YpInGridLengths",285}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"runwayBrakingActionState2",1857}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"Missing_Model_LBC_E4",166}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"LBC_Initial_Conditions",97}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ExtremeValuesInMaximumRVR2",58}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"meanValueRVR3",1299}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ExtremeValuesRVR4",64}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"Missing_Model_LBC_E3",165}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Model_LBC_Member_Identifier",169}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"meanValueRVR2",1298}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"ExtremeValuesRVR3",63}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Missing_Model_LBC_E2",164}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ExtremeValuesRVR2",62}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"lBB",1062}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Show_Combination_Ensem_E4_0_no_1_yes",232}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"Show_Combination_Ensem_E3_0_no_1_yes",231}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"Show_Combination_Ensem_E2_0_no_1_yes",230}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"YY",281}, + {""}, {""}, {""}, + {"gts_CCCC",932}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"TYPE_FC",242}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"GRIBEditionNumber",74}, + {""}, {""}, {""}, {""}, {""}, {"numberOfUnusedBitsAtEndOfSection3",1494}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7759,185 +7537,10 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Y1InGridLengths",276}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"P_TAVG",219}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"meanValueRVR3",1299}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"meanValueRVR2",1298}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"ExtremeValuesInMaximumRVR4",60}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc244_3",1631}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_loc244_1",1629}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"meanValueRVR1",1297}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_loc244_2",1630}, - {""}, {""}, {""}, {""}, - {"ExtremeValuesInMaximumRVR3",59}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"ExtremeValuesInMaximumRVR2",58}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"padding_loc245_1",1632}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"ExtremeValuesRVR4",64}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"ExtremeValuesInMaximumRVR1",57}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"padding_loc245_2",1633}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Missing_Model_LBC_E4",166}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"ExtremeValuesRVR3",63}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"ExtremeValuesRVR2",62}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {"ExtremeValuesRVR1",61}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7957,28 +7560,320 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"extremeCounterClockwiseWindDirection",840}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayBrakingActionState1",1856}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"At_least__Or_Distribut_Proportion_Of",14}, + {"ExtremeValuesInMaximumRVR1",57}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Y2InGridLengths",278}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"meanValueRVR1",1297}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"BUDG",17}, + {"GRIB",70}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Y1InGridLengths",276}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"GRIBEXSection1Problem",71}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"NINT_LOG10_RITZ",184}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Missing_Model_LBC_E3",165}, + {"AEC_PAD_RSI_OPTION_MASK",11}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"Missing_Model_LBC_E2",164}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"Used_Model_LBC",259}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7991,6 +7886,154 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"BUDG",17}, + {""}, {""}, + {"INGRIB",90}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Used_Model_LBC",259}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {"numberOfBitsUsedForTheGroupWidths",1391}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8044,6 +8087,8 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"BBB",16}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8099,23 +8144,7 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"GRIBEXShBugPresent",72}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {"GRIBEX_boustrophedonic",73}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8148,8 +8177,6 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"NINT_LOG10_RITZ",184}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8232,8 +8259,6 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"Show_Combination_Ensem_E4_0_no_1_yes",232}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8256,284 +8281,102 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Show_Combination_Ensem_E3_0_no_1_yes",231}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"GRIBEXShBugPresent",72}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Show_Combination_Ensem_E2_0_no_1_yes",230}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"AEC_PAD_RSI_OPTION_MASK",11}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"GRIB_DEPTH",75}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8543,146 +8386,8 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Used_Model_LBC_E4",262}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8698,35 +8403,16 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Used_Model_LBC_E4",262}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"GRIB_LATITUDE",76}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {"Used_Model_LBC_E3",261}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {"Used_Model_LBC_E2",260}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8768,321 +8454,7 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"GRIB_LONGITUDE",77}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"AEC_RESTRICTED_OPTION_MASK",12}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"AEC_DATA_SIGNED_OPTION_MASK",10}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -9310,128 +8682,6 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"AEC_DATA_3BYTE_OPTION_MASK",7}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -9475,121 +8725,181 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"GRIB_LATITUDE",76}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"AEC_RESTRICTED_OPTION_MASK",12}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {"AEC_DATA_MSB_OPTION_MASK",8}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -9795,6 +9105,8 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"AEC_DATA_PREPROCESS_OPTION_MASK",9}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -9810,7 +9122,24 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"AEC_DATA_PREPROCESS_OPTION_MASK",9} + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"GRIB_LONGITUDE",77} }; const struct grib_keys_hash * diff --git a/tests/keys b/tests/keys index 2177ad243..b31272383 100644 --- a/tests/keys +++ b/tests/keys @@ -1571,922 +1571,921 @@ oneMinuteMeanMinimumRVR1,1565 oneMinuteMeanMinimumRVR2,1566 oneMinuteMeanMinimumRVR3,1567 oneMinuteMeanMinimumRVR4,1568 -oneThousand,1569 -oper,1570 -operStream,1571 -operatingMode,1572 -operationalForecastCluster,1573 -optimisationTime,1574 -optimizeScaleFactor,1575 -optionalData,1576 -opttime,1577 -orderOfSPD,1578 -orderOfSpatialDifferencing,1579 -orientationOfTheGrid,1580 -orientationOfTheGridInDegrees,1581 -origin,1582 -originOfPostProcessing,1583 -originalParameterNumber,1584 -originalParameterTableNumber,1585 -originalSubCentreIdentifier,1586 -originatingCentre,1587 -originatingCentreOfAnalysis,1588 -originatingClass,1589 -originatorLocalTemplate,1590 -originatorLocalTemplateNumber,1591 -overlayTemplate,1592 -overlayTemplateNumber,1593 -pack,1594 -packedValues,1595 -packingError,1596 -packingType,1597 -padding,1598 -padding_grid1_1,1599 -padding_grid1_2,1600 -padding_grid3_1,1601 -padding_grid4_1,1602 -padding_grid50_1,1603 -padding_grid5_1,1604 -padding_grid90_1,1605 -padding_loc10_1,1606 -padding_loc12_1,1607 -padding_loc13_1,1608 -padding_loc13_2,1609 -padding_loc13_3,1610 -padding_loc13_4,1611 -padding_loc13_5,1612 -padding_loc14_1,1613 -padding_loc14_2,1614 -padding_loc15_1,1615 -padding_loc16_1,1616 -padding_loc17_2,1617 -padding_loc18_1,1618 -padding_loc18_2,1619 -padding_loc190_1,1620 -padding_loc191_1,1621 -padding_loc191_2,1622 -padding_loc191_3,1623 -padding_loc192_1,1624 -padding_loc19_2,1625 -padding_loc20_1,1626 -padding_loc21_1,1627 -padding_loc23_1,1628 -padding_loc244_1,1629 -padding_loc244_2,1630 -padding_loc244_3,1631 -padding_loc245_1,1632 -padding_loc245_2,1633 -padding_loc26_1,1634 -padding_loc27_1,1635 -padding_loc27_2,1636 -padding_loc28_1,1637 -padding_loc29_1,1638 -padding_loc29_2,1639 -padding_loc29_3,1640 -padding_loc2_1,1641 -padding_loc2_2,1642 -padding_loc30_1,1643 -padding_loc30_2,1644 -padding_loc37_1,1645 -padding_loc37_2,1646 -padding_loc38_1,1647 -padding_loc3_1,1648 -padding_loc4_2,1649 -padding_loc50_1,1650 -padding_loc5_1,1651 -padding_loc6_1,1652 -padding_loc7_1,1653 -padding_loc9_1,1654 -padding_loc9_2,1655 -padding_local11_1,1656 -padding_local1_1,1657 -padding_local1_31,1658 -padding_local40_1,1659 -padding_local_35,1660 -padding_local_7_1,1661 -padding_sec1_loc,1662 -padding_sec2_1,1663 -padding_sec2_2,1664 -padding_sec2_3,1665 -padding_sec3_1,1666 -padding_sec4_1,1667 -paleontologicalOffset,1668 -param,1669 -paramId,1670 -paramIdECMF,1671 -paramIdLegacyECMF,1672 -param_value_max,1673 -param_value_min,1674 -parameter,1675 -parameterCategory,1676 -parameterCode,1677 -parameterDiscipline,1678 -parameterIndicator,1679 -parameterName,1680 -parameterNumber,1681 -parameterUnits,1682 -parameters,1683 -parametersVersion,1684 -partitionItems,1685 -partitionNumber,1686 -partitionTable,1687 -partitions,1688 -pastTendencyRVR1,1689 -pastTendencyRVR2,1690 -pastTendencyRVR3,1691 -pastTendencyRVR4,1692 -patch_precip_fp,1693 -pentagonalResolutionParameterJ,1694 -pentagonalResolutionParameterK,1695 -pentagonalResolutionParameterM,1696 -percentileValue,1697 -periodOfTime,1698 -periodOfTimeIntervals,1699 -perturbationNumber,1700 -perturbedType,1701 -phase,1702 -physicalFlag1,1703 -physicalFlag2,1704 -physicalMeaningOfVerticalCoordinate,1705 -pl,1706 -platform,1707 -plusOneinOrdersOfSPD,1708 -points,1709 -postAuxiliary,1710 -postAuxiliaryArrayPresent,1711 -postProcessing,1712 -powerOfTenUsedToScaleClimateWeight,1713 -preBitmapValues,1714 -preProcessingParameter,1715 -precision,1716 -precisionOfTheUnpackedSubset,1717 -predefined_grid,1718 -predefined_grid_values,1719 -preferLocalConcepts,1720 -present,1721 -presentTrend1,1722 -presentTrend2,1723 -presentTrend3,1724 -presentTrend4,1725 -presentWeather1Present,1726 -presentWeather1PresentTrend1,1727 -presentWeather1PresentTrend2,1728 -presentWeather1PresentTrend3,1729 -presentWeather1PresentTrend4,1730 -presentWeather2Present,1731 -presentWeather2PresentTrend1,1732 -presentWeather2PresentTrend2,1733 -presentWeather2PresentTrend3,1734 -presentWeather2PresentTrend4,1735 -presentWeather3Present,1736 -presentWeather3PresentTrend1,1737 -presentWeather3PresentTrend2,1738 -presentWeather3PresentTrend3,1739 -presentWeather3PresentTrend4,1740 -pressureLevel,1741 -pressureUnits,1742 -primaryBitmap,1743 -primaryMissingValue,1744 -primaryMissingValueSubstitute,1745 -probContinous,1746 -probPoint,1747 -probProductDefinition,1748 -probabilityType,1749 -probabilityTypeName,1750 -process,1751 -produceLargeConstantFields,1752 -product,1753 -productDefinition,1754 -productDefinitionTemplateNumber,1755 -productDefinitionTemplateNumberInternal,1756 -productIdentifier,1757 -productType,1758 -productionStatusOfProcessedData,1759 -projSourceString,1760 -projString,1761 -projTargetString,1762 -projectLocalTemplate,1763 -projectLocalTemplateNumber,1764 -projectionCenterFlag,1765 -projectionCentreFlag,1766 -pv,1767 -pvlLocation,1768 -qfe,1769 -qfePresent,1770 -qfeUnits,1771 -qnh,1772 -qnhAPresent,1773 -qnhPresent,1774 -qnhUnits,1775 -qualityControl,1776 -qualityControlIndicator,1777 -qualityValueAssociatedWithParameter,1778 -quantile,1779 -quantileValue,1780 -radialAngularSpacing,1781 -radials,1782 -radius,1783 -radiusInMetres,1784 -radiusOfCentralCluster,1785 -radiusOfClusterDomain,1786 -radiusOfTheEarth,1787 -range,1788 -rangeBinSpacing,1789 -rdbDateTime,1790 -rdbSubtype,1791 -rdbType,1792 -rdb_key,1793 -rdbtime,1794 -rdbtimeDate,1795 -rdbtimeDay,1796 -rdbtimeHour,1797 -rdbtimeMinute,1798 -rdbtimeMonth,1799 -rdbtimeSecond,1800 -rdbtimeTime,1801 -rdbtimeYear,1802 -realPart,1803 -realPartOf00,1804 -recDateTime,1805 -recentWeather,1806 -recentWeatherTry,1807 -rectime,1808 -rectimeDay,1809 -rectimeHour,1810 -rectimeMinute,1811 -rectimeSecond,1812 -reducedGrid,1813 -refdate,1814 -reference,1815 -referenceDate,1816 -referenceForGroupLengths,1817 -referenceForGroupWidths,1818 -referenceOfLengths,1819 -referenceOfWidths,1820 -referencePeriodList,1821 -referenceReflectivityForEchoTop,1822 -referenceSampleInterval,1823 -referenceStep,1824 -referenceValue,1825 -referenceValueError,1826 -reflectivityCalibrationConstant,1827 -remarkPresent,1828 -reportType,1829 -representationMode,1830 -representationType,1831 -representativeMember,1832 -reserved,1833 -reserved1,1834 -reserved2,1835 -reserved3,1836 -reservedNeedNotBePresent,1837 -reservedOctet,1838 -reservedSection2,1839 -reservedSection3,1840 -reservedSection4,1841 -resolutionAndComponentFlags,1842 -resolutionAndComponentFlags1,1843 -resolutionAndComponentFlags2,1844 -resolutionAndComponentFlags3,1845 -resolutionAndComponentFlags4,1846 -resolutionAndComponentFlags6,1847 -resolutionAndComponentFlags7,1848 -resolutionAndComponentFlags8,1849 -restricted,1850 -rootGroupObjectHeaderAddress,1851 -rootGroupSymbolTableEntry,1852 -rootTablesDir,1853 -roundedMarsLatitude,1854 -roundedMarsLevelist,1855 -roundedMarsLongitude,1856 -runwayBrakingActionState1,1857 -runwayBrakingActionState2,1858 -runwayBrakingActionState3,1859 -runwayBrakingActionState4,1860 -runwayDepositCodeState1,1861 -runwayDepositCodeState2,1862 -runwayDepositCodeState3,1863 -runwayDepositCodeState4,1864 -runwayDepositState1,1865 -runwayDepositState2,1866 -runwayDepositState3,1867 -runwayDepositState4,1868 -runwayDepthOfDepositCodeState1,1869 -runwayDepthOfDepositCodeState2,1870 -runwayDepthOfDepositCodeState3,1871 -runwayDepthOfDepositCodeState4,1872 -runwayDepthOfDepositState1,1873 -runwayDepthOfDepositState2,1874 -runwayDepthOfDepositState3,1875 -runwayDepthOfDepositState4,1876 -runwayDesignatorRVR1,1877 -runwayDesignatorRVR2,1878 -runwayDesignatorRVR3,1879 -runwayDesignatorRVR4,1880 -runwayDesignatorState1,1881 -runwayDesignatorState2,1882 -runwayDesignatorState3,1883 -runwayDesignatorState4,1884 -runwayExtentOfContaminationCodeState1,1885 -runwayExtentOfContaminationCodeState2,1886 -runwayExtentOfContaminationCodeState3,1887 -runwayExtentOfContaminationCodeState4,1888 -runwayExtentOfContaminationState1,1889 -runwayExtentOfContaminationState2,1890 -runwayExtentOfContaminationState3,1891 -runwayExtentOfContaminationState4,1892 -runwayFrictionCodeValueState1,1893 -runwayFrictionCodeValueState2,1894 -runwayFrictionCodeValueState3,1895 -runwayFrictionCodeValueState4,1896 -runwayFrictionCoefficientCodeState1,1897 -runwayFrictionCoefficientCodeState2,1898 -runwayFrictionCoefficientCodeState3,1899 -runwayFrictionCoefficientCodeState4,1900 -runwayFrictionCoefficientState1,1901 -runwayFrictionCoefficientState2,1902 -runwayFrictionCoefficientState3,1903 -runwayFrictionCoefficientState4,1904 -runwaySideCodeState1,1905 -runwaySideCodeState2,1906 -runwaySideCodeState3,1907 -runwaySideCodeState4,1908 -runwayState,1909 -sampleSizeOfModelClimate,1910 -sampleSizeOfReferencePeriod,1911 -satelliteID,1912 -satelliteIdentifier,1913 -satelliteNumber,1914 -satelliteSeries,1915 -scaleFactorAtReferencePoint,1916 -scaleFactorOfAdditionalParameterForReferencePeriod,1917 -scaleFactorOfCentralWaveNumber,1918 -scaleFactorOfDistanceFromEnsembleMean,1919 -scaleFactorOfDistributionFunctionParameter,1920 -scaleFactorOfEarthMajorAxis,1921 -scaleFactorOfEarthMinorAxis,1922 -scaleFactorOfFirstFixedSurface,1923 -scaleFactorOfFirstSize,1924 -scaleFactorOfFirstWavelength,1925 -scaleFactorOfLengthOfSemiMajorAxis,1926 -scaleFactorOfLengthOfSemiMinorAxis,1927 -scaleFactorOfLowerLimit,1928 -scaleFactorOfLowerWavePeriodLimit,1929 -scaleFactorOfMajorAxisOfOblateSpheroidEarth,1930 -scaleFactorOfMinorAxisOfOblateSpheroidEarth,1931 -scaleFactorOfPrimeMeridianOffset,1932 -scaleFactorOfRadiusOfSphericalEarth,1933 -scaleFactorOfSecondFixedSurface,1934 -scaleFactorOfSecondSize,1935 -scaleFactorOfSecondWavelength,1936 -scaleFactorOfStandardDeviation,1937 -scaleFactorOfStandardDeviationInTheCluster,1938 -scaleFactorOfUpperLimit,1939 -scaleFactorOfUpperWavePeriodLimit,1940 -scaleFactorOfWaveDirectionSequenceParameter,1941 -scaleFactorOfWaveDirections,1942 -scaleFactorOfWaveFrequencies,1943 -scaleFactorOfWaveFrequencySequenceParameter,1944 -scaleValuesBy,1945 -scaledDirections,1946 -scaledFrequencies,1947 -scaledValueOfAdditionalParameterForReferencePeriod,1948 -scaledValueOfCentralWaveNumber,1949 -scaledValueOfDistanceFromEnsembleMean,1950 -scaledValueOfDistributionFunctionParameter,1951 -scaledValueOfEarthMajorAxis,1952 -scaledValueOfEarthMinorAxis,1953 -scaledValueOfFirstFixedSurface,1954 -scaledValueOfFirstSize,1955 -scaledValueOfFirstWavelength,1956 -scaledValueOfLengthOfSemiMajorAxis,1957 -scaledValueOfLengthOfSemiMinorAxis,1958 -scaledValueOfLowerLimit,1959 -scaledValueOfLowerWavePeriodLimit,1960 -scaledValueOfMajorAxisOfOblateSpheroidEarth,1961 -scaledValueOfMinorAxisOfOblateSpheroidEarth,1962 -scaledValueOfPrimeMeridianOffset,1963 -scaledValueOfRadiusOfSphericalEarth,1964 -scaledValueOfSecondFixedSurface,1965 -scaledValueOfSecondSize,1966 -scaledValueOfSecondWavelength,1967 -scaledValueOfStandardDeviation,1968 -scaledValueOfStandardDeviationInTheCluster,1969 -scaledValueOfUpperLimit,1970 -scaledValueOfUpperWavePeriodLimit,1971 -scaledValueOfWaveDirectionSequenceParameter,1972 -scaledValueOfWaveFrequencySequenceParameter,1973 -scaledValuesOfWaveDirections,1974 -scaledValuesOfWaveFrequencies,1975 -scalingFactorForFrequencies,1976 -scanPosition,1977 -scanningMode,1978 -scanningMode4,1979 -scanningMode5,1980 -scanningMode6,1981 -scanningMode7,1982 -scanningMode8,1983 -scanningModeForOneDiamond,1984 -sd,1985 -second,1986 -secondDimension,1987 -secondDimensionCoordinateValueDefinition,1988 -secondDimensionPhysicalSignificance,1989 -secondLatitude,1990 -secondLatitudeInDegrees,1991 -secondOfEndOfOverallTimeInterval,1992 -secondOfForecast,1993 -secondOfForecastUsedInLocalTime,1994 -secondOfModelVersion,1995 -secondOfStartOfReferencePeriod,1996 -secondOrderFlags,1997 -secondOrderOfDifferentWidth,1998 -secondOrderValuesDifferentWidths,1999 -secondSize,2000 -secondaryBitMap,2001 -secondaryBitmap,2002 -secondaryBitmapPresent,2003 -secondaryBitmaps,2004 -secondaryBitmapsCount,2005 -secondaryBitmapsSize,2006 -secondaryMissingValue,2007 -secondaryMissingValueSubstitute,2008 -secondsOfAnalysis,2009 -secondsOfReference,2010 -section,2011 -section0Length,2012 -section0Pointer,2013 -section1,2014 -section10Length,2015 -section10Pointer,2016 -section11Length,2017 -section11Pointer,2018 -section1Flags,2019 -section1Length,2020 -section1Padding,2021 -section1Pointer,2022 -section2Length,2023 -section2Padding,2024 -section2Pointer,2025 -section2Present,2026 -section2Used,2027 -section3Flags,2028 -section3Length,2029 -section3Padding,2030 -section3Pointer,2031 -section3UniqueIdentifier,2032 -section4,2033 -section4Length,2034 -section4Padding,2035 -section4Pointer,2036 -section4UniqueIdentifier,2037 -section5,2038 -section5Length,2039 -section5Pointer,2040 -section5UniqueIdentifier,2041 -section6,2042 -section6Length,2043 -section6Pointer,2044 -section6UniqueIdentifier,2045 -section7,2046 -section7Length,2047 -section7Pointer,2048 -section7UniqueIdentifier,2049 -section8,2050 -section8Length,2051 -section8Pointer,2052 -section8UniqueIdentifier,2053 -section9Length,2054 -section9Pointer,2055 -section9UniqueIdentifier,2056 -sectionLengthLimitForEnsembles,2057 -sectionLengthLimitForProbability,2058 -sectionNumber,2059 -sectionPosition,2060 -section_01,2061 -section_02,2062 -section_03,2063 -section_04,2064 -section_05,2065 -section_06,2066 -section_07,2067 -section_08,2068 -section_09,2069 -section_1,2070 -section_10,2071 -section_11,2072 -section_2,2073 -section_3,2074 -section_4,2075 -section_5,2076 -section_6,2077 -section_7,2078 -section_8,2079 -selectStepTemplateInstant,2080 -selectStepTemplateInterval,2081 -selectedDay,2082 -selectedFcIndex,2083 -selectedHour,2084 -selectedMinute,2085 -selectedMonth,2086 -selectedSecond,2087 -selectedYear,2088 -sensitiveAreaDomain,2089 -sequences,2090 -setBitsPerValue,2091 -setCalendarId,2092 -setDecimalPrecision,2093 -setLocalDefinition,2094 -setToMissingIfOutOfRange,2095 -sfc_levtype,2096 -shapeOfTheEarth,2097 -shapeOfVerificationArea,2098 -shortName,2099 -shortNameECMF,2100 -shortNameLegacyECMF,2101 -short_name,2102 -signature,2103 -significanceOfReferenceDateAndTime,2104 -significanceOfReferenceTime,2105 -simpleThinningMissingRadius,2106 -simpleThinningSkip,2107 -simpleThinningStart,2108 -siteElevation,2109 -siteId,2110 -siteLatitude,2111 -siteLongitude,2112 -sizeOfLength,2113 -sizeOfOffsets,2114 -sizeOfPostAuxiliaryArray,2115 -sizeOfPostAuxiliaryArrayPlusOne,2116 -skew,2117 -skewness,2118 -skipExtraKeyAttributes,2119 -sort,2120 -sourceOfGridDefinition,2121 -sourceSinkChemicalPhysicalProcess,2122 -southEastLatitudeOfLPOArea,2123 -southEastLatitudeOfVerficationArea,2124 -southEastLongitudeOfLPOArea,2125 -southEastLongitudeOfVerficationArea,2126 -southLatitudeOfCluster,2127 -southLatitudeOfDomainOfTubing,2128 -southPoleOnProjectionPlane,2129 -southernLatitudeOfClusterDomain,2130 -southernLatitudeOfDomain,2131 -sp1,2132 -sp2,2133 -sp3,2134 -spaceUnitFlag,2135 -spacingOfBinsAlongRadials,2136 -spare,2137 -spare1,2138 -spare2,2139 -spare3,2140 -spare4,2141 -spatialProcessing,2142 -spatialSmoothingOfProduct,2143 -spectralDataRepresentationMode,2144 -spectralDataRepresentationType,2145 -spectralMode,2146 -spectralType,2147 -sphericalHarmonics,2148 -standardDeviation,2149 -standardParallel,2150 -standardParallelInDegrees,2151 -standardParallelInMicrodegrees,2152 -startDateOfReferencePeriod,2153 -startOfHeaders,2154 -startOfMessage,2155 -startOfRange,2156 -startStep,2157 -startStepInHours,2158 -startTimeStep,2159 -startingAzimuth,2160 -statisticalProcess,2161 -statisticalProcessesList,2162 -statistics,2163 -status,2164 -step,2165 -stepForClustering,2166 -stepHumanReadable,2167 -stepInHours,2168 -stepRange,2169 -stepRangeInHours,2170 -stepType,2171 -stepTypeForConversion,2172 -stepTypeInternal,2173 -stepUnits,2174 -stepZero,2175 -stream,2176 -streamOfAnalysis,2177 -stretchingFactor,2178 -stretchingFactorScaled,2179 -stringValues,2180 -subCentre,2181 -subDefinitions1,2182 -subDefinitions2,2183 -subLocalDefinition1,2184 -subLocalDefinition2,2185 -subLocalDefinitionLength1,2186 -subLocalDefinitionLength2,2187 -subLocalDefinitionNumber1,2188 -subLocalDefinitionNumber2,2189 -subSetJ,2190 -subSetK,2191 -subSetM,2192 -subcentreOfAnalysis,2193 -subdivisionsOfBasicAngle,2194 -suiteName,2195 -superblockExtensionAddress,2196 -swapScanningAlternativeRows,2197 -swapScanningLat,2198 -swapScanningLon,2199 -swapScanningX,2200 -swapScanningY,2201 -system,2202 -systemNumber,2203 -t,2204 -table2Version,2205 -tableCode,2206 -tableNumber,2207 -tableReference,2208 -tablesLocalDir,2209 -tablesMasterDir,2210 -tablesVersion,2211 -tablesVersionLatest,2212 -tablesVersionLatestOfficial,2213 -targetCompressionRatio,2214 -td,2215 -tempPressureUnits,2216 -temperature,2217 -temperatureAndDewpointPresent,2218 -templatesLocalDir,2219 -templatesMasterDir,2220 -theHindcastMarsStream,2221 -theMessage,2222 -thisExperimentVersionNumber,2223 -thisMarsClass,2224 -thisMarsStream,2225 -thisMarsType,2226 -thousand,2227 -three,2228 -threshold,2229 -thresholdIndicator,2230 -tiggeCentre,2231 -tiggeLAMName,2232 -tiggeLocalVersion,2233 -tiggeModel,2234 -tiggeSection,2235 -tiggeSuiteID,2236 -tigge_name,2237 -tigge_short_name,2238 -tileClassification,2239 -tileIndex,2240 -time,2241 -timeCoordinateDefinition,2242 -timeDomainTemplate,2243 -timeDomainTemplateNumber,2244 -timeIncrement,2245 -timeIncrementBetweenSuccessiveFields,2246 -timeOfAnalysis,2247 -timeOfForecast,2248 -timeOfForecastUsedInLocalTime,2249 -timeOfModelVersion,2250 -timeOfReference,2251 -timeRangeIndicator,2252 -timeRangeIndicatorFromStepRange,2253 -timeUnitFlag,2254 -timerepres,2255 -topLevel,2256 -total,2257 -totalAerosolBinsNumbers,2258 -totalInitialConditions,2259 -totalLength,2260 -totalNumber,2261 -totalNumberOfClusters,2262 -totalNumberOfDataValuesMissingInStatisticalProcess,2263 -totalNumberOfDirections,2264 -totalNumberOfForecastProbabilities,2265 -totalNumberOfFrequencies,2266 -totalNumberOfGridPoints,2267 -totalNumberOfIterations,2268 -totalNumberOfQuantiles,2269 -totalNumberOfRepetitions,2270 -totalNumberOfTileAttributePairs,2271 -totalNumberOfTubes,2272 -totalNumberOfValuesInUnpackedSubset,2273 -totalNumberOfWaveDirections,2274 -totalNumberOfWaveFrequencies,2275 -totalNumberOfdimensions,2276 -treatmentOfMissingData,2277 -true,2278 -trueLengthOfLastGroup,2279 -truncateDegrees,2280 -truncateLaplacian,2281 -tsectionNumber3,2282 -tsectionNumber4,2283 -tsectionNumber5,2284 -tubeDomain,2285 -tubeNumber,2286 -two,2287 -twoOrdersOfSPD,2288 -type,2289 -typeOfAnalysis,2290 -typeOfAuxiliaryInformation,2291 -typeOfCalendar,2292 -typeOfCompressionUsed,2293 -typeOfDistributionFunction,2294 -typeOfEnsembleForecast,2295 -typeOfEnsembleMember,2296 -typeOfFirstFixedSurface,2297 -typeOfGeneratingProcess,2298 -typeOfGrid,2299 -typeOfHorizontalLine,2300 -typeOfIntervalForFirstAndSecondSize,2301 -typeOfIntervalForFirstAndSecondWavelength,2302 -typeOfLevel,2303 -typeOfLevelECMF,2304 -typeOfOriginalFieldValues,2305 -typeOfPacking,2306 -typeOfPostProcessing,2307 -typeOfPreProcessing,2308 -typeOfProcessedData,2309 -typeOfReferenceDataset,2310 -typeOfRelationToReferenceDataset,2311 -typeOfSSTFieldUsed,2312 -typeOfSecondFixedSurface,2313 -typeOfSizeInterval,2314 -typeOfStatisticalPostProcessingOfEnsembleMembers,2315 -typeOfStatisticalProcessing,2316 -typeOfStatisticalProcessingForTimeRangeForReferencePeriod,2317 -typeOfTimeIncrement,2318 -typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing,2319 -typeOfWaveDirectionSequence,2320 -typeOfWaveFrequencySequence,2321 -typeOfWavePeriodInterval,2322 -typeOfWavelengthInterval,2323 -typicalCentury,2324 -typicalDate,2325 -typicalDateTime,2326 -typicalDay,2327 -typicalHour,2328 -typicalMinute,2329 -typicalMonth,2330 -typicalSecond,2331 -typicalTime,2332 -typicalYear,2333 -typicalYear2,2334 -typicalYearOfCentury,2335 -uco,2336 -ucs,2337 -uerraLocalVersion,2338 -uerraSection,2339 -unexpandedDescriptors,2340 -unexpandedDescriptorsEncoded,2341 -unitOfOffsetFromReferenceTime,2342 -unitOfTime,2343 -unitOfTimeIncrement,2344 -unitOfTimeRange,2345 -units,2346 -unitsBias,2347 -unitsConversionOffset,2348 -unitsConversionScaleFactor,2349 -unitsDecimalScaleFactor,2350 -unitsECMF,2351 -unitsFactor,2352 -unitsLegacyECMF,2353 -unitsOfFirstFixedSurface,2354 -unitsOfSecondFixedSurface,2355 -unknown,2356 -unpack,2357 -unpackedError,2358 -unpackedSubsetPrecision,2359 -unpackedValues,2360 -unsignedIntegers,2361 -unstructuredGrid,2362 -unstructuredGridSubtype,2363 -unstructuredGridType,2364 -unstructuredGridUUID,2365 -unusedBitsInBitmap,2366 -updateSequenceNumber,2367 -upperLimit,2368 -upperRange,2369 -upperThreshold,2370 -upperThresholdValue,2371 -userDateEnd,2372 -userDateStart,2373 -userDateTimeEnd,2374 -userDateTimeStart,2375 -userTimeEnd,2376 -userTimeStart,2377 -uuidOfHGrid,2378 -uuidOfVGrid,2379 -uvRelativeToGrid,2380 -validityDate,2381 -validityTime,2382 -values,2383 -variationOfVisibility,2384 -variationOfVisibilityDirection,2385 -variationOfVisibilityDirectionAngle,2386 -variationOfVisibilityDirectionTrend1,2387 -variationOfVisibilityDirectionTrend2,2388 -variationOfVisibilityDirectionTrend3,2389 -variationOfVisibilityDirectionTrend4,2390 -variationOfVisibilityTrend1,2391 -variationOfVisibilityTrend2,2392 -variationOfVisibilityTrend3,2393 -variationOfVisibilityTrend4,2394 -varno,2395 -verificationDate,2396 -verificationMonth,2397 -verificationYear,2398 -verifyingMonth,2399 -version,2400 -versionNumOfFilesFreeSpaceStorage,2401 -versionNumOfRootGroupSymbolTableEntry,2402 -versionNumOfSharedHeaderMessageFormat,2403 -versionNumberOfExperimentalSuite,2404 -versionNumberOfGribLocalTables,2405 -versionNumberOfSuperblock,2406 -versionOfModelClimate,2407 -verticalCoordinate,2408 -verticalCoordinateDefinition,2409 -verticalDomainTemplate,2410 -verticalDomainTemplateNumber,2411 -verticalVisibility,2412 -verticalVisibilityCoded,2413 -visibility,2414 -visibilityInKilometresTrend1,2415 -visibilityInKilometresTrend2,2416 -visibilityInKilometresTrend3,2417 -visibilityInKilometresTrend4,2418 -visibilityTrend1,2419 -visibilityTrend2,2420 -visibilityTrend3,2421 -visibilityTrend4,2422 -waveDirectionNumber,2423 -waveDomain,2424 -waveFrequencyNumber,2425 -waveLevType,2426 -weightAppliedToClimateMonth1,2427 -westLongitudeOfCluster,2428 -westLongitudeOfDomainOfTubing,2429 -westernLongitudeOfClusterDomain,2430 -westernLongitudeOfDomain,2431 -widthOfFirstOrderValues,2432 -widthOfLengths,2433 -widthOfSPD,2434 -widthOfWidths,2435 -windDirection,2436 -windDirectionTrend1,2437 -windDirectionTrend2,2438 -windDirectionTrend3,2439 -windDirectionTrend4,2440 -windGust,2441 -windGustTrend1,2442 -windGustTrend2,2443 -windGustTrend3,2444 -windGustTrend4,2445 -windPresent,2446 -windSpeed,2447 -windSpeedTrend1,2448 -windSpeedTrend2,2449 -windSpeedTrend3,2450 -windSpeedTrend4,2451 -windUnits,2452 -windUnitsTrend1,2453 -windUnitsTrend2,2454 -windUnitsTrend3,2455 -windUnitsTrend4,2456 -windVariableDirection,2457 -windVariableDirectionTrend1,2458 -windVariableDirectionTrend2,2459 -windVariableDirectionTrend3,2460 -windVariableDirectionTrend4,2461 -wrongPadding,2462 -xCoordinateOfOriginOfSectorImage,2463 -xCoordinateOfSubSatellitePoint,2464 -xDirectionGridLength,2465 -xDirectionGridLengthInMetres,2466 -xDirectionGridLengthInMillimetres,2467 -xFirst,2468 -xLast,2469 -yCoordinateOfOriginOfSectorImage,2470 -yCoordinateOfSubSatellitePoint,2471 -yDirectionGridLength,2472 -yDirectionGridLengthInMetres,2473 -yDirectionGridLengthInMillimetres,2474 -yFirst,2475 -yLast,2476 -year,2477 -yearOfAnalysis,2478 -yearOfCentury,2479 -yearOfEndOfOverallTimeInterval,2480 -yearOfForecast,2481 -yearOfForecastUsedInLocalTime,2482 -yearOfModelVersion,2483 -yearOfReference,2484 -yearOfStartOfReferencePeriod,2485 -zero,2486 -zeros,2487 +oper,1569 +operStream,1570 +operatingMode,1571 +operationalForecastCluster,1572 +optimisationTime,1573 +optimizeScaleFactor,1574 +optionalData,1575 +opttime,1576 +orderOfSPD,1577 +orderOfSpatialDifferencing,1578 +orientationOfTheGrid,1579 +orientationOfTheGridInDegrees,1580 +origin,1581 +originOfPostProcessing,1582 +originalParameterNumber,1583 +originalParameterTableNumber,1584 +originalSubCentreIdentifier,1585 +originatingCentre,1586 +originatingCentreOfAnalysis,1587 +originatingClass,1588 +originatorLocalTemplate,1589 +originatorLocalTemplateNumber,1590 +overlayTemplate,1591 +overlayTemplateNumber,1592 +pack,1593 +packedValues,1594 +packingError,1595 +packingType,1596 +padding,1597 +padding_grid1_1,1598 +padding_grid1_2,1599 +padding_grid3_1,1600 +padding_grid4_1,1601 +padding_grid50_1,1602 +padding_grid5_1,1603 +padding_grid90_1,1604 +padding_loc10_1,1605 +padding_loc12_1,1606 +padding_loc13_1,1607 +padding_loc13_2,1608 +padding_loc13_3,1609 +padding_loc13_4,1610 +padding_loc13_5,1611 +padding_loc14_1,1612 +padding_loc14_2,1613 +padding_loc15_1,1614 +padding_loc16_1,1615 +padding_loc17_2,1616 +padding_loc18_1,1617 +padding_loc18_2,1618 +padding_loc190_1,1619 +padding_loc191_1,1620 +padding_loc191_2,1621 +padding_loc191_3,1622 +padding_loc192_1,1623 +padding_loc19_2,1624 +padding_loc20_1,1625 +padding_loc21_1,1626 +padding_loc23_1,1627 +padding_loc244_1,1628 +padding_loc244_2,1629 +padding_loc244_3,1630 +padding_loc245_1,1631 +padding_loc245_2,1632 +padding_loc26_1,1633 +padding_loc27_1,1634 +padding_loc27_2,1635 +padding_loc28_1,1636 +padding_loc29_1,1637 +padding_loc29_2,1638 +padding_loc29_3,1639 +padding_loc2_1,1640 +padding_loc2_2,1641 +padding_loc30_1,1642 +padding_loc30_2,1643 +padding_loc37_1,1644 +padding_loc37_2,1645 +padding_loc38_1,1646 +padding_loc3_1,1647 +padding_loc4_2,1648 +padding_loc50_1,1649 +padding_loc5_1,1650 +padding_loc6_1,1651 +padding_loc7_1,1652 +padding_loc9_1,1653 +padding_loc9_2,1654 +padding_local11_1,1655 +padding_local1_1,1656 +padding_local1_31,1657 +padding_local40_1,1658 +padding_local_35,1659 +padding_local_7_1,1660 +padding_sec1_loc,1661 +padding_sec2_1,1662 +padding_sec2_2,1663 +padding_sec2_3,1664 +padding_sec3_1,1665 +padding_sec4_1,1666 +paleontologicalOffset,1667 +param,1668 +paramId,1669 +paramIdECMF,1670 +paramIdLegacyECMF,1671 +param_value_max,1672 +param_value_min,1673 +parameter,1674 +parameterCategory,1675 +parameterCode,1676 +parameterDiscipline,1677 +parameterIndicator,1678 +parameterName,1679 +parameterNumber,1680 +parameterUnits,1681 +parameters,1682 +parametersVersion,1683 +partitionItems,1684 +partitionNumber,1685 +partitionTable,1686 +partitions,1687 +pastTendencyRVR1,1688 +pastTendencyRVR2,1689 +pastTendencyRVR3,1690 +pastTendencyRVR4,1691 +patch_precip_fp,1692 +pentagonalResolutionParameterJ,1693 +pentagonalResolutionParameterK,1694 +pentagonalResolutionParameterM,1695 +percentileValue,1696 +periodOfTime,1697 +periodOfTimeIntervals,1698 +perturbationNumber,1699 +perturbedType,1700 +phase,1701 +physicalFlag1,1702 +physicalFlag2,1703 +physicalMeaningOfVerticalCoordinate,1704 +pl,1705 +platform,1706 +plusOneinOrdersOfSPD,1707 +points,1708 +postAuxiliary,1709 +postAuxiliaryArrayPresent,1710 +postProcessing,1711 +powerOfTenUsedToScaleClimateWeight,1712 +preBitmapValues,1713 +preProcessingParameter,1714 +precision,1715 +precisionOfTheUnpackedSubset,1716 +predefined_grid,1717 +predefined_grid_values,1718 +preferLocalConcepts,1719 +present,1720 +presentTrend1,1721 +presentTrend2,1722 +presentTrend3,1723 +presentTrend4,1724 +presentWeather1Present,1725 +presentWeather1PresentTrend1,1726 +presentWeather1PresentTrend2,1727 +presentWeather1PresentTrend3,1728 +presentWeather1PresentTrend4,1729 +presentWeather2Present,1730 +presentWeather2PresentTrend1,1731 +presentWeather2PresentTrend2,1732 +presentWeather2PresentTrend3,1733 +presentWeather2PresentTrend4,1734 +presentWeather3Present,1735 +presentWeather3PresentTrend1,1736 +presentWeather3PresentTrend2,1737 +presentWeather3PresentTrend3,1738 +presentWeather3PresentTrend4,1739 +pressureLevel,1740 +pressureUnits,1741 +primaryBitmap,1742 +primaryMissingValue,1743 +primaryMissingValueSubstitute,1744 +probContinous,1745 +probPoint,1746 +probProductDefinition,1747 +probabilityType,1748 +probabilityTypeName,1749 +process,1750 +produceLargeConstantFields,1751 +product,1752 +productDefinition,1753 +productDefinitionTemplateNumber,1754 +productDefinitionTemplateNumberInternal,1755 +productIdentifier,1756 +productType,1757 +productionStatusOfProcessedData,1758 +projSourceString,1759 +projString,1760 +projTargetString,1761 +projectLocalTemplate,1762 +projectLocalTemplateNumber,1763 +projectionCenterFlag,1764 +projectionCentreFlag,1765 +pv,1766 +pvlLocation,1767 +qfe,1768 +qfePresent,1769 +qfeUnits,1770 +qnh,1771 +qnhAPresent,1772 +qnhPresent,1773 +qnhUnits,1774 +qualityControl,1775 +qualityControlIndicator,1776 +qualityValueAssociatedWithParameter,1777 +quantile,1778 +quantileValue,1779 +radialAngularSpacing,1780 +radials,1781 +radius,1782 +radiusInMetres,1783 +radiusOfCentralCluster,1784 +radiusOfClusterDomain,1785 +radiusOfTheEarth,1786 +range,1787 +rangeBinSpacing,1788 +rdbDateTime,1789 +rdbSubtype,1790 +rdbType,1791 +rdb_key,1792 +rdbtime,1793 +rdbtimeDate,1794 +rdbtimeDay,1795 +rdbtimeHour,1796 +rdbtimeMinute,1797 +rdbtimeMonth,1798 +rdbtimeSecond,1799 +rdbtimeTime,1800 +rdbtimeYear,1801 +realPart,1802 +realPartOf00,1803 +recDateTime,1804 +recentWeather,1805 +recentWeatherTry,1806 +rectime,1807 +rectimeDay,1808 +rectimeHour,1809 +rectimeMinute,1810 +rectimeSecond,1811 +reducedGrid,1812 +refdate,1813 +reference,1814 +referenceDate,1815 +referenceForGroupLengths,1816 +referenceForGroupWidths,1817 +referenceOfLengths,1818 +referenceOfWidths,1819 +referencePeriodList,1820 +referenceReflectivityForEchoTop,1821 +referenceSampleInterval,1822 +referenceStep,1823 +referenceValue,1824 +referenceValueError,1825 +reflectivityCalibrationConstant,1826 +remarkPresent,1827 +reportType,1828 +representationMode,1829 +representationType,1830 +representativeMember,1831 +reserved,1832 +reserved1,1833 +reserved2,1834 +reserved3,1835 +reservedNeedNotBePresent,1836 +reservedOctet,1837 +reservedSection2,1838 +reservedSection3,1839 +reservedSection4,1840 +resolutionAndComponentFlags,1841 +resolutionAndComponentFlags1,1842 +resolutionAndComponentFlags2,1843 +resolutionAndComponentFlags3,1844 +resolutionAndComponentFlags4,1845 +resolutionAndComponentFlags6,1846 +resolutionAndComponentFlags7,1847 +resolutionAndComponentFlags8,1848 +restricted,1849 +rootGroupObjectHeaderAddress,1850 +rootGroupSymbolTableEntry,1851 +rootTablesDir,1852 +roundedMarsLatitude,1853 +roundedMarsLevelist,1854 +roundedMarsLongitude,1855 +runwayBrakingActionState1,1856 +runwayBrakingActionState2,1857 +runwayBrakingActionState3,1858 +runwayBrakingActionState4,1859 +runwayDepositCodeState1,1860 +runwayDepositCodeState2,1861 +runwayDepositCodeState3,1862 +runwayDepositCodeState4,1863 +runwayDepositState1,1864 +runwayDepositState2,1865 +runwayDepositState3,1866 +runwayDepositState4,1867 +runwayDepthOfDepositCodeState1,1868 +runwayDepthOfDepositCodeState2,1869 +runwayDepthOfDepositCodeState3,1870 +runwayDepthOfDepositCodeState4,1871 +runwayDepthOfDepositState1,1872 +runwayDepthOfDepositState2,1873 +runwayDepthOfDepositState3,1874 +runwayDepthOfDepositState4,1875 +runwayDesignatorRVR1,1876 +runwayDesignatorRVR2,1877 +runwayDesignatorRVR3,1878 +runwayDesignatorRVR4,1879 +runwayDesignatorState1,1880 +runwayDesignatorState2,1881 +runwayDesignatorState3,1882 +runwayDesignatorState4,1883 +runwayExtentOfContaminationCodeState1,1884 +runwayExtentOfContaminationCodeState2,1885 +runwayExtentOfContaminationCodeState3,1886 +runwayExtentOfContaminationCodeState4,1887 +runwayExtentOfContaminationState1,1888 +runwayExtentOfContaminationState2,1889 +runwayExtentOfContaminationState3,1890 +runwayExtentOfContaminationState4,1891 +runwayFrictionCodeValueState1,1892 +runwayFrictionCodeValueState2,1893 +runwayFrictionCodeValueState3,1894 +runwayFrictionCodeValueState4,1895 +runwayFrictionCoefficientCodeState1,1896 +runwayFrictionCoefficientCodeState2,1897 +runwayFrictionCoefficientCodeState3,1898 +runwayFrictionCoefficientCodeState4,1899 +runwayFrictionCoefficientState1,1900 +runwayFrictionCoefficientState2,1901 +runwayFrictionCoefficientState3,1902 +runwayFrictionCoefficientState4,1903 +runwaySideCodeState1,1904 +runwaySideCodeState2,1905 +runwaySideCodeState3,1906 +runwaySideCodeState4,1907 +runwayState,1908 +sampleSizeOfModelClimate,1909 +sampleSizeOfReferencePeriod,1910 +satelliteID,1911 +satelliteIdentifier,1912 +satelliteNumber,1913 +satelliteSeries,1914 +scaleFactorAtReferencePoint,1915 +scaleFactorOfAdditionalParameterForReferencePeriod,1916 +scaleFactorOfCentralWaveNumber,1917 +scaleFactorOfDistanceFromEnsembleMean,1918 +scaleFactorOfDistributionFunctionParameter,1919 +scaleFactorOfEarthMajorAxis,1920 +scaleFactorOfEarthMinorAxis,1921 +scaleFactorOfFirstFixedSurface,1922 +scaleFactorOfFirstSize,1923 +scaleFactorOfFirstWavelength,1924 +scaleFactorOfLengthOfSemiMajorAxis,1925 +scaleFactorOfLengthOfSemiMinorAxis,1926 +scaleFactorOfLowerLimit,1927 +scaleFactorOfLowerWavePeriodLimit,1928 +scaleFactorOfMajorAxisOfOblateSpheroidEarth,1929 +scaleFactorOfMinorAxisOfOblateSpheroidEarth,1930 +scaleFactorOfPrimeMeridianOffset,1931 +scaleFactorOfRadiusOfSphericalEarth,1932 +scaleFactorOfSecondFixedSurface,1933 +scaleFactorOfSecondSize,1934 +scaleFactorOfSecondWavelength,1935 +scaleFactorOfStandardDeviation,1936 +scaleFactorOfStandardDeviationInTheCluster,1937 +scaleFactorOfUpperLimit,1938 +scaleFactorOfUpperWavePeriodLimit,1939 +scaleFactorOfWaveDirectionSequenceParameter,1940 +scaleFactorOfWaveDirections,1941 +scaleFactorOfWaveFrequencies,1942 +scaleFactorOfWaveFrequencySequenceParameter,1943 +scaleValuesBy,1944 +scaledDirections,1945 +scaledFrequencies,1946 +scaledValueOfAdditionalParameterForReferencePeriod,1947 +scaledValueOfCentralWaveNumber,1948 +scaledValueOfDistanceFromEnsembleMean,1949 +scaledValueOfDistributionFunctionParameter,1950 +scaledValueOfEarthMajorAxis,1951 +scaledValueOfEarthMinorAxis,1952 +scaledValueOfFirstFixedSurface,1953 +scaledValueOfFirstSize,1954 +scaledValueOfFirstWavelength,1955 +scaledValueOfLengthOfSemiMajorAxis,1956 +scaledValueOfLengthOfSemiMinorAxis,1957 +scaledValueOfLowerLimit,1958 +scaledValueOfLowerWavePeriodLimit,1959 +scaledValueOfMajorAxisOfOblateSpheroidEarth,1960 +scaledValueOfMinorAxisOfOblateSpheroidEarth,1961 +scaledValueOfPrimeMeridianOffset,1962 +scaledValueOfRadiusOfSphericalEarth,1963 +scaledValueOfSecondFixedSurface,1964 +scaledValueOfSecondSize,1965 +scaledValueOfSecondWavelength,1966 +scaledValueOfStandardDeviation,1967 +scaledValueOfStandardDeviationInTheCluster,1968 +scaledValueOfUpperLimit,1969 +scaledValueOfUpperWavePeriodLimit,1970 +scaledValueOfWaveDirectionSequenceParameter,1971 +scaledValueOfWaveFrequencySequenceParameter,1972 +scaledValuesOfWaveDirections,1973 +scaledValuesOfWaveFrequencies,1974 +scalingFactorForFrequencies,1975 +scanPosition,1976 +scanningMode,1977 +scanningMode4,1978 +scanningMode5,1979 +scanningMode6,1980 +scanningMode7,1981 +scanningMode8,1982 +scanningModeForOneDiamond,1983 +sd,1984 +second,1985 +secondDimension,1986 +secondDimensionCoordinateValueDefinition,1987 +secondDimensionPhysicalSignificance,1988 +secondLatitude,1989 +secondLatitudeInDegrees,1990 +secondOfEndOfOverallTimeInterval,1991 +secondOfForecast,1992 +secondOfForecastUsedInLocalTime,1993 +secondOfModelVersion,1994 +secondOfStartOfReferencePeriod,1995 +secondOrderFlags,1996 +secondOrderOfDifferentWidth,1997 +secondOrderValuesDifferentWidths,1998 +secondSize,1999 +secondaryBitMap,2000 +secondaryBitmap,2001 +secondaryBitmapPresent,2002 +secondaryBitmaps,2003 +secondaryBitmapsCount,2004 +secondaryBitmapsSize,2005 +secondaryMissingValue,2006 +secondaryMissingValueSubstitute,2007 +secondsOfAnalysis,2008 +secondsOfReference,2009 +section,2010 +section0Length,2011 +section0Pointer,2012 +section1,2013 +section10Length,2014 +section10Pointer,2015 +section11Length,2016 +section11Pointer,2017 +section1Flags,2018 +section1Length,2019 +section1Padding,2020 +section1Pointer,2021 +section2Length,2022 +section2Padding,2023 +section2Pointer,2024 +section2Present,2025 +section2Used,2026 +section3Flags,2027 +section3Length,2028 +section3Padding,2029 +section3Pointer,2030 +section3UniqueIdentifier,2031 +section4,2032 +section4Length,2033 +section4Padding,2034 +section4Pointer,2035 +section4UniqueIdentifier,2036 +section5,2037 +section5Length,2038 +section5Pointer,2039 +section5UniqueIdentifier,2040 +section6,2041 +section6Length,2042 +section6Pointer,2043 +section6UniqueIdentifier,2044 +section7,2045 +section7Length,2046 +section7Pointer,2047 +section7UniqueIdentifier,2048 +section8,2049 +section8Length,2050 +section8Pointer,2051 +section8UniqueIdentifier,2052 +section9Length,2053 +section9Pointer,2054 +section9UniqueIdentifier,2055 +sectionLengthLimitForEnsembles,2056 +sectionLengthLimitForProbability,2057 +sectionNumber,2058 +sectionPosition,2059 +section_01,2060 +section_02,2061 +section_03,2062 +section_04,2063 +section_05,2064 +section_06,2065 +section_07,2066 +section_08,2067 +section_09,2068 +section_1,2069 +section_10,2070 +section_11,2071 +section_2,2072 +section_3,2073 +section_4,2074 +section_5,2075 +section_6,2076 +section_7,2077 +section_8,2078 +selectStepTemplateInstant,2079 +selectStepTemplateInterval,2080 +selectedDay,2081 +selectedFcIndex,2082 +selectedHour,2083 +selectedMinute,2084 +selectedMonth,2085 +selectedSecond,2086 +selectedYear,2087 +sensitiveAreaDomain,2088 +sequences,2089 +setBitsPerValue,2090 +setCalendarId,2091 +setDecimalPrecision,2092 +setLocalDefinition,2093 +setToMissingIfOutOfRange,2094 +sfc_levtype,2095 +shapeOfTheEarth,2096 +shapeOfVerificationArea,2097 +shortName,2098 +shortNameECMF,2099 +shortNameLegacyECMF,2100 +short_name,2101 +signature,2102 +significanceOfReferenceDateAndTime,2103 +significanceOfReferenceTime,2104 +simpleThinningMissingRadius,2105 +simpleThinningSkip,2106 +simpleThinningStart,2107 +siteElevation,2108 +siteId,2109 +siteLatitude,2110 +siteLongitude,2111 +sizeOfLength,2112 +sizeOfOffsets,2113 +sizeOfPostAuxiliaryArray,2114 +sizeOfPostAuxiliaryArrayPlusOne,2115 +skew,2116 +skewness,2117 +skipExtraKeyAttributes,2118 +sort,2119 +sourceOfGridDefinition,2120 +sourceSinkChemicalPhysicalProcess,2121 +southEastLatitudeOfLPOArea,2122 +southEastLatitudeOfVerficationArea,2123 +southEastLongitudeOfLPOArea,2124 +southEastLongitudeOfVerficationArea,2125 +southLatitudeOfCluster,2126 +southLatitudeOfDomainOfTubing,2127 +southPoleOnProjectionPlane,2128 +southernLatitudeOfClusterDomain,2129 +southernLatitudeOfDomain,2130 +sp1,2131 +sp2,2132 +sp3,2133 +spaceUnitFlag,2134 +spacingOfBinsAlongRadials,2135 +spare,2136 +spare1,2137 +spare2,2138 +spare3,2139 +spare4,2140 +spatialProcessing,2141 +spatialSmoothingOfProduct,2142 +spectralDataRepresentationMode,2143 +spectralDataRepresentationType,2144 +spectralMode,2145 +spectralType,2146 +sphericalHarmonics,2147 +standardDeviation,2148 +standardParallel,2149 +standardParallelInDegrees,2150 +standardParallelInMicrodegrees,2151 +startDateOfReferencePeriod,2152 +startOfHeaders,2153 +startOfMessage,2154 +startOfRange,2155 +startStep,2156 +startStepInHours,2157 +startTimeStep,2158 +startingAzimuth,2159 +statisticalProcess,2160 +statisticalProcessesList,2161 +statistics,2162 +status,2163 +step,2164 +stepForClustering,2165 +stepHumanReadable,2166 +stepInHours,2167 +stepRange,2168 +stepRangeInHours,2169 +stepType,2170 +stepTypeForConversion,2171 +stepTypeInternal,2172 +stepUnits,2173 +stepZero,2174 +stream,2175 +streamOfAnalysis,2176 +stretchingFactor,2177 +stretchingFactorScaled,2178 +stringValues,2179 +subCentre,2180 +subDefinitions1,2181 +subDefinitions2,2182 +subLocalDefinition1,2183 +subLocalDefinition2,2184 +subLocalDefinitionLength1,2185 +subLocalDefinitionLength2,2186 +subLocalDefinitionNumber1,2187 +subLocalDefinitionNumber2,2188 +subSetJ,2189 +subSetK,2190 +subSetM,2191 +subcentreOfAnalysis,2192 +subdivisionsOfBasicAngle,2193 +suiteName,2194 +superblockExtensionAddress,2195 +swapScanningAlternativeRows,2196 +swapScanningLat,2197 +swapScanningLon,2198 +swapScanningX,2199 +swapScanningY,2200 +system,2201 +systemNumber,2202 +t,2203 +table2Version,2204 +tableCode,2205 +tableNumber,2206 +tableReference,2207 +tablesLocalDir,2208 +tablesMasterDir,2209 +tablesVersion,2210 +tablesVersionLatest,2211 +tablesVersionLatestOfficial,2212 +targetCompressionRatio,2213 +td,2214 +tempPressureUnits,2215 +temperature,2216 +temperatureAndDewpointPresent,2217 +templatesLocalDir,2218 +templatesMasterDir,2219 +theHindcastMarsStream,2220 +theMessage,2221 +thisExperimentVersionNumber,2222 +thisMarsClass,2223 +thisMarsStream,2224 +thisMarsType,2225 +thousand,2226 +three,2227 +threshold,2228 +thresholdIndicator,2229 +tiggeCentre,2230 +tiggeLAMName,2231 +tiggeLocalVersion,2232 +tiggeModel,2233 +tiggeSection,2234 +tiggeSuiteID,2235 +tigge_name,2236 +tigge_short_name,2237 +tileClassification,2238 +tileIndex,2239 +time,2240 +timeCoordinateDefinition,2241 +timeDomainTemplate,2242 +timeDomainTemplateNumber,2243 +timeIncrement,2244 +timeIncrementBetweenSuccessiveFields,2245 +timeOfAnalysis,2246 +timeOfForecast,2247 +timeOfForecastUsedInLocalTime,2248 +timeOfModelVersion,2249 +timeOfReference,2250 +timeRangeIndicator,2251 +timeRangeIndicatorFromStepRange,2252 +timeUnitFlag,2253 +timerepres,2254 +topLevel,2255 +total,2256 +totalAerosolBinsNumbers,2257 +totalInitialConditions,2258 +totalLength,2259 +totalNumber,2260 +totalNumberOfClusters,2261 +totalNumberOfDataValuesMissingInStatisticalProcess,2262 +totalNumberOfDirections,2263 +totalNumberOfForecastProbabilities,2264 +totalNumberOfFrequencies,2265 +totalNumberOfGridPoints,2266 +totalNumberOfIterations,2267 +totalNumberOfQuantiles,2268 +totalNumberOfRepetitions,2269 +totalNumberOfTileAttributePairs,2270 +totalNumberOfTubes,2271 +totalNumberOfValuesInUnpackedSubset,2272 +totalNumberOfWaveDirections,2273 +totalNumberOfWaveFrequencies,2274 +totalNumberOfdimensions,2275 +treatmentOfMissingData,2276 +true,2277 +trueLengthOfLastGroup,2278 +truncateDegrees,2279 +truncateLaplacian,2280 +tsectionNumber3,2281 +tsectionNumber4,2282 +tsectionNumber5,2283 +tubeDomain,2284 +tubeNumber,2285 +two,2286 +twoOrdersOfSPD,2287 +type,2288 +typeOfAnalysis,2289 +typeOfAuxiliaryInformation,2290 +typeOfCalendar,2291 +typeOfCompressionUsed,2292 +typeOfDistributionFunction,2293 +typeOfEnsembleForecast,2294 +typeOfEnsembleMember,2295 +typeOfFirstFixedSurface,2296 +typeOfGeneratingProcess,2297 +typeOfGrid,2298 +typeOfHorizontalLine,2299 +typeOfIntervalForFirstAndSecondSize,2300 +typeOfIntervalForFirstAndSecondWavelength,2301 +typeOfLevel,2302 +typeOfLevelECMF,2303 +typeOfOriginalFieldValues,2304 +typeOfPacking,2305 +typeOfPostProcessing,2306 +typeOfPreProcessing,2307 +typeOfProcessedData,2308 +typeOfReferenceDataset,2309 +typeOfRelationToReferenceDataset,2310 +typeOfSSTFieldUsed,2311 +typeOfSecondFixedSurface,2312 +typeOfSizeInterval,2313 +typeOfStatisticalPostProcessingOfEnsembleMembers,2314 +typeOfStatisticalProcessing,2315 +typeOfStatisticalProcessingForTimeRangeForReferencePeriod,2316 +typeOfTimeIncrement,2317 +typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing,2318 +typeOfWaveDirectionSequence,2319 +typeOfWaveFrequencySequence,2320 +typeOfWavePeriodInterval,2321 +typeOfWavelengthInterval,2322 +typicalCentury,2323 +typicalDate,2324 +typicalDateTime,2325 +typicalDay,2326 +typicalHour,2327 +typicalMinute,2328 +typicalMonth,2329 +typicalSecond,2330 +typicalTime,2331 +typicalYear,2332 +typicalYear2,2333 +typicalYearOfCentury,2334 +uco,2335 +ucs,2336 +uerraLocalVersion,2337 +uerraSection,2338 +unexpandedDescriptors,2339 +unexpandedDescriptorsEncoded,2340 +unitOfOffsetFromReferenceTime,2341 +unitOfTime,2342 +unitOfTimeIncrement,2343 +unitOfTimeRange,2344 +units,2345 +unitsBias,2346 +unitsConversionOffset,2347 +unitsConversionScaleFactor,2348 +unitsDecimalScaleFactor,2349 +unitsECMF,2350 +unitsFactor,2351 +unitsLegacyECMF,2352 +unitsOfFirstFixedSurface,2353 +unitsOfSecondFixedSurface,2354 +unknown,2355 +unpack,2356 +unpackedError,2357 +unpackedSubsetPrecision,2358 +unpackedValues,2359 +unsignedIntegers,2360 +unstructuredGrid,2361 +unstructuredGridSubtype,2362 +unstructuredGridType,2363 +unstructuredGridUUID,2364 +unusedBitsInBitmap,2365 +updateSequenceNumber,2366 +upperLimit,2367 +upperRange,2368 +upperThreshold,2369 +upperThresholdValue,2370 +userDateEnd,2371 +userDateStart,2372 +userDateTimeEnd,2373 +userDateTimeStart,2374 +userTimeEnd,2375 +userTimeStart,2376 +uuidOfHGrid,2377 +uuidOfVGrid,2378 +uvRelativeToGrid,2379 +validityDate,2380 +validityTime,2381 +values,2382 +variationOfVisibility,2383 +variationOfVisibilityDirection,2384 +variationOfVisibilityDirectionAngle,2385 +variationOfVisibilityDirectionTrend1,2386 +variationOfVisibilityDirectionTrend2,2387 +variationOfVisibilityDirectionTrend3,2388 +variationOfVisibilityDirectionTrend4,2389 +variationOfVisibilityTrend1,2390 +variationOfVisibilityTrend2,2391 +variationOfVisibilityTrend3,2392 +variationOfVisibilityTrend4,2393 +varno,2394 +verificationDate,2395 +verificationMonth,2396 +verificationYear,2397 +verifyingMonth,2398 +version,2399 +versionNumOfFilesFreeSpaceStorage,2400 +versionNumOfRootGroupSymbolTableEntry,2401 +versionNumOfSharedHeaderMessageFormat,2402 +versionNumberOfExperimentalSuite,2403 +versionNumberOfGribLocalTables,2404 +versionNumberOfSuperblock,2405 +versionOfModelClimate,2406 +verticalCoordinate,2407 +verticalCoordinateDefinition,2408 +verticalDomainTemplate,2409 +verticalDomainTemplateNumber,2410 +verticalVisibility,2411 +verticalVisibilityCoded,2412 +visibility,2413 +visibilityInKilometresTrend1,2414 +visibilityInKilometresTrend2,2415 +visibilityInKilometresTrend3,2416 +visibilityInKilometresTrend4,2417 +visibilityTrend1,2418 +visibilityTrend2,2419 +visibilityTrend3,2420 +visibilityTrend4,2421 +waveDirectionNumber,2422 +waveDomain,2423 +waveFrequencyNumber,2424 +waveLevType,2425 +weightAppliedToClimateMonth1,2426 +westLongitudeOfCluster,2427 +westLongitudeOfDomainOfTubing,2428 +westernLongitudeOfClusterDomain,2429 +westernLongitudeOfDomain,2430 +widthOfFirstOrderValues,2431 +widthOfLengths,2432 +widthOfSPD,2433 +widthOfWidths,2434 +windDirection,2435 +windDirectionTrend1,2436 +windDirectionTrend2,2437 +windDirectionTrend3,2438 +windDirectionTrend4,2439 +windGust,2440 +windGustTrend1,2441 +windGustTrend2,2442 +windGustTrend3,2443 +windGustTrend4,2444 +windPresent,2445 +windSpeed,2446 +windSpeedTrend1,2447 +windSpeedTrend2,2448 +windSpeedTrend3,2449 +windSpeedTrend4,2450 +windUnits,2451 +windUnitsTrend1,2452 +windUnitsTrend2,2453 +windUnitsTrend3,2454 +windUnitsTrend4,2455 +windVariableDirection,2456 +windVariableDirectionTrend1,2457 +windVariableDirectionTrend2,2458 +windVariableDirectionTrend3,2459 +windVariableDirectionTrend4,2460 +wrongPadding,2461 +xCoordinateOfOriginOfSectorImage,2462 +xCoordinateOfSubSatellitePoint,2463 +xDirectionGridLength,2464 +xDirectionGridLengthInMetres,2465 +xDirectionGridLengthInMillimetres,2466 +xFirst,2467 +xLast,2468 +yCoordinateOfOriginOfSectorImage,2469 +yCoordinateOfSubSatellitePoint,2470 +yDirectionGridLength,2471 +yDirectionGridLengthInMetres,2472 +yDirectionGridLengthInMillimetres,2473 +yFirst,2474 +yLast,2475 +year,2476 +yearOfAnalysis,2477 +yearOfCentury,2478 +yearOfEndOfOverallTimeInterval,2479 +yearOfForecast,2480 +yearOfForecastUsedInLocalTime,2481 +yearOfModelVersion,2482 +yearOfReference,2483 +yearOfStartOfReferencePeriod,2484 +zero,2485 +zeros,2486 From d6109cfb29be4d243e36e0e126243710872ac67f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 1 Aug 2023 14:34:58 +0000 Subject: [PATCH 070/372] Definitions: Fix code --- definitions/grib2/tables/local/ecmf/1/4.238.table | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/definitions/grib2/tables/local/ecmf/1/4.238.table b/definitions/grib2/tables/local/ecmf/1/4.238.table index 23a3468d8..54e4f9ab4 100644 --- a/definitions/grib2/tables/local/ecmf/1/4.238.table +++ b/definitions/grib2/tables/local/ecmf/1/4.238.table @@ -3,4 +3,4 @@ 193 193 Biomass burning 194 194 Settlements 195 195 Soil -196 195 Wild animals +196 196 Wild animals From bbbcce20b4fec7001424542e55a9e58a1bc28198 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 1 Aug 2023 14:48:55 +0000 Subject: [PATCH 071/372] ECC-1652: Improve error message re stepUnits --- src/grib_accessor_class_codetable.cc | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/grib_accessor_class_codetable.cc b/src/grib_accessor_class_codetable.cc index 6681ef23d..9ac580f85 100644 --- a/src/grib_accessor_class_codetable.cc +++ b/src/grib_accessor_class_codetable.cc @@ -636,11 +636,8 @@ static int pack_string(grib_accessor* a, const char* buffer, size_t* len) size_t size = 1; typedef int (*cmpproc)(const char*, const char*); -#ifndef ECCODES_ON_WINDOWS + cmpproc cmp = (a->flags & GRIB_ACCESSOR_FLAG_LOWERCASE) ? strcmp_nocase : strcmp; -#else - cmpproc cmp = (a->flags & GRIB_ACCESSOR_FLAG_LOWERCASE) ? stricmp : strcmp; -#endif if (!self->table_loaded) { self->table = load_table(a); /* may return NULL */ @@ -699,6 +696,19 @@ static int pack_string(grib_accessor* a, const char* buffer, size_t* len) return GRIB_SUCCESS; } } + + // ECC-1652: Failed. Now do a case-insensitive compare to give the user a hint + for (i = 0; i < table->size; i++) { + if (table->entries[i].abbreviation) { + if (strcmp_nocase(table->entries[i].abbreviation, buffer) == 0) { + grib_context_log(a->context, GRIB_LOG_ERROR, + "%s: No such code table entry: '%s' " + "(Did you mean '%s'?)", + a->name, buffer, table->entries[i].abbreviation); + } + } + } + return GRIB_ENCODING_ERROR; } From 49847aedf17bc5ce12484a0eb9eade6efb2b5d62 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 1 Aug 2023 14:55:22 +0000 Subject: [PATCH 072/372] ECC-1650: GRIB2: Update encoding for wave parameters with discipline=192 (Part 01) --- .../localConcepts/ecmf/cfVarName.legacy.def | 96 +++++++++++++++++++ .../grib2/localConcepts/ecmf/name.legacy.def | 96 +++++++++++++++++++ .../localConcepts/ecmf/paramId.legacy.def | 96 +++++++++++++++++++ .../localConcepts/ecmf/shortName.legacy.def | 96 +++++++++++++++++++ .../grib2/localConcepts/ecmf/units.legacy.def | 96 +++++++++++++++++++ 5 files changed, 480 insertions(+) diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def index 459bd6661..edf784bdc 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def @@ -1087,3 +1087,99 @@ parameterCategory = 162 ; parameterNumber = 113 ; } +#Period corresponding to maximum individual wave height +'tmax' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 217 ; +} +#Maximum individual wave height +'hmax' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 218 ; +} +#Model bathymetry +'wmb' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 219 ; +} +#Mean wave period based on first moment +'mp1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 220 ; +} +#Wave spectral directional width +'wdw' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 222 ; +} +#Mean wave period based on first moment for wind waves +'p1ww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 223 ; +} +#Mean wave period based on second moment for wind waves +'p2ww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 224 ; +} +#Wave spectral directional width for wind waves +'dwww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 225 ; +} +#Mean wave period based on first moment for swell +'p1ps' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 226 ; +} +#Mean wave period based on second moment for swell +'p2ps' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 227 ; +} +#Wave spectral directional width for swell +'dwps' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 228 ; +} +#Coefficient of drag with waves +'cdww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 233 ; +} +#Significant height of total swell +'shts' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 237 ; +} +#Mean period of total swell +'mpts' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 239 ; +} +#Mean square slope of waves +'msqs' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 244 ; +} +#Benjamin-Feir index +'bfi' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 253 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/name.legacy.def b/definitions/grib2/localConcepts/ecmf/name.legacy.def index 2ab7c2816..b18fd8905 100644 --- a/definitions/grib2/localConcepts/ecmf/name.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/name.legacy.def @@ -1087,3 +1087,99 @@ parameterCategory = 162 ; parameterNumber = 113 ; } +#Period corresponding to maximum individual wave height +'Period corresponding to maximum individual wave height' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 217 ; +} +#Maximum individual wave height +'Maximum individual wave height' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 218 ; +} +#Model bathymetry +'Model bathymetry' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 219 ; +} +#Mean wave period based on first moment +'Mean wave period based on first moment' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 220 ; +} +#Wave spectral directional width +'Wave spectral directional width' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 222 ; +} +#Mean wave period based on first moment for wind waves +'Mean wave period based on first moment for wind waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 223 ; +} +#Mean wave period based on second moment for wind waves +'Mean wave period based on second moment for wind waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 224 ; +} +#Wave spectral directional width for wind waves +'Wave spectral directional width for wind waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 225 ; +} +#Mean wave period based on first moment for swell +'Mean wave period based on first moment for swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 226 ; +} +#Mean wave period based on second moment for swell +'Mean wave period based on second moment for swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 227 ; +} +#Wave spectral directional width for swell +'Wave spectral directional width for swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 228 ; +} +#Coefficient of drag with waves +'Coefficient of drag with waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 233 ; +} +#Significant height of total swell +'Significant height of total swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 237 ; +} +#Mean period of total swell +'Mean period of total swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 239 ; +} +#Mean square slope of waves +'Mean square slope of waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 244 ; +} +#Benjamin-Feir index +'Benjamin-Feir index' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 253 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def index 36542f75a..8b8386cb1 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def @@ -1087,3 +1087,99 @@ parameterCategory = 162 ; parameterNumber = 113 ; } +#Period corresponding to maximum individual wave height +'140217' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 217 ; +} +#Maximum individual wave height +'140218' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 218 ; +} +#Model bathymetry +'140219' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 219 ; +} +#Mean wave period based on first moment +'140220' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 220 ; +} +#Wave spectral directional width +'140222' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 222 ; +} +#Mean wave period based on first moment for wind waves +'140223' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 223 ; +} +#Mean wave period based on second moment for wind waves +'140224' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 224 ; +} +#Wave spectral directional width for wind waves +'140225' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 225 ; +} +#Mean wave period based on first moment for swell +'140226' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 226 ; +} +#Mean wave period based on second moment for swell +'140227' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 227 ; +} +#Wave spectral directional width for swell +'140228' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 228 ; +} +#Coefficient of drag with waves +'140233' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 233 ; +} +#Significant height of total swell +'140237' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 237 ; +} +#Mean period of total swell +'140239' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 239 ; +} +#Mean square slope of waves +'140244' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 244 ; +} +#Benjamin-Feir index +'140253' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 253 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def index 87ce1ee34..7e8351c20 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def @@ -1087,3 +1087,99 @@ parameterCategory = 162 ; parameterNumber = 113 ; } +#Period corresponding to maximum individual wave height +'tmax' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 217 ; +} +#Maximum individual wave height +'hmax' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 218 ; +} +#Model bathymetry +'wmb' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 219 ; +} +#Mean wave period based on first moment +'mp1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 220 ; +} +#Wave spectral directional width +'wdw' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 222 ; +} +#Mean wave period based on first moment for wind waves +'p1ww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 223 ; +} +#Mean wave period based on second moment for wind waves +'p2ww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 224 ; +} +#Wave spectral directional width for wind waves +'dwww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 225 ; +} +#Mean wave period based on first moment for swell +'p1ps' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 226 ; +} +#Mean wave period based on second moment for swell +'p2ps' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 227 ; +} +#Wave spectral directional width for swell +'dwps' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 228 ; +} +#Coefficient of drag with waves +'cdww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 233 ; +} +#Significant height of total swell +'shts' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 237 ; +} +#Mean period of total swell +'mpts' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 239 ; +} +#Mean square slope of waves +'msqs' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 244 ; +} +#Benjamin-Feir index +'bfi' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 253 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/units.legacy.def b/definitions/grib2/localConcepts/ecmf/units.legacy.def index 027a7ffe8..6193f580a 100644 --- a/definitions/grib2/localConcepts/ecmf/units.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/units.legacy.def @@ -1087,3 +1087,99 @@ parameterCategory = 162 ; parameterNumber = 113 ; } +#Period corresponding to maximum individual wave height +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 217 ; +} +#Maximum individual wave height +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 218 ; +} +#Model bathymetry +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 219 ; +} +#Mean wave period based on first moment +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 220 ; +} +#Wave spectral directional width +'radians' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 222 ; +} +#Mean wave period based on first moment for wind waves +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 223 ; +} +#Mean wave period based on second moment for wind waves +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 224 ; +} +#Wave spectral directional width for wind waves +'radians' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 225 ; +} +#Mean wave period based on first moment for swell +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 226 ; +} +#Mean wave period based on second moment for swell +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 227 ; +} +#Wave spectral directional width for swell +'radians' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 228 ; +} +#Coefficient of drag with waves +'dimensionless' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 233 ; +} +#Significant height of total swell +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 237 ; +} +#Mean period of total swell +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 239 ; +} +#Mean square slope of waves +'dimensionless' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 244 ; +} +#Benjamin-Feir index +'dimensionless' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 253 ; +} From 1c78cabb88db9db540ded394ba85e664b0e80552 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 1 Aug 2023 15:22:08 +0000 Subject: [PATCH 073/372] ECC-1650: GRIB2: Update encoding for wave parameters with discipline=192 (Part 02) --- definitions/grib2/cfVarName.def | 96 +++++++++++++++++++ .../grib2/localConcepts/ecmf/cfVarName.def | 96 ------------------- definitions/grib2/localConcepts/ecmf/name.def | 96 ------------------- .../grib2/localConcepts/ecmf/paramId.def | 96 ------------------- .../grib2/localConcepts/ecmf/shortName.def | 96 ------------------- .../grib2/localConcepts/ecmf/units.def | 96 ------------------- definitions/grib2/name.def | 96 +++++++++++++++++++ definitions/grib2/paramId.def | 96 +++++++++++++++++++ definitions/grib2/shortName.def | 96 +++++++++++++++++++ definitions/grib2/units.def | 96 +++++++++++++++++++ 10 files changed, 480 insertions(+), 480 deletions(-) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index eb9039051..74c5aba3a 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -7010,12 +7010,78 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Period corresponding to maximum individual wave height +'tmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + } +#Maximum individual wave height +'hmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + } +#Model bathymetry +'wmb' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + } +#Mean wave period based on first moment +'mp1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + } #Mean zero-crossing wave period 'mp2' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 28 ; } +#Wave spectral directional width +'wdw' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + } +#Mean wave period based on first moment for wind waves +'p1ww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + } +#Mean wave period based on second moment for wind waves +'p2ww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + } +#Wave spectral directional width for wind waves +'dwww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + } +#Mean wave period based on first moment for swell +'p1ps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + } +#Mean wave period based on second moment for swell +'p2ps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + } +#Wave spectral directional width for swell +'dwps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + } #Significant height of combined wind waves and swell 'swh' = { discipline = 10 ; @@ -7040,6 +7106,12 @@ parameterCategory = 0 ; parameterNumber = 15 ; } +#Coefficient of drag with waves +'cdww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + } #Significant height of wind waves 'shww' = { discipline = 10 ; @@ -7058,18 +7130,42 @@ parameterCategory = 0 ; parameterNumber = 6 ; } +#Significant height of total swell +'shts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } #Mean direction of total swell 'mdts' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 74 ; } +#Mean period of total swell +'mpts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Mean square slope of waves +'msqs' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + } #2D wave spectra (single) 'd2fd' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 86 ; } +#Benjamin-Feir index +'bfi' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + } #Eastward sea water velocity 'uoe' = { discipline = 10 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index c54aaa707..6891ad253 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -16441,90 +16441,6 @@ parameterCategory = 140 ; parameterNumber = 200 ; } -#Period corresponding to maximum individual wave height -'tmax' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 217 ; - } -#Maximum individual wave height -'hmax' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 218 ; - } -#Model bathymetry -'wmb' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 219 ; - } -#Mean wave period based on first moment -'mp1' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 220 ; - } -#Wave spectral directional width -'wdw' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 222 ; - } -#Mean wave period based on first moment for wind waves -'p1ww' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 223 ; - } -#Mean wave period based on second moment for wind waves -'p2ww' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 224 ; - } -#Wave spectral directional width for wind waves -'dwww' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 225 ; - } -#Mean wave period based on first moment for swell -'p1ps' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 226 ; - } -#Mean wave period based on second moment for swell -'p2ps' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 227 ; - } -#Wave spectral directional width for swell -'dwps' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 228 ; - } -#Coefficient of drag with waves -'cdww' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 233 ; - } -#Significant height of total swell -'shts' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 237 ; - } -#Mean period of total swell -'mpts' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 239 ; - } #Standard deviation wave height 'sdhs' = { discipline = 192 ; @@ -16549,12 +16465,6 @@ parameterCategory = 140 ; parameterNumber = 243 ; } -#Mean square slope of waves -'msqs' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 244 ; - } #10 metre wind speed 'wind' = { discipline = 192 ; @@ -16597,12 +16507,6 @@ parameterCategory = 140 ; parameterNumber = 252 ; } -#Benjamin-Feir index -'bfi' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 253 ; - } #Wave spectral peakedness 'wsp' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index fe9584cec..859b3f864 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -16441,90 +16441,6 @@ parameterCategory = 140 ; parameterNumber = 200 ; } -#Period corresponding to maximum individual wave height -'Period corresponding to maximum individual wave height' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 217 ; - } -#Maximum individual wave height -'Maximum individual wave height' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 218 ; - } -#Model bathymetry -'Model bathymetry' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 219 ; - } -#Mean wave period based on first moment -'Mean wave period based on first moment' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 220 ; - } -#Wave spectral directional width -'Wave spectral directional width' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 222 ; - } -#Mean wave period based on first moment for wind waves -'Mean wave period based on first moment for wind waves' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 223 ; - } -#Mean wave period based on second moment for wind waves -'Mean wave period based on second moment for wind waves' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 224 ; - } -#Wave spectral directional width for wind waves -'Wave spectral directional width for wind waves' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 225 ; - } -#Mean wave period based on first moment for swell -'Mean wave period based on first moment for swell' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 226 ; - } -#Mean wave period based on second moment for swell -'Mean wave period based on second moment for swell' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 227 ; - } -#Wave spectral directional width for swell -'Wave spectral directional width for swell' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 228 ; - } -#Coefficient of drag with waves -'Coefficient of drag with waves' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 233 ; - } -#Significant height of total swell -'Significant height of total swell' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 237 ; - } -#Mean period of total swell -'Mean period of total swell' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 239 ; - } #Standard deviation wave height 'Standard deviation wave height' = { discipline = 192 ; @@ -16549,12 +16465,6 @@ parameterCategory = 140 ; parameterNumber = 243 ; } -#Mean square slope of waves -'Mean square slope of waves' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 244 ; - } #10 metre wind speed '10 metre wind speed' = { discipline = 192 ; @@ -16597,12 +16507,6 @@ parameterCategory = 140 ; parameterNumber = 252 ; } -#Benjamin-Feir index -'Benjamin-Feir index' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 253 ; - } #Wave spectral peakedness 'Wave spectral peakedness' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index 1a959e7ef..cc65d4b6d 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -16441,90 +16441,6 @@ parameterCategory = 140 ; parameterNumber = 200 ; } -#Period corresponding to maximum individual wave height -'140217' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 217 ; - } -#Maximum individual wave height -'140218' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 218 ; - } -#Model bathymetry -'140219' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 219 ; - } -#Mean wave period based on first moment -'140220' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 220 ; - } -#Wave spectral directional width -'140222' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 222 ; - } -#Mean wave period based on first moment for wind waves -'140223' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 223 ; - } -#Mean wave period based on second moment for wind waves -'140224' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 224 ; - } -#Wave spectral directional width for wind waves -'140225' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 225 ; - } -#Mean wave period based on first moment for swell -'140226' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 226 ; - } -#Mean wave period based on second moment for swell -'140227' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 227 ; - } -#Wave spectral directional width for swell -'140228' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 228 ; - } -#Coefficient of drag with waves -'140233' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 233 ; - } -#Significant height of total swell -'140237' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 237 ; - } -#Mean period of total swell -'140239' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 239 ; - } #Standard deviation wave height '140240' = { discipline = 192 ; @@ -16549,12 +16465,6 @@ parameterCategory = 140 ; parameterNumber = 243 ; } -#Mean square slope of waves -'140244' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 244 ; - } #10 metre wind speed '140245' = { discipline = 192 ; @@ -16597,12 +16507,6 @@ parameterCategory = 140 ; parameterNumber = 252 ; } -#Benjamin-Feir index -'140253' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 253 ; - } #Wave spectral peakedness '140254' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index 4469da383..2715cd717 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -16441,90 +16441,6 @@ parameterCategory = 140 ; parameterNumber = 200 ; } -#Period corresponding to maximum individual wave height -'tmax' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 217 ; - } -#Maximum individual wave height -'hmax' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 218 ; - } -#Model bathymetry -'wmb' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 219 ; - } -#Mean wave period based on first moment -'mp1' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 220 ; - } -#Wave spectral directional width -'wdw' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 222 ; - } -#Mean wave period based on first moment for wind waves -'p1ww' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 223 ; - } -#Mean wave period based on second moment for wind waves -'p2ww' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 224 ; - } -#Wave spectral directional width for wind waves -'dwww' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 225 ; - } -#Mean wave period based on first moment for swell -'p1ps' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 226 ; - } -#Mean wave period based on second moment for swell -'p2ps' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 227 ; - } -#Wave spectral directional width for swell -'dwps' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 228 ; - } -#Coefficient of drag with waves -'cdww' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 233 ; - } -#Significant height of total swell -'shts' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 237 ; - } -#Mean period of total swell -'mpts' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 239 ; - } #Standard deviation wave height 'sdhs' = { discipline = 192 ; @@ -16549,12 +16465,6 @@ parameterCategory = 140 ; parameterNumber = 243 ; } -#Mean square slope of waves -'msqs' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 244 ; - } #10 metre wind speed 'wind' = { discipline = 192 ; @@ -16597,12 +16507,6 @@ parameterCategory = 140 ; parameterNumber = 252 ; } -#Benjamin-Feir index -'bfi' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 253 ; - } #Wave spectral peakedness 'wsp' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index cb1656a5f..85e095918 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -16441,90 +16441,6 @@ parameterCategory = 140 ; parameterNumber = 200 ; } -#Period corresponding to maximum individual wave height -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 217 ; - } -#Maximum individual wave height -'m' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 218 ; - } -#Model bathymetry -'m' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 219 ; - } -#Mean wave period based on first moment -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 220 ; - } -#Wave spectral directional width -'radians' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 222 ; - } -#Mean wave period based on first moment for wind waves -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 223 ; - } -#Mean wave period based on second moment for wind waves -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 224 ; - } -#Wave spectral directional width for wind waves -'radians' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 225 ; - } -#Mean wave period based on first moment for swell -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 226 ; - } -#Mean wave period based on second moment for swell -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 227 ; - } -#Wave spectral directional width for swell -'radians' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 228 ; - } -#Coefficient of drag with waves -'dimensionless' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 233 ; - } -#Significant height of total swell -'m' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 237 ; - } -#Mean period of total swell -'s' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 239 ; - } #Standard deviation wave height 'm' = { discipline = 192 ; @@ -16549,12 +16465,6 @@ parameterCategory = 140 ; parameterNumber = 243 ; } -#Mean square slope of waves -'dimensionless' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 244 ; - } #10 metre wind speed 'm s**-1' = { discipline = 192 ; @@ -16597,12 +16507,6 @@ parameterCategory = 140 ; parameterNumber = 252 ; } -#Benjamin-Feir index -'dimensionless' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 253 ; - } #Wave spectral peakedness 'dimensionless' = { discipline = 192 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index 7b5d53dbe..c73c41051 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -7010,12 +7010,78 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Period corresponding to maximum individual wave height +'Period corresponding to maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + } +#Maximum individual wave height +'Maximum individual wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + } +#Model bathymetry +'Model bathymetry' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + } +#Mean wave period based on first moment +'Mean wave period based on first moment' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + } #Mean zero-crossing wave period 'Mean zero-crossing wave period' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 28 ; } +#Wave spectral directional width +'Wave spectral directional width' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + } +#Mean wave period based on first moment for wind waves +'Mean wave period based on first moment for wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + } +#Mean wave period based on second moment for wind waves +'Mean wave period based on second moment for wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + } +#Wave spectral directional width for wind waves +'Wave spectral directional width for wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + } +#Mean wave period based on first moment for swell +'Mean wave period based on first moment for swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + } +#Mean wave period based on second moment for swell +'Mean wave period based on second moment for swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + } +#Wave spectral directional width for swell +'Wave spectral directional width for swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + } #Significant height of combined wind waves and swell 'Significant height of combined wind waves and swell' = { discipline = 10 ; @@ -7040,6 +7106,12 @@ parameterCategory = 0 ; parameterNumber = 15 ; } +#Coefficient of drag with waves +'Coefficient of drag with waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + } #Significant height of wind waves 'Significant height of wind waves' = { discipline = 10 ; @@ -7058,18 +7130,42 @@ parameterCategory = 0 ; parameterNumber = 6 ; } +#Significant height of total swell +'Significant height of total swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } #Mean direction of total swell 'Mean direction of total swell' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 74 ; } +#Mean period of total swell +'Mean period of total swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Mean square slope of waves +'Mean square slope of waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + } #2D wave spectra (single) '2D wave spectra (single)' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 86 ; } +#Benjamin-Feir index +'Benjamin-Feir index' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + } #Eastward sea water velocity 'Eastward sea water velocity' = { discipline = 10 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 95e57d50c..5f5df44a5 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -7010,12 +7010,78 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Period corresponding to maximum individual wave height +'140217' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + } +#Maximum individual wave height +'140218' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + } +#Model bathymetry +'140219' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + } +#Mean wave period based on first moment +'140220' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + } #Mean zero-crossing wave period '140221' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 28 ; } +#Wave spectral directional width +'140222' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + } +#Mean wave period based on first moment for wind waves +'140223' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + } +#Mean wave period based on second moment for wind waves +'140224' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + } +#Wave spectral directional width for wind waves +'140225' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + } +#Mean wave period based on first moment for swell +'140226' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + } +#Mean wave period based on second moment for swell +'140227' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + } +#Wave spectral directional width for swell +'140228' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + } #Significant height of combined wind waves and swell '140229' = { discipline = 10 ; @@ -7040,6 +7106,12 @@ parameterCategory = 0 ; parameterNumber = 15 ; } +#Coefficient of drag with waves +'140233' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + } #Significant height of wind waves '140234' = { discipline = 10 ; @@ -7058,18 +7130,42 @@ parameterCategory = 0 ; parameterNumber = 6 ; } +#Significant height of total swell +'140237' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } #Mean direction of total swell '140238' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 74 ; } +#Mean period of total swell +'140239' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Mean square slope of waves +'140244' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + } #2D wave spectra (single) '140251' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 86 ; } +#Benjamin-Feir index +'140253' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + } #Eastward sea water velocity '151131' = { discipline = 10 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 1749997c6..cc160b195 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -7010,12 +7010,78 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Period corresponding to maximum individual wave height +'tmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + } +#Maximum individual wave height +'hmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + } +#Model bathymetry +'wmb' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + } +#Mean wave period based on first moment +'mp1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + } #Mean zero-crossing wave period 'mp2' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 28 ; } +#Wave spectral directional width +'wdw' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + } +#Mean wave period based on first moment for wind waves +'p1ww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + } +#Mean wave period based on second moment for wind waves +'p2ww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + } +#Wave spectral directional width for wind waves +'dwww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + } +#Mean wave period based on first moment for swell +'p1ps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + } +#Mean wave period based on second moment for swell +'p2ps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + } +#Wave spectral directional width for swell +'dwps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + } #Significant height of combined wind waves and swell 'swh' = { discipline = 10 ; @@ -7040,6 +7106,12 @@ parameterCategory = 0 ; parameterNumber = 15 ; } +#Coefficient of drag with waves +'cdww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + } #Significant height of wind waves 'shww' = { discipline = 10 ; @@ -7058,18 +7130,42 @@ parameterCategory = 0 ; parameterNumber = 6 ; } +#Significant height of total swell +'shts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } #Mean direction of total swell 'mdts' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 74 ; } +#Mean period of total swell +'mpts' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Mean square slope of waves +'msqs' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + } #2D wave spectra (single) '2dfd' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 86 ; } +#Benjamin-Feir index +'bfi' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + } #Eastward sea water velocity 'ocu' = { discipline = 10 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 432279fc3..793077870 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -7010,12 +7010,78 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Period corresponding to maximum individual wave height +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + } +#Maximum individual wave height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + } +#Model bathymetry +'m' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + } +#Mean wave period based on first moment +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + } #Mean zero-crossing wave period 's' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 28 ; } +#Wave spectral directional width +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + } +#Mean wave period based on first moment for wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + } +#Mean wave period based on second moment for wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + } +#Wave spectral directional width for wind waves +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + } +#Mean wave period based on first moment for swell +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + } +#Mean wave period based on second moment for swell +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + } +#Wave spectral directional width for swell +'radians' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 33 ; + } #Significant height of combined wind waves and swell 'm' = { discipline = 10 ; @@ -7040,6 +7106,12 @@ parameterCategory = 0 ; parameterNumber = 15 ; } +#Coefficient of drag with waves +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + } #Significant height of wind waves 'm' = { discipline = 10 ; @@ -7058,18 +7130,42 @@ parameterCategory = 0 ; parameterNumber = 6 ; } +#Significant height of total swell +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } #Mean direction of total swell 'degrees' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 74 ; } +#Mean period of total swell +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Mean square slope of waves +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + } #2D wave spectra (single) 'm**2 s radian**-1' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 86 ; } +#Benjamin-Feir index +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 44 ; + } #Eastward sea water velocity 'm s**-1' = { discipline = 10 ; From abb82ae981a9637180b73907c790b55ebe123015 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 1 Aug 2023 15:38:53 +0000 Subject: [PATCH 074/372] ECC-1651: GRIB2: Remove the encoding for wave parameters 3105 and 3106 --- definitions/grib2/cfVarName.def | 12 ------------ definitions/grib2/name.def | 12 ------------ definitions/grib2/paramId.def | 12 ------------ definitions/grib2/shortName.def | 12 ------------ definitions/grib2/units.def | 12 ------------ 5 files changed, 60 deletions(-) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index 74c5aba3a..19117c0d0 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -9448,18 +9448,6 @@ parameterCategory = 0 ; parameterNumber = 7 ; } -#Significant height of swell waves -'swell' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 8 ; - } -#Mean period of swell waves -'swper' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 9 ; - } #Secondary wave direction 'dirsw' = { discipline = 10 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index c73c41051..6cb18eaf6 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -9448,18 +9448,6 @@ parameterCategory = 0 ; parameterNumber = 7 ; } -#Significant height of swell waves -'Significant height of swell waves' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 8 ; - } -#Mean period of swell waves -'Mean period of swell waves' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 9 ; - } #Secondary wave direction 'Secondary wave direction' = { discipline = 10 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 5f5df44a5..20ef5aa60 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -9448,18 +9448,6 @@ parameterCategory = 0 ; parameterNumber = 7 ; } -#Significant height of swell waves -'3105' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 8 ; - } -#Mean period of swell waves -'3106' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 9 ; - } #Secondary wave direction '3109' = { discipline = 10 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index cc160b195..66a4bf1d9 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -9448,18 +9448,6 @@ parameterCategory = 0 ; parameterNumber = 7 ; } -#Significant height of swell waves -'swell' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 8 ; - } -#Mean period of swell waves -'swper' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 9 ; - } #Secondary wave direction 'dirsw' = { discipline = 10 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 793077870..d0b65161b 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -9448,18 +9448,6 @@ parameterCategory = 0 ; parameterNumber = 7 ; } -#Significant height of swell waves -'m' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 8 ; - } -#Mean period of swell waves -'s' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 9 ; - } #Secondary wave direction 'Degree true' = { discipline = 10 ; From 0d3fae200c4efd8e03cdaa3bccc48fd9dce6125c Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 1 Aug 2023 17:25:53 +0100 Subject: [PATCH 075/372] Dead code removal --- src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 1 - src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - src/grib_accessor_classes_hash.cc | 454 ++++++++++++++-------------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 7 files changed, 226 insertions(+), 235 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 332118567..29791a77b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -57,7 +57,6 @@ list( APPEND eccodes_src_files grib_iarray.cc grib_viarray.cc codes_memfs.cc - grib_accessor_class_array.cc grib_accessor_class_assert.cc grib_accessor_class_ascii.cc grib_accessor_class_bit.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index c65364598..a0121c4df 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -7,7 +7,6 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |-----grib_accessor_class_g1step_range |-------grib_accessor_class_g1fcperiod |-----grib_accessor_class_long_vector - |---grib_accessor_class_array |---grib_accessor_class_ascii |-----grib_accessor_class_bufr_string_values |-----grib_accessor_class_check_internal_version diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 76d5656c1..71a1277dd 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -266,8 +266,6 @@ grib_viarray* grib_viarray_push(grib_context* c, grib_viarray* v, grib_iarray* v void grib_viarray_delete(grib_context* c, grib_viarray* v); void grib_viarray_delete_content(grib_context* c, grib_viarray* v); -/* grib_accessor_class_array.cc*/ - /* grib_accessor_class_assert.cc*/ /* grib_accessor_class_ascii.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index 6aca52e29..9f6cadde0 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -1,7 +1,6 @@ /* This file is automatically generated by ./make_class.pl, do not edit */ extern grib_accessor_class* grib_accessor_class_abstract_long_vector; extern grib_accessor_class* grib_accessor_class_abstract_vector; -extern grib_accessor_class* grib_accessor_class_array; extern grib_accessor_class* grib_accessor_class_ascii; extern grib_accessor_class* grib_accessor_class_assert; extern grib_accessor_class* grib_accessor_class_bit; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index a27a7a7a0..83cc83072 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,7 +37,7 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 218 +#define TOTAL_KEYWORDS 217 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 @@ -117,523 +117,521 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 155 "accessor_class_list.gperf" +#line 154 "accessor_class_list.gperf" {"nearest", &grib_accessor_class_nearest}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 117 "accessor_class_list.gperf" +#line 116 "accessor_class_list.gperf" {"gen", &grib_accessor_class_gen}, {""}, {""}, -#line 118 "accessor_class_list.gperf" +#line 117 "accessor_class_list.gperf" {"getenv", &grib_accessor_class_getenv}, -#line 84 "accessor_class_list.gperf" +#line 83 "accessor_class_list.gperf" {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, {""}, {""}, {""}, {""}, {""}, -#line 133 "accessor_class_list.gperf" +#line 132 "accessor_class_list.gperf" {"int8", &grib_accessor_class_int8}, -#line 131 "accessor_class_list.gperf" +#line 130 "accessor_class_list.gperf" {"int64", &grib_accessor_class_int64}, -#line 72 "accessor_class_list.gperf" +#line 71 "accessor_class_list.gperf" {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 202 "accessor_class_list.gperf" +#line 201 "accessor_class_list.gperf" {"time", &grib_accessor_class_time}, -#line 69 "accessor_class_list.gperf" +#line 68 "accessor_class_list.gperf" {"data_png_packing", &grib_accessor_class_data_png_packing}, {""}, -#line 190 "accessor_class_list.gperf" +#line 189 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, -#line 180 "accessor_class_list.gperf" +#line 179 "accessor_class_list.gperf" {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 187 "accessor_class_list.gperf" +#line 186 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, -#line 181 "accessor_class_list.gperf" +#line 180 "accessor_class_list.gperf" {"section", &grib_accessor_class_section}, -#line 203 "accessor_class_list.gperf" +#line 202 "accessor_class_list.gperf" {"times", &grib_accessor_class_times}, -#line 70 "accessor_class_list.gperf" +#line 69 "accessor_class_list.gperf" {"data_raw_packing", &grib_accessor_class_data_raw_packing}, -#line 116 "accessor_class_list.gperf" +#line 115 "accessor_class_list.gperf" {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, {""}, -#line 13 "accessor_class_list.gperf" +#line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, {""}, -#line 182 "accessor_class_list.gperf" +#line 181 "accessor_class_list.gperf" {"section_length", &grib_accessor_class_section_length}, -#line 183 "accessor_class_list.gperf" +#line 182 "accessor_class_list.gperf" {"section_padding", &grib_accessor_class_section_padding}, -#line 196 "accessor_class_list.gperf" +#line 195 "accessor_class_list.gperf" {"statistics", &grib_accessor_class_statistics}, -#line 199 "accessor_class_list.gperf" +#line 198 "accessor_class_list.gperf" {"step_in_units", &grib_accessor_class_step_in_units}, -#line 188 "accessor_class_list.gperf" +#line 187 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, -#line 193 "accessor_class_list.gperf" +#line 192 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, -#line 167 "accessor_class_list.gperf" +#line 166 "accessor_class_list.gperf" {"pad", &grib_accessor_class_pad}, -#line 76 "accessor_class_list.gperf" +#line 75 "accessor_class_list.gperf" {"data_simple_packing", &grib_accessor_class_data_simple_packing}, {""}, -#line 79 "accessor_class_list.gperf" +#line 78 "accessor_class_list.gperf" {"dirty", &grib_accessor_class_dirty}, {""}, {""}, -#line 197 "accessor_class_list.gperf" +#line 196 "accessor_class_list.gperf" {"statistics_spectral", &grib_accessor_class_statistics_spectral}, -#line 78 "accessor_class_list.gperf" +#line 77 "accessor_class_list.gperf" {"dictionary", &grib_accessor_class_dictionary}, {""}, -#line 115 "accessor_class_list.gperf" +#line 114 "accessor_class_list.gperf" {"gds_is_present", &grib_accessor_class_gds_is_present}, {""}, -#line 112 "accessor_class_list.gperf" +#line 111 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, -#line 205 "accessor_class_list.gperf" +#line 204 "accessor_class_list.gperf" {"to_integer", &grib_accessor_class_to_integer}, -#line 127 "accessor_class_list.gperf" +#line 126 "accessor_class_list.gperf" {"int16", &grib_accessor_class_int16}, {""}, -#line 107 "accessor_class_list.gperf" +#line 106 "accessor_class_list.gperf" {"g2date", &grib_accessor_class_g2date}, -#line 46 "accessor_class_list.gperf" +#line 45 "accessor_class_list.gperf" {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, {""}, -#line 184 "accessor_class_list.gperf" +#line 183 "accessor_class_list.gperf" {"section_pointer", &grib_accessor_class_section_pointer}, -#line 68 "accessor_class_list.gperf" +#line 67 "accessor_class_list.gperf" {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, -#line 129 "accessor_class_list.gperf" +#line 128 "accessor_class_list.gperf" {"int32", &grib_accessor_class_int32}, -#line 61 "accessor_class_list.gperf" +#line 60 "accessor_class_list.gperf" {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, -#line 108 "accessor_class_list.gperf" +#line 107 "accessor_class_list.gperf" {"g2end_step", &grib_accessor_class_g2end_step}, -#line 49 "accessor_class_list.gperf" +#line 48 "accessor_class_list.gperf" {"data_apply_gdsnotpresent", &grib_accessor_class_data_apply_gdsnotpresent}, -#line 105 "accessor_class_list.gperf" +#line 104 "accessor_class_list.gperf" {"g2bitmap", &grib_accessor_class_g2bitmap}, -#line 47 "accessor_class_list.gperf" +#line 46 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, {""}, -#line 51 "accessor_class_list.gperf" +#line 50 "accessor_class_list.gperf" {"data_complex_packing", &grib_accessor_class_data_complex_packing}, {""}, {""}, {""}, {""}, -#line 48 "accessor_class_list.gperf" +#line 47 "accessor_class_list.gperf" {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, -#line 113 "accessor_class_list.gperf" +#line 112 "accessor_class_list.gperf" {"g2step_range", &grib_accessor_class_g2step_range}, {""}, -#line 109 "accessor_class_list.gperf" +#line 108 "accessor_class_list.gperf" {"g2grid", &grib_accessor_class_g2grid}, {""}, -#line 206 "accessor_class_list.gperf" +#line 205 "accessor_class_list.gperf" {"to_string", &grib_accessor_class_to_string}, {""}, {""}, -#line 134 "accessor_class_list.gperf" +#line 133 "accessor_class_list.gperf" {"iterator", &grib_accessor_class_iterator}, -#line 168 "accessor_class_list.gperf" +#line 167 "accessor_class_list.gperf" {"padding", &grib_accessor_class_padding}, {""}, {""}, -#line 209 "accessor_class_list.gperf" +#line 208 "accessor_class_list.gperf" {"trim", &grib_accessor_class_trim}, {""}, -#line 65 "accessor_class_list.gperf" +#line 64 "accessor_class_list.gperf" {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, -#line 174 "accessor_class_list.gperf" +#line 173 "accessor_class_list.gperf" {"raw", &grib_accessor_class_raw}, {""}, -#line 82 "accessor_class_list.gperf" +#line 81 "accessor_class_list.gperf" {"element", &grib_accessor_class_element}, -#line 169 "accessor_class_list.gperf" +#line 168 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, -#line 103 "accessor_class_list.gperf" +#line 102 "accessor_class_list.gperf" {"g2_eps", &grib_accessor_class_g2_eps}, {""}, {""}, -#line 156 "accessor_class_list.gperf" +#line 155 "accessor_class_list.gperf" {"non_alpha", &grib_accessor_class_non_alpha}, -#line 207 "accessor_class_list.gperf" +#line 206 "accessor_class_list.gperf" {"transient", &grib_accessor_class_transient}, -#line 14 "accessor_class_list.gperf" +#line 13 "accessor_class_list.gperf" {"assert", &grib_accessor_class_assert}, {""}, -#line 140 "accessor_class_list.gperf" +#line 139 "accessor_class_list.gperf" {"latitudes", &grib_accessor_class_latitudes}, {""}, -#line 66 "accessor_class_list.gperf" +#line 65 "accessor_class_list.gperf" {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, -#line 63 "accessor_class_list.gperf" +#line 62 "accessor_class_list.gperf" {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, -#line 208 "accessor_class_list.gperf" +#line 207 "accessor_class_list.gperf" {"transient_darray", &grib_accessor_class_transient_darray}, {""}, -#line 101 "accessor_class_list.gperf" +#line 100 "accessor_class_list.gperf" {"g2_aerosol", &grib_accessor_class_g2_aerosol}, -#line 110 "accessor_class_list.gperf" +#line 109 "accessor_class_list.gperf" {"g2latlon", &grib_accessor_class_g2latlon}, {""}, {""}, {""}, {""}, {""}, -#line 64 "accessor_class_list.gperf" +#line 63 "accessor_class_list.gperf" {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, -#line 62 "accessor_class_list.gperf" +#line 61 "accessor_class_list.gperf" {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, -#line 12 "accessor_class_list.gperf" - {"array", &grib_accessor_class_array}, - {""}, {""}, {""}, {""}, -#line 175 "accessor_class_list.gperf" + {""}, {""}, {""}, {""}, {""}, +#line 174 "accessor_class_list.gperf" {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, -#line 67 "accessor_class_list.gperf" +#line 66 "accessor_class_list.gperf" {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, {""}, {""}, -#line 119 "accessor_class_list.gperf" +#line 118 "accessor_class_list.gperf" {"global_gaussian", &grib_accessor_class_global_gaussian}, {""}, -#line 186 "accessor_class_list.gperf" +#line 185 "accessor_class_list.gperf" {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, -#line 139 "accessor_class_list.gperf" +#line 138 "accessor_class_list.gperf" {"laplacian", &grib_accessor_class_laplacian}, {""}, -#line 200 "accessor_class_list.gperf" +#line 199 "accessor_class_list.gperf" {"sum", &grib_accessor_class_sum}, {""}, -#line 114 "accessor_class_list.gperf" +#line 113 "accessor_class_list.gperf" {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, -#line 177 "accessor_class_list.gperf" +#line 176 "accessor_class_list.gperf" {"round", &grib_accessor_class_round}, -#line 145 "accessor_class_list.gperf" +#line 144 "accessor_class_list.gperf" {"long", &grib_accessor_class_long}, {""}, -#line 81 "accessor_class_list.gperf" +#line 80 "accessor_class_list.gperf" {"double", &grib_accessor_class_double}, -#line 189 "accessor_class_list.gperf" +#line 188 "accessor_class_list.gperf" {"simple_packing_error", &grib_accessor_class_simple_packing_error}, -#line 120 "accessor_class_list.gperf" +#line 119 "accessor_class_list.gperf" {"group", &grib_accessor_class_group}, {""}, -#line 172 "accessor_class_list.gperf" +#line 171 "accessor_class_list.gperf" {"position", &grib_accessor_class_position}, -#line 136 "accessor_class_list.gperf" - {"julian_day", &grib_accessor_class_julian_day}, #line 135 "accessor_class_list.gperf" + {"julian_day", &grib_accessor_class_julian_day}, +#line 134 "accessor_class_list.gperf" {"julian_date", &grib_accessor_class_julian_date}, -#line 219 "accessor_class_list.gperf" +#line 218 "accessor_class_list.gperf" {"unsigned", &grib_accessor_class_unsigned}, {""}, {""}, -#line 52 "accessor_class_list.gperf" +#line 51 "accessor_class_list.gperf" {"data_dummy_field", &grib_accessor_class_data_dummy_field}, {""}, -#line 173 "accessor_class_list.gperf" +#line 172 "accessor_class_list.gperf" {"proj_string", &grib_accessor_class_proj_string}, -#line 15 "accessor_class_list.gperf" +#line 14 "accessor_class_list.gperf" {"bit", &grib_accessor_class_bit}, -#line 17 "accessor_class_list.gperf" - {"bits", &grib_accessor_class_bits}, -#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 178 "accessor_class_list.gperf" - {"scale", &grib_accessor_class_scale}, -#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 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" + {"bits", &grib_accessor_class_bits}, +#line 197 "accessor_class_list.gperf" + {"step_human_readable", &grib_accessor_class_step_human_readable}, +#line 70 "accessor_class_list.gperf" + {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, +#line 177 "accessor_class_list.gperf" + {"scale", &grib_accessor_class_scale}, +#line 193 "accessor_class_list.gperf" + {"spectral_truncation", &grib_accessor_class_spectral_truncation}, +#line 44 "accessor_class_list.gperf" + {"data_2order_packing", &grib_accessor_class_data_2order_packing}, +#line 211 "accessor_class_list.gperf" + {"uint32", &grib_accessor_class_uint32}, +#line 215 "accessor_class_list.gperf" + {"uint8", &grib_accessor_class_uint8}, +#line 30 "accessor_class_list.gperf" + {"bytes", &grib_accessor_class_bytes}, +#line 15 "accessor_class_list.gperf" {"bitmap", &grib_accessor_class_bitmap}, {""}, -#line 106 "accessor_class_list.gperf" +#line 105 "accessor_class_list.gperf" {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, {""}, {""}, -#line 195 "accessor_class_list.gperf" +#line 194 "accessor_class_list.gperf" {"sprintf", &grib_accessor_class_sprintf}, {""}, {""}, {""}, -#line 18 "accessor_class_list.gperf" +#line 17 "accessor_class_list.gperf" {"bits_per_value", &grib_accessor_class_bits_per_value}, -#line 50 "accessor_class_list.gperf" +#line 49 "accessor_class_list.gperf" {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, {""}, -#line 220 "accessor_class_list.gperf" +#line 219 "accessor_class_list.gperf" {"unsigned_bits", &grib_accessor_class_unsigned_bits}, -#line 164 "accessor_class_list.gperf" +#line 163 "accessor_class_list.gperf" {"offset_file", &grib_accessor_class_offset_file}, {""}, -#line 213 "accessor_class_list.gperf" +#line 212 "accessor_class_list.gperf" {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, {""}, -#line 89 "accessor_class_list.gperf" +#line 88 "accessor_class_list.gperf" {"g1area", &grib_accessor_class_g1area}, -#line 158 "accessor_class_list.gperf" +#line 157 "accessor_class_list.gperf" {"number_of_points", &grib_accessor_class_number_of_points}, {""}, -#line 91 "accessor_class_list.gperf" +#line 90 "accessor_class_list.gperf" {"g1date", &grib_accessor_class_g1date}, {""}, {""}, -#line 138 "accessor_class_list.gperf" +#line 137 "accessor_class_list.gperf" {"label", &grib_accessor_class_label}, -#line 217 "accessor_class_list.gperf" +#line 216 "accessor_class_list.gperf" {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, -#line 214 "accessor_class_list.gperf" +#line 213 "accessor_class_list.gperf" {"uint64", &grib_accessor_class_uint64}, {""}, -#line 159 "accessor_class_list.gperf" +#line 158 "accessor_class_list.gperf" {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, {""}, -#line 90 "accessor_class_list.gperf" +#line 89 "accessor_class_list.gperf" {"g1bitmap", &grib_accessor_class_g1bitmap}, {""}, {""}, -#line 88 "accessor_class_list.gperf" +#line 87 "accessor_class_list.gperf" {"g1_section4_length", &grib_accessor_class_g1_section4_length}, -#line 125 "accessor_class_list.gperf" +#line 124 "accessor_class_list.gperf" {"ieeefloat", &grib_accessor_class_ieeefloat}, {""}, -#line 87 "accessor_class_list.gperf" +#line 86 "accessor_class_list.gperf" {"g1_message_length", &grib_accessor_class_g1_message_length}, {""}, {""}, -#line 99 "accessor_class_list.gperf" +#line 98 "accessor_class_list.gperf" {"g1step_range", &grib_accessor_class_g1step_range}, {""}, {""}, -#line 40 "accessor_class_list.gperf" +#line 39 "accessor_class_list.gperf" {"concept", &grib_accessor_class_concept}, -#line 41 "accessor_class_list.gperf" +#line 40 "accessor_class_list.gperf" {"constant", &grib_accessor_class_constant}, -#line 215 "accessor_class_list.gperf" +#line 214 "accessor_class_list.gperf" {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, -#line 80 "accessor_class_list.gperf" +#line 79 "accessor_class_list.gperf" {"divdouble", &grib_accessor_class_divdouble}, -#line 226 "accessor_class_list.gperf" +#line 225 "accessor_class_list.gperf" {"when", &grib_accessor_class_when}, -#line 163 "accessor_class_list.gperf" +#line 162 "accessor_class_list.gperf" {"octet_number", &grib_accessor_class_octet_number}, {""}, -#line 104 "accessor_class_list.gperf" +#line 103 "accessor_class_list.gperf" {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, -#line 185 "accessor_class_list.gperf" +#line 184 "accessor_class_list.gperf" {"select_step_template", &grib_accessor_class_select_step_template}, {""}, -#line 59 "accessor_class_list.gperf" +#line 58 "accessor_class_list.gperf" {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, {""}, -#line 132 "accessor_class_list.gperf" +#line 131 "accessor_class_list.gperf" {"int64_little_endian", &grib_accessor_class_int64_little_endian}, {""}, {""}, -#line 19 "accessor_class_list.gperf" +#line 18 "accessor_class_list.gperf" {"blob", &grib_accessor_class_blob}, {""}, {""}, {""}, -#line 223 "accessor_class_list.gperf" +#line 222 "accessor_class_list.gperf" {"values", &grib_accessor_class_values}, {""}, {""}, {""}, {""}, -#line 60 "accessor_class_list.gperf" +#line 59 "accessor_class_list.gperf" {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, -#line 53 "accessor_class_list.gperf" +#line 52 "accessor_class_list.gperf" {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, {""}, {""}, -#line 146 "accessor_class_list.gperf" +#line 145 "accessor_class_list.gperf" {"long_vector", &grib_accessor_class_long_vector}, -#line 201 "accessor_class_list.gperf" +#line 200 "accessor_class_list.gperf" {"suppressed", &grib_accessor_class_suppressed}, -#line 121 "accessor_class_list.gperf" +#line 120 "accessor_class_list.gperf" {"gts_header", &grib_accessor_class_gts_header}, -#line 204 "accessor_class_list.gperf" +#line 203 "accessor_class_list.gperf" {"to_double", &grib_accessor_class_to_double}, {""}, {""}, -#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 221 "accessor_class_list.gperf" - {"validity_date", &grib_accessor_class_validity_date}, #line 143 "accessor_class_list.gperf" + {"local_definition", &grib_accessor_class_local_definition}, +#line 57 "accessor_class_list.gperf" + {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, +#line 220 "accessor_class_list.gperf" + {"validity_date", &grib_accessor_class_validity_date}, +#line 142 "accessor_class_list.gperf" {"library_version", &grib_accessor_class_library_version}, {""}, {""}, -#line 141 "accessor_class_list.gperf" +#line 140 "accessor_class_list.gperf" {"latlon_increment", &grib_accessor_class_latlon_increment}, {""}, {""}, -#line 93 "accessor_class_list.gperf" +#line 92 "accessor_class_list.gperf" {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, {""}, {""}, -#line 128 "accessor_class_list.gperf" +#line 127 "accessor_class_list.gperf" {"int16_little_endian", &grib_accessor_class_int16_little_endian}, -#line 56 "accessor_class_list.gperf" +#line 55 "accessor_class_list.gperf" {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, -#line 35 "accessor_class_list.gperf" +#line 34 "accessor_class_list.gperf" {"closest_date", &grib_accessor_class_closest_date}, -#line 124 "accessor_class_list.gperf" +#line 123 "accessor_class_list.gperf" {"ibmfloat", &grib_accessor_class_ibmfloat}, -#line 57 "accessor_class_list.gperf" +#line 56 "accessor_class_list.gperf" {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, -#line 151 "accessor_class_list.gperf" +#line 150 "accessor_class_list.gperf" {"md5", &grib_accessor_class_md5}, -#line 222 "accessor_class_list.gperf" +#line 221 "accessor_class_list.gperf" {"validity_time", &grib_accessor_class_validity_time}, -#line 130 "accessor_class_list.gperf" +#line 129 "accessor_class_list.gperf" {"int32_little_endian", &grib_accessor_class_int32_little_endian}, -#line 54 "accessor_class_list.gperf" +#line 53 "accessor_class_list.gperf" {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, {""}, -#line 55 "accessor_class_list.gperf" +#line 54 "accessor_class_list.gperf" {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, {""}, {""}, -#line 74 "accessor_class_list.gperf" +#line 73 "accessor_class_list.gperf" {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, -#line 225 "accessor_class_list.gperf" +#line 224 "accessor_class_list.gperf" {"vector", &grib_accessor_class_vector}, -#line 20 "accessor_class_list.gperf" +#line 19 "accessor_class_list.gperf" {"budgdate", &grib_accessor_class_budgdate}, -#line 152 "accessor_class_list.gperf" +#line 151 "accessor_class_list.gperf" {"message", &grib_accessor_class_message}, -#line 148 "accessor_class_list.gperf" +#line 147 "accessor_class_list.gperf" {"lookup", &grib_accessor_class_lookup}, -#line 75 "accessor_class_list.gperf" +#line 74 "accessor_class_list.gperf" {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, -#line 137 "accessor_class_list.gperf" +#line 136 "accessor_class_list.gperf" {"ksec1expver", &grib_accessor_class_ksec1expver}, {""}, -#line 171 "accessor_class_list.gperf" +#line 170 "accessor_class_list.gperf" {"padtomultiple", &grib_accessor_class_padtomultiple}, -#line 150 "accessor_class_list.gperf" +#line 149 "accessor_class_list.gperf" {"mars_step", &grib_accessor_class_mars_step}, -#line 126 "accessor_class_list.gperf" +#line 125 "accessor_class_list.gperf" {"ifs_param", &grib_accessor_class_ifs_param}, {""}, -#line 191 "accessor_class_list.gperf" +#line 190 "accessor_class_list.gperf" {"smart_table", &grib_accessor_class_smart_table}, {""}, -#line 149 "accessor_class_list.gperf" +#line 148 "accessor_class_list.gperf" {"mars_param", &grib_accessor_class_mars_param}, {""}, -#line 22 "accessor_class_list.gperf" +#line 21 "accessor_class_list.gperf" {"bufr_data_element", &grib_accessor_class_bufr_data_element}, {""}, {""}, -#line 192 "accessor_class_list.gperf" +#line 191 "accessor_class_list.gperf" {"smart_table_column", &grib_accessor_class_smart_table_column}, {""}, -#line 21 "accessor_class_list.gperf" +#line 20 "accessor_class_list.gperf" {"bufr_data_array", &grib_accessor_class_bufr_data_array}, {""}, {""}, {""}, {""}, -#line 30 "accessor_class_list.gperf" - {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, #line 29 "accessor_class_list.gperf" + {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, +#line 28 "accessor_class_list.gperf" {"bufr_string_values", &grib_accessor_class_bufr_string_values}, {""}, {""}, {""}, -#line 147 "accessor_class_list.gperf" +#line 146 "accessor_class_list.gperf" {"longitudes", &grib_accessor_class_longitudes}, {""}, -#line 157 "accessor_class_list.gperf" +#line 156 "accessor_class_list.gperf" {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, {""}, -#line 28 "accessor_class_list.gperf" +#line 27 "accessor_class_list.gperf" {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, -#line 44 "accessor_class_list.gperf" +#line 43 "accessor_class_list.gperf" {"count_total", &grib_accessor_class_count_total}, {""}, {""}, {""}, {""}, -#line 122 "accessor_class_list.gperf" +#line 121 "accessor_class_list.gperf" {"hash_array", &grib_accessor_class_hash_array}, -#line 165 "accessor_class_list.gperf" +#line 164 "accessor_class_list.gperf" {"offset_values", &grib_accessor_class_offset_values}, -#line 123 "accessor_class_list.gperf" +#line 122 "accessor_class_list.gperf" {"headers_only", &grib_accessor_class_headers_only}, {""}, {""}, -#line 94 "accessor_class_list.gperf" +#line 93 "accessor_class_list.gperf" {"g1fcperiod", &grib_accessor_class_g1fcperiod}, -#line 153 "accessor_class_list.gperf" +#line 152 "accessor_class_list.gperf" {"message_copy", &grib_accessor_class_message_copy}, {""}, {""}, -#line 170 "accessor_class_list.gperf" +#line 169 "accessor_class_list.gperf" {"padtoeven", &grib_accessor_class_padtoeven}, {""}, {""}, -#line 210 "accessor_class_list.gperf" +#line 209 "accessor_class_list.gperf" {"uint16", &grib_accessor_class_uint16}, {""}, {""}, -#line 154 "accessor_class_list.gperf" +#line 153 "accessor_class_list.gperf" {"missing", &grib_accessor_class_missing}, -#line 224 "accessor_class_list.gperf" +#line 223 "accessor_class_list.gperf" {"variable", &grib_accessor_class_variable}, {""}, {""}, -#line 86 "accessor_class_list.gperf" +#line 85 "accessor_class_list.gperf" {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, {""}, -#line 42 "accessor_class_list.gperf" +#line 41 "accessor_class_list.gperf" {"count_file", &grib_accessor_class_count_file}, {""}, -#line 36 "accessor_class_list.gperf" +#line 35 "accessor_class_list.gperf" {"codeflag", &grib_accessor_class_codeflag}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 211 "accessor_class_list.gperf" +#line 210 "accessor_class_list.gperf" {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, -#line 37 "accessor_class_list.gperf" +#line 36 "accessor_class_list.gperf" {"codetable", &grib_accessor_class_codetable}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 38 "accessor_class_list.gperf" +#line 37 "accessor_class_list.gperf" {"codetable_title", &grib_accessor_class_codetable_title}, {""}, {""}, {""}, -#line 83 "accessor_class_list.gperf" +#line 82 "accessor_class_list.gperf" {"evaluate", &grib_accessor_class_evaluate}, {""}, {""}, -#line 27 "accessor_class_list.gperf" +#line 26 "accessor_class_list.gperf" {"bufr_group", &grib_accessor_class_bufr_group}, {""}, {""}, -#line 160 "accessor_class_list.gperf" +#line 159 "accessor_class_list.gperf" {"number_of_values", &grib_accessor_class_number_of_values}, {""}, {""}, -#line 77 "accessor_class_list.gperf" +#line 76 "accessor_class_list.gperf" {"decimal_precision", &grib_accessor_class_decimal_precision}, {""}, {""}, -#line 111 "accessor_class_list.gperf" +#line 110 "accessor_class_list.gperf" {"g2level", &grib_accessor_class_g2level}, {""}, -#line 23 "accessor_class_list.gperf" +#line 22 "accessor_class_list.gperf" {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, {""}, {""}, -#line 142 "accessor_class_list.gperf" +#line 141 "accessor_class_list.gperf" {"latlonvalues", &grib_accessor_class_latlonvalues}, {""}, {""}, {""}, {""}, -#line 73 "accessor_class_list.gperf" +#line 72 "accessor_class_list.gperf" {"data_sh_packed", &grib_accessor_class_data_sh_packed}, -#line 161 "accessor_class_list.gperf" +#line 160 "accessor_class_list.gperf" {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, {""}, {""}, {""}, {""}, -#line 179 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" {"scale_values", &grib_accessor_class_scale_values}, {""}, -#line 218 "accessor_class_list.gperf" +#line 217 "accessor_class_list.gperf" {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, {""}, {""}, {""}, -#line 85 "accessor_class_list.gperf" +#line 84 "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}, {""}, {""}, {""}, {""}, -#line 33 "accessor_class_list.gperf" +#line 32 "accessor_class_list.gperf" {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, {""}, {""}, {""}, {""}, {""}, -#line 32 "accessor_class_list.gperf" +#line 31 "accessor_class_list.gperf" {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, {""}, -#line 96 "accessor_class_list.gperf" +#line 95 "accessor_class_list.gperf" {"g1monthlydate", &grib_accessor_class_g1monthlydate}, {""}, {""}, -#line 100 "accessor_class_list.gperf" +#line 99 "accessor_class_list.gperf" {"g1verificationdate", &grib_accessor_class_g1verificationdate}, -#line 166 "accessor_class_list.gperf" +#line 165 "accessor_class_list.gperf" {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, {""}, {""}, -#line 176 "accessor_class_list.gperf" +#line 175 "accessor_class_list.gperf" {"reference_value_error", &grib_accessor_class_reference_value_error}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 162 "accessor_class_list.gperf" +#line 161 "accessor_class_list.gperf" {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 26 "accessor_class_list.gperf" +#line 25 "accessor_class_list.gperf" {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, {""}, {""}, {""}, {""}, -#line 24 "accessor_class_list.gperf" +#line 23 "accessor_class_list.gperf" {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, {""}, {""}, {""}, -#line 25 "accessor_class_list.gperf" +#line 24 "accessor_class_list.gperf" {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, {""}, {""}, #line 10 "accessor_class_list.gperf" @@ -642,17 +640,17 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 39 "accessor_class_list.gperf" +#line 38 "accessor_class_list.gperf" {"codetable_units", &grib_accessor_class_codetable_units}, {""}, -#line 92 "accessor_class_list.gperf" +#line 91 "accessor_class_list.gperf" {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 34 "accessor_class_list.gperf" +#line 33 "accessor_class_list.gperf" {"check_internal_version", &grib_accessor_class_check_internal_version}, {""}, {""}, -#line 43 "accessor_class_list.gperf" +#line 42 "accessor_class_list.gperf" {"count_missing", &grib_accessor_class_count_missing}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -665,14 +663,14 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#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_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, +#line 96 "accessor_class_list.gperf" {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 102 "accessor_class_list.gperf" +#line 101 "accessor_class_list.gperf" {"g2_chemical", &grib_accessor_class_g2_chemical}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -682,7 +680,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 95 "accessor_class_list.gperf" +#line 94 "accessor_class_list.gperf" {"g1forecastmonth", &grib_accessor_class_g1forecastmonth} }; diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index a706fc95c..e2dff4cd9 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -1,7 +1,6 @@ /* This file is automatically generated by ./make_class.pl, do not edit */ { "abstract_long_vector", &grib_accessor_class_abstract_long_vector, }, { "abstract_vector", &grib_accessor_class_abstract_vector, }, -{ "array", &grib_accessor_class_array, }, { "ascii", &grib_accessor_class_ascii, }, { "assert", &grib_accessor_class_assert, }, { "bit", &grib_accessor_class_bit, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index 0abb60a46..ff696f8fa 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -2,7 +2,6 @@ abstract_long_vector, &grib_accessor_class_abstract_long_vector abstract_vector, &grib_accessor_class_abstract_vector -array, &grib_accessor_class_array ascii, &grib_accessor_class_ascii assert, &grib_accessor_class_assert bit, &grib_accessor_class_bit From 34ffb5b28efcc0c8c2b62256990bca14e5313c68 Mon Sep 17 00:00:00 2001 From: Dusan Figala Date: Tue, 1 Aug 2023 14:16:18 +0200 Subject: [PATCH 076/372] Add nightly build workflow Add cpack options --- .github/workflows/nightly.yml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index a5906565f..cbd03a6ef 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -5,7 +5,7 @@ on: # Run at 20:00 UTC every day (on default branch) schedule: - - cron: "0 20 * * *" + - cron: '0 20 * * *' jobs: test: @@ -15,10 +15,26 @@ jobs: nightly_test: true secrets: inherit + deploy: + needs: [test] + uses: ecmwf-actions/reusable-workflows/.github/workflows/create-package.yml@v2 + with: + skip_checks: true + cpack_options_rpm: -D CPACK_PACKAGE_FILE_NAME=eccodes-nightly-Linux-x86_64 + cpack_options_deb: -D CPACK_PACKAGE_VERSION=nightly + secrets: + url_debian_11: ${{ secrets.NEXUS_TEST_REPO_NIGHTLY_URL_DEBIAN_11 }} + token_debian_11: ${{ secrets.NEXUS_TEST_REPO_UPLOAD_TOKEN }} + url_centos_7: ${{ secrets.NEXUS_TEST_REPO_NIGHTLY_URL_CENTOS_7 }} + token_centos_7: ${{ secrets.NEXUS_TEST_REPO_UPLOAD_TOKEN }} + url_rocky_8: ${{ secrets.NEXUS_TEST_REPO_NIGHTLY_URL_ROCKY_8 }} + token_rocky_8: ${{ secrets.NEXUS_TEST_REPO_UPLOAD_TOKEN }} + notify: runs-on: ubuntu-latest needs: - test + - deploy if: always() steps: - name: Trigger Teams notification From e0bdb3d2283d44a951d85900d089930554721cab Mon Sep 17 00:00:00 2001 From: Robert Osinski Date: Wed, 2 Aug 2023 10:48:45 +0000 Subject: [PATCH 077/372] Modification of mars levtype for ocean parameters on height above sea sfc --- definitions/grib2/localConcepts/ecmf/marsLevtypeConcept.def | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 definitions/grib2/localConcepts/ecmf/marsLevtypeConcept.def diff --git a/definitions/grib2/localConcepts/ecmf/marsLevtypeConcept.def b/definitions/grib2/localConcepts/ecmf/marsLevtypeConcept.def new file mode 100644 index 000000000..729de5707 --- /dev/null +++ b/definitions/grib2/localConcepts/ecmf/marsLevtypeConcept.def @@ -0,0 +1,5 @@ +# Concept marsLevtype +'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101,numberOfGridUsed=1} +'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101,numberOfGridUsed=2} +'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101,numberOfGridUsed=3} +'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101,numberOfGridUsed=4} From 0f8c13ae3e49dd04ab58a2901643a71e6b15ae80 Mon Sep 17 00:00:00 2001 From: Robert Osinski Date: Wed, 2 Aug 2023 11:05:52 +0000 Subject: [PATCH 078/372] correction of type --- .../grib2/localConcepts/ecmf/marsLevtypeConcept.def | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/definitions/grib2/localConcepts/ecmf/marsLevtypeConcept.def b/definitions/grib2/localConcepts/ecmf/marsLevtypeConcept.def index 729de5707..36c8cf801 100644 --- a/definitions/grib2/localConcepts/ecmf/marsLevtypeConcept.def +++ b/definitions/grib2/localConcepts/ecmf/marsLevtypeConcept.def @@ -1,5 +1,5 @@ # Concept marsLevtype -'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101,numberOfGridUsed=1} -'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101,numberOfGridUsed=2} -'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101,numberOfGridUsed=3} -'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101,numberOfGridUsed=4} +'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101;numberOfGridUsed=1;} +'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101;numberOfGridUsed=2;} +'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101;numberOfGridUsed=3;} +'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101;numberOfGridUsed=4;} From 6e00d55addf45e5149b59b9ceb6f81efed1da404 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 2 Aug 2023 16:50:18 +0100 Subject: [PATCH 079/372] Dead code removal: Unused data members --- src/grib_accessor_class_array.cc | 117 --------------------- src/grib_accessor_class_bufr_data_array.cc | 6 +- src/grib_api_internal.h | 4 - 3 files changed, 3 insertions(+), 124 deletions(-) delete mode 100644 src/grib_accessor_class_array.cc diff --git a/src/grib_accessor_class_array.cc b/src/grib_accessor_class_array.cc deleted file mode 100644 index a132c8218..000000000 --- a/src/grib_accessor_class_array.cc +++ /dev/null @@ -1,117 +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. - */ - -/***************************************************************** - * Enrico Fucile - **************************************************************/ -#include "grib_api_internal.h" -/* - This is used by make_class.pl - - START_CLASS_DEF - CLASS = accessor - SUPER = grib_accessor_class_gen - IMPLEMENTS = init;dump - MEMBERS = grib_action* *builder - MEMBERS = grib_block_of_accessors *block; - 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(grib_accessor*, const long, grib_arguments*); - -typedef struct grib_accessor_array -{ - grib_accessor att; - /* Members defined in gen */ - /* Members defined in array */ - grib_action* *builder; - grib_block_of_accessors *block; -} grib_accessor_array; - -extern grib_accessor_class* grib_accessor_class_gen; - -static grib_accessor_class _grib_accessor_class_array = { - &grib_accessor_class_gen, /* super */ - "array", /* name */ - sizeof(grib_accessor_array), /* size */ - 0, /* inited */ - 0, /* init_class */ - &init, /* 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_array = &_grib_accessor_class_array; - -/* END_CLASS_IMP */ - - -static void init(grib_accessor* a, const long len, grib_arguments* arg) -{ - grib_accessor_array* self = (grib_accessor_array*)a; - self->block = (grib_block_of_accessors*)grib_context_malloc_clear(a->context, sizeof(grib_block_of_accessors)); - a->length = 0; -} - -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_accessor_array* self = (grib_accessor_array*)a; - grib_dump_section(dumper, a, self->block); -} diff --git a/src/grib_accessor_class_bufr_data_array.cc b/src/grib_accessor_class_bufr_data_array.cc index 6433ffcaf..a48c81737 100644 --- a/src/grib_accessor_class_bufr_data_array.cc +++ b/src/grib_accessor_class_bufr_data_array.cc @@ -2491,7 +2491,7 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset groupNumber = 1; gaGroup = grib_accessor_factory(self->dataKeys, &creatorGroup, 0, NULL); - gaGroup->bufr_group_number = groupNumber; + //gaGroup->bufr_group_number = groupNumber; gaGroup->sub_section = grib_section_create(hand, gaGroup); section = gaGroup->sub_section; /*rootSection=section;*/ @@ -2557,7 +2557,7 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset gaGroup = grib_accessor_factory(groupSection, &creatorGroup, 0, NULL); gaGroup->sub_section = grib_section_create(hand, gaGroup); - gaGroup->bufr_group_number = groupNumber; + //gaGroup->bufr_group_number = groupNumber; //accessor_constant_set_type(gaGroup, GRIB_TYPE_LONG); //accessor_constant_set_dval(gaGroup, groupNumber); @@ -2602,7 +2602,7 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset } gaGroup = grib_accessor_factory(groupSection, &creatorGroup, 0, NULL); gaGroup->sub_section = grib_section_create(hand, gaGroup); - gaGroup->bufr_group_number = groupNumber; + // gaGroup->bufr_group_number = groupNumber; //accessor_constant_set_type(gaGroup, GRIB_TYPE_LONG); //accessor_constant_set_dval(gaGroup, groupNumber); grib_push_accessor(gaGroup, groupSection->block); diff --git a/src/grib_api_internal.h b/src/grib_api_internal.h index d47de3a9b..1fe196076 100644 --- a/src/grib_api_internal.h +++ b/src/grib_api_internal.h @@ -548,8 +548,6 @@ struct grib_accessor grib_accessor* same; /** < accessors with the same name */ long loop; /** < used in lists */ - long bufr_subset_number; /** < bufr subset (bufr data accessors belong to different subsets)*/ - long bufr_group_number; /** < used in bufr */ grib_virtual_value* vvalue; /** < virtual value used when transient flag on **/ const char* set; grib_accessor* attributes[MAX_ACCESSOR_ATTRIBUTES]; /** < attributes are accessors */ @@ -884,8 +882,6 @@ struct grib_handle char* section_length[MAX_NUM_SECTIONS]; int sections_count; off_t offset; - long bufr_subset_number; /* bufr subset number */ - long bufr_group_number; /* used in bufr */ /* grib_accessor* groups[MAX_NUM_GROUPS]; */ long missingValueLong; double missingValueDouble; From 8accd35bdba645996114ac020b237f49d8f84f80 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 2 Aug 2023 16:57:54 +0000 Subject: [PATCH 080/372] ECC-1655: GRIB2: change of definition and new mars levtype concepts for ocean parameters --- definitions/grib2/cfVarName.def | 16 ++++++++-------- definitions/grib2/name.def | 16 ++++++++-------- definitions/grib2/paramId.def | 12 ++++++------ definitions/grib2/shortName.def | 16 ++++++++-------- definitions/grib2/units.def | 12 ++++++------ 5 files changed, 36 insertions(+), 36 deletions(-) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index 19117c0d0..ca84d9755 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -5385,14 +5385,14 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } -#Wind stress at 10m above sea surface -'wst10_sea' = { +#Wind stress at sea surface +'wst_sea' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 49 ; - typeOfFirstFixedSurface = 102 ; + typeOfFirstFixedSurface = 160 ; typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = 10 ; + scaledValueOfFirstFixedSurface = 0 ; scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; @@ -6482,14 +6482,14 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } -#Time-mean wind stress at 10m above sea surface -'avg_10wst_sea' = { +#Time-mean wind stress at sea surface +'avg_wst_sea' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 49 ; - typeOfFirstFixedSurface = 102 ; + typeOfFirstFixedSurface = 160 ; typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = 10 ; + scaledValueOfFirstFixedSurface = 0 ; scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index 6cb18eaf6..6be980044 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -5385,14 +5385,14 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } -#Wind stress at 10m above sea surface -'Wind stress at 10m above sea surface' = { +#Wind stress at sea surface +'Wind stress at sea surface' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 49 ; - typeOfFirstFixedSurface = 102 ; + typeOfFirstFixedSurface = 160 ; typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = 10 ; + scaledValueOfFirstFixedSurface = 0 ; scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; @@ -6482,14 +6482,14 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } -#Time-mean wind stress at 10m above sea surface -'Time-mean wind stress at 10m above sea surface' = { +#Time-mean wind stress at sea surface +'Time-mean wind stress at sea surface' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 49 ; - typeOfFirstFixedSurface = 102 ; + typeOfFirstFixedSurface = 160 ; typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = 10 ; + scaledValueOfFirstFixedSurface = 0 ; scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 20ef5aa60..99cde9f91 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -5385,14 +5385,14 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } -#Wind stress at 10m above sea surface +#Wind stress at sea surface '262901' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 49 ; - typeOfFirstFixedSurface = 102 ; + typeOfFirstFixedSurface = 160 ; typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = 10 ; + scaledValueOfFirstFixedSurface = 0 ; scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; @@ -6482,14 +6482,14 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } -#Time-mean wind stress at 10m above sea surface +#Time-mean wind stress at sea surface '263901' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 49 ; - typeOfFirstFixedSurface = 102 ; + typeOfFirstFixedSurface = 160 ; typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = 10 ; + scaledValueOfFirstFixedSurface = 0 ; scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 66a4bf1d9..1d44f8ae1 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -5385,14 +5385,14 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } -#Wind stress at 10m above sea surface -'10wst_sea' = { +#Wind stress at sea surface +'wst_sea' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 49 ; - typeOfFirstFixedSurface = 102 ; + typeOfFirstFixedSurface = 160 ; typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = 10 ; + scaledValueOfFirstFixedSurface = 0 ; scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; @@ -6482,14 +6482,14 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } -#Time-mean wind stress at 10m above sea surface -'avg_10wst_sea' = { +#Time-mean wind stress at sea surface +'avg_wst_sea' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 49 ; - typeOfFirstFixedSurface = 102 ; + typeOfFirstFixedSurface = 160 ; typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = 10 ; + scaledValueOfFirstFixedSurface = 0 ; scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index d0b65161b..2360733d7 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -5385,14 +5385,14 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } -#Wind stress at 10m above sea surface +#Wind stress at sea surface 'N m**-2' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 49 ; - typeOfFirstFixedSurface = 102 ; + typeOfFirstFixedSurface = 160 ; typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = 10 ; + scaledValueOfFirstFixedSurface = 0 ; scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; @@ -6482,14 +6482,14 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } -#Time-mean wind stress at 10m above sea surface +#Time-mean wind stress at sea surface 'N m**-2' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 49 ; - typeOfFirstFixedSurface = 102 ; + typeOfFirstFixedSurface = 160 ; typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = 10 ; + scaledValueOfFirstFixedSurface = 0 ; scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; From 749fea60b0c510463184402717a80b21f5a4c4a0 Mon Sep 17 00:00:00 2001 From: Dusan Figala Date: Wed, 2 Aug 2023 16:44:50 +0200 Subject: [PATCH 081/372] Add macos nightly CI --- .github/workflows/nightly.yml | 45 ++++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index cbd03a6ef..e7bd39400 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -8,15 +8,53 @@ on: - cron: '0 20 * * *' jobs: - test: + test-hpc: uses: ./.github/workflows/reusable-ci-hpc.yml with: eccodes: ecmwf/eccodes@${{ github.event.pull_request.head.sha || github.sha }} nightly_test: true secrets: inherit + test-macos: + strategy: + matrix: + name: + - clang@macos-13-arm + - clang@macos-13-x86 + include: + - name: clang@macos-13-arm + labels: [self-hosted, platform-builder-macosx-13.4.1-arm64] + os: macos-13-arm + compiler: clang + compiler_cc: clang + compiler_cxx: clang++ + compiler_fc: gfortran + - name: clang@macos-13-x86 + labels: [self-hosted, platform-builder-macosx-13.4.1-x86_64] + os: macos-13-x86 + compiler: clang + compiler_cc: clang + compiler_cxx: clang++ + compiler_fc: gfortran + runs-on: ${{ matrix.labels }} + env: + DEP_TREE: | + ecbuild: ~ + libaec: + deps: + - ecbuild + eccodes: + deps: + - libaec + - ecbuild + steps: + - uses: ecmwf-actions/reusable-workflows/build-package-with-config@v2 + with: + repository: ecmwf/eccodes@${{ github.sha }} + build_config: .github/ci-config.yml + deploy: - needs: [test] + needs: [test-hpc, test-macos] uses: ecmwf-actions/reusable-workflows/.github/workflows/create-package.yml@v2 with: skip_checks: true @@ -33,7 +71,8 @@ jobs: notify: runs-on: ubuntu-latest needs: - - test + - test-hpc + - test-macos - deploy if: always() steps: From 5cc757bed38c30c0d835e791214045049f900fd8 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 2 Aug 2023 13:09:25 +0000 Subject: [PATCH 082/372] ECC-1654: Error setting key of type 'codetable' as a string --- src/grib_accessor_class_codetable.cc | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/grib_accessor_class_codetable.cc b/src/grib_accessor_class_codetable.cc index 9ac580f85..1130de40d 100644 --- a/src/grib_accessor_class_codetable.cc +++ b/src/grib_accessor_class_codetable.cc @@ -627,11 +627,27 @@ static int value_count(grib_accessor* a, long* count) return 0; } +static bool is_number(const char* input, size_t len) +{ + size_t i = 0; + for (i=0; i Date: Wed, 2 Aug 2023 13:58:23 +0000 Subject: [PATCH 083/372] ECC-1654: Test --- tests/CMakeLists.txt | 1 + tests/grib_ecc-1654.sh | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100755 tests/grib_ecc-1654.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 63a004fd9..f97524872 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -117,6 +117,7 @@ if( HAVE_BUILD_TOOLS ) grib_ecc-1406 grib_ecc-1560 grib_ecc-1571 + grib_ecc-1654 bufr_ecc-1028 bufr_ecc-1195 bufr_ecc-1259 diff --git a/tests/grib_ecc-1654.sh b/tests/grib_ecc-1654.sh new file mode 100755 index 000000000..650b50f9b --- /dev/null +++ b/tests/grib_ecc-1654.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +REDIRECT=/dev/null + +# ECC-1654: Error setting key of type 'codetable' as a string + +label="grib_ecc-1654_test" +tempGribA=temp.$label.A.grib +tempGribB=temp.$label.B.grib +tempFilt=temp.$label.filt +tempLog=temp.$label.log +tempRef=temp.$label.ref + +sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +${tools_dir}/grib_set -s typeOfFirstFixedSurface:s=15 $sample_grib2 $tempGribA +grib_check_key_equals $tempGribA 'typeOfFirstFixedSurface:i' '15' +${tools_dir}/grib_dump -O -p section_4 $tempGribA > $tempLog +grep -q 'typeOfFirstFixedSurface = 15 .*Unknown code table entry' $tempLog + +${tools_dir}/grib_set -s productDefinitionTemplateNumber=0,typeOfFirstFixedSurface=15 $sample_grib2 $tempGribA +${tools_dir}/grib_set -s productDefinitionTemplateNumber=1 $tempGribA $tempGribB +${tools_dir}/grib_compare -b totalLength,section4Length,productDefinitionTemplateNumber $tempGribA $tempGribB + +# Clean up +rm -f $tempGribA $tempGribB $tempFilt $tempLog $tempRef From a0679812e270fce44bb75f29fc52500900c5855e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 2 Aug 2023 19:00:13 +0000 Subject: [PATCH 084/372] ECC-1654: Refactoring --- src/grib_accessor_class_codetable.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/grib_accessor_class_codetable.cc b/src/grib_accessor_class_codetable.cc index 1130de40d..e823a8659 100644 --- a/src/grib_accessor_class_codetable.cc +++ b/src/grib_accessor_class_codetable.cc @@ -627,20 +627,22 @@ static int value_count(grib_accessor* a, long* count) return 0; } -static bool is_number(const char* input, size_t len) +// Return true if the input is an integer (non-negative) +static bool is_number(const char* s) { - size_t i = 0; - for (i=0; i Date: Thu, 3 Aug 2023 17:06:32 +0100 Subject: [PATCH 085/372] ECC-1655: Add extra ECMWF ORCA types --- definitions/grib2/localConcepts/ecmf/marsLevtypeConcept.def | 3 +++ 1 file changed, 3 insertions(+) diff --git a/definitions/grib2/localConcepts/ecmf/marsLevtypeConcept.def b/definitions/grib2/localConcepts/ecmf/marsLevtypeConcept.def index 36c8cf801..8a568ab6f 100644 --- a/definitions/grib2/localConcepts/ecmf/marsLevtypeConcept.def +++ b/definitions/grib2/localConcepts/ecmf/marsLevtypeConcept.def @@ -3,3 +3,6 @@ 'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101;numberOfGridUsed=2;} 'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101;numberOfGridUsed=3;} 'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101;numberOfGridUsed=4;} +'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101;numberOfGridUsed=5;} +'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101;numberOfGridUsed=6;} +'o2d' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;gridDefinitionTemplateNumber=101;numberOfGridUsed=7;} From 5ff27db808b0c41f99202e5ae796a9298835bed4 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 3 Aug 2023 14:15:26 +0000 Subject: [PATCH 086/372] ECC-1656: GRIB: Add keys isGridded and isSpectral (Part 01) --- definitions/grib2/section.3.def | 2 + definitions/grib2/template.3.10.def | 2 + definitions/grib2/template.3.100.def | 23 +++++----- definitions/grib2/template.3.1000.def | 39 +++++++++-------- definitions/grib2/template.3.101.def | 2 + definitions/grib2/template.3.110.def | 42 ++++++++++--------- definitions/grib2/template.3.1100.def | 42 +++++++------------ definitions/grib2/template.3.12.def | 3 +- definitions/grib2/template.3.120.def | 27 ++++++------ definitions/grib2/template.3.1200.def | 2 + definitions/grib2/template.3.130.def | 3 ++ definitions/grib2/template.3.140.def | 42 ++++++++++--------- definitions/grib2/template.3.20.def | 30 ++++++------- definitions/grib2/template.3.30.def | 42 ++++++++++--------- definitions/grib2/template.3.31.def | 29 ++++++------- definitions/grib2/template.3.90.def | 22 +++++----- definitions/grib2/template.3.bf.def | 1 + definitions/grib2/template.3.grid.def | 2 + .../grib2/template.3.spherical_harmonics.def | 2 + 19 files changed, 189 insertions(+), 168 deletions(-) diff --git a/definitions/grib2/section.3.def b/definitions/grib2/section.3.def index b97ad2a50..ad06e8a1f 100644 --- a/definitions/grib2/section.3.def +++ b/definitions/grib2/section.3.def @@ -127,3 +127,5 @@ alias md5GridSection = md5Section3; meta projSourceString proj_string(gridType, 0): hidden; meta projTargetString proj_string(gridType, 1): hidden; alias projString = projTargetString : hidden; + +constant isSpectral = !isGridded : constraint; diff --git a/definitions/grib2/template.3.10.def b/definitions/grib2/template.3.10.def index 975d8dc87..9c1c30bf0 100644 --- a/definitions/grib2/template.3.10.def +++ b/definitions/grib2/template.3.10.def @@ -3,6 +3,8 @@ # TEMPLATE 3.10, Mercator include "grib2/template.3.shape_of_the_earth.def"; +constant isGridded = one; + unsigned[4] Ni : dump; alias numberOfPointsAlongAParallel=Ni; alias Nx = Ni; diff --git a/definitions/grib2/template.3.100.def b/definitions/grib2/template.3.100.def index 89b163406..8b1fe16a3 100644 --- a/definitions/grib2/template.3.100.def +++ b/definitions/grib2/template.3.100.def @@ -1,42 +1,43 @@ # (C) Copyright 2005- ECMWF. # TEMPLATE 3.100, Triangular grid based on an icosahedron (see Attachment I.2-GRIB-Att.) +constant isGridded = one; -# n2 - exponent of 2 for the number of intervals on main triangle sides +# n2 - exponent of 2 for the number of intervals on main triangle sides unsigned[1] n2 : dump ; -# n3 - exponent of 3 for the number of intervals on main triangle sides +# n3 - exponent of 3 for the number of intervals on main triangle sides unsigned[1] n3 : dump ; -# Ni - number of intervals on main triangle sides of the icosahedron +# Ni - number of intervals on main triangle sides of the icosahedron unsigned[2] Ni : dump ; -# nd - Number of diamonds +# nd - Number of diamonds unsigned[1] nd : dump ; alias numberOfDiamonds=nd; -# Latitude of the pole point of the icosahedron on the sphere +# Latitude of the pole point of the icosahedron on the sphere signed[4] latitudeOfThePolePoint : dump ; meta geography.latitudeOfThePolePointInDegrees scale(latitudeOfThePolePoint,one,grib2divider,truncateDegrees) : dump; -# Longitude of the pole point of the icosahedron on the sphere +# Longitude of the pole point of the icosahedron on the sphere unsigned[4] longitudeOfThePolePoint : dump ; meta geography.longitudeOfThePolePointInDegrees g2lon(longitudeOfThePolePoint); -# Longitude of the centre line of the first diamond of the icosahedron on the sphere +# Longitude of the centre line of the first diamond of the icosahedron on the sphere unsigned[4] longitudeOfFirstDiamondCentreLine : dump ; meta geography.longitudeOfFirstDiamondCentreLineInDegrees g2lon(longitudeOfFirstDiamondCentreLine); -# Grid point position +# Grid point position codetable[1] gridPointPosition ('3.8.table',masterDir,localDir); -# Numbering order of diamonds +# Numbering order of diamonds flags[1] numberingOrderOfDiamonds 'grib2/tables/[tablesVersion]/3.9.table'; -# Scanning mode for one diamond +# Scanning mode for one diamond flags[1] scanningModeForOneDiamond 'grib2/tables/[tablesVersion]/3.10.table'; -# nt - total number of grid points +# nt - total number of grid points unsigned[4] totalNumberOfGridPoints : dump ; alias nt = totalNumberOfGridPoints; diff --git a/definitions/grib2/template.3.1000.def b/definitions/grib2/template.3.1000.def index 590151dde..407fc16e7 100644 --- a/definitions/grib2/template.3.1000.def +++ b/definitions/grib2/template.3.1000.def @@ -1,55 +1,54 @@ # (C) Copyright 2005- ECMWF. # TEMPLATE 3.1000, Cross-section grid, with points equally spaced on the horizontal - include "grib2/template.3.shape_of_the_earth.def"; +constant isGridded = one; -# Number of horizontal points -unsigned[4] numberOfHorizontalPoints : dump ; +# Number of horizontal points +unsigned[4] numberOfHorizontalPoints : dump ; -# Basic angle of the initial production domain +# Basic angle of the initial production domain unsigned[4] basicAngleOfTheInitialProductionDomain = 0; -# Subdivisions of basic angle used to define extreme longitudes and latitudes +# Subdivisions of basic angle used to define extreme longitudes and latitudes unsigned[4] subdivisionsOfBasicAngle = missing() : can_be_missing;; -# La1 - latitude of first grid point +# La1 - latitude of first grid point signed[4] latitudeOfFirstGridPoint : edition_specific ; -alias La1 = latitudeOfFirstGridPoint; -# Lo1 - longitude of first grid point +alias La1 = latitudeOfFirstGridPoint; +# Lo1 - longitude of first grid point unsigned[4] longitudeOfFirstGridPoint : edition_specific; -alias Lo1 = longitudeOfFirstGridPoint; +alias Lo1 = longitudeOfFirstGridPoint; include "grib2/template.3.scanning_mode.def"; -# La2 - latitude of last grid point +# La2 - latitude of last grid point signed[4] latitudeOfLastGridPoint : edition_specific; alias La2 = latitudeOfLastGridPoint; -# Lo2 - longitude of last grid point +# Lo2 - longitude of last grid point unsigned[4] longitudeOfLastGridPoint: edition_specific ; alias Lo2 = longitudeOfLastGridPoint; -# Type of horizontal line +# Type of horizontal line codetable[1] typeOfHorizontalLine ('3.20.table',masterDir,localDir) : dump ; -# Number of vertical points -unsigned[2] numberOfVerticalPoints : dump ; +# Number of vertical points +unsigned[2] numberOfVerticalPoints : dump ; -# Physical meaning of vertical coordinate +# Physical meaning of vertical coordinate codetable[1] meaningOfVerticalCoordinate ('3.15.table',masterDir,localDir) : dump ; -# Vertical dimension coordinate values definition +# Vertical dimension coordinate values definition codetable[1] verticalCoordinate ('3.21.table',masterDir,localDir) : dump ; -# NC - Number of coefficients or values used to specify vertical coordinates -unsigned[2] NC : dump ; +# NC - Number of coefficients or values used to specify vertical coordinates +unsigned[2] NC : dump ; # Octets 67-(66+NC*4) : Coefficients to define vertical dimension coordinate values in functional form, or the explicit coordinate values # (IEEE 32-bit floating-point values) -# ???? coefficients_to_define_vertical_dimension_coordinate_values_in_functional_form_or_the_explicit_coordinate_values - +# ???? coefficients_to_define_vertical_dimension_coordinate_values_in_functional_form_or_the_explicit_coordinate_values diff --git a/definitions/grib2/template.3.101.def b/definitions/grib2/template.3.101.def index 6c37f39de..65d27a22f 100644 --- a/definitions/grib2/template.3.101.def +++ b/definitions/grib2/template.3.101.def @@ -2,6 +2,8 @@ # TEMPLATE 3.101, General Unstructured Grid +constant isGridded = one; + codetable[1] shapeOfTheEarth ('3.2.table',masterDir,localDir) : dump; unsigned[3] numberOfGridUsed : dump; diff --git a/definitions/grib2/template.3.110.def b/definitions/grib2/template.3.110.def index 5d63071db..8a1f50e8e 100644 --- a/definitions/grib2/template.3.110.def +++ b/definitions/grib2/template.3.110.def @@ -3,33 +3,35 @@ # TEMPLATE 3.110, Equatorial azimuthal equidistant projection include "grib2/template.3.shape_of_the_earth.def"; -# Nx - number of points along X-axis -unsigned[4] numberOfPointsAlongXAxis : dump ; +constant isGridded = one; -alias Nx = numberOfPointsAlongXAxis; -# Ny - number of points along Y-axis -unsigned[4] numberOfPointsAlongYAxis : dump ; +# Nx - number of points along X-axis +unsigned[4] numberOfPointsAlongXAxis : dump; -alias Ny = numberOfPointsAlongYAxis; -# La1 - latitude of tangency point +alias Nx = numberOfPointsAlongXAxis; +# Ny - number of points along Y-axis +unsigned[4] numberOfPointsAlongYAxis : dump; + +alias Ny = numberOfPointsAlongYAxis; +# La1 - latitude of tangency point # (centre of grid) -signed[4] latitudeOfTangencyPoint : dump ; +signed[4] latitudeOfTangencyPoint : dump; -alias La1 = latitudeOfTangencyPoint; -# Lo1 - longitude of tangency point -unsigned[4] longitudeOfTangencyPoint : dump ; +alias La1 = latitudeOfTangencyPoint; +# Lo1 - longitude of tangency point +unsigned[4] longitudeOfTangencyPoint : dump; -alias Lo1 = longitudeOfTangencyPoint; -# Resolution and component flag -flags[1] resolutionAndComponentFlags 'grib2/tables/[tablesVersion]/3.3.table' : dump ; +alias Lo1 = longitudeOfTangencyPoint; +# Resolution and component flag +flags[1] resolutionAndComponentFlags 'grib2/tables/[tablesVersion]/3.3.table' : dump; -# Dx - X-direction grid length in units of 10 -3 m as measured at the point of the axis -unsigned[4] Dx : dump ; +# Dx - X-direction grid length in units of 10 -3 m as measured at the point of the axis +unsigned[4] Dx : dump; -# Dy - Y-direction grid length in units of 10 -3 m as measured at the point of the axis -unsigned[4] Dy : dump ; +# Dy - Y-direction grid length in units of 10 -3 m as measured at the point of the axis +unsigned[4] Dy : dump; -# Projection centre flag -unsigned[1] projectionCentreFlag : dump ; +# Projection centre flag +unsigned[1] projectionCentreFlag : dump; include "grib2/template.3.scanning_mode.def"; diff --git a/definitions/grib2/template.3.1100.def b/definitions/grib2/template.3.1100.def index 2996da7db..f9bdbef8b 100644 --- a/definitions/grib2/template.3.1100.def +++ b/definitions/grib2/template.3.1100.def @@ -3,73 +3,63 @@ # TEMPLATE 3.1100, Hovmoller diagram grid with points equally spaced on the horizontal include "grib2/template.3.shape_of_the_earth.def"; -# Number of horizontal points +constant isGridded = one; + +# Number of horizontal points unsigned[5] numberOfHorizontalPoints : dump ; -# Basic angle of the initial production domain +# Basic angle of the initial production domain unsigned[4] basicAngleOfTheInitialProductionDomain = 0 : dump ; -# Subdivisions of basic angle used to define extreme longitudes and latitudes +# Subdivisions of basic angle used to define extreme longitudes and latitudes unsigned[4] subdivisionsOfBasicAngle = missing() : can_be_missing,dump; -# La1 - latitude of first grid point +# La1 - latitude of first grid point signed[4] latitudeOfFirstGridPoint : edition_specific,dump; alias La1 =latitudeOfFirstGridPoint; -# Lo1 - longitude of first grid point +# Lo1 - longitude of first grid point unsigned[4] longitudeOfFirstGridPoint : edition_specific,dump; alias Lo1 =longitudeOfFirstGridPoint; include "grib2/template.3.scanning_mode.def"; -# La2 - latitude of last grid point +# La2 - latitude of last grid point signed[4] latitudeOfLastGridPoint : edition_specific,dump; alias La2 = latitudeOfLastGridPoint; -# Lo2 - longitude of last grid point +# Lo2 - longitude of last grid point unsigned[4] longitudeOfLastGridPoint : edition_specific,dump ; alias Lo2 = longitudeOfLastGridPoint; -# Type of horizontal line +# Type of horizontal line codetable[1] typeOfHorizontalLine ('3.20.table',masterDir,localDir) : dump; -# NT - Number of time steps +# NT - Number of time steps unsigned[4] numberOfTimeSteps : dump; alias NT = numberOfTimeSteps; -# Unit of offset from reference time +# Unit of offset from reference time codetable[1] unitOfOffsetFromReferenceTime ('4.4.table',masterDir,localDir) : dump; -# Offset from reference of first time +# Offset from reference of first time # (negative value when first bit set) unsigned[4] offsetFromReferenceOfFirstTime ; -# Type of time increment +# Type of time increment codetable[1] typeOfTimeIncrement ('4.11.table',masterDir,localDir) : dump; -# Unit of time increment +# Unit of time increment codetable[1] unitOfTimeIncrement ('4.4.table',masterDir,localDir) : dump; -# Time increment +# Time increment # (negative value when first bit set) unsigned[4] timeIncrement : dump ; -# Year unsigned[2] year : dump; - -# Month unsigned[1] month : dump; - -# Day unsigned[1] day : dump; - -# Hour unsigned[1] hour : dump; - -# Minute unsigned[1] minute : dump; - -# Second unsigned[1] second : dump; - diff --git a/definitions/grib2/template.3.12.def b/definitions/grib2/template.3.12.def index d75098148..b45a065d4 100644 --- a/definitions/grib2/template.3.12.def +++ b/definitions/grib2/template.3.12.def @@ -1,9 +1,10 @@ # (C) Copyright 2005- ECMWF. # TEMPLATE 3.12, Transverse Mercator - include "grib2/template.3.shape_of_the_earth.def"; +constant isGridded = one; + unsigned[4] Ni : dump; alias numberOfPointsAlongAParallel=Ni; alias Nx = Ni; diff --git a/definitions/grib2/template.3.120.def b/definitions/grib2/template.3.120.def index 49daa9756..19edb2c6b 100644 --- a/definitions/grib2/template.3.120.def +++ b/definitions/grib2/template.3.120.def @@ -1,34 +1,37 @@ # (C) Copyright 2005- ECMWF. # TEMPLATE 3.120, Azimuth-range projection -# Nb - number of data bins along radials (A data bin is a data point representing the volume centred on it) -unsigned[4] numberOfDataBinsAlongRadials ; + +constant isGridded = one; + +# Nb - number of data bins along radials (A data bin is a data point representing the volume centred on it) +unsigned[4] numberOfDataBinsAlongRadials; alias Nb = numberOfDataBinsAlongRadials; -# Nr - number of radials -unsigned[4] numberOfRadials ; +# Nr - number of radials +unsigned[4] numberOfRadials; alias Nr = numberOfRadials; -# La1 - latitude of centre point -signed[4] latitudeOfCentrePoint ; +# La1 - latitude of centre point +signed[4] latitudeOfCentrePoint; alias La1 = latitudeOfCentrePoint; meta geography.latitudeOfCentrePointInDegrees scale(latitudeOfCentrePoint,one,grib2divider,truncateDegrees) : dump; alias La1InDegrees=latitudeOfCentrePointInDegrees; -# Lo1 - longitude of centre point -unsigned[4] longitudeOfCentrePoint ; +# Lo1 - longitude of centre point +unsigned[4] longitudeOfCentrePoint; alias Lo1 = longitudeOfCentrePoint; meta geography.longitudeOfCentrePointInDegrees scale(longitudeOfCentrePoint,one,grib2divider,truncateDegrees) : dump; alias Lo1InDegrees=longitudeOfCentrePointInDegrees; -# Dx - spacing of bins along radials -unsigned[4] spacingOfBinsAlongRadials ; +# Dx - spacing of bins along radials +unsigned[4] spacingOfBinsAlongRadials; alias Dx = spacingOfBinsAlongRadials; -# Dstart - offset from origin to inner bound -unsigned[4] offsetFromOriginToInnerBound ; +# Dstart - offset from origin to inner bound +unsigned[4] offsetFromOriginToInnerBound; alias Dstart = offsetFromOriginToInnerBound; include "grib2/template.3.scanning_mode.def"; diff --git a/definitions/grib2/template.3.1200.def b/definitions/grib2/template.3.1200.def index 5429c32f9..93ebe91fb 100644 --- a/definitions/grib2/template.3.1200.def +++ b/definitions/grib2/template.3.1200.def @@ -1,6 +1,8 @@ # (C) Copyright 2005- ECMWF. # TEMPLATE 3.1200, Time section grid +constant isGridded = one; + # NT - Number of time steps unsigned[4] numberOfTimeSteps : dump; diff --git a/definitions/grib2/template.3.130.def b/definitions/grib2/template.3.130.def index 5a075aa3a..168080b47 100644 --- a/definitions/grib2/template.3.130.def +++ b/definitions/grib2/template.3.130.def @@ -1,6 +1,9 @@ # (C) Copyright 2005- ECMWF. # TEMPLATE 3.130, Irregular Latitude/longitude grid + +constant isGridded = one; + # Note: This template is deprecated. include "grib2/template.3.shape_of_the_earth.def"; diff --git a/definitions/grib2/template.3.140.def b/definitions/grib2/template.3.140.def index df94e3120..1ec12cadd 100644 --- a/definitions/grib2/template.3.140.def +++ b/definitions/grib2/template.3.140.def @@ -3,49 +3,51 @@ # TEMPLATE 3.140, Lambert azimuthal equal area projection include "grib2/template.3.shape_of_the_earth.def"; -# Nx - number of points along X-axis -unsigned[4] numberOfPointsAlongXAxis : dump ; +constant isGridded = one; + +# Nx - number of points along X-axis +unsigned[4] numberOfPointsAlongXAxis : dump; alias Nx = numberOfPointsAlongXAxis; alias Ni = Nx; -# Ny - number of points along Y-axis -unsigned[4] numberOfPointsAlongYAxis : dump ; +# Ny - number of points along Y-axis +unsigned[4] numberOfPointsAlongYAxis : dump; alias Ny = numberOfPointsAlongYAxis; alias Nj = Ny; -# La1 - latitude of first grid point -signed[4] latitudeOfFirstGridPoint: edition_specific ; +# La1 - latitude of first grid point +signed[4] latitudeOfFirstGridPoint: edition_specific; alias La1 = latitudeOfFirstGridPoint; -meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint - ,one,grib2divider,truncateDegrees) : dump; +meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint, + one,grib2divider,truncateDegrees) : dump; #meta latitudeOfFirstGridPointInMicrodegrees times(latitudeOfFirstGridPoint,mAngleMultiplier,angleDivisor): no_copy; -# Lo1 - longitude of first grid point +# Lo1 - longitude of first grid point signed[4] longitudeOfFirstGridPoint: edition_specific ; alias La1 = longitudeOfFirstGridPoint; -meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint - ,one,grib2divider,truncateDegrees) : dump; +meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint, + one,grib2divider,truncateDegrees) : dump; #meta longitudeOfFirstGridPointInMicrodegrees times(longitudeOfFirstGridPoint,mAngleMultiplier,angleDivisor) : no_copy; -signed[4] standardParallelInMicrodegrees : dump; +signed[4] standardParallelInMicrodegrees : dump; alias standardParallel=standardParallelInMicrodegrees; meta geography.standardParallelInDegrees scale(standardParallelInMicrodegrees,one,grib2divider,truncateDegrees) : dump; -signed[4] centralLongitudeInMicrodegrees : dump; +signed[4] centralLongitudeInMicrodegrees : dump; alias centralLongitude=centralLongitudeInMicrodegrees; meta geography.centralLongitudeInDegrees scale(centralLongitudeInMicrodegrees,one,grib2divider,truncateDegrees) : dump; -# Resolution and component flag -flags[1] resolutionAndComponentFlags 'grib2/tables/[tablesVersion]/3.3.table' : dump ; +# Resolution and component flag +flags[1] resolutionAndComponentFlags 'grib2/tables/[tablesVersion]/3.3.table' : dump; -# Dx - X-direction grid length in millimetres -unsigned[4] xDirectionGridLengthInMillimetres : dump ; -alias Dx = xDirectionGridLengthInMillimetres ; +# Dx - X-direction grid length in millimetres +unsigned[4] xDirectionGridLengthInMillimetres: dump; +alias Dx = xDirectionGridLengthInMillimetres; meta geography.xDirectionGridLengthInMetres scale(xDirectionGridLengthInMillimetres,one,thousand,truncateDegrees): dump; alias DxInMetres = xDirectionGridLengthInMetres; -# Dy - Y-direction grid length in millimetres -unsigned[4] yDirectionGridLengthInMillimetres : dump ; +# Dy - Y-direction grid length in millimetres +unsigned[4] yDirectionGridLengthInMillimetres : dump ; alias Dy = yDirectionGridLengthInMillimetres ; meta geography.yDirectionGridLengthInMetres scale(yDirectionGridLengthInMillimetres,one,thousand,truncateDegrees): dump; alias DyInMetres = yDirectionGridLengthInMetres; diff --git a/definitions/grib2/template.3.20.def b/definitions/grib2/template.3.20.def index 370ab6d2d..1e15ab98e 100644 --- a/definitions/grib2/template.3.20.def +++ b/definitions/grib2/template.3.20.def @@ -3,57 +3,59 @@ # TEMPLATE 3.20, Polar stereographic projection include "grib2/template.3.shape_of_the_earth.def"; -# Nx - number of points along X-axis +constant isGridded = one; + +# Nx - number of points along X-axis unsigned[4] Nx : dump; alias Ni = Nx; alias numberOfPointsAlongXAxis = Nx; alias geography.Nx=Nx; -# Ny - number of points along Y-axis +# Ny - number of points along Y-axis unsigned[4] Ny : dump; alias Nj = Ny; alias numberOfPointsAlongYAxis = Ny; alias geography.Ny=Ny; -# La1 - latitude of first grid point +# La1 - latitude of first grid point signed[4] latitudeOfFirstGridPoint : edition_specific ; meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint,oneConstant,grib2divider,truncateDegrees) : dump; alias La1 = latitudeOfFirstGridPoint; -# Lo1 - longitude of first grid point +# Lo1 - longitude of first grid point unsigned[4] longitudeOfFirstGridPoint : edition_specific; meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint,oneConstant,grib2divider,truncateDegrees) : dump; alias Lo1 = longitudeOfFirstGridPoint; -# Resolution and component flag +# Resolution and component flag flags[1] resolutionAndComponentFlags 'grib2/tables/[tablesVersion]/3.3.table' : dump; -# LaD - Latitude where Dx and Dy are specified +# LaD - Latitude where Dx and Dy are specified signed[4] LaD : edition_specific; alias latitudeWhereDxAndDyAreSpecified=LaD; meta geography.LaDInDegrees scale(LaD,oneConstant,grib2divider,truncateDegrees) : dump; alias latitudeWhereDxAndDyAreSpecifiedInDegrees=LaDInDegrees; -# LoV - orientation of the grid -# LoV is the longitude value of the meridian which is parallel to the y-axis (or columns of the grid) -# along which latitude increases as the y-coordinate increases +# LoV - orientation of the grid +# LoV is the longitude value of the meridian which is parallel to the y-axis (or columns of the grid) +# along which latitude increases as the y-coordinate increases signed[4] orientationOfTheGrid : edition_specific; alias LoV = orientationOfTheGrid ; meta geography.orientationOfTheGridInDegrees scale(orientationOfTheGrid,oneConstant,grib2divider,truncateDegrees) : dump; -# Dx - X-direction grid length -# Grid length is in units of 10-3 m at the latitude specified by LaD +# Dx - X-direction grid length +# Grid length is in units of 10-3 m at the latitude specified by LaD unsigned[4] Dx : edition_specific; meta geography.DxInMetres scale(Dx,one,thousand,truncateDegrees) : dump; alias xDirectionGridLength=Dx; -# Dy - Y-direction grid length -# Grid length is in units of 10-3 m at the latitude specified by LaD +# Dy - Y-direction grid length +# Grid length is in units of 10-3 m at the latitude specified by LaD unsigned[4] Dy : edition_specific; meta geography.DyInMetres scale(Dy,one,thousand,truncateDegrees) : dump; alias yDirectionGridLength=Dy; -# Projection centre flag +# Projection centre flag flags[1] projectionCentreFlag 'grib2/tables/[tablesVersion]/3.5.table' : dump; # Note our flagbit numbers go from 7 to 0, while WMO convention is from 1 to 8 # If bit 1 is 0, then the North Pole is on the projection plane diff --git a/definitions/grib2/template.3.30.def b/definitions/grib2/template.3.30.def index 10b0392ca..cdf13a337 100644 --- a/definitions/grib2/template.3.30.def +++ b/definitions/grib2/template.3.30.def @@ -3,27 +3,29 @@ # TEMPLATE 3.30, Lambert conformal include "grib2/template.3.shape_of_the_earth.def"; -unsigned[4] Nx : dump; +constant isGridded = one; + +unsigned[4] Nx : dump; alias Ni = Nx; -alias numberOfPointsAlongXAxis = Nx; +alias numberOfPointsAlongXAxis = Nx; alias geography.Nx=Nx; unsigned[4] Ny : dump; alias Nj = Ny; -alias numberOfPointsAlongYAxis = Ny; +alias numberOfPointsAlongYAxis = Ny; alias geography.Ny=Ny; -# La1 - latitude of first grid point +# La1 - latitude of first grid point signed[4] latitudeOfFirstGridPoint : edition_specific; -alias La1 = latitudeOfFirstGridPoint; +alias La1 = latitudeOfFirstGridPoint; meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint,one,grib2divider,truncateDegrees) : dump; alias La1InDegrees=latitudeOfFirstGridPointInDegrees; #meta latitudeOfFirstGridPointInMicrodegrees times(latitudeOfFirstGridPointInDegrees,oneConstant): no_copy; -# Lo1 - longitude of first grid point +# Lo1 - longitude of first grid point unsigned[4] longitudeOfFirstGridPoint : edition_specific; -alias Lo1 = longitudeOfFirstGridPoint; +alias Lo1 = longitudeOfFirstGridPoint; meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint,one,grib2divider,truncateDegrees) : dump; alias Lo1InDegrees = longitudeOfFirstGridPointInDegrees; @@ -31,48 +33,48 @@ alias Lo1InDegrees = longitudeOfFirstGridPointInDegrees; include "grib2/template.3.resolution_flags.def"; -# LaD - Latitude where Dx and Dy are specified -signed[4] LaD : edition_specific ; +# LaD - Latitude where Dx and Dy are specified +signed[4] LaD : edition_specific; alias latitudeWhereDxAndDyAreSpecified=LaD; meta geography.LaDInDegrees scale(LaD,one,grib2divider,truncateDegrees) : dump; -# LoV - Longitude of meridian parallel to Y-axis along which latitude increases as the Y-coordinate increases +# LoV - Longitude of meridian parallel to Y-axis along which latitude increases as the Y-coordinate increases unsigned[4] LoV : edition_specific; meta geography.LoVInDegrees scale(LoV,one,grib2divider,truncateDegrees) : dump; -# Dx - X-direction grid length (in units of millimetres) -unsigned[4] Dx : edition_specific ; +# Dx - X-direction grid length (in units of millimetres) +unsigned[4] Dx : edition_specific; alias xDirectionGridLength=Dx; alias Di = Dx; meta geography.DxInMetres scale(Dx,one,thousand) : dump; -# Dy - Y-direction grid length (in units of millimetres) -unsigned[4] Dy : edition_specific ; -alias yDirectionGridLength=Dy ; +# Dy - Y-direction grid length (in units of millimetres) +unsigned[4] Dy : edition_specific; +alias yDirectionGridLength=Dy; alias Dj = Dy; meta geography.DyInMetres scale(Dy,one,thousand) : dump; -# Projection centre flag +# Projection centre flag flags[1] projectionCentreFlag 'grib2/tables/[tablesVersion]/3.5.table' : dump; include "grib2/template.3.scanning_mode.def"; -# Latin 1 - first latitude from the pole at which the secant cone cuts the sphere +# Latin 1 - first latitude from the pole at which the secant cone cuts the sphere signed[4] Latin1 : edition_specific; alias FirstLatitude=Latin1; meta geography.Latin1InDegrees scale(Latin1,one,grib2divider,truncateDegrees) : dump; -# Latin 2 - second latitude from the pole at which the secant cone cuts the sphere +# Latin 2 - second latitude from the pole at which the secant cone cuts the sphere signed[4] Latin2 : dump; alias SecondLatitude=Latin2; meta geography.Latin2InDegrees scale(Latin2,one,grib2divider,truncateDegrees) : dump; -# Latitude of the southern pole of projection +# Latitude of the southern pole of projection signed[4] latitudeOfSouthernPole : edition_specific; alias latitudeOfTheSouthernPoleOfProjection=latitudeOfSouthernPole; meta geography.latitudeOfSouthernPoleInDegrees scale(latitudeOfSouthernPole,one,grib2divider,truncateDegrees) : dump; -# Longitude of the southern pole of projection +# Longitude of the southern pole of projection unsigned[4] longitudeOfSouthernPole : edition_specific; alias longitudeOfTheSouthernPoleOfProjection=longitudeOfSouthernPole; meta geography.longitudeOfSouthernPoleInDegrees scale(longitudeOfSouthernPole,oneConstant,grib2divider,truncateDegrees) : dump; diff --git a/definitions/grib2/template.3.31.def b/definitions/grib2/template.3.31.def index 1b408693d..0db29f7a4 100644 --- a/definitions/grib2/template.3.31.def +++ b/definitions/grib2/template.3.31.def @@ -3,60 +3,61 @@ # TEMPLATE 3.31, Albers equal area include "grib2/template.3.shape_of_the_earth.def"; -# Nx - number of points along the X-axis +constant isGridded = one; + +# Nx - number of points along the X-axis unsigned[4] Nx : dump; alias numberOfPointsAlongTheXAxis=Nx; alias geography.Nx=Nx; -# Ny - number of points along the Y-axis +# Ny - number of points along the Y-axis unsigned[4] Ny : dump; alias numberOfPointsAlongTheYAxis=Ny; alias geography.Ny=Ny; -# La1 - latitude of first grid point +# La1 - latitude of first grid point signed[4] latitudeOfFirstGridPoint : edition_specific,dump; alias La1 = latitudeOfFirstGridPoint; -# Lo1 - longitude of first grid point +# Lo1 - longitude of first grid point unsigned[4] longitudeOfFirstGridPoint : edition_specific,dump; alias Lo1 = longitudeOfFirstGridPoint; include "grib2/template.3.resolution_flags.def"; -# LaD - Latitude where Dx and Dy are specified +# LaD - Latitude where Dx and Dy are specified signed[4] LaD : dump; alias latitudeWhereDxAndDyAreSpecified=LaD ; -# LoV - Longitude of meridian parallel to Y-axis along which latitude increases as the Y-coordinate increases +# LoV - Longitude of meridian parallel to Y-axis along which latitude increases as the Y-coordinate increases unsigned[4] LoV : dump; -# Dx - X-direction grid length +# Dx - X-direction grid length unsigned[4] xDirectionGridLength : dump; alias Dx = xDirectionGridLength; -# Dy - Y-direction grid length +# Dy - Y-direction grid length unsigned[4] yDirectionGridLength : dump; alias Dy = yDirectionGridLength; -# Projection centre flag +# Projection centre flag flags[1] projectionCentreFlag 'grib2/tables/[tablesVersion]/3.5.table' : dump; include "grib2/template.3.scanning_mode.def"; -# Latin 1 - first latitude from the pole at which the secant cone cuts the sphere +# Latin 1 - first latitude from the pole at which the secant cone cuts the sphere signed[4] Latin1 :edition_specific; meta geography.Latin1InDegrees scale(Latin1,one,grib2divider,truncateDegrees) : dump; -# Latin 2 - second latitude from the pole at which the secant cone cuts the sphere +# Latin 2 - second latitude from the pole at which the secant cone cuts the sphere unsigned[4] Latin2 : edition_specific; meta geography.Latin2InDegrees scale(Latin2,one,grib2divider,truncateDegrees) : dump; -# Latitude of the southern pole of projection +# Latitude of the southern pole of projection signed[4] latitudeOfTheSouthernPoleOfProjection : edition_specific ; alias latitudeOfSouthernPole=latitudeOfTheSouthernPoleOfProjection; meta geography.latitudeOfSouthernPoleInDegrees scale(latitudeOfTheSouthernPoleOfProjection ,one,grib2divider,truncateDegrees) : dump; - -# Longitude of the southern pole of projection +# Longitude of the southern pole of projection unsigned[4] longitudeOfTheSouthernPoleOfProjection :edition_specific; alias longitudeOfSouthernPole=longitudeOfTheSouthernPoleOfProjection; meta geography.longitudeOfSouthernPoleInDegrees scale(longitudeOfTheSouthernPoleOfProjection,oneConstant,grib2divider,truncateDegrees) : dump; diff --git a/definitions/grib2/template.3.90.def b/definitions/grib2/template.3.90.def index a4f6a092f..38ea4cab5 100644 --- a/definitions/grib2/template.3.90.def +++ b/definitions/grib2/template.3.90.def @@ -3,6 +3,8 @@ # TEMPLATE 3.90, Space view perspective or orthographic include "grib2/template.3.shape_of_the_earth.def"; +constant isGridded = one; + unsigned[4] Nx : dump; alias Ni = Nx; alias numberOfPointsAlongXAxis = Nx; @@ -13,10 +15,10 @@ alias Nj = Ny; alias numberOfPointsAlongYAxis = Ny; alias geography.Ny=Ny; -# Lap - latitude of sub-satellite point +# Lap - latitude of sub-satellite point signed[4] latitudeOfSubSatellitePoint; -# Lop - longitude of sub-satellite point +# Lop - longitude of sub-satellite point signed[4] longitudeOfSubSatellitePoint; meta geography.latitudeOfSubSatellitePointInDegrees scale(latitudeOfSubSatellitePoint,one,grib2divider,truncateDegrees) : dump; @@ -24,21 +26,21 @@ meta geography.longitudeOfSubSatellitePointInDegrees scale(longitudeOfSubSatel include "grib2/template.3.resolution_flags.def"; -# dx - apparent diameter of Earth in grid lengths, in X-direction +# dx - apparent diameter of Earth in grid lengths, in X-direction unsigned[4] dx : dump; alias geography.dx=dx; -# dy - apparent diameter of Earth in grid lengths, in Y-direction +# dy - apparent diameter of Earth in grid lengths, in Y-direction unsigned[4] dy : dump; alias geography.dy=dy; -# Xp - X-coordinate of sub-satellite point +# Xp - X-coordinate of sub-satellite point # (in units of 10^-3 grid length expressed as an integer) unsigned[4] Xp : no_copy; meta geography.XpInGridLengths scale(Xp,one,thousand) : dump; alias xCoordinateOfSubSatellitePoint=XpInGridLengths; -# Yp - Y-coordinate of sub-satellite point +# Yp - Y-coordinate of sub-satellite point # (in units of 10^-3 grid length expressed as an integer) unsigned[4] Yp : no_copy; meta geography.YpInGridLengths scale(Yp,one,thousand) : dump; @@ -46,25 +48,25 @@ alias yCoordinateOfSubSatellitePoint=YpInGridLengths; include "grib2/template.3.scanning_mode.def"; -# Orientation of the grid; i.e. the angle between the increasing Y-axis and the meridian +# Orientation of the grid; i.e. the angle between the increasing Y-axis and the meridian # of the sub-satellite point in the direction of increasing latitude signed[4] orientationOfTheGrid : edition_specific; meta geography.orientationOfTheGridInDegrees scale(orientationOfTheGrid,oneConstant,grib2divider,truncateDegrees) : dump; -# Nr - altitude of the camera from the Earth's centre, measured in units of the Earth's +# Nr - altitude of the camera from the Earth's centre, measured in units of the Earth's # (equatorial) radius multiplied by a scale factor of 10^6 unsigned[4] Nr : edition_specific,can_be_missing,no_copy; alias altitudeOfTheCameraFromTheEarthsCentreMeasuredInUnitsOfTheEarthsRadius = Nr; meta geography.NrInRadiusOfEarth scale(Nr,oneConstant,oneMillionConstant,truncateDegrees) : dump; alias NrInRadiusOfEarthScaled=NrInRadiusOfEarth; -# Xo - X-coordinate of origin of sector image +# Xo - X-coordinate of origin of sector image unsigned[4] Xo : dump; alias xCoordinateOfOriginOfSectorImage=Xo; alias geography.Xo=Xo; -# Yo - Y-coordinate of origin of sector image +# Yo - Y-coordinate of origin of sector image unsigned[4] Yo : dump; alias yCoordinateOfOriginOfSectorImage=Yo; alias geography.Yo=Yo; diff --git a/definitions/grib2/template.3.bf.def b/definitions/grib2/template.3.bf.def index a2c12db0f..7274dedcd 100644 --- a/definitions/grib2/template.3.bf.def +++ b/definitions/grib2/template.3.bf.def @@ -1,5 +1,6 @@ label "BiFourier coefficients"; constant biFourierCoefficients=1; +constant isGridded = one; codetable[1] spectralType ('3.6.table',masterDir,localDir) = 2 : no_copy; alias spectralDataRepresentationType=spectralType; diff --git a/definitions/grib2/template.3.grid.def b/definitions/grib2/template.3.grid.def index f0d586dec..c23cddf52 100644 --- a/definitions/grib2/template.3.grid.def +++ b/definitions/grib2/template.3.grid.def @@ -1,5 +1,7 @@ # (C) Copyright 2005- ECMWF. +constant isGridded = one; + unsigned[4] Ni : can_be_missing,dump; alias numberOfPointsAlongAParallel=Ni; alias Nx = Ni; diff --git a/definitions/grib2/template.3.spherical_harmonics.def b/definitions/grib2/template.3.spherical_harmonics.def index 79be41bb4..3e58d278c 100644 --- a/definitions/grib2/template.3.spherical_harmonics.def +++ b/definitions/grib2/template.3.spherical_harmonics.def @@ -26,3 +26,5 @@ alias spectralDataRepresentationType=spectralType; # Representation mode indicating the order of the coefficients codetable[1] spectralMode ('3.7.table',masterDir,localDir) = 1 : no_copy; alias spectralDataRepresentationMode=spectralMode; + +constant isGridded = zero; From 4e8c0fc5dc4f9cd8e1acc11568966ad1b94206bb Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 3 Aug 2023 14:46:09 +0000 Subject: [PATCH 087/372] ECC-1656: Test for GRIB2 grid types --- tests/grib_gridType.sh | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tests/grib_gridType.sh b/tests/grib_gridType.sh index b21f09f9f..1f0bbb854 100755 --- a/tests/grib_gridType.sh +++ b/tests/grib_gridType.sh @@ -70,6 +70,56 @@ set -e [ $status -ne 0 ] grep -q "Nearest neighbour functionality is not supported for grid: Variable resolution latitude/longitude" $tempText +# Check the keys isSpectral and isGridded +# ---------------------------------------- +grib2_grid_types=" + regular_ll + reduced_ll + rotated_ll + stretched_ll + stretched_rotated_ll + mercator + transverse_mercator + polar_stereographic + lambert + albers + regular_gg + reduced_gg + rotated_gg + reduced_rotated_gg + stretched_gg + reduced_stretched_gg + stretched_rotated_gg + reduced_stretched_rotated_gg + regular_rotated_gg + regular_stretched_gg + regular_stretched_rotated_gg + sh + rotated_sh + stretched_sh + stretched_rotated_sh + space_view + triangular_grid + unstructured_grid + equatorial_azimuthal_equidistant + azimuth_range + irregular_latlon + lambert_azimuthal_equal_area + lambert_lam + mercator_lam + polar_stereographic_lam + lambert_bf + mercator_bf + polar_stereographic_bf +" + +sample2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + +for gt in $grib2_grid_types; do + ${tools_dir}/grib_set -s gridType=$gt $sample2 $tempGrib + ${tools_dir}/grib_get -p isGridded,isSpectral $tempGrib +done + # Clean up rm -f $tempGrib $tempFilt $tempText From 37045648d007565848ddca879fea8280b19fef04 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 3 Aug 2023 15:54:49 +0000 Subject: [PATCH 088/372] ECC-1656: GRIB: Add keys isGridded and isSpectral (final) --- .../grid_definition_spherical_harmonics.def | 1 + definitions/grib1/scanning_mode.def | 2 + definitions/grib1/section.2.def | 2 + definitions/grib1/section.4.def | 2 +- tests/grib_gridType.sh | 133 ++++++++++++------ 5 files changed, 96 insertions(+), 44 deletions(-) diff --git a/definitions/grib1/grid_definition_spherical_harmonics.def b/definitions/grib1/grid_definition_spherical_harmonics.def index 5041d374d..f79e45157 100644 --- a/definitions/grib1/grid_definition_spherical_harmonics.def +++ b/definitions/grib1/grid_definition_spherical_harmonics.def @@ -1,4 +1,5 @@ # GRID DEFINITION spherical harmonic coefficients (including rotated, stretched, or stretched and rotated) +constant isGridded = zero; # J - pentagonal resolution parameter unsigned[2] J : dump ; diff --git a/definitions/grib1/scanning_mode.def b/definitions/grib1/scanning_mode.def index ca2c5c60f..fadd9509f 100644 --- a/definitions/grib1/scanning_mode.def +++ b/definitions/grib1/scanning_mode.def @@ -1,3 +1,5 @@ +constant isGridded = one; + # Scanning mode flags[1] scanningMode 'grib1/8.table' : edition_specific,no_copy; diff --git a/definitions/grib1/section.2.def b/definitions/grib1/section.2.def index 4bf1d5966..0bef0e818 100644 --- a/definitions/grib1/section.2.def +++ b/definitions/grib1/section.2.def @@ -85,3 +85,5 @@ padtoeven padding_sec2_3(offsetSection2,section2Length); meta md5Section2 md5(offsetSection2,section2Length); alias md5GridSection = md5Section2; + +constant isSpectral = !isGridded : constraint; diff --git a/definitions/grib1/section.4.def b/definitions/grib1/section.4.def index 126391ed9..ef6428e3f 100644 --- a/definitions/grib1/section.4.def +++ b/definitions/grib1/section.4.def @@ -194,7 +194,7 @@ concept gridType { "UTM" = {dataRepresentationType = 6; sphericalHarmonics = 0; PLPresent=0; } "simple_polyconic" = {dataRepresentationType = 7; sphericalHarmonics = 0; PLPresent=0; } "albers" = {dataRepresentationType = 8; sphericalHarmonics = 0; PLPresent=0; } - "miller" = {dataRepresentationType = 8; sphericalHarmonics = 0; PLPresent=0; } + "miller" = {dataRepresentationType = 9; sphericalHarmonics = 0; PLPresent=0; } "rotated_ll" = {dataRepresentationType = 10; sphericalHarmonics = 0; PLPresent=0; } "stretched_ll" = {dataRepresentationType = 20; sphericalHarmonics = 0; PLPresent=0; } "stretched_rotated_ll" = {dataRepresentationType = 30; sphericalHarmonics = 0; PLPresent=0; } diff --git a/tests/grib_gridType.sh b/tests/grib_gridType.sh index 1f0bbb854..44cb9ebc0 100755 --- a/tests/grib_gridType.sh +++ b/tests/grib_gridType.sh @@ -72,52 +72,99 @@ grep -q "Nearest neighbour functionality is not supported for grid: Variable res # Check the keys isSpectral and isGridded # ---------------------------------------- -grib2_grid_types=" - regular_ll - reduced_ll - rotated_ll - stretched_ll - stretched_rotated_ll - mercator - transverse_mercator - polar_stereographic - lambert - albers - regular_gg - reduced_gg - rotated_gg - reduced_rotated_gg - stretched_gg - reduced_stretched_gg - stretched_rotated_gg - reduced_stretched_rotated_gg - regular_rotated_gg - regular_stretched_gg - regular_stretched_rotated_gg - sh - rotated_sh - stretched_sh - stretched_rotated_sh - space_view - triangular_grid - unstructured_grid - equatorial_azimuthal_equidistant - azimuth_range - irregular_latlon - lambert_azimuthal_equal_area - lambert_lam - mercator_lam - polar_stereographic_lam - lambert_bf - mercator_bf - polar_stereographic_bf +grib1_gridded_types=" + regular_ll + reduced_ll + mercator + lambert + polar_stereographic + albers + rotated_ll + stretched_ll + stretched_rotated_ll + regular_gg + rotated_gg + stretched_gg + stretched_rotated_gg + reduced_gg + reduced_rotated_gg + reduced_stretched_gg + reduced_stretched_rotated_gg + regular_rotated_gg + regular_stretched_gg + regular_stretched_rotated_gg + space_view" +grib1_spectral_types=" + sh + rotated_sh + stretched_sh + stretched_rotated_sh" + +grib2_gridded_types=" + regular_ll + reduced_ll + rotated_ll + stretched_ll + stretched_rotated_ll + mercator + transverse_mercator + polar_stereographic + lambert + albers + regular_gg + reduced_gg + rotated_gg + reduced_rotated_gg + stretched_gg + reduced_stretched_gg + stretched_rotated_gg + reduced_stretched_rotated_gg + regular_rotated_gg + regular_stretched_gg + regular_stretched_rotated_gg + space_view + triangular_grid + unstructured_grid + equatorial_azimuthal_equidistant + azimuth_range + irregular_latlon + lambert_azimuthal_equal_area + lambert_lam + mercator_lam + polar_stereographic_lam + lambert_bf + mercator_bf + polar_stereographic_bf +" +grib2_spectral_types=" + sh + rotated_sh + stretched_sh + stretched_rotated_sh " -sample2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +sample1_gridded=$ECCODES_SAMPLES_PATH/GRIB1.tmpl +sample1_spectral=$ECCODES_SAMPLES_PATH/sh_ml_grib1.tmpl +for gt in $grib1_gridded_types; do + ${tools_dir}/grib_set -s gridType=$gt $sample1_gridded $tempGrib + grib_check_key_equals $tempGrib 'isGridded,isSpectral' '1 0' +done +for gt in $grib1_spectral_types; do + ${tools_dir}/grib_set -s gridType=$gt $sample1_spectral $tempGrib + grib_check_key_equals $tempGrib 'isGridded,isSpectral' '0 1' + grib_check_key_equals $tempGrib gridType $gt +done -for gt in $grib2_grid_types; do - ${tools_dir}/grib_set -s gridType=$gt $sample2 $tempGrib - ${tools_dir}/grib_get -p isGridded,isSpectral $tempGrib +sample2_gridded=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +sample2_spectral=$ECCODES_SAMPLES_PATH/sh_ml_grib2.tmpl +for gt in $grib2_gridded_types; do + ${tools_dir}/grib_set -s gridType=$gt $sample2_gridded $tempGrib + grib_check_key_equals $tempGrib 'isGridded,isSpectral' '1 0' +done +for gt in $grib2_spectral_types; do + ${tools_dir}/grib_set -s gridType=$gt $sample2_spectral $tempGrib + grib_check_key_equals $tempGrib 'isGridded,isSpectral' '0 1' + grib_check_key_equals $tempGrib gridType $gt done From 6533a766f3ed959d8b1ab2cce6aa22b8f5525345 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 3 Aug 2023 17:35:58 +0100 Subject: [PATCH 089/372] ECC-1656: More tests --- tests/grib_gridType.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/grib_gridType.sh b/tests/grib_gridType.sh index 44cb9ebc0..01d91a4b8 100755 --- a/tests/grib_gridType.sh +++ b/tests/grib_gridType.sh @@ -167,6 +167,9 @@ for gt in $grib2_spectral_types; do grib_check_key_equals $tempGrib gridType $gt done +grib_check_key_equals $data_dir/reduced_latlon_surface.grib1 'isGridded,isSpectral' '1 0' +grib_check_key_equals $data_dir/reduced_latlon_surface.grib2 'isGridded,isSpectral' '1 0' +grib_check_key_equals $data_dir/mercator.grib2 'isGridded,isSpectral' '1 0' # Clean up rm -f $tempGrib $tempFilt $tempText From 36e33a8762fbd09646be26ada450a7bc91059be0 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 4 Aug 2023 10:28:37 +0100 Subject: [PATCH 090/372] Dead code removal: g1area --- definitions/grib3/meta.def | 5 - src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 1 - .../grib_accessor_class_g1area.cc | 0 src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - src/grib_accessor_classes_hash.cc | 575 +++++++++--------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 9 files changed, 281 insertions(+), 306 deletions(-) delete mode 100644 definitions/grib3/meta.def rename src/{ => deprecated}/grib_accessor_class_g1area.cc (100%) diff --git a/definitions/grib3/meta.def b/definitions/grib3/meta.def deleted file mode 100644 index add27a592..000000000 --- a/definitions/grib3/meta.def +++ /dev/null @@ -1,5 +0,0 @@ -# (C) Copyright 2005- ECMWF. - -label "Empty file"; - -#meta area g1area(latitudeOfFirstGridPoint,longitudeOfFirstGridPoint,latitudeOfLastGridPoint,longitudeOfLastGridPoint,angleMultiplier,angleDivisor); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 29791a77b..6e59e9bf7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -98,7 +98,6 @@ list( APPEND eccodes_src_files grib_accessor_class_double.cc grib_accessor_class_element.cc grib_accessor_class_evaluate.cc - grib_accessor_class_g1area.cc grib_accessor_class_g1date.cc grib_accessor_class_g1monthlydate.cc grib_accessor_class_library_version.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index a0121c4df..9aa91e5a1 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -64,7 +64,6 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |-----grib_accessor_class_closest_date |-----grib_accessor_class_divdouble |-----grib_accessor_class_from_scale_factor_scaled_value - |-----grib_accessor_class_g1area |-----grib_accessor_class_g2grid |-----grib_accessor_class_g2latlon |-----grib_accessor_class_g2lon diff --git a/src/grib_accessor_class_g1area.cc b/src/deprecated/grib_accessor_class_g1area.cc similarity index 100% rename from src/grib_accessor_class_g1area.cc rename to src/deprecated/grib_accessor_class_g1area.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 71a1277dd..1b687157c 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -375,8 +375,6 @@ void grib_codetable_delete(grib_context* c); /* grib_accessor_class_evaluate.cc*/ -/* grib_accessor_class_g1area.cc*/ - /* grib_accessor_class_g1date.cc*/ /* grib_accessor_class_g1monthlydate.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index 9f6cadde0..4091eda64 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -77,7 +77,6 @@ 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; extern grib_accessor_class* grib_accessor_class_g1_section4_length; -extern grib_accessor_class* grib_accessor_class_g1area; extern grib_accessor_class* grib_accessor_class_g1bitmap; extern grib_accessor_class* grib_accessor_class_g1date; extern grib_accessor_class* grib_accessor_class_g1day_of_the_year_date; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index 83cc83072..fc64b580b 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,12 +37,12 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 217 +#define TOTAL_KEYWORDS 216 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 -#define MAX_HASH_VALUE 679 -/* maximum key range = 679, duplicates = 0 */ +#define MAX_HASH_VALUE 647 +/* maximum key range = 647, duplicates = 0 */ #ifdef __GNUC__ @@ -55,32 +55,32 @@ static unsigned int grib_accessor_classes_get_id (const char *str, size_t len) { static const unsigned short asso_values[] = { - 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, 0, 680, 680, 680, 680, 680, 680, 680, - 680, 680, 680, 680, 680, 680, 680, 680, 0, 162, - 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, - 680, 680, 680, 680, 680, 1, 680, 7, 129, 148, - 0, 0, 118, 14, 202, 23, 2, 5, 88, 254, - 0, 48, 39, 680, 86, 6, 3, 127, 212, 4, - 1, 24, 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, 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, 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, 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, 680, 680 + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 0, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 0, 162, + 41, 6, 4, 648, 52, 648, 8, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 1, 648, 7, 129, 148, + 0, 0, 158, 14, 198, 23, 2, 5, 88, 222, + 0, 48, 39, 648, 86, 6, 3, 127, 169, 0, + 1, 24, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 648, 648 }; unsigned int hval = len; @@ -117,59 +117,59 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 154 "accessor_class_list.gperf" +#line 153 "accessor_class_list.gperf" {"nearest", &grib_accessor_class_nearest}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 116 "accessor_class_list.gperf" +#line 115 "accessor_class_list.gperf" {"gen", &grib_accessor_class_gen}, {""}, {""}, -#line 117 "accessor_class_list.gperf" +#line 116 "accessor_class_list.gperf" {"getenv", &grib_accessor_class_getenv}, #line 83 "accessor_class_list.gperf" {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, {""}, {""}, {""}, {""}, {""}, -#line 132 "accessor_class_list.gperf" +#line 131 "accessor_class_list.gperf" {"int8", &grib_accessor_class_int8}, -#line 130 "accessor_class_list.gperf" - {"int64", &grib_accessor_class_int64}, + {""}, #line 71 "accessor_class_list.gperf" {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 201 "accessor_class_list.gperf" +#line 200 "accessor_class_list.gperf" {"time", &grib_accessor_class_time}, #line 68 "accessor_class_list.gperf" {"data_png_packing", &grib_accessor_class_data_png_packing}, - {""}, -#line 189 "accessor_class_list.gperf" +#line 129 "accessor_class_list.gperf" + {"int64", &grib_accessor_class_int64}, +#line 188 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, -#line 179 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 186 "accessor_class_list.gperf" +#line 185 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, -#line 180 "accessor_class_list.gperf" +#line 179 "accessor_class_list.gperf" {"section", &grib_accessor_class_section}, -#line 202 "accessor_class_list.gperf" +#line 201 "accessor_class_list.gperf" {"times", &grib_accessor_class_times}, #line 69 "accessor_class_list.gperf" {"data_raw_packing", &grib_accessor_class_data_raw_packing}, -#line 115 "accessor_class_list.gperf" +#line 114 "accessor_class_list.gperf" {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, {""}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, {""}, -#line 181 "accessor_class_list.gperf" +#line 180 "accessor_class_list.gperf" {"section_length", &grib_accessor_class_section_length}, -#line 182 "accessor_class_list.gperf" +#line 181 "accessor_class_list.gperf" {"section_padding", &grib_accessor_class_section_padding}, -#line 195 "accessor_class_list.gperf" +#line 194 "accessor_class_list.gperf" {"statistics", &grib_accessor_class_statistics}, -#line 198 "accessor_class_list.gperf" +#line 197 "accessor_class_list.gperf" {"step_in_units", &grib_accessor_class_step_in_units}, -#line 187 "accessor_class_list.gperf" +#line 186 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, -#line 192 "accessor_class_list.gperf" +#line 191 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, -#line 166 "accessor_class_list.gperf" +#line 165 "accessor_class_list.gperf" {"pad", &grib_accessor_class_pad}, #line 75 "accessor_class_list.gperf" {"data_simple_packing", &grib_accessor_class_data_simple_packing}, @@ -177,97 +177,97 @@ static const struct accessor_class_hash classes[] = #line 78 "accessor_class_list.gperf" {"dirty", &grib_accessor_class_dirty}, {""}, {""}, -#line 196 "accessor_class_list.gperf" +#line 195 "accessor_class_list.gperf" {"statistics_spectral", &grib_accessor_class_statistics_spectral}, #line 77 "accessor_class_list.gperf" {"dictionary", &grib_accessor_class_dictionary}, {""}, -#line 114 "accessor_class_list.gperf" +#line 113 "accessor_class_list.gperf" {"gds_is_present", &grib_accessor_class_gds_is_present}, {""}, -#line 111 "accessor_class_list.gperf" +#line 110 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, -#line 204 "accessor_class_list.gperf" +#line 203 "accessor_class_list.gperf" {"to_integer", &grib_accessor_class_to_integer}, -#line 126 "accessor_class_list.gperf" - {"int16", &grib_accessor_class_int16}, - {""}, -#line 106 "accessor_class_list.gperf" + {""}, {""}, +#line 105 "accessor_class_list.gperf" {"g2date", &grib_accessor_class_g2date}, #line 45 "accessor_class_list.gperf" {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, {""}, -#line 183 "accessor_class_list.gperf" +#line 182 "accessor_class_list.gperf" {"section_pointer", &grib_accessor_class_section_pointer}, #line 67 "accessor_class_list.gperf" {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, -#line 128 "accessor_class_list.gperf" +#line 127 "accessor_class_list.gperf" {"int32", &grib_accessor_class_int32}, #line 60 "accessor_class_list.gperf" {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, -#line 107 "accessor_class_list.gperf" +#line 106 "accessor_class_list.gperf" {"g2end_step", &grib_accessor_class_g2end_step}, #line 48 "accessor_class_list.gperf" {"data_apply_gdsnotpresent", &grib_accessor_class_data_apply_gdsnotpresent}, -#line 104 "accessor_class_list.gperf" +#line 103 "accessor_class_list.gperf" {"g2bitmap", &grib_accessor_class_g2bitmap}, #line 46 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, {""}, #line 50 "accessor_class_list.gperf" {"data_complex_packing", &grib_accessor_class_data_complex_packing}, - {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 125 "accessor_class_list.gperf" + {"int16", &grib_accessor_class_int16}, #line 47 "accessor_class_list.gperf" {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, -#line 112 "accessor_class_list.gperf" +#line 111 "accessor_class_list.gperf" {"g2step_range", &grib_accessor_class_g2step_range}, {""}, -#line 108 "accessor_class_list.gperf" +#line 107 "accessor_class_list.gperf" {"g2grid", &grib_accessor_class_g2grid}, {""}, -#line 205 "accessor_class_list.gperf" +#line 204 "accessor_class_list.gperf" {"to_string", &grib_accessor_class_to_string}, {""}, {""}, -#line 133 "accessor_class_list.gperf" +#line 132 "accessor_class_list.gperf" {"iterator", &grib_accessor_class_iterator}, -#line 167 "accessor_class_list.gperf" +#line 166 "accessor_class_list.gperf" {"padding", &grib_accessor_class_padding}, {""}, {""}, -#line 208 "accessor_class_list.gperf" +#line 207 "accessor_class_list.gperf" {"trim", &grib_accessor_class_trim}, {""}, #line 64 "accessor_class_list.gperf" {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, -#line 173 "accessor_class_list.gperf" +#line 172 "accessor_class_list.gperf" {"raw", &grib_accessor_class_raw}, {""}, #line 81 "accessor_class_list.gperf" {"element", &grib_accessor_class_element}, -#line 168 "accessor_class_list.gperf" +#line 167 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, -#line 102 "accessor_class_list.gperf" +#line 101 "accessor_class_list.gperf" {"g2_eps", &grib_accessor_class_g2_eps}, {""}, {""}, -#line 155 "accessor_class_list.gperf" +#line 154 "accessor_class_list.gperf" {"non_alpha", &grib_accessor_class_non_alpha}, -#line 206 "accessor_class_list.gperf" +#line 205 "accessor_class_list.gperf" {"transient", &grib_accessor_class_transient}, #line 13 "accessor_class_list.gperf" {"assert", &grib_accessor_class_assert}, {""}, -#line 139 "accessor_class_list.gperf" +#line 138 "accessor_class_list.gperf" {"latitudes", &grib_accessor_class_latitudes}, {""}, #line 65 "accessor_class_list.gperf" {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, #line 62 "accessor_class_list.gperf" {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, -#line 207 "accessor_class_list.gperf" +#line 206 "accessor_class_list.gperf" {"transient_darray", &grib_accessor_class_transient_darray}, {""}, -#line 100 "accessor_class_list.gperf" +#line 99 "accessor_class_list.gperf" {"g2_aerosol", &grib_accessor_class_g2_aerosol}, -#line 109 "accessor_class_list.gperf" +#line 108 "accessor_class_list.gperf" {"g2latlon", &grib_accessor_class_g2latlon}, {""}, {""}, {""}, {""}, {""}, #line 63 "accessor_class_list.gperf" @@ -275,356 +275,343 @@ static const struct accessor_class_hash classes[] = #line 61 "accessor_class_list.gperf" {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, {""}, {""}, {""}, {""}, {""}, -#line 174 "accessor_class_list.gperf" +#line 173 "accessor_class_list.gperf" {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, #line 66 "accessor_class_list.gperf" {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, {""}, {""}, -#line 118 "accessor_class_list.gperf" +#line 117 "accessor_class_list.gperf" {"global_gaussian", &grib_accessor_class_global_gaussian}, {""}, -#line 185 "accessor_class_list.gperf" +#line 184 "accessor_class_list.gperf" {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, -#line 138 "accessor_class_list.gperf" +#line 137 "accessor_class_list.gperf" {"laplacian", &grib_accessor_class_laplacian}, {""}, -#line 199 "accessor_class_list.gperf" +#line 198 "accessor_class_list.gperf" {"sum", &grib_accessor_class_sum}, {""}, -#line 113 "accessor_class_list.gperf" +#line 112 "accessor_class_list.gperf" {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, -#line 176 "accessor_class_list.gperf" +#line 175 "accessor_class_list.gperf" {"round", &grib_accessor_class_round}, -#line 144 "accessor_class_list.gperf" +#line 143 "accessor_class_list.gperf" {"long", &grib_accessor_class_long}, {""}, #line 80 "accessor_class_list.gperf" {"double", &grib_accessor_class_double}, -#line 188 "accessor_class_list.gperf" +#line 187 "accessor_class_list.gperf" {"simple_packing_error", &grib_accessor_class_simple_packing_error}, -#line 119 "accessor_class_list.gperf" +#line 118 "accessor_class_list.gperf" {"group", &grib_accessor_class_group}, {""}, -#line 171 "accessor_class_list.gperf" +#line 170 "accessor_class_list.gperf" {"position", &grib_accessor_class_position}, -#line 135 "accessor_class_list.gperf" - {"julian_day", &grib_accessor_class_julian_day}, #line 134 "accessor_class_list.gperf" + {"julian_day", &grib_accessor_class_julian_day}, +#line 133 "accessor_class_list.gperf" {"julian_date", &grib_accessor_class_julian_date}, -#line 218 "accessor_class_list.gperf" +#line 217 "accessor_class_list.gperf" {"unsigned", &grib_accessor_class_unsigned}, {""}, {""}, #line 51 "accessor_class_list.gperf" {"data_dummy_field", &grib_accessor_class_data_dummy_field}, {""}, -#line 172 "accessor_class_list.gperf" +#line 171 "accessor_class_list.gperf" {"proj_string", &grib_accessor_class_proj_string}, #line 14 "accessor_class_list.gperf" {"bit", &grib_accessor_class_bit}, #line 16 "accessor_class_list.gperf" {"bits", &grib_accessor_class_bits}, -#line 197 "accessor_class_list.gperf" +#line 196 "accessor_class_list.gperf" {"step_human_readable", &grib_accessor_class_step_human_readable}, #line 70 "accessor_class_list.gperf" {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, -#line 177 "accessor_class_list.gperf" +#line 176 "accessor_class_list.gperf" {"scale", &grib_accessor_class_scale}, -#line 193 "accessor_class_list.gperf" +#line 192 "accessor_class_list.gperf" {"spectral_truncation", &grib_accessor_class_spectral_truncation}, #line 44 "accessor_class_list.gperf" {"data_2order_packing", &grib_accessor_class_data_2order_packing}, -#line 211 "accessor_class_list.gperf" +#line 210 "accessor_class_list.gperf" {"uint32", &grib_accessor_class_uint32}, -#line 215 "accessor_class_list.gperf" +#line 214 "accessor_class_list.gperf" {"uint8", &grib_accessor_class_uint8}, #line 30 "accessor_class_list.gperf" {"bytes", &grib_accessor_class_bytes}, #line 15 "accessor_class_list.gperf" {"bitmap", &grib_accessor_class_bitmap}, {""}, -#line 105 "accessor_class_list.gperf" +#line 104 "accessor_class_list.gperf" {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, - {""}, {""}, -#line 194 "accessor_class_list.gperf" - {"sprintf", &grib_accessor_class_sprintf}, - {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, #line 17 "accessor_class_list.gperf" {"bits_per_value", &grib_accessor_class_bits_per_value}, #line 49 "accessor_class_list.gperf" {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, {""}, -#line 219 "accessor_class_list.gperf" +#line 218 "accessor_class_list.gperf" {"unsigned_bits", &grib_accessor_class_unsigned_bits}, -#line 163 "accessor_class_list.gperf" - {"offset_file", &grib_accessor_class_offset_file}, - {""}, -#line 212 "accessor_class_list.gperf" + {""}, {""}, +#line 211 "accessor_class_list.gperf" {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, {""}, -#line 88 "accessor_class_list.gperf" - {"g1area", &grib_accessor_class_g1area}, -#line 157 "accessor_class_list.gperf" +#line 221 "accessor_class_list.gperf" + {"values", &grib_accessor_class_values}, +#line 156 "accessor_class_list.gperf" {"number_of_points", &grib_accessor_class_number_of_points}, {""}, -#line 90 "accessor_class_list.gperf" +#line 89 "accessor_class_list.gperf" {"g1date", &grib_accessor_class_g1date}, {""}, {""}, -#line 137 "accessor_class_list.gperf" +#line 136 "accessor_class_list.gperf" {"label", &grib_accessor_class_label}, -#line 216 "accessor_class_list.gperf" +#line 215 "accessor_class_list.gperf" {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, -#line 213 "accessor_class_list.gperf" - {"uint64", &grib_accessor_class_uint64}, - {""}, -#line 158 "accessor_class_list.gperf" + {""}, {""}, +#line 157 "accessor_class_list.gperf" {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, {""}, -#line 89 "accessor_class_list.gperf" +#line 88 "accessor_class_list.gperf" {"g1bitmap", &grib_accessor_class_g1bitmap}, - {""}, {""}, -#line 87 "accessor_class_list.gperf" - {"g1_section4_length", &grib_accessor_class_g1_section4_length}, -#line 124 "accessor_class_list.gperf" - {"ieeefloat", &grib_accessor_class_ieeefloat}, - {""}, + {""}, {""}, {""}, {""}, +#line 219 "accessor_class_list.gperf" + {"validity_date", &grib_accessor_class_validity_date}, #line 86 "accessor_class_list.gperf" {"g1_message_length", &grib_accessor_class_g1_message_length}, - {""}, {""}, -#line 98 "accessor_class_list.gperf" +#line 87 "accessor_class_list.gperf" + {"g1_section4_length", &grib_accessor_class_g1_section4_length}, +#line 224 "accessor_class_list.gperf" + {"when", &grib_accessor_class_when}, +#line 97 "accessor_class_list.gperf" {"g1step_range", &grib_accessor_class_g1step_range}, {""}, {""}, #line 39 "accessor_class_list.gperf" {"concept", &grib_accessor_class_concept}, #line 40 "accessor_class_list.gperf" {"constant", &grib_accessor_class_constant}, -#line 214 "accessor_class_list.gperf" - {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, +#line 212 "accessor_class_list.gperf" + {"uint64", &grib_accessor_class_uint64}, #line 79 "accessor_class_list.gperf" {"divdouble", &grib_accessor_class_divdouble}, -#line 225 "accessor_class_list.gperf" - {"when", &grib_accessor_class_when}, -#line 162 "accessor_class_list.gperf" +#line 193 "accessor_class_list.gperf" + {"sprintf", &grib_accessor_class_sprintf}, +#line 161 "accessor_class_list.gperf" {"octet_number", &grib_accessor_class_octet_number}, {""}, -#line 103 "accessor_class_list.gperf" +#line 102 "accessor_class_list.gperf" {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, -#line 184 "accessor_class_list.gperf" +#line 183 "accessor_class_list.gperf" {"select_step_template", &grib_accessor_class_select_step_template}, - {""}, +#line 220 "accessor_class_list.gperf" + {"validity_time", &grib_accessor_class_validity_time}, #line 58 "accessor_class_list.gperf" {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, {""}, -#line 131 "accessor_class_list.gperf" - {"int64_little_endian", &grib_accessor_class_int64_little_endian}, +#line 162 "accessor_class_list.gperf" + {"offset_file", &grib_accessor_class_offset_file}, {""}, {""}, #line 18 "accessor_class_list.gperf" {"blob", &grib_accessor_class_blob}, +#line 130 "accessor_class_list.gperf" + {"int64_little_endian", &grib_accessor_class_int64_little_endian}, +#line 223 "accessor_class_list.gperf" + {"vector", &grib_accessor_class_vector}, + {""}, +#line 149 "accessor_class_list.gperf" + {"md5", &grib_accessor_class_md5}, +#line 213 "accessor_class_list.gperf" + {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, {""}, {""}, {""}, -#line 222 "accessor_class_list.gperf" - {"values", &grib_accessor_class_values}, - {""}, {""}, {""}, {""}, #line 59 "accessor_class_list.gperf" {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, #line 52 "accessor_class_list.gperf" {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, - {""}, {""}, -#line 145 "accessor_class_list.gperf" - {"long_vector", &grib_accessor_class_long_vector}, -#line 200 "accessor_class_list.gperf" - {"suppressed", &grib_accessor_class_suppressed}, -#line 120 "accessor_class_list.gperf" +#line 119 "accessor_class_list.gperf" {"gts_header", &grib_accessor_class_gts_header}, -#line 203 "accessor_class_list.gperf" + {""}, +#line 144 "accessor_class_list.gperf" + {"long_vector", &grib_accessor_class_long_vector}, +#line 199 "accessor_class_list.gperf" + {"suppressed", &grib_accessor_class_suppressed}, +#line 150 "accessor_class_list.gperf" + {"message", &grib_accessor_class_message}, +#line 202 "accessor_class_list.gperf" {"to_double", &grib_accessor_class_to_double}, - {""}, {""}, -#line 143 "accessor_class_list.gperf" +#line 123 "accessor_class_list.gperf" + {"ieeefloat", &grib_accessor_class_ieeefloat}, + {""}, +#line 142 "accessor_class_list.gperf" {"local_definition", &grib_accessor_class_local_definition}, #line 57 "accessor_class_list.gperf" {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, -#line 220 "accessor_class_list.gperf" - {"validity_date", &grib_accessor_class_validity_date}, -#line 142 "accessor_class_list.gperf" +#line 148 "accessor_class_list.gperf" + {"mars_step", &grib_accessor_class_mars_step}, +#line 141 "accessor_class_list.gperf" {"library_version", &grib_accessor_class_library_version}, - {""}, {""}, -#line 140 "accessor_class_list.gperf" + {""}, +#line 189 "accessor_class_list.gperf" + {"smart_table", &grib_accessor_class_smart_table}, +#line 139 "accessor_class_list.gperf" {"latlon_increment", &grib_accessor_class_latlon_increment}, - {""}, {""}, -#line 92 "accessor_class_list.gperf" +#line 147 "accessor_class_list.gperf" + {"mars_param", &grib_accessor_class_mars_param}, + {""}, +#line 91 "accessor_class_list.gperf" {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, {""}, {""}, -#line 127 "accessor_class_list.gperf" - {"int16_little_endian", &grib_accessor_class_int16_little_endian}, +#line 190 "accessor_class_list.gperf" + {"smart_table_column", &grib_accessor_class_smart_table_column}, #line 55 "accessor_class_list.gperf" {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, #line 34 "accessor_class_list.gperf" {"closest_date", &grib_accessor_class_closest_date}, -#line 123 "accessor_class_list.gperf" +#line 122 "accessor_class_list.gperf" {"ibmfloat", &grib_accessor_class_ibmfloat}, #line 56 "accessor_class_list.gperf" {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, -#line 150 "accessor_class_list.gperf" - {"md5", &grib_accessor_class_md5}, -#line 221 "accessor_class_list.gperf" - {"validity_time", &grib_accessor_class_validity_time}, -#line 129 "accessor_class_list.gperf" + {""}, {""}, +#line 128 "accessor_class_list.gperf" {"int32_little_endian", &grib_accessor_class_int32_little_endian}, #line 53 "accessor_class_list.gperf" {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, - {""}, -#line 54 "accessor_class_list.gperf" - {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, - {""}, {""}, #line 73 "accessor_class_list.gperf" {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, -#line 224 "accessor_class_list.gperf" - {"vector", &grib_accessor_class_vector}, -#line 19 "accessor_class_list.gperf" - {"budgdate", &grib_accessor_class_budgdate}, -#line 151 "accessor_class_list.gperf" - {"message", &grib_accessor_class_message}, -#line 147 "accessor_class_list.gperf" - {"lookup", &grib_accessor_class_lookup}, +#line 54 "accessor_class_list.gperf" + {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, + {""}, {""}, {""}, #line 74 "accessor_class_list.gperf" {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, -#line 136 "accessor_class_list.gperf" +#line 19 "accessor_class_list.gperf" + {"budgdate", &grib_accessor_class_budgdate}, + {""}, +#line 146 "accessor_class_list.gperf" + {"lookup", &grib_accessor_class_lookup}, +#line 126 "accessor_class_list.gperf" + {"int16_little_endian", &grib_accessor_class_int16_little_endian}, +#line 135 "accessor_class_list.gperf" {"ksec1expver", &grib_accessor_class_ksec1expver}, - {""}, -#line 170 "accessor_class_list.gperf" +#line 168 "accessor_class_list.gperf" + {"padtoeven", &grib_accessor_class_padtoeven}, +#line 169 "accessor_class_list.gperf" {"padtomultiple", &grib_accessor_class_padtomultiple}, -#line 149 "accessor_class_list.gperf" - {"mars_step", &grib_accessor_class_mars_step}, -#line 125 "accessor_class_list.gperf" - {"ifs_param", &grib_accessor_class_ifs_param}, - {""}, -#line 190 "accessor_class_list.gperf" - {"smart_table", &grib_accessor_class_smart_table}, - {""}, -#line 148 "accessor_class_list.gperf" - {"mars_param", &grib_accessor_class_mars_param}, - {""}, + {""}, {""}, {""}, {""}, {""}, +#line 222 "accessor_class_list.gperf" + {"variable", &grib_accessor_class_variable}, +#line 151 "accessor_class_list.gperf" + {"message_copy", &grib_accessor_class_message_copy}, #line 21 "accessor_class_list.gperf" {"bufr_data_element", &grib_accessor_class_bufr_data_element}, - {""}, {""}, -#line 191 "accessor_class_list.gperf" - {"smart_table_column", &grib_accessor_class_smart_table_column}, - {""}, + {""}, {""}, {""}, {""}, #line 20 "accessor_class_list.gperf" {"bufr_data_array", &grib_accessor_class_bufr_data_array}, - {""}, {""}, {""}, {""}, + {""}, {""}, +#line 152 "accessor_class_list.gperf" + {"missing", &grib_accessor_class_missing}, + {""}, #line 29 "accessor_class_list.gperf" {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, #line 28 "accessor_class_list.gperf" {"bufr_string_values", &grib_accessor_class_bufr_string_values}, {""}, {""}, {""}, -#line 146 "accessor_class_list.gperf" +#line 145 "accessor_class_list.gperf" {"longitudes", &grib_accessor_class_longitudes}, {""}, -#line 156 "accessor_class_list.gperf" +#line 155 "accessor_class_list.gperf" {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, {""}, #line 27 "accessor_class_list.gperf" {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, #line 43 "accessor_class_list.gperf" {"count_total", &grib_accessor_class_count_total}, - {""}, {""}, {""}, {""}, -#line 121 "accessor_class_list.gperf" +#line 120 "accessor_class_list.gperf" {"hash_array", &grib_accessor_class_hash_array}, -#line 164 "accessor_class_list.gperf" - {"offset_values", &grib_accessor_class_offset_values}, -#line 122 "accessor_class_list.gperf" + {""}, +#line 121 "accessor_class_list.gperf" {"headers_only", &grib_accessor_class_headers_only}, {""}, {""}, -#line 93 "accessor_class_list.gperf" +#line 82 "accessor_class_list.gperf" + {"evaluate", &grib_accessor_class_evaluate}, + {""}, {""}, {""}, +#line 92 "accessor_class_list.gperf" {"g1fcperiod", &grib_accessor_class_g1fcperiod}, -#line 152 "accessor_class_list.gperf" - {"message_copy", &grib_accessor_class_message_copy}, + {""}, +#line 158 "accessor_class_list.gperf" + {"number_of_values", &grib_accessor_class_number_of_values}, + {""}, +#line 124 "accessor_class_list.gperf" + {"ifs_param", &grib_accessor_class_ifs_param}, {""}, {""}, -#line 169 "accessor_class_list.gperf" - {"padtoeven", &grib_accessor_class_padtoeven}, - {""}, {""}, -#line 209 "accessor_class_list.gperf" +#line 208 "accessor_class_list.gperf" {"uint16", &grib_accessor_class_uint16}, +#line 109 "accessor_class_list.gperf" + {"g2level", &grib_accessor_class_g2level}, + {""}, {""}, {""}, {""}, +#line 140 "accessor_class_list.gperf" + {"latlonvalues", &grib_accessor_class_latlonvalues}, {""}, {""}, -#line 153 "accessor_class_list.gperf" - {"missing", &grib_accessor_class_missing}, -#line 223 "accessor_class_list.gperf" - {"variable", &grib_accessor_class_variable}, +#line 76 "accessor_class_list.gperf" + {"decimal_precision", &grib_accessor_class_decimal_precision}, {""}, {""}, -#line 85 "accessor_class_list.gperf" - {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, - {""}, -#line 41 "accessor_class_list.gperf" - {"count_file", &grib_accessor_class_count_file}, - {""}, -#line 35 "accessor_class_list.gperf" - {"codeflag", &grib_accessor_class_codeflag}, - {""}, {""}, {""}, {""}, {""}, {""}, -#line 210 "accessor_class_list.gperf" +#line 159 "accessor_class_list.gperf" + {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, + {""}, {""}, {""}, {""}, +#line 177 "accessor_class_list.gperf" + {"scale_values", &grib_accessor_class_scale_values}, +#line 209 "accessor_class_list.gperf" {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, #line 36 "accessor_class_list.gperf" {"codetable", &grib_accessor_class_codetable}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, #line 37 "accessor_class_list.gperf" {"codetable_title", &grib_accessor_class_codetable_title}, - {""}, {""}, {""}, -#line 82 "accessor_class_list.gperf" - {"evaluate", &grib_accessor_class_evaluate}, - {""}, {""}, +#line 163 "accessor_class_list.gperf" + {"offset_values", &grib_accessor_class_offset_values}, + {""}, {""}, {""}, {""}, {""}, #line 26 "accessor_class_list.gperf" {"bufr_group", &grib_accessor_class_bufr_group}, + {""}, {""}, {""}, {""}, {""}, +#line 164 "accessor_class_list.gperf" + {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, {""}, {""}, -#line 159 "accessor_class_list.gperf" - {"number_of_values", &grib_accessor_class_number_of_values}, - {""}, {""}, -#line 76 "accessor_class_list.gperf" - {"decimal_precision", &grib_accessor_class_decimal_precision}, - {""}, {""}, -#line 110 "accessor_class_list.gperf" - {"g2level", &grib_accessor_class_g2level}, +#line 174 "accessor_class_list.gperf" + {"reference_value_error", &grib_accessor_class_reference_value_error}, {""}, #line 22 "accessor_class_list.gperf" {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, - {""}, {""}, -#line 141 "accessor_class_list.gperf" - {"latlonvalues", &grib_accessor_class_latlonvalues}, - {""}, {""}, {""}, {""}, +#line 85 "accessor_class_list.gperf" + {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, + {""}, +#line 41 "accessor_class_list.gperf" + {"count_file", &grib_accessor_class_count_file}, #line 72 "accessor_class_list.gperf" {"data_sh_packed", &grib_accessor_class_data_sh_packed}, -#line 160 "accessor_class_list.gperf" - {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, - {""}, {""}, {""}, {""}, -#line 178 "accessor_class_list.gperf" - {"scale_values", &grib_accessor_class_scale_values}, +#line 35 "accessor_class_list.gperf" + {"codeflag", &grib_accessor_class_codeflag}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 217 "accessor_class_list.gperf" +#line 216 "accessor_class_list.gperf" {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, - {""}, {""}, {""}, -#line 84 "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}, - {""}, {""}, {""}, {""}, #line 32 "accessor_class_list.gperf" {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, {""}, {""}, {""}, {""}, {""}, #line 31 "accessor_class_list.gperf" {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, {""}, -#line 95 "accessor_class_list.gperf" +#line 94 "accessor_class_list.gperf" {"g1monthlydate", &grib_accessor_class_g1monthlydate}, - {""}, {""}, -#line 99 "accessor_class_list.gperf" - {"g1verificationdate", &grib_accessor_class_g1verificationdate}, -#line 165 "accessor_class_list.gperf" - {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, - {""}, {""}, -#line 175 "accessor_class_list.gperf" - {"reference_value_error", &grib_accessor_class_reference_value_error}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, -#line 161 "accessor_class_list.gperf" + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 160 "accessor_class_list.gperf" {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 84 "accessor_class_list.gperf" + {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, + {""}, #line 25 "accessor_class_list.gperf" {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, {""}, {""}, {""}, {""}, @@ -636,51 +623,51 @@ static const struct accessor_class_hash classes[] = {""}, {""}, #line 10 "accessor_class_list.gperf" {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, -#line 38 "accessor_class_list.gperf" - {"codetable_units", &grib_accessor_class_codetable_units}, - {""}, -#line 91 "accessor_class_list.gperf" - {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, -#line 33 "accessor_class_list.gperf" - {"check_internal_version", &grib_accessor_class_check_internal_version}, {""}, {""}, +#line 98 "accessor_class_list.gperf" + {"g1verificationdate", &grib_accessor_class_g1verificationdate}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, #line 42 "accessor_class_list.gperf" {"count_missing", &grib_accessor_class_count_missing}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 90 "accessor_class_list.gperf" + {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, + {""}, +#line 38 "accessor_class_list.gperf" + {"codetable_units", &grib_accessor_class_codetable_units}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 97 "accessor_class_list.gperf" - {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, +#line 33 "accessor_class_list.gperf" + {"check_internal_version", &grib_accessor_class_check_internal_version}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 100 "accessor_class_list.gperf" + {"g2_chemical", &grib_accessor_class_g2_chemical}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, #line 96 "accessor_class_list.gperf" + {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, +#line 95 "accessor_class_list.gperf" {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 101 "accessor_class_list.gperf" - {"g2_chemical", &grib_accessor_class_g2_chemical}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, -#line 94 "accessor_class_list.gperf" + {""}, +#line 93 "accessor_class_list.gperf" {"g1forecastmonth", &grib_accessor_class_g1forecastmonth} }; @@ -689,7 +676,7 @@ static const struct accessor_class_hash* grib_accessor_classes_hash (const char unsigned int key = grib_accessor_classes_get_id (str, len); #ifdef DEBUG - { + { const char *s; Assert( len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH ); Assert( key <= MAX_HASH_VALUE ); @@ -698,5 +685,5 @@ static const struct accessor_class_hash* grib_accessor_classes_hash (const char } #endif - return &classes[key]; + return &classes[key]; } diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index e2dff4cd9..5466089fe 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -77,7 +77,6 @@ { "g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag, }, { "g1_message_length", &grib_accessor_class_g1_message_length, }, { "g1_section4_length", &grib_accessor_class_g1_section4_length, }, -{ "g1area", &grib_accessor_class_g1area, }, { "g1bitmap", &grib_accessor_class_g1bitmap, }, { "g1date", &grib_accessor_class_g1date, }, { "g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index ff696f8fa..26e02f524 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -78,7 +78,6 @@ from_scale_factor_scaled_value, &grib_accessor_class_from_scale_factor_scaled_va g1_half_byte_codeflag, &grib_accessor_class_g1_half_byte_codeflag g1_message_length, &grib_accessor_class_g1_message_length g1_section4_length, &grib_accessor_class_g1_section4_length -g1area, &grib_accessor_class_g1area g1bitmap, &grib_accessor_class_g1bitmap g1date, &grib_accessor_class_g1date g1day_of_the_year_date, &grib_accessor_class_g1day_of_the_year_date From c57629cc7449814c2d568439ed23dffd6d2638de Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 4 Aug 2023 10:53:56 +0100 Subject: [PATCH 091/372] Dead code removal: times --- src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 1 - .../grib_accessor_class_times.cc | 0 src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - src/grib_accessor_classes_hash.cc | 897 +++++++++--------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 8 files changed, 438 insertions(+), 466 deletions(-) rename src/{ => deprecated}/grib_accessor_class_times.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6e59e9bf7..18d728e54 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -134,7 +134,6 @@ list( APPEND eccodes_src_files grib_accessor_class_offset_file.cc grib_accessor_class_scale.cc grib_accessor_class_from_scale_factor_scaled_value.cc - grib_accessor_class_times.cc grib_accessor_class_g2bitmap_present.cc grib_accessor_class_ibmfloat.cc grib_accessor_class_ieeefloat.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index 9aa91e5a1..7ec8436de 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -158,7 +158,6 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |---------grib_accessor_class_g1_section4_length |-------grib_accessor_class_select_step_template |-------grib_accessor_class_smart_table - |-------grib_accessor_class_times |-----grib_accessor_class_unsigned_bits |-----grib_accessor_class_validity_date |-----grib_accessor_class_validity_time diff --git a/src/grib_accessor_class_times.cc b/src/deprecated/grib_accessor_class_times.cc similarity index 100% rename from src/grib_accessor_class_times.cc rename to src/deprecated/grib_accessor_class_times.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 1b687157c..d3c163913 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -478,8 +478,6 @@ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd); /* grib_accessor_class_from_scale_factor_scaled_value.cc*/ -/* grib_accessor_class_times.cc*/ - /* grib_accessor_class_g2bitmap_present.cc*/ /* grib_accessor_class_ibmfloat.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index 4091eda64..eb312f85d 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -191,7 +191,6 @@ extern grib_accessor_class* grib_accessor_class_step_in_units; extern grib_accessor_class* grib_accessor_class_sum; extern grib_accessor_class* grib_accessor_class_suppressed; extern grib_accessor_class* grib_accessor_class_time; -extern grib_accessor_class* grib_accessor_class_times; extern grib_accessor_class* grib_accessor_class_to_double; extern grib_accessor_class* grib_accessor_class_to_integer; extern grib_accessor_class* grib_accessor_class_to_string; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index fc64b580b..dbc1792f3 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,12 +37,12 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 216 +#define TOTAL_KEYWORDS 215 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 -#define MAX_HASH_VALUE 647 -/* maximum key range = 647, duplicates = 0 */ +#define MAX_HASH_VALUE 586 +/* maximum key range = 586, duplicates = 0 */ #ifdef __GNUC__ @@ -55,32 +55,32 @@ static unsigned int grib_accessor_classes_get_id (const char *str, size_t len) { static const unsigned short asso_values[] = { - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 0, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 0, 162, - 41, 6, 4, 648, 52, 648, 8, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 1, 648, 7, 129, 148, - 0, 0, 158, 14, 198, 23, 2, 5, 88, 222, - 0, 48, 39, 648, 86, 6, 3, 127, 169, 0, - 1, 24, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 648, 648 + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 0, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 2, 124, + 14, 18, 8, 587, 21, 587, 24, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 0, 587, 0, 68, 126, + 0, 0, 108, 29, 147, 1, 11, 4, 53, 231, + 13, 57, 20, 587, 61, 1, 42, 96, 134, 4, + 1, 4, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587 }; unsigned int hval = len; @@ -116,533 +116,506 @@ static const struct accessor_class_hash classes[] = {""}, #line 9 "accessor_class_list.gperf" {" "}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 153 "accessor_class_list.gperf" - {"nearest", &grib_accessor_class_nearest}, - {""}, {""}, {""}, {""}, {""}, {""}, -#line 115 "accessor_class_list.gperf" - {"gen", &grib_accessor_class_gen}, - {""}, {""}, -#line 116 "accessor_class_list.gperf" - {"getenv", &grib_accessor_class_getenv}, -#line 83 "accessor_class_list.gperf" - {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, - {""}, {""}, {""}, {""}, {""}, -#line 131 "accessor_class_list.gperf" - {"int8", &grib_accessor_class_int8}, - {""}, -#line 71 "accessor_class_list.gperf" - {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 200 "accessor_class_list.gperf" - {"time", &grib_accessor_class_time}, -#line 68 "accessor_class_list.gperf" - {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 129 "accessor_class_list.gperf" - {"int64", &grib_accessor_class_int64}, + {""}, {""}, {""}, {""}, #line 188 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, -#line 178 "accessor_class_list.gperf" - {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 185 "accessor_class_list.gperf" - {"signed", &grib_accessor_class_signed}, -#line 179 "accessor_class_list.gperf" - {"section", &grib_accessor_class_section}, -#line 201 "accessor_class_list.gperf" - {"times", &grib_accessor_class_times}, -#line 69 "accessor_class_list.gperf" - {"data_raw_packing", &grib_accessor_class_data_raw_packing}, -#line 114 "accessor_class_list.gperf" - {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, - {""}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, - {""}, -#line 180 "accessor_class_list.gperf" - {"section_length", &grib_accessor_class_section_length}, -#line 181 "accessor_class_list.gperf" - {"section_padding", &grib_accessor_class_section_padding}, -#line 194 "accessor_class_list.gperf" - {"statistics", &grib_accessor_class_statistics}, -#line 197 "accessor_class_list.gperf" - {"step_in_units", &grib_accessor_class_step_in_units}, -#line 186 "accessor_class_list.gperf" - {"signed_bits", &grib_accessor_class_signed_bits}, -#line 191 "accessor_class_list.gperf" - {"spd", &grib_accessor_class_spd}, -#line 165 "accessor_class_list.gperf" - {"pad", &grib_accessor_class_pad}, -#line 75 "accessor_class_list.gperf" - {"data_simple_packing", &grib_accessor_class_data_simple_packing}, +#line 185 "accessor_class_list.gperf" + {"signed", &grib_accessor_class_signed}, {""}, #line 78 "accessor_class_list.gperf" {"dirty", &grib_accessor_class_dirty}, - {""}, {""}, -#line 195 "accessor_class_list.gperf" - {"statistics_spectral", &grib_accessor_class_statistics_spectral}, + {""}, {""}, {""}, +#line 186 "accessor_class_list.gperf" + {"signed_bits", &grib_accessor_class_signed_bits}, + {""}, +#line 69 "accessor_class_list.gperf" + {"data_raw_packing", &grib_accessor_class_data_raw_packing}, + {""}, +#line 131 "accessor_class_list.gperf" + {"int8", &grib_accessor_class_int8}, + {""}, +#line 75 "accessor_class_list.gperf" + {"data_simple_packing", &grib_accessor_class_data_simple_packing}, +#line 71 "accessor_class_list.gperf" + {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, +#line 179 "accessor_class_list.gperf" + {"section", &grib_accessor_class_section}, +#line 165 "accessor_class_list.gperf" + {"pad", &grib_accessor_class_pad}, +#line 191 "accessor_class_list.gperf" + {"spd", &grib_accessor_class_spd}, #line 77 "accessor_class_list.gperf" {"dictionary", &grib_accessor_class_dictionary}, {""}, -#line 113 "accessor_class_list.gperf" - {"gds_is_present", &grib_accessor_class_gds_is_present}, - {""}, -#line 110 "accessor_class_list.gperf" - {"g2lon", &grib_accessor_class_g2lon}, -#line 203 "accessor_class_list.gperf" - {"to_integer", &grib_accessor_class_to_integer}, - {""}, {""}, -#line 105 "accessor_class_list.gperf" - {"g2date", &grib_accessor_class_g2date}, -#line 45 "accessor_class_list.gperf" - {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, +#line 129 "accessor_class_list.gperf" + {"int64", &grib_accessor_class_int64}, {""}, +#line 68 "accessor_class_list.gperf" + {"data_png_packing", &grib_accessor_class_data_png_packing}, +#line 181 "accessor_class_list.gperf" + {"section_padding", &grib_accessor_class_section_padding}, #line 182 "accessor_class_list.gperf" {"section_pointer", &grib_accessor_class_section_pointer}, -#line 67 "accessor_class_list.gperf" - {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, +#line 115 "accessor_class_list.gperf" + {"gen", &grib_accessor_class_gen}, #line 127 "accessor_class_list.gperf" {"int32", &grib_accessor_class_int32}, +#line 83 "accessor_class_list.gperf" + {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, #line 60 "accessor_class_list.gperf" {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, -#line 106 "accessor_class_list.gperf" - {"g2end_step", &grib_accessor_class_g2end_step}, -#line 48 "accessor_class_list.gperf" - {"data_apply_gdsnotpresent", &grib_accessor_class_data_apply_gdsnotpresent}, -#line 103 "accessor_class_list.gperf" - {"g2bitmap", &grib_accessor_class_g2bitmap}, -#line 46 "accessor_class_list.gperf" - {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, {""}, -#line 50 "accessor_class_list.gperf" - {"data_complex_packing", &grib_accessor_class_data_complex_packing}, - {""}, {""}, {""}, +#line 45 "accessor_class_list.gperf" + {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, +#line 64 "accessor_class_list.gperf" + {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, + {""}, #line 125 "accessor_class_list.gperf" {"int16", &grib_accessor_class_int16}, -#line 47 "accessor_class_list.gperf" - {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, -#line 111 "accessor_class_list.gperf" - {"g2step_range", &grib_accessor_class_g2step_range}, +#line 178 "accessor_class_list.gperf" + {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, +#line 180 "accessor_class_list.gperf" + {"section_length", &grib_accessor_class_section_length}, +#line 67 "accessor_class_list.gperf" + {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, +#line 48 "accessor_class_list.gperf" + {"data_apply_gdsnotpresent", &grib_accessor_class_data_apply_gdsnotpresent}, +#line 113 "accessor_class_list.gperf" + {"gds_is_present", &grib_accessor_class_gds_is_present}, +#line 46 "accessor_class_list.gperf" + {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, +#line 200 "accessor_class_list.gperf" + {"time", &grib_accessor_class_time}, +#line 116 "accessor_class_list.gperf" + {"getenv", &grib_accessor_class_getenv}, {""}, #line 107 "accessor_class_list.gperf" {"g2grid", &grib_accessor_class_g2grid}, - {""}, -#line 204 "accessor_class_list.gperf" - {"to_string", &grib_accessor_class_to_string}, {""}, {""}, -#line 132 "accessor_class_list.gperf" - {"iterator", &grib_accessor_class_iterator}, -#line 166 "accessor_class_list.gperf" - {"padding", &grib_accessor_class_padding}, - {""}, {""}, -#line 207 "accessor_class_list.gperf" - {"trim", &grib_accessor_class_trim}, - {""}, -#line 64 "accessor_class_list.gperf" - {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, -#line 172 "accessor_class_list.gperf" - {"raw", &grib_accessor_class_raw}, - {""}, -#line 81 "accessor_class_list.gperf" - {"element", &grib_accessor_class_element}, -#line 167 "accessor_class_list.gperf" - {"padto", &grib_accessor_class_padto}, -#line 101 "accessor_class_list.gperf" - {"g2_eps", &grib_accessor_class_g2_eps}, - {""}, {""}, -#line 154 "accessor_class_list.gperf" - {"non_alpha", &grib_accessor_class_non_alpha}, -#line 205 "accessor_class_list.gperf" - {"transient", &grib_accessor_class_transient}, -#line 13 "accessor_class_list.gperf" - {"assert", &grib_accessor_class_assert}, - {""}, -#line 138 "accessor_class_list.gperf" - {"latitudes", &grib_accessor_class_latitudes}, - {""}, +#line 47 "accessor_class_list.gperf" + {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, +#line 106 "accessor_class_list.gperf" + {"g2end_step", &grib_accessor_class_g2end_step}, #line 65 "accessor_class_list.gperf" {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, #line 62 "accessor_class_list.gperf" {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, -#line 206 "accessor_class_list.gperf" - {"transient_darray", &grib_accessor_class_transient_darray}, - {""}, -#line 99 "accessor_class_list.gperf" - {"g2_aerosol", &grib_accessor_class_g2_aerosol}, -#line 108 "accessor_class_list.gperf" - {"g2latlon", &grib_accessor_class_g2latlon}, - {""}, {""}, {""}, {""}, {""}, -#line 63 "accessor_class_list.gperf" - {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, -#line 61 "accessor_class_list.gperf" - {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, - {""}, {""}, {""}, {""}, {""}, -#line 173 "accessor_class_list.gperf" - {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, -#line 66 "accessor_class_list.gperf" - {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, - {""}, {""}, -#line 117 "accessor_class_list.gperf" - {"global_gaussian", &grib_accessor_class_global_gaussian}, - {""}, -#line 184 "accessor_class_list.gperf" - {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, +#line 166 "accessor_class_list.gperf" + {"padding", &grib_accessor_class_padding}, + {""}, {""}, {""}, +#line 110 "accessor_class_list.gperf" + {"g2lon", &grib_accessor_class_g2lon}, +#line 153 "accessor_class_list.gperf" + {"nearest", &grib_accessor_class_nearest}, #line 137 "accessor_class_list.gperf" {"laplacian", &grib_accessor_class_laplacian}, +#line 172 "accessor_class_list.gperf" + {"raw", &grib_accessor_class_raw}, + {""}, {""}, {""}, +#line 13 "accessor_class_list.gperf" + {"assert", &grib_accessor_class_assert}, +#line 101 "accessor_class_list.gperf" + {"g2_eps", &grib_accessor_class_g2_eps}, +#line 197 "accessor_class_list.gperf" + {"step_in_units", &grib_accessor_class_step_in_units}, {""}, -#line 198 "accessor_class_list.gperf" - {"sum", &grib_accessor_class_sum}, - {""}, -#line 112 "accessor_class_list.gperf" - {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, -#line 175 "accessor_class_list.gperf" - {"round", &grib_accessor_class_round}, -#line 143 "accessor_class_list.gperf" - {"long", &grib_accessor_class_long}, - {""}, -#line 80 "accessor_class_list.gperf" - {"double", &grib_accessor_class_double}, -#line 187 "accessor_class_list.gperf" - {"simple_packing_error", &grib_accessor_class_simple_packing_error}, -#line 118 "accessor_class_list.gperf" - {"group", &grib_accessor_class_group}, - {""}, -#line 170 "accessor_class_list.gperf" - {"position", &grib_accessor_class_position}, -#line 134 "accessor_class_list.gperf" - {"julian_day", &grib_accessor_class_julian_day}, -#line 133 "accessor_class_list.gperf" - {"julian_date", &grib_accessor_class_julian_date}, -#line 217 "accessor_class_list.gperf" - {"unsigned", &grib_accessor_class_unsigned}, - {""}, {""}, -#line 51 "accessor_class_list.gperf" - {"data_dummy_field", &grib_accessor_class_data_dummy_field}, - {""}, -#line 171 "accessor_class_list.gperf" - {"proj_string", &grib_accessor_class_proj_string}, #line 14 "accessor_class_list.gperf" {"bit", &grib_accessor_class_bit}, #line 16 "accessor_class_list.gperf" {"bits", &grib_accessor_class_bits}, -#line 196 "accessor_class_list.gperf" - {"step_human_readable", &grib_accessor_class_step_human_readable}, -#line 70 "accessor_class_list.gperf" - {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, -#line 176 "accessor_class_list.gperf" - {"scale", &grib_accessor_class_scale}, -#line 192 "accessor_class_list.gperf" - {"spectral_truncation", &grib_accessor_class_spectral_truncation}, -#line 44 "accessor_class_list.gperf" - {"data_2order_packing", &grib_accessor_class_data_2order_packing}, -#line 210 "accessor_class_list.gperf" - {"uint32", &grib_accessor_class_uint32}, -#line 214 "accessor_class_list.gperf" - {"uint8", &grib_accessor_class_uint8}, -#line 30 "accessor_class_list.gperf" - {"bytes", &grib_accessor_class_bytes}, +#line 66 "accessor_class_list.gperf" + {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, #line 15 "accessor_class_list.gperf" {"bitmap", &grib_accessor_class_bitmap}, {""}, -#line 104 "accessor_class_list.gperf" - {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, - {""}, {""}, {""}, {""}, {""}, {""}, +#line 50 "accessor_class_list.gperf" + {"data_complex_packing", &grib_accessor_class_data_complex_packing}, +#line 30 "accessor_class_list.gperf" + {"bytes", &grib_accessor_class_bytes}, +#line 187 "accessor_class_list.gperf" + {"simple_packing_error", &grib_accessor_class_simple_packing_error}, +#line 173 "accessor_class_list.gperf" + {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, + {""}, +#line 167 "accessor_class_list.gperf" + {"padto", &grib_accessor_class_padto}, #line 17 "accessor_class_list.gperf" {"bits_per_value", &grib_accessor_class_bits_per_value}, -#line 49 "accessor_class_list.gperf" - {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, +#line 111 "accessor_class_list.gperf" + {"g2step_range", &grib_accessor_class_g2step_range}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 105 "accessor_class_list.gperf" + {"g2date", &grib_accessor_class_g2date}, {""}, -#line 218 "accessor_class_list.gperf" - {"unsigned_bits", &grib_accessor_class_unsigned_bits}, - {""}, {""}, -#line 211 "accessor_class_list.gperf" - {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, +#line 103 "accessor_class_list.gperf" + {"g2bitmap", &grib_accessor_class_g2bitmap}, +#line 63 "accessor_class_list.gperf" + {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, +#line 61 "accessor_class_list.gperf" + {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, +#line 194 "accessor_class_list.gperf" + {"statistics", &grib_accessor_class_statistics}, {""}, -#line 221 "accessor_class_list.gperf" - {"values", &grib_accessor_class_values}, -#line 156 "accessor_class_list.gperf" - {"number_of_points", &grib_accessor_class_number_of_points}, +#line 117 "accessor_class_list.gperf" + {"global_gaussian", &grib_accessor_class_global_gaussian}, +#line 154 "accessor_class_list.gperf" + {"non_alpha", &grib_accessor_class_non_alpha}, +#line 198 "accessor_class_list.gperf" + {"sum", &grib_accessor_class_sum}, {""}, -#line 89 "accessor_class_list.gperf" - {"g1date", &grib_accessor_class_g1date}, - {""}, {""}, +#line 81 "accessor_class_list.gperf" + {"element", &grib_accessor_class_element}, +#line 184 "accessor_class_list.gperf" + {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, +#line 138 "accessor_class_list.gperf" + {"latitudes", &grib_accessor_class_latitudes}, +#line 195 "accessor_class_list.gperf" + {"statistics_spectral", &grib_accessor_class_statistics_spectral}, +#line 114 "accessor_class_list.gperf" + {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, +#line 206 "accessor_class_list.gperf" + {"trim", &grib_accessor_class_trim}, +#line 132 "accessor_class_list.gperf" + {"iterator", &grib_accessor_class_iterator}, +#line 112 "accessor_class_list.gperf" + {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, +#line 99 "accessor_class_list.gperf" + {"g2_aerosol", &grib_accessor_class_g2_aerosol}, #line 136 "accessor_class_list.gperf" {"label", &grib_accessor_class_label}, -#line 215 "accessor_class_list.gperf" - {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, - {""}, {""}, -#line 157 "accessor_class_list.gperf" - {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, - {""}, -#line 88 "accessor_class_list.gperf" - {"g1bitmap", &grib_accessor_class_g1bitmap}, - {""}, {""}, {""}, {""}, -#line 219 "accessor_class_list.gperf" - {"validity_date", &grib_accessor_class_validity_date}, -#line 86 "accessor_class_list.gperf" - {"g1_message_length", &grib_accessor_class_g1_message_length}, -#line 87 "accessor_class_list.gperf" - {"g1_section4_length", &grib_accessor_class_g1_section4_length}, -#line 224 "accessor_class_list.gperf" - {"when", &grib_accessor_class_when}, -#line 97 "accessor_class_list.gperf" - {"g1step_range", &grib_accessor_class_g1step_range}, - {""}, {""}, -#line 39 "accessor_class_list.gperf" - {"concept", &grib_accessor_class_concept}, -#line 40 "accessor_class_list.gperf" - {"constant", &grib_accessor_class_constant}, -#line 212 "accessor_class_list.gperf" +#line 51 "accessor_class_list.gperf" + {"data_dummy_field", &grib_accessor_class_data_dummy_field}, +#line 204 "accessor_class_list.gperf" + {"transient", &grib_accessor_class_transient}, +#line 143 "accessor_class_list.gperf" + {"long", &grib_accessor_class_long}, +#line 118 "accessor_class_list.gperf" + {"group", &grib_accessor_class_group}, +#line 80 "accessor_class_list.gperf" + {"double", &grib_accessor_class_double}, +#line 134 "accessor_class_list.gperf" + {"julian_day", &grib_accessor_class_julian_day}, +#line 133 "accessor_class_list.gperf" + {"julian_date", &grib_accessor_class_julian_date}, +#line 70 "accessor_class_list.gperf" + {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, +#line 205 "accessor_class_list.gperf" + {"transient_darray", &grib_accessor_class_transient_darray}, +#line 209 "accessor_class_list.gperf" + {"uint32", &grib_accessor_class_uint32}, +#line 202 "accessor_class_list.gperf" + {"to_integer", &grib_accessor_class_to_integer}, +#line 175 "accessor_class_list.gperf" + {"round", &grib_accessor_class_round}, +#line 211 "accessor_class_list.gperf" {"uint64", &grib_accessor_class_uint64}, -#line 79 "accessor_class_list.gperf" - {"divdouble", &grib_accessor_class_divdouble}, -#line 193 "accessor_class_list.gperf" - {"sprintf", &grib_accessor_class_sprintf}, -#line 161 "accessor_class_list.gperf" - {"octet_number", &grib_accessor_class_octet_number}, +#line 18 "accessor_class_list.gperf" + {"blob", &grib_accessor_class_blob}, +#line 213 "accessor_class_list.gperf" + {"uint8", &grib_accessor_class_uint8}, {""}, #line 102 "accessor_class_list.gperf" {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, -#line 183 "accessor_class_list.gperf" - {"select_step_template", &grib_accessor_class_select_step_template}, -#line 220 "accessor_class_list.gperf" - {"validity_time", &grib_accessor_class_validity_time}, -#line 58 "accessor_class_list.gperf" - {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, {""}, -#line 162 "accessor_class_list.gperf" - {"offset_file", &grib_accessor_class_offset_file}, +#line 122 "accessor_class_list.gperf" + {"ibmfloat", &grib_accessor_class_ibmfloat}, + {""}, +#line 176 "accessor_class_list.gperf" + {"scale", &grib_accessor_class_scale}, + {""}, +#line 141 "accessor_class_list.gperf" + {"library_version", &grib_accessor_class_library_version}, +#line 79 "accessor_class_list.gperf" + {"divdouble", &grib_accessor_class_divdouble}, + {""}, +#line 44 "accessor_class_list.gperf" + {"data_2order_packing", &grib_accessor_class_data_2order_packing}, {""}, {""}, -#line 18 "accessor_class_list.gperf" - {"blob", &grib_accessor_class_blob}, +#line 220 "accessor_class_list.gperf" + {"values", &grib_accessor_class_values}, + {""}, {""}, +#line 192 "accessor_class_list.gperf" + {"spectral_truncation", &grib_accessor_class_spectral_truncation}, +#line 49 "accessor_class_list.gperf" + {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, +#line 156 "accessor_class_list.gperf" + {"number_of_points", &grib_accessor_class_number_of_points}, +#line 216 "accessor_class_list.gperf" + {"unsigned", &grib_accessor_class_unsigned}, #line 130 "accessor_class_list.gperf" {"int64_little_endian", &grib_accessor_class_int64_little_endian}, +#line 58 "accessor_class_list.gperf" + {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, +#line 193 "accessor_class_list.gperf" + {"sprintf", &grib_accessor_class_sprintf}, +#line 108 "accessor_class_list.gperf" + {"g2latlon", &grib_accessor_class_g2latlon}, +#line 203 "accessor_class_list.gperf" + {"to_string", &grib_accessor_class_to_string}, +#line 217 "accessor_class_list.gperf" + {"unsigned_bits", &grib_accessor_class_unsigned_bits}, +#line 128 "accessor_class_list.gperf" + {"int32_little_endian", &grib_accessor_class_int32_little_endian}, +#line 157 "accessor_class_list.gperf" + {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, #line 223 "accessor_class_list.gperf" - {"vector", &grib_accessor_class_vector}, + {"when", &grib_accessor_class_when}, + {""}, {""}, +#line 196 "accessor_class_list.gperf" + {"step_human_readable", &grib_accessor_class_step_human_readable}, {""}, -#line 149 "accessor_class_list.gperf" - {"md5", &grib_accessor_class_md5}, -#line 213 "accessor_class_list.gperf" - {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, - {""}, {""}, {""}, +#line 126 "accessor_class_list.gperf" + {"int16_little_endian", &grib_accessor_class_int16_little_endian}, + {""}, +#line 104 "accessor_class_list.gperf" + {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, +#line 171 "accessor_class_list.gperf" + {"proj_string", &grib_accessor_class_proj_string}, +#line 214 "accessor_class_list.gperf" + {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, #line 59 "accessor_class_list.gperf" {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, #line 52 "accessor_class_list.gperf" {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 119 "accessor_class_list.gperf" - {"gts_header", &grib_accessor_class_gts_header}, +#line 183 "accessor_class_list.gperf" + {"select_step_template", &grib_accessor_class_select_step_template}, {""}, -#line 144 "accessor_class_list.gperf" - {"long_vector", &grib_accessor_class_long_vector}, #line 199 "accessor_class_list.gperf" {"suppressed", &grib_accessor_class_suppressed}, -#line 150 "accessor_class_list.gperf" - {"message", &grib_accessor_class_message}, -#line 202 "accessor_class_list.gperf" - {"to_double", &grib_accessor_class_to_double}, + {""}, +#line 86 "accessor_class_list.gperf" + {"g1_message_length", &grib_accessor_class_g1_message_length}, + {""}, {""}, {""}, #line 123 "accessor_class_list.gperf" {"ieeefloat", &grib_accessor_class_ieeefloat}, +#line 162 "accessor_class_list.gperf" + {"offset_file", &grib_accessor_class_offset_file}, +#line 210 "accessor_class_list.gperf" + {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, {""}, -#line 142 "accessor_class_list.gperf" - {"local_definition", &grib_accessor_class_local_definition}, -#line 57 "accessor_class_list.gperf" - {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, -#line 148 "accessor_class_list.gperf" - {"mars_step", &grib_accessor_class_mars_step}, -#line 141 "accessor_class_list.gperf" - {"library_version", &grib_accessor_class_library_version}, - {""}, -#line 189 "accessor_class_list.gperf" - {"smart_table", &grib_accessor_class_smart_table}, -#line 139 "accessor_class_list.gperf" - {"latlon_increment", &grib_accessor_class_latlon_increment}, -#line 147 "accessor_class_list.gperf" - {"mars_param", &grib_accessor_class_mars_param}, - {""}, -#line 91 "accessor_class_list.gperf" - {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, - {""}, {""}, -#line 190 "accessor_class_list.gperf" - {"smart_table_column", &grib_accessor_class_smart_table_column}, -#line 55 "accessor_class_list.gperf" - {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, -#line 34 "accessor_class_list.gperf" - {"closest_date", &grib_accessor_class_closest_date}, -#line 122 "accessor_class_list.gperf" - {"ibmfloat", &grib_accessor_class_ibmfloat}, -#line 56 "accessor_class_list.gperf" - {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, - {""}, {""}, -#line 128 "accessor_class_list.gperf" - {"int32_little_endian", &grib_accessor_class_int32_little_endian}, -#line 53 "accessor_class_list.gperf" - {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, -#line 73 "accessor_class_list.gperf" - {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, -#line 54 "accessor_class_list.gperf" - {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, - {""}, {""}, {""}, -#line 74 "accessor_class_list.gperf" - {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, -#line 19 "accessor_class_list.gperf" - {"budgdate", &grib_accessor_class_budgdate}, - {""}, -#line 146 "accessor_class_list.gperf" - {"lookup", &grib_accessor_class_lookup}, -#line 126 "accessor_class_list.gperf" - {"int16_little_endian", &grib_accessor_class_int16_little_endian}, -#line 135 "accessor_class_list.gperf" - {"ksec1expver", &grib_accessor_class_ksec1expver}, -#line 168 "accessor_class_list.gperf" - {"padtoeven", &grib_accessor_class_padtoeven}, -#line 169 "accessor_class_list.gperf" - {"padtomultiple", &grib_accessor_class_padtomultiple}, - {""}, {""}, {""}, {""}, {""}, -#line 222 "accessor_class_list.gperf" - {"variable", &grib_accessor_class_variable}, -#line 151 "accessor_class_list.gperf" - {"message_copy", &grib_accessor_class_message_copy}, -#line 21 "accessor_class_list.gperf" - {"bufr_data_element", &grib_accessor_class_bufr_data_element}, - {""}, {""}, {""}, {""}, #line 20 "accessor_class_list.gperf" {"bufr_data_array", &grib_accessor_class_bufr_data_array}, - {""}, {""}, -#line 152 "accessor_class_list.gperf" - {"missing", &grib_accessor_class_missing}, - {""}, -#line 29 "accessor_class_list.gperf" - {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, -#line 28 "accessor_class_list.gperf" - {"bufr_string_values", &grib_accessor_class_bufr_string_values}, - {""}, {""}, {""}, -#line 145 "accessor_class_list.gperf" - {"longitudes", &grib_accessor_class_longitudes}, - {""}, -#line 155 "accessor_class_list.gperf" - {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, - {""}, +#line 212 "accessor_class_list.gperf" + {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, +#line 21 "accessor_class_list.gperf" + {"bufr_data_element", &grib_accessor_class_bufr_data_element}, +#line 144 "accessor_class_list.gperf" + {"long_vector", &grib_accessor_class_long_vector}, +#line 73 "accessor_class_list.gperf" + {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, +#line 170 "accessor_class_list.gperf" + {"position", &grib_accessor_class_position}, #line 27 "accessor_class_list.gperf" {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, -#line 43 "accessor_class_list.gperf" - {"count_total", &grib_accessor_class_count_total}, -#line 120 "accessor_class_list.gperf" - {"hash_array", &grib_accessor_class_hash_array}, {""}, -#line 121 "accessor_class_list.gperf" - {"headers_only", &grib_accessor_class_headers_only}, - {""}, {""}, -#line 82 "accessor_class_list.gperf" - {"evaluate", &grib_accessor_class_evaluate}, - {""}, {""}, {""}, -#line 92 "accessor_class_list.gperf" - {"g1fcperiod", &grib_accessor_class_g1fcperiod}, +#line 139 "accessor_class_list.gperf" + {"latlon_increment", &grib_accessor_class_latlon_increment}, +#line 74 "accessor_class_list.gperf" + {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, +#line 218 "accessor_class_list.gperf" + {"validity_date", &grib_accessor_class_validity_date}, +#line 219 "accessor_class_list.gperf" + {"validity_time", &grib_accessor_class_validity_time}, +#line 29 "accessor_class_list.gperf" + {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, +#line 142 "accessor_class_list.gperf" + {"local_definition", &grib_accessor_class_local_definition}, {""}, -#line 158 "accessor_class_list.gperf" - {"number_of_values", &grib_accessor_class_number_of_values}, +#line 97 "accessor_class_list.gperf" + {"g1step_range", &grib_accessor_class_g1step_range}, +#line 221 "accessor_class_list.gperf" + {"variable", &grib_accessor_class_variable}, + {""}, +#line 222 "accessor_class_list.gperf" + {"vector", &grib_accessor_class_vector}, {""}, #line 124 "accessor_class_list.gperf" {"ifs_param", &grib_accessor_class_ifs_param}, - {""}, {""}, -#line 208 "accessor_class_list.gperf" - {"uint16", &grib_accessor_class_uint16}, -#line 109 "accessor_class_list.gperf" - {"g2level", &grib_accessor_class_g2level}, - {""}, {""}, {""}, {""}, -#line 140 "accessor_class_list.gperf" - {"latlonvalues", &grib_accessor_class_latlonvalues}, - {""}, {""}, -#line 76 "accessor_class_list.gperf" - {"decimal_precision", &grib_accessor_class_decimal_precision}, - {""}, {""}, -#line 159 "accessor_class_list.gperf" - {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, - {""}, {""}, {""}, {""}, -#line 177 "accessor_class_list.gperf" - {"scale_values", &grib_accessor_class_scale_values}, -#line 209 "accessor_class_list.gperf" - {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, -#line 36 "accessor_class_list.gperf" - {"codetable", &grib_accessor_class_codetable}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 37 "accessor_class_list.gperf" - {"codetable_title", &grib_accessor_class_codetable_title}, -#line 163 "accessor_class_list.gperf" - {"offset_values", &grib_accessor_class_offset_values}, + {""}, +#line 89 "accessor_class_list.gperf" + {"g1date", &grib_accessor_class_g1date}, +#line 135 "accessor_class_list.gperf" + {"ksec1expver", &grib_accessor_class_ksec1expver}, +#line 88 "accessor_class_list.gperf" + {"g1bitmap", &grib_accessor_class_g1bitmap}, +#line 57 "accessor_class_list.gperf" + {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, + {""}, +#line 169 "accessor_class_list.gperf" + {"padtomultiple", &grib_accessor_class_padtomultiple}, {""}, {""}, {""}, {""}, {""}, +#line 146 "accessor_class_list.gperf" + {"lookup", &grib_accessor_class_lookup}, +#line 121 "accessor_class_list.gperf" + {"headers_only", &grib_accessor_class_headers_only}, +#line 19 "accessor_class_list.gperf" + {"budgdate", &grib_accessor_class_budgdate}, + {""}, +#line 55 "accessor_class_list.gperf" + {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, +#line 145 "accessor_class_list.gperf" + {"longitudes", &grib_accessor_class_longitudes}, +#line 120 "accessor_class_list.gperf" + {"hash_array", &grib_accessor_class_hash_array}, +#line 56 "accessor_class_list.gperf" + {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, +#line 168 "accessor_class_list.gperf" + {"padtoeven", &grib_accessor_class_padtoeven}, +#line 87 "accessor_class_list.gperf" + {"g1_section4_length", &grib_accessor_class_g1_section4_length}, + {""}, +#line 53 "accessor_class_list.gperf" + {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, + {""}, +#line 54 "accessor_class_list.gperf" + {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, + {""}, +#line 207 "accessor_class_list.gperf" + {"uint16", &grib_accessor_class_uint16}, +#line 119 "accessor_class_list.gperf" + {"gts_header", &grib_accessor_class_gts_header}, + {""}, {""}, {""}, +#line 39 "accessor_class_list.gperf" + {"concept", &grib_accessor_class_concept}, +#line 201 "accessor_class_list.gperf" + {"to_double", &grib_accessor_class_to_double}, +#line 149 "accessor_class_list.gperf" + {"md5", &grib_accessor_class_md5}, #line 26 "accessor_class_list.gperf" {"bufr_group", &grib_accessor_class_bufr_group}, - {""}, {""}, {""}, {""}, {""}, + {""}, +#line 109 "accessor_class_list.gperf" + {"g2level", &grib_accessor_class_g2level}, +#line 150 "accessor_class_list.gperf" + {"message", &grib_accessor_class_message}, + {""}, {""}, +#line 147 "accessor_class_list.gperf" + {"mars_param", &grib_accessor_class_mars_param}, + {""}, {""}, +#line 92 "accessor_class_list.gperf" + {"g1fcperiod", &grib_accessor_class_g1fcperiod}, + {""}, +#line 40 "accessor_class_list.gperf" + {"constant", &grib_accessor_class_constant}, + {""}, +#line 91 "accessor_class_list.gperf" + {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, +#line 22 "accessor_class_list.gperf" + {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, +#line 161 "accessor_class_list.gperf" + {"octet_number", &grib_accessor_class_octet_number}, + {""}, {""}, +#line 28 "accessor_class_list.gperf" + {"bufr_string_values", &grib_accessor_class_bufr_string_values}, + {""}, {""}, +#line 140 "accessor_class_list.gperf" + {"latlonvalues", &grib_accessor_class_latlonvalues}, +#line 155 "accessor_class_list.gperf" + {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, + {""}, +#line 158 "accessor_class_list.gperf" + {"number_of_values", &grib_accessor_class_number_of_values}, + {""}, {""}, {""}, +#line 151 "accessor_class_list.gperf" + {"message_copy", &grib_accessor_class_message_copy}, + {""}, {""}, #line 164 "accessor_class_list.gperf" {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, {""}, {""}, -#line 174 "accessor_class_list.gperf" - {"reference_value_error", &grib_accessor_class_reference_value_error}, - {""}, -#line 22 "accessor_class_list.gperf" - {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, -#line 85 "accessor_class_list.gperf" - {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, - {""}, -#line 41 "accessor_class_list.gperf" - {"count_file", &grib_accessor_class_count_file}, -#line 72 "accessor_class_list.gperf" - {"data_sh_packed", &grib_accessor_class_data_sh_packed}, -#line 35 "accessor_class_list.gperf" - {"codeflag", &grib_accessor_class_codeflag}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, -#line 216 "accessor_class_list.gperf" - {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, - {""}, {""}, {""}, {""}, +#line 152 "accessor_class_list.gperf" + {"missing", &grib_accessor_class_missing}, #line 11 "accessor_class_list.gperf" {"abstract_vector", &grib_accessor_class_abstract_vector}, -#line 32 "accessor_class_list.gperf" - {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, - {""}, {""}, {""}, {""}, {""}, -#line 31 "accessor_class_list.gperf" - {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, + {""}, {""}, +#line 177 "accessor_class_list.gperf" + {"scale_values", &grib_accessor_class_scale_values}, +#line 163 "accessor_class_list.gperf" + {"offset_values", &grib_accessor_class_offset_values}, +#line 34 "accessor_class_list.gperf" + {"closest_date", &grib_accessor_class_closest_date}, +#line 159 "accessor_class_list.gperf" + {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, + {""}, {""}, {""}, +#line 82 "accessor_class_list.gperf" + {"evaluate", &grib_accessor_class_evaluate}, {""}, -#line 94 "accessor_class_list.gperf" - {"g1monthlydate", &grib_accessor_class_g1monthlydate}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, -#line 160 "accessor_class_list.gperf" - {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 84 "accessor_class_list.gperf" - {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, +#line 148 "accessor_class_list.gperf" + {"mars_step", &grib_accessor_class_mars_step}, +#line 208 "accessor_class_list.gperf" + {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, + {""}, {""}, {""}, +#line 72 "accessor_class_list.gperf" + {"data_sh_packed", &grib_accessor_class_data_sh_packed}, + {""}, {""}, +#line 174 "accessor_class_list.gperf" + {"reference_value_error", &grib_accessor_class_reference_value_error}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 35 "accessor_class_list.gperf" + {"codeflag", &grib_accessor_class_codeflag}, {""}, +#line 76 "accessor_class_list.gperf" + {"decimal_precision", &grib_accessor_class_decimal_precision}, +#line 36 "accessor_class_list.gperf" + {"codetable", &grib_accessor_class_codetable}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, #line 25 "accessor_class_list.gperf" {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, - {""}, {""}, {""}, {""}, + {""}, {""}, +#line 215 "accessor_class_list.gperf" + {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, + {""}, #line 23 "accessor_class_list.gperf" {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, {""}, {""}, {""}, #line 24 "accessor_class_list.gperf" {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, - {""}, {""}, + {""}, {""}, {""}, +#line 85 "accessor_class_list.gperf" + {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, +#line 84 "accessor_class_list.gperf" + {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, +#line 94 "accessor_class_list.gperf" + {"g1monthlydate", &grib_accessor_class_g1monthlydate}, +#line 189 "accessor_class_list.gperf" + {"smart_table", &grib_accessor_class_smart_table}, + {""}, {""}, {""}, +#line 43 "accessor_class_list.gperf" + {"count_total", &grib_accessor_class_count_total}, #line 10 "accessor_class_list.gperf" {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, +#line 31 "accessor_class_list.gperf" + {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, +#line 190 "accessor_class_list.gperf" + {"smart_table_column", &grib_accessor_class_smart_table_column}, + {""}, {""}, {""}, {""}, {""}, +#line 32 "accessor_class_list.gperf" + {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, {""}, {""}, -#line 98 "accessor_class_list.gperf" - {"g1verificationdate", &grib_accessor_class_g1verificationdate}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, -#line 42 "accessor_class_list.gperf" - {"count_missing", &grib_accessor_class_count_missing}, +#line 41 "accessor_class_list.gperf" + {"count_file", &grib_accessor_class_count_file}, + {""}, {""}, {""}, {""}, {""}, +#line 160 "accessor_class_list.gperf" + {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, +#line 37 "accessor_class_list.gperf" + {"codetable_title", &grib_accessor_class_codetable_title}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 90 "accessor_class_list.gperf" - {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, - {""}, -#line 38 "accessor_class_list.gperf" - {"codetable_units", &grib_accessor_class_codetable_units}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, #line 33 "accessor_class_list.gperf" {"check_internal_version", &grib_accessor_class_check_internal_version}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 98 "accessor_class_list.gperf" + {"g1verificationdate", &grib_accessor_class_g1verificationdate}, +#line 90 "accessor_class_list.gperf" + {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 38 "accessor_class_list.gperf" + {"codetable_units", &grib_accessor_class_codetable_units}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -650,12 +623,18 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 42 "accessor_class_list.gperf" + {"count_missing", &grib_accessor_class_count_missing}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, + {""}, {""}, {""}, {""}, {""}, #line 100 "accessor_class_list.gperf" {"g2_chemical", &grib_accessor_class_g2_chemical}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, #line 96 "accessor_class_list.gperf" {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, #line 95 "accessor_class_list.gperf" @@ -666,7 +645,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, + {""}, {""}, {""}, {""}, #line 93 "accessor_class_list.gperf" {"g1forecastmonth", &grib_accessor_class_g1forecastmonth} }; diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index 5466089fe..0759065ff 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -190,7 +190,6 @@ { "sum", &grib_accessor_class_sum, }, { "suppressed", &grib_accessor_class_suppressed, }, { "time", &grib_accessor_class_time, }, -{ "times", &grib_accessor_class_times, }, { "to_double", &grib_accessor_class_to_double, }, { "to_integer", &grib_accessor_class_to_integer, }, { "to_string", &grib_accessor_class_to_string, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index 26e02f524..b3005c92f 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -191,7 +191,6 @@ step_in_units, &grib_accessor_class_step_in_units sum, &grib_accessor_class_sum suppressed, &grib_accessor_class_suppressed time, &grib_accessor_class_time -times, &grib_accessor_class_times to_double, &grib_accessor_class_to_double to_integer, &grib_accessor_class_to_integer to_string, &grib_accessor_class_to_string From 5afef1ed0dc22b5f1a5eefab3d67203a0787162b Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 4 Aug 2023 10:59:16 +0100 Subject: [PATCH 092/372] Scripts: Remove 'register' from gperf generated file --- src/make_accessor_class_hash.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/make_accessor_class_hash.sh b/src/make_accessor_class_hash.sh index 749bee5e0..8a3f26f79 100755 --- a/src/make_accessor_class_hash.sh +++ b/src/make_accessor_class_hash.sh @@ -18,5 +18,6 @@ gperf --version echo gperf -C -W classes -t -G -H grib_accessor_classes_get_id -N grib_accessor_classes_hash -m 1 -j 1 accessor_class_list.gperf |\ - sed s/__inline//g | sed s/inline//g > grib_accessor_classes_hash.cc + sed s/__inline//g | sed s/inline//g | sed 's/register //g' > grib_accessor_classes_hash.cc +rm -f accessor_class_list.gperf From ca027115da95ab93d73da26b00ef2b602c674e04 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 4 Aug 2023 12:29:07 +0100 Subject: [PATCH 093/372] Dead code removal: missing --- src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 2 - .../grib_accessor_class_missing.cc | 0 src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - src/grib_accessor_classes_hash.cc | 152 +++++++++--------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 8 files changed, 75 insertions(+), 85 deletions(-) rename src/{ => deprecated}/grib_accessor_class_missing.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 18d728e54..8ee669912 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -130,7 +130,6 @@ list( APPEND eccodes_src_files grib_accessor_class_latlonvalues.cc grib_accessor_class_latitudes.cc grib_accessor_class_longitudes.cc - grib_accessor_class_missing.cc grib_accessor_class_offset_file.cc grib_accessor_class_scale.cc grib_accessor_class_from_scale_factor_scaled_value.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index 7ec8436de..3dcc6bc06 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -215,5 +215,3 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |-----grib_accessor_class_constant |-----grib_accessor_class_transient |---grib_accessor_class_when - |-grib_accessor_class_missing - diff --git a/src/grib_accessor_class_missing.cc b/src/deprecated/grib_accessor_class_missing.cc similarity index 100% rename from src/grib_accessor_class_missing.cc rename to src/deprecated/grib_accessor_class_missing.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index d3c163913..43ff0711f 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -466,8 +466,6 @@ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd); /* grib_accessor_class_longitudes.cc*/ -/* grib_accessor_class_missing.cc*/ - /* grib_accessor_class_octahedral_gaussian.cc*/ /* grib_accessor_class_offset_file.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index eb312f85d..84f577ed2 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -142,7 +142,6 @@ extern grib_accessor_class* grib_accessor_class_mars_step; extern grib_accessor_class* grib_accessor_class_md5; extern grib_accessor_class* grib_accessor_class_message; extern grib_accessor_class* grib_accessor_class_message_copy; -extern grib_accessor_class* grib_accessor_class_missing; extern grib_accessor_class* grib_accessor_class_nearest; extern grib_accessor_class* grib_accessor_class_non_alpha; extern grib_accessor_class* grib_accessor_class_number_of_coded_values; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index dbc1792f3..55f69b87c 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,7 +37,7 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 215 +#define TOTAL_KEYWORDS 214 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 @@ -117,17 +117,17 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, -#line 188 "accessor_class_list.gperf" +#line 187 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, -#line 185 "accessor_class_list.gperf" +#line 184 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, {""}, #line 78 "accessor_class_list.gperf" {"dirty", &grib_accessor_class_dirty}, {""}, {""}, {""}, -#line 186 "accessor_class_list.gperf" +#line 185 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, {""}, #line 69 "accessor_class_list.gperf" @@ -140,11 +140,11 @@ static const struct accessor_class_hash classes[] = {"data_simple_packing", &grib_accessor_class_data_simple_packing}, #line 71 "accessor_class_list.gperf" {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 179 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" {"section", &grib_accessor_class_section}, -#line 165 "accessor_class_list.gperf" +#line 164 "accessor_class_list.gperf" {"pad", &grib_accessor_class_pad}, -#line 191 "accessor_class_list.gperf" +#line 190 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, #line 77 "accessor_class_list.gperf" {"dictionary", &grib_accessor_class_dictionary}, @@ -154,9 +154,9 @@ static const struct accessor_class_hash classes[] = {""}, #line 68 "accessor_class_list.gperf" {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 181 "accessor_class_list.gperf" +#line 180 "accessor_class_list.gperf" {"section_padding", &grib_accessor_class_section_padding}, -#line 182 "accessor_class_list.gperf" +#line 181 "accessor_class_list.gperf" {"section_pointer", &grib_accessor_class_section_pointer}, #line 115 "accessor_class_list.gperf" {"gen", &grib_accessor_class_gen}, @@ -174,9 +174,9 @@ static const struct accessor_class_hash classes[] = {""}, #line 125 "accessor_class_list.gperf" {"int16", &grib_accessor_class_int16}, -#line 178 "accessor_class_list.gperf" +#line 177 "accessor_class_list.gperf" {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 180 "accessor_class_list.gperf" +#line 179 "accessor_class_list.gperf" {"section_length", &grib_accessor_class_section_length}, #line 67 "accessor_class_list.gperf" {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, @@ -186,7 +186,7 @@ static const struct accessor_class_hash classes[] = {"gds_is_present", &grib_accessor_class_gds_is_present}, #line 46 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, -#line 200 "accessor_class_list.gperf" +#line 199 "accessor_class_list.gperf" {"time", &grib_accessor_class_time}, #line 116 "accessor_class_list.gperf" {"getenv", &grib_accessor_class_getenv}, @@ -202,23 +202,23 @@ static const struct accessor_class_hash classes[] = {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, #line 62 "accessor_class_list.gperf" {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, -#line 166 "accessor_class_list.gperf" +#line 165 "accessor_class_list.gperf" {"padding", &grib_accessor_class_padding}, {""}, {""}, {""}, #line 110 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, -#line 153 "accessor_class_list.gperf" +#line 152 "accessor_class_list.gperf" {"nearest", &grib_accessor_class_nearest}, #line 137 "accessor_class_list.gperf" {"laplacian", &grib_accessor_class_laplacian}, -#line 172 "accessor_class_list.gperf" +#line 171 "accessor_class_list.gperf" {"raw", &grib_accessor_class_raw}, {""}, {""}, {""}, #line 13 "accessor_class_list.gperf" {"assert", &grib_accessor_class_assert}, #line 101 "accessor_class_list.gperf" {"g2_eps", &grib_accessor_class_g2_eps}, -#line 197 "accessor_class_list.gperf" +#line 196 "accessor_class_list.gperf" {"step_in_units", &grib_accessor_class_step_in_units}, {""}, #line 14 "accessor_class_list.gperf" @@ -234,12 +234,12 @@ static const struct accessor_class_hash classes[] = {"data_complex_packing", &grib_accessor_class_data_complex_packing}, #line 30 "accessor_class_list.gperf" {"bytes", &grib_accessor_class_bytes}, -#line 187 "accessor_class_list.gperf" +#line 186 "accessor_class_list.gperf" {"simple_packing_error", &grib_accessor_class_simple_packing_error}, -#line 173 "accessor_class_list.gperf" +#line 172 "accessor_class_list.gperf" {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, {""}, -#line 167 "accessor_class_list.gperf" +#line 166 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, #line 17 "accessor_class_list.gperf" {"bits_per_value", &grib_accessor_class_bits_per_value}, @@ -255,27 +255,27 @@ static const struct accessor_class_hash classes[] = {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, #line 61 "accessor_class_list.gperf" {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, -#line 194 "accessor_class_list.gperf" +#line 193 "accessor_class_list.gperf" {"statistics", &grib_accessor_class_statistics}, {""}, #line 117 "accessor_class_list.gperf" {"global_gaussian", &grib_accessor_class_global_gaussian}, -#line 154 "accessor_class_list.gperf" +#line 153 "accessor_class_list.gperf" {"non_alpha", &grib_accessor_class_non_alpha}, -#line 198 "accessor_class_list.gperf" +#line 197 "accessor_class_list.gperf" {"sum", &grib_accessor_class_sum}, {""}, #line 81 "accessor_class_list.gperf" {"element", &grib_accessor_class_element}, -#line 184 "accessor_class_list.gperf" +#line 183 "accessor_class_list.gperf" {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, #line 138 "accessor_class_list.gperf" {"latitudes", &grib_accessor_class_latitudes}, -#line 195 "accessor_class_list.gperf" +#line 194 "accessor_class_list.gperf" {"statistics_spectral", &grib_accessor_class_statistics_spectral}, #line 114 "accessor_class_list.gperf" {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, -#line 206 "accessor_class_list.gperf" +#line 205 "accessor_class_list.gperf" {"trim", &grib_accessor_class_trim}, #line 132 "accessor_class_list.gperf" {"iterator", &grib_accessor_class_iterator}, @@ -287,7 +287,7 @@ static const struct accessor_class_hash classes[] = {"label", &grib_accessor_class_label}, #line 51 "accessor_class_list.gperf" {"data_dummy_field", &grib_accessor_class_data_dummy_field}, -#line 204 "accessor_class_list.gperf" +#line 203 "accessor_class_list.gperf" {"transient", &grib_accessor_class_transient}, #line 143 "accessor_class_list.gperf" {"long", &grib_accessor_class_long}, @@ -301,19 +301,19 @@ static const struct accessor_class_hash classes[] = {"julian_date", &grib_accessor_class_julian_date}, #line 70 "accessor_class_list.gperf" {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, -#line 205 "accessor_class_list.gperf" +#line 204 "accessor_class_list.gperf" {"transient_darray", &grib_accessor_class_transient_darray}, -#line 209 "accessor_class_list.gperf" +#line 208 "accessor_class_list.gperf" {"uint32", &grib_accessor_class_uint32}, -#line 202 "accessor_class_list.gperf" +#line 201 "accessor_class_list.gperf" {"to_integer", &grib_accessor_class_to_integer}, -#line 175 "accessor_class_list.gperf" +#line 174 "accessor_class_list.gperf" {"round", &grib_accessor_class_round}, -#line 211 "accessor_class_list.gperf" +#line 210 "accessor_class_list.gperf" {"uint64", &grib_accessor_class_uint64}, #line 18 "accessor_class_list.gperf" {"blob", &grib_accessor_class_blob}, -#line 213 "accessor_class_list.gperf" +#line 212 "accessor_class_list.gperf" {"uint8", &grib_accessor_class_uint8}, {""}, #line 102 "accessor_class_list.gperf" @@ -322,7 +322,7 @@ static const struct accessor_class_hash classes[] = #line 122 "accessor_class_list.gperf" {"ibmfloat", &grib_accessor_class_ibmfloat}, {""}, -#line 176 "accessor_class_list.gperf" +#line 175 "accessor_class_list.gperf" {"scale", &grib_accessor_class_scale}, {""}, #line 141 "accessor_class_list.gperf" @@ -333,37 +333,37 @@ static const struct accessor_class_hash classes[] = #line 44 "accessor_class_list.gperf" {"data_2order_packing", &grib_accessor_class_data_2order_packing}, {""}, {""}, -#line 220 "accessor_class_list.gperf" +#line 219 "accessor_class_list.gperf" {"values", &grib_accessor_class_values}, {""}, {""}, -#line 192 "accessor_class_list.gperf" +#line 191 "accessor_class_list.gperf" {"spectral_truncation", &grib_accessor_class_spectral_truncation}, #line 49 "accessor_class_list.gperf" {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, -#line 156 "accessor_class_list.gperf" +#line 155 "accessor_class_list.gperf" {"number_of_points", &grib_accessor_class_number_of_points}, -#line 216 "accessor_class_list.gperf" +#line 215 "accessor_class_list.gperf" {"unsigned", &grib_accessor_class_unsigned}, #line 130 "accessor_class_list.gperf" {"int64_little_endian", &grib_accessor_class_int64_little_endian}, #line 58 "accessor_class_list.gperf" {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, -#line 193 "accessor_class_list.gperf" +#line 192 "accessor_class_list.gperf" {"sprintf", &grib_accessor_class_sprintf}, #line 108 "accessor_class_list.gperf" {"g2latlon", &grib_accessor_class_g2latlon}, -#line 203 "accessor_class_list.gperf" +#line 202 "accessor_class_list.gperf" {"to_string", &grib_accessor_class_to_string}, -#line 217 "accessor_class_list.gperf" +#line 216 "accessor_class_list.gperf" {"unsigned_bits", &grib_accessor_class_unsigned_bits}, #line 128 "accessor_class_list.gperf" {"int32_little_endian", &grib_accessor_class_int32_little_endian}, -#line 157 "accessor_class_list.gperf" +#line 156 "accessor_class_list.gperf" {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, -#line 223 "accessor_class_list.gperf" +#line 222 "accessor_class_list.gperf" {"when", &grib_accessor_class_when}, {""}, {""}, -#line 196 "accessor_class_list.gperf" +#line 195 "accessor_class_list.gperf" {"step_human_readable", &grib_accessor_class_step_human_readable}, {""}, #line 126 "accessor_class_list.gperf" @@ -371,18 +371,18 @@ static const struct accessor_class_hash classes[] = {""}, #line 104 "accessor_class_list.gperf" {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, -#line 171 "accessor_class_list.gperf" +#line 170 "accessor_class_list.gperf" {"proj_string", &grib_accessor_class_proj_string}, -#line 214 "accessor_class_list.gperf" +#line 213 "accessor_class_list.gperf" {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, #line 59 "accessor_class_list.gperf" {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, #line 52 "accessor_class_list.gperf" {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 183 "accessor_class_list.gperf" +#line 182 "accessor_class_list.gperf" {"select_step_template", &grib_accessor_class_select_step_template}, {""}, -#line 199 "accessor_class_list.gperf" +#line 198 "accessor_class_list.gperf" {"suppressed", &grib_accessor_class_suppressed}, {""}, #line 86 "accessor_class_list.gperf" @@ -390,14 +390,14 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, #line 123 "accessor_class_list.gperf" {"ieeefloat", &grib_accessor_class_ieeefloat}, -#line 162 "accessor_class_list.gperf" +#line 161 "accessor_class_list.gperf" {"offset_file", &grib_accessor_class_offset_file}, -#line 210 "accessor_class_list.gperf" +#line 209 "accessor_class_list.gperf" {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, {""}, #line 20 "accessor_class_list.gperf" {"bufr_data_array", &grib_accessor_class_bufr_data_array}, -#line 212 "accessor_class_list.gperf" +#line 211 "accessor_class_list.gperf" {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, #line 21 "accessor_class_list.gperf" {"bufr_data_element", &grib_accessor_class_bufr_data_element}, @@ -405,7 +405,7 @@ static const struct accessor_class_hash classes[] = {"long_vector", &grib_accessor_class_long_vector}, #line 73 "accessor_class_list.gperf" {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, -#line 170 "accessor_class_list.gperf" +#line 169 "accessor_class_list.gperf" {"position", &grib_accessor_class_position}, #line 27 "accessor_class_list.gperf" {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, @@ -414,9 +414,9 @@ static const struct accessor_class_hash classes[] = {"latlon_increment", &grib_accessor_class_latlon_increment}, #line 74 "accessor_class_list.gperf" {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, -#line 218 "accessor_class_list.gperf" +#line 217 "accessor_class_list.gperf" {"validity_date", &grib_accessor_class_validity_date}, -#line 219 "accessor_class_list.gperf" +#line 218 "accessor_class_list.gperf" {"validity_time", &grib_accessor_class_validity_time}, #line 29 "accessor_class_list.gperf" {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, @@ -425,10 +425,10 @@ static const struct accessor_class_hash classes[] = {""}, #line 97 "accessor_class_list.gperf" {"g1step_range", &grib_accessor_class_g1step_range}, -#line 221 "accessor_class_list.gperf" +#line 220 "accessor_class_list.gperf" {"variable", &grib_accessor_class_variable}, {""}, -#line 222 "accessor_class_list.gperf" +#line 221 "accessor_class_list.gperf" {"vector", &grib_accessor_class_vector}, {""}, #line 124 "accessor_class_list.gperf" @@ -443,7 +443,7 @@ static const struct accessor_class_hash classes[] = #line 57 "accessor_class_list.gperf" {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, {""}, -#line 169 "accessor_class_list.gperf" +#line 168 "accessor_class_list.gperf" {"padtomultiple", &grib_accessor_class_padtomultiple}, {""}, {""}, {""}, {""}, {""}, #line 146 "accessor_class_list.gperf" @@ -461,7 +461,7 @@ static const struct accessor_class_hash classes[] = {"hash_array", &grib_accessor_class_hash_array}, #line 56 "accessor_class_list.gperf" {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, -#line 168 "accessor_class_list.gperf" +#line 167 "accessor_class_list.gperf" {"padtoeven", &grib_accessor_class_padtoeven}, #line 87 "accessor_class_list.gperf" {"g1_section4_length", &grib_accessor_class_g1_section4_length}, @@ -472,14 +472,14 @@ static const struct accessor_class_hash classes[] = #line 54 "accessor_class_list.gperf" {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, {""}, -#line 207 "accessor_class_list.gperf" +#line 206 "accessor_class_list.gperf" {"uint16", &grib_accessor_class_uint16}, #line 119 "accessor_class_list.gperf" {"gts_header", &grib_accessor_class_gts_header}, {""}, {""}, {""}, #line 39 "accessor_class_list.gperf" {"concept", &grib_accessor_class_concept}, -#line 201 "accessor_class_list.gperf" +#line 200 "accessor_class_list.gperf" {"to_double", &grib_accessor_class_to_double}, #line 149 "accessor_class_list.gperf" {"md5", &grib_accessor_class_md5}, @@ -504,7 +504,7 @@ static const struct accessor_class_hash classes[] = {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, #line 22 "accessor_class_list.gperf" {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, -#line 161 "accessor_class_list.gperf" +#line 160 "accessor_class_list.gperf" {"octet_number", &grib_accessor_class_octet_number}, {""}, {""}, #line 28 "accessor_class_list.gperf" @@ -512,30 +512,28 @@ static const struct accessor_class_hash classes[] = {""}, {""}, #line 140 "accessor_class_list.gperf" {"latlonvalues", &grib_accessor_class_latlonvalues}, -#line 155 "accessor_class_list.gperf" +#line 154 "accessor_class_list.gperf" {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, {""}, -#line 158 "accessor_class_list.gperf" +#line 157 "accessor_class_list.gperf" {"number_of_values", &grib_accessor_class_number_of_values}, {""}, {""}, {""}, #line 151 "accessor_class_list.gperf" {"message_copy", &grib_accessor_class_message_copy}, {""}, {""}, -#line 164 "accessor_class_list.gperf" +#line 163 "accessor_class_list.gperf" {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, - {""}, {""}, -#line 152 "accessor_class_list.gperf" - {"missing", &grib_accessor_class_missing}, + {""}, {""}, {""}, #line 11 "accessor_class_list.gperf" {"abstract_vector", &grib_accessor_class_abstract_vector}, {""}, {""}, -#line 177 "accessor_class_list.gperf" +#line 176 "accessor_class_list.gperf" {"scale_values", &grib_accessor_class_scale_values}, -#line 163 "accessor_class_list.gperf" +#line 162 "accessor_class_list.gperf" {"offset_values", &grib_accessor_class_offset_values}, #line 34 "accessor_class_list.gperf" {"closest_date", &grib_accessor_class_closest_date}, -#line 159 "accessor_class_list.gperf" +#line 158 "accessor_class_list.gperf" {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, {""}, {""}, {""}, #line 82 "accessor_class_list.gperf" @@ -543,13 +541,13 @@ static const struct accessor_class_hash classes[] = {""}, #line 148 "accessor_class_list.gperf" {"mars_step", &grib_accessor_class_mars_step}, -#line 208 "accessor_class_list.gperf" +#line 207 "accessor_class_list.gperf" {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, {""}, {""}, {""}, #line 72 "accessor_class_list.gperf" {"data_sh_packed", &grib_accessor_class_data_sh_packed}, {""}, {""}, -#line 174 "accessor_class_list.gperf" +#line 173 "accessor_class_list.gperf" {"reference_value_error", &grib_accessor_class_reference_value_error}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, #line 35 "accessor_class_list.gperf" @@ -563,7 +561,7 @@ static const struct accessor_class_hash classes[] = #line 25 "accessor_class_list.gperf" {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, {""}, {""}, -#line 215 "accessor_class_list.gperf" +#line 214 "accessor_class_list.gperf" {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, {""}, #line 23 "accessor_class_list.gperf" @@ -578,7 +576,7 @@ static const struct accessor_class_hash classes[] = {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, #line 94 "accessor_class_list.gperf" {"g1monthlydate", &grib_accessor_class_g1monthlydate}, -#line 189 "accessor_class_list.gperf" +#line 188 "accessor_class_list.gperf" {"smart_table", &grib_accessor_class_smart_table}, {""}, {""}, {""}, #line 43 "accessor_class_list.gperf" @@ -587,7 +585,7 @@ static const struct accessor_class_hash classes[] = {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, #line 31 "accessor_class_list.gperf" {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, -#line 190 "accessor_class_list.gperf" +#line 189 "accessor_class_list.gperf" {"smart_table_column", &grib_accessor_class_smart_table_column}, {""}, {""}, {""}, {""}, {""}, #line 32 "accessor_class_list.gperf" @@ -596,7 +594,7 @@ static const struct accessor_class_hash classes[] = #line 41 "accessor_class_list.gperf" {"count_file", &grib_accessor_class_count_file}, {""}, {""}, {""}, {""}, {""}, -#line 160 "accessor_class_list.gperf" +#line 159 "accessor_class_list.gperf" {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, #line 37 "accessor_class_list.gperf" {"codetable_title", &grib_accessor_class_codetable_title}, @@ -655,7 +653,7 @@ static const struct accessor_class_hash* grib_accessor_classes_hash (const char unsigned int key = grib_accessor_classes_get_id (str, len); #ifdef DEBUG - { + { const char *s; Assert( len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH ); Assert( key <= MAX_HASH_VALUE ); @@ -664,5 +662,5 @@ static const struct accessor_class_hash* grib_accessor_classes_hash (const char } #endif - return &classes[key]; + return &classes[key]; } diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index 0759065ff..c419316fb 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -141,7 +141,6 @@ { "md5", &grib_accessor_class_md5, }, { "message", &grib_accessor_class_message, }, { "message_copy", &grib_accessor_class_message_copy, }, -{ "missing", &grib_accessor_class_missing, }, { "nearest", &grib_accessor_class_nearest, }, { "non_alpha", &grib_accessor_class_non_alpha, }, { "number_of_coded_values", &grib_accessor_class_number_of_coded_values, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index b3005c92f..f133588ea 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -142,7 +142,6 @@ mars_step, &grib_accessor_class_mars_step md5, &grib_accessor_class_md5 message, &grib_accessor_class_message message_copy, &grib_accessor_class_message_copy -missing, &grib_accessor_class_missing nearest, &grib_accessor_class_nearest non_alpha, &grib_accessor_class_non_alpha number_of_coded_values, &grib_accessor_class_number_of_coded_values From d23e35c6ce50fbcc94b23c5757a9a525185ae95e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 4 Aug 2023 13:23:39 +0000 Subject: [PATCH 094/372] Testing: GRIB1 with GDS not present --- definitions/grib1/grid_255.def | 1 + ...b_accessor_class_gds_not_present_bitmap.cc | 11 +++++++-- tests/CMakeLists.txt | 1 + tests/grib1_gds_not_present.sh | 23 +++++++++++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 definitions/grib1/grid_255.def create mode 100755 tests/grib1_gds_not_present.sh diff --git a/definitions/grib1/grid_255.def b/definitions/grib1/grid_255.def new file mode 100644 index 000000000..c0f6d1337 --- /dev/null +++ b/definitions/grib1/grid_255.def @@ -0,0 +1 @@ +label "_empty"; diff --git a/src/grib_accessor_class_gds_not_present_bitmap.cc b/src/grib_accessor_class_gds_not_present_bitmap.cc index 93431c9db..d8ec8ecd1 100644 --- a/src/grib_accessor_class_gds_not_present_bitmap.cc +++ b/src/grib_accessor_class_gds_not_present_bitmap.cc @@ -24,6 +24,7 @@ IMPLEMENTS = unpack_double IMPLEMENTS = pack_double IMPLEMENTS = value_count + IMPLEMENTS = get_native_type MEMBERS=const char* missing_value MEMBERS=const char* number_of_values MEMBERS=const char* number_of_points @@ -43,6 +44,7 @@ or edit "accessor.class" and rerun ./make_class.pl */ +static int get_native_type(grib_accessor*); static int pack_double(grib_accessor*, const double* val, size_t* len); static int unpack_double(grib_accessor*, double* val, size_t* len); static int value_count(grib_accessor*, long*); @@ -77,7 +79,7 @@ static grib_accessor_class _grib_accessor_class_gds_not_present_bitmap = { &value_count, /* get number of values */ 0, /* get number of bytes */ 0, /* get offset to bytes */ - 0, /* get native type */ + &get_native_type, /* get native type */ 0, /* get sub_section */ 0, /* pack_missing */ 0, /* is_missing */ @@ -132,7 +134,7 @@ static void init(grib_accessor* a, const long v, grib_arguments* args) static int value_count(grib_accessor* a, long* number_of_points) { grib_accessor_gds_not_present_bitmap* self = (grib_accessor_gds_not_present_bitmap*)a; - *number_of_points = 0; + *number_of_points = 0; return grib_get_long_internal(grib_handle_of_accessor(a), self->number_of_points, number_of_points); } @@ -207,3 +209,8 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) // a possible implementation return GRIB_NOT_IMPLEMENTED; } + +static int get_native_type(grib_accessor* a) +{ + return GRIB_TYPE_DOUBLE; +} diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f97524872..d5ce08fdf 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -236,6 +236,7 @@ if( HAVE_BUILD_TOOLS ) metar_compare bufr_set grib_ieee + grib1_gds_not_present grib_sh_ieee64 grib_optimize_scaling grib_optimize_scaling_sh diff --git a/tests/grib1_gds_not_present.sh b/tests/grib1_gds_not_present.sh new file mode 100755 index 000000000..36fffae56 --- /dev/null +++ b/tests/grib1_gds_not_present.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +REDIRECT=/dev/null + +label="grib1_gds_not_present_test" +tempGrib=temp.$label.grib + +input=$data_dir/reduced_latlon_surface.grib1 +${tools_dir}/grib_set -s gridDescriptionSectionPresent=0 $input $tempGrib +${tools_dir}/grib_dump $tempGrib > $REDIRECT 2>&1 + +# Clean up +rm -f $tempGrib From 4b460844a771dd4f233e0892c9acc6465b220add Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 4 Aug 2023 13:58:37 +0000 Subject: [PATCH 095/372] ECC-1653: GRIB2: Add encoding for mean parameters --- definitions/grib2/cfVarName.def | 285 ++++++++++++++++++++++++++++++++ definitions/grib2/name.def | 285 ++++++++++++++++++++++++++++++++ definitions/grib2/paramId.def | 285 ++++++++++++++++++++++++++++++++ definitions/grib2/shortName.def | 285 ++++++++++++++++++++++++++++++++ definitions/grib2/units.def | 285 ++++++++++++++++++++++++++++++++ 5 files changed, 1425 insertions(+) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index ca84d9755..86c94e6b2 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -3463,6 +3463,22 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } +#Mean surface runoff rate +'msror' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean sub-surface runoff rate +'mssror' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean surface photosynthetically active radiation flux, clear sky 'msparfcs' = { discipline = 0 ; @@ -3471,6 +3487,149 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean snow evaporation rate +'mser' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean snowmelt rate +'msmr' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale precipitation fraction +'mlspf' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward UV radiation flux +'msdwuvrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface photosynthetically active radiation flux +'msparf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale precipitation rate +'mlspr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean convective precipitation rate +'mcpr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean snowfall rate +'msr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean boundary layer dissipation +'mbld' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface sensible heat flux +'msshf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface latent heat flux +'mslhf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward short-wave radiation flux +'msdwswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward long-wave radiation flux +'msdwlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net short-wave radiation flux +'msnswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net long-wave radiation flux +'msnlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net short-wave radiation flux +'mtnswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net long-wave radiation flux +'mtnlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean evaporation rate +'mer' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Sunshine duration fraction 'sdf' = { discipline = 0 ; @@ -3478,6 +3637,76 @@ parameterNumber = 51 ; typeOfFirstFixedSurface = 1 ; } +#Mean eastward gravity wave surface stress +'megwss' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean northward gravity wave surface stress +'mngwss' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean gravity wave dissipation +'mgwd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean runoff rate +'mror' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net short-wave radiation flux, clear sky +'mtnswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net long-wave radiation flux, clear sky +'mtnlwrfcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net short-wave radiation flux, clear sky +'msnswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net long-wave radiation flux, clear sky +'msnlwrfcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top downward short-wave radiation flux +'mtdwswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Mean vertically integrated moisture divergence 'mvimd' = { discipline = 0 ; @@ -3485,6 +3714,38 @@ parameterNumber = 165 ; typeOfStatisticalProcessing = 0 ; } +#Mean total precipitation rate +'mtpr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean convective snowfall rate +'mcsr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale snowfall rate +'mlssr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface direct short-wave radiation flux +'msdrswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean surface direct short-wave radiation flux, clear sky 'msdrswrfcs' = { discipline = 0 ; @@ -3493,6 +3754,30 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean surface downward short-wave radiation flux, clear sky +'msdwswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward long-wave radiation flux, clear sky +'msdwlwrfcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean potential evaporation rate +'mper' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Time integral of surface latent heat sublimation flux 'tislhsf' = { discipline = 0 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index 6be980044..893f3775f 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -3463,6 +3463,22 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } +#Mean surface runoff rate +'Mean surface runoff rate' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean sub-surface runoff rate +'Mean sub-surface runoff rate' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean surface photosynthetically active radiation flux, clear sky 'Mean surface photosynthetically active radiation flux, clear sky' = { discipline = 0 ; @@ -3471,6 +3487,149 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean snow evaporation rate +'Mean snow evaporation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean snowmelt rate +'Mean snowmelt rate' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale precipitation fraction +'Mean large-scale precipitation fraction' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward UV radiation flux +'Mean surface downward UV radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface photosynthetically active radiation flux +'Mean surface photosynthetically active radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale precipitation rate +'Mean large-scale precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean convective precipitation rate +'Mean convective precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean snowfall rate +'Mean snowfall rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean boundary layer dissipation +'Mean boundary layer dissipation' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface sensible heat flux +'Mean surface sensible heat flux' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface latent heat flux +'Mean surface latent heat flux' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward short-wave radiation flux +'Mean surface downward short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward long-wave radiation flux +'Mean surface downward long-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net short-wave radiation flux +'Mean surface net short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net long-wave radiation flux +'Mean surface net long-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net short-wave radiation flux +'Mean top net short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net long-wave radiation flux +'Mean top net long-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean evaporation rate +'Mean evaporation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Sunshine duration fraction 'Sunshine duration fraction' = { discipline = 0 ; @@ -3478,6 +3637,76 @@ parameterNumber = 51 ; typeOfFirstFixedSurface = 1 ; } +#Mean eastward gravity wave surface stress +'Mean eastward gravity wave surface stress' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean northward gravity wave surface stress +'Mean northward gravity wave surface stress' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean gravity wave dissipation +'Mean gravity wave dissipation' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean runoff rate +'Mean runoff rate' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net short-wave radiation flux, clear sky +'Mean top net short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net long-wave radiation flux, clear sky +'Mean top net long-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net short-wave radiation flux, clear sky +'Mean surface net short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net long-wave radiation flux, clear sky +'Mean surface net long-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top downward short-wave radiation flux +'Mean top downward short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Mean vertically integrated moisture divergence 'Mean vertically integrated moisture divergence' = { discipline = 0 ; @@ -3485,6 +3714,38 @@ parameterNumber = 165 ; typeOfStatisticalProcessing = 0 ; } +#Mean total precipitation rate +'Mean total precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean convective snowfall rate +'Mean convective snowfall rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale snowfall rate +'Mean large-scale snowfall rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface direct short-wave radiation flux +'Mean surface direct short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean surface direct short-wave radiation flux, clear sky 'Mean surface direct short-wave radiation flux, clear sky' = { discipline = 0 ; @@ -3493,6 +3754,30 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean surface downward short-wave radiation flux, clear sky +'Mean surface downward short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward long-wave radiation flux, clear sky +'Mean surface downward long-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean potential evaporation rate +'Mean potential evaporation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Time integral of surface latent heat sublimation flux 'Time integral of surface latent heat sublimation flux' = { discipline = 0 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 99cde9f91..e40c6fbc9 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -3463,6 +3463,22 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } +#Mean surface runoff rate +'235020' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean sub-surface runoff rate +'235021' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean surface photosynthetically active radiation flux, clear sky '235022' = { discipline = 0 ; @@ -3471,6 +3487,149 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean snow evaporation rate +'235023' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean snowmelt rate +'235024' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale precipitation fraction +'235026' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward UV radiation flux +'235027' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface photosynthetically active radiation flux +'235028' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale precipitation rate +'235029' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean convective precipitation rate +'235030' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean snowfall rate +'235031' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean boundary layer dissipation +'235032' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface sensible heat flux +'235033' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface latent heat flux +'235034' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward short-wave radiation flux +'235035' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward long-wave radiation flux +'235036' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net short-wave radiation flux +'235037' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net long-wave radiation flux +'235038' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net short-wave radiation flux +'235039' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net long-wave radiation flux +'235040' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean evaporation rate +'235043' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Sunshine duration fraction '235044' = { discipline = 0 ; @@ -3478,6 +3637,76 @@ parameterNumber = 51 ; typeOfFirstFixedSurface = 1 ; } +#Mean eastward gravity wave surface stress +'235045' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean northward gravity wave surface stress +'235046' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean gravity wave dissipation +'235047' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean runoff rate +'235048' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net short-wave radiation flux, clear sky +'235049' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net long-wave radiation flux, clear sky +'235050' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net short-wave radiation flux, clear sky +'235051' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net long-wave radiation flux, clear sky +'235052' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top downward short-wave radiation flux +'235053' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Mean vertically integrated moisture divergence '235054' = { discipline = 0 ; @@ -3485,6 +3714,38 @@ parameterNumber = 165 ; typeOfStatisticalProcessing = 0 ; } +#Mean total precipitation rate +'235055' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean convective snowfall rate +'235056' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale snowfall rate +'235057' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface direct short-wave radiation flux +'235058' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean surface direct short-wave radiation flux, clear sky '235059' = { discipline = 0 ; @@ -3493,6 +3754,30 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean surface downward short-wave radiation flux, clear sky +'235068' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward long-wave radiation flux, clear sky +'235069' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean potential evaporation rate +'235070' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Time integral of surface latent heat sublimation flux '235071' = { discipline = 0 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 1d44f8ae1..4fe55e339 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -3463,6 +3463,22 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } +#Mean surface runoff rate +'msror' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean sub-surface runoff rate +'mssror' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean surface photosynthetically active radiation flux, clear sky 'msparfcs' = { discipline = 0 ; @@ -3471,6 +3487,149 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean snow evaporation rate +'mser' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean snowmelt rate +'msmr' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale precipitation fraction +'mlspf' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward UV radiation flux +'msdwuvrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface photosynthetically active radiation flux +'msparf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale precipitation rate +'mlspr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean convective precipitation rate +'mcpr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean snowfall rate +'msr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean boundary layer dissipation +'mbld' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface sensible heat flux +'msshf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface latent heat flux +'mslhf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward short-wave radiation flux +'msdwswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward long-wave radiation flux +'msdwlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net short-wave radiation flux +'msnswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net long-wave radiation flux +'msnlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net short-wave radiation flux +'mtnswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net long-wave radiation flux +'mtnlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean evaporation rate +'mer' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Sunshine duration fraction 'sdf' = { discipline = 0 ; @@ -3478,6 +3637,76 @@ parameterNumber = 51 ; typeOfFirstFixedSurface = 1 ; } +#Mean eastward gravity wave surface stress +'megwss' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean northward gravity wave surface stress +'mngwss' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean gravity wave dissipation +'mgwd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean runoff rate +'mror' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net short-wave radiation flux, clear sky +'mtnswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net long-wave radiation flux, clear sky +'mtnlwrfcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net short-wave radiation flux, clear sky +'msnswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net long-wave radiation flux, clear sky +'msnlwrfcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top downward short-wave radiation flux +'mtdwswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Mean vertically integrated moisture divergence 'mvimd' = { discipline = 0 ; @@ -3485,6 +3714,38 @@ parameterNumber = 165 ; typeOfStatisticalProcessing = 0 ; } +#Mean total precipitation rate +'mtpr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean convective snowfall rate +'mcsr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale snowfall rate +'mlssr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface direct short-wave radiation flux +'msdrswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean surface direct short-wave radiation flux, clear sky 'msdrswrfcs' = { discipline = 0 ; @@ -3493,6 +3754,30 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean surface downward short-wave radiation flux, clear sky +'msdwswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward long-wave radiation flux, clear sky +'msdwlwrfcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean potential evaporation rate +'mper' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Time integral of surface latent heat sublimation flux 'tislhsf' = { discipline = 0 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 2360733d7..71ab630d9 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -3463,6 +3463,22 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } +#Mean surface runoff rate +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean sub-surface runoff rate +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean surface photosynthetically active radiation flux, clear sky 'W m**-2' = { discipline = 0 ; @@ -3471,6 +3487,149 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean snow evaporation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean snowmelt rate +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale precipitation fraction +'Proportion' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward UV radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface photosynthetically active radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean convective precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean snowfall rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean boundary layer dissipation +'W m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface sensible heat flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface latent heat flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward long-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net long-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net long-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean evaporation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Sunshine duration fraction 'Proportion' = { discipline = 0 ; @@ -3478,6 +3637,76 @@ parameterNumber = 51 ; typeOfFirstFixedSurface = 1 ; } +#Mean eastward gravity wave surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean northward gravity wave surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean gravity wave dissipation +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean runoff rate +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top net long-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface net long-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean top downward short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Mean vertically integrated moisture divergence 'kg m**-2 s**-1' = { discipline = 0 ; @@ -3485,6 +3714,38 @@ parameterNumber = 165 ; typeOfStatisticalProcessing = 0 ; } +#Mean total precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean convective snowfall rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale snowfall rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface direct short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean surface direct short-wave radiation flux, clear sky 'W m**-2' = { discipline = 0 ; @@ -3493,6 +3754,30 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean surface downward short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean surface downward long-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean potential evaporation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 143 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Time integral of surface latent heat sublimation flux 'J m**-2' = { discipline = 0 ; From ab807be6fa3542e10a4ecae7d663883b4d1856c3 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 4 Aug 2023 16:11:43 +0000 Subject: [PATCH 096/372] ECC-1653 and ECC-1662 --- definitions/grib2/cfVarName.def | 50 +++++++++++++++++++ .../grib2/localConcepts/ecmf/cfVarName.def | 27 ++++++++++ definitions/grib2/localConcepts/ecmf/name.def | 27 ++++++++++ .../grib2/localConcepts/ecmf/paramId.def | 27 ++++++++++ .../grib2/localConcepts/ecmf/shortName.def | 27 ++++++++++ .../grib2/localConcepts/ecmf/units.def | 27 ++++++++++ definitions/grib2/name.def | 50 +++++++++++++++++++ definitions/grib2/paramId.def | 50 +++++++++++++++++++ definitions/grib2/shortName.def | 50 +++++++++++++++++++ definitions/grib2/units.def | 50 +++++++++++++++++++ 10 files changed, 385 insertions(+) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index 86c94e6b2..faec9ccd8 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -4988,6 +4988,30 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#X-component of sea ice velocity +'six' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } +#Y-component of sea ice velocity +'siy' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } #Sea surface practical salinity 'sos' = { discipline = 10 ; @@ -6038,6 +6062,32 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Time-mean X-component of sea ice velocity +'avg_six' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean Y-component of sea ice velocity +'avg_siy' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean sea surface practical salinity 'avg_sos' = { discipline = 10 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index 6891ad253..5bf129d80 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -13908,6 +13908,19 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#Sea ice salinity +'icesalt' = { + localTablesVersion = 1 ; + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } #Time-mean snow thickness over sea ice 'avg_sisnthick' = { localTablesVersion = 1 ; @@ -13922,6 +13935,20 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Time-mean Sea ice salinity +'avg_icesalt' = { + localTablesVersion = 1 ; + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } #Volume-mean total column mixing ratio 'vm_tc_vol_mixrat' = { localTablesVersion = 1 ; diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index 859b3f864..8d7b95d8d 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -13908,6 +13908,19 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#Sea ice salinity +'Sea ice salinity' = { + localTablesVersion = 1 ; + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } #Time-mean snow thickness over sea ice 'Time-mean snow thickness over sea ice' = { localTablesVersion = 1 ; @@ -13922,6 +13935,20 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Time-mean Sea ice salinity +'Time-mean Sea ice salinity' = { + localTablesVersion = 1 ; + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } #Volume-mean total column mixing ratio 'Volume-mean total column mixing ratio' = { localTablesVersion = 1 ; diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index cc65d4b6d..b0ee0148c 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -13908,6 +13908,19 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#Sea ice salinity +'262023' = { + localTablesVersion = 1 ; + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } #Time-mean snow thickness over sea ice '263002' = { localTablesVersion = 1 ; @@ -13922,6 +13935,20 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Time-mean Sea ice salinity +'263023' = { + localTablesVersion = 1 ; + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } #Volume-mean total column mixing ratio '409000' = { localTablesVersion = 1 ; diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index 2715cd717..a14c07a5d 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -13908,6 +13908,19 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#Sea ice salinity +'icesalt' = { + localTablesVersion = 1 ; + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } #Time-mean snow thickness over sea ice 'avg_sisnthick' = { localTablesVersion = 1 ; @@ -13922,6 +13935,20 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Time-mean Sea ice salinity +'avg_icesalt' = { + localTablesVersion = 1 ; + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } #Volume-mean total column mixing ratio 'vm_tc_vol_mixrat' = { localTablesVersion = 1 ; diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index 85e095918..389b5dfd5 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -13908,6 +13908,19 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#Sea ice salinity +'g kg**-1' = { + localTablesVersion = 1 ; + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } #Time-mean snow thickness over sea ice 'm' = { localTablesVersion = 1 ; @@ -13922,6 +13935,20 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Time-mean Sea ice salinity +'g kg**-1' = { + localTablesVersion = 1 ; + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } #Volume-mean total column mixing ratio 'mol mol**-1' = { localTablesVersion = 1 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index 893f3775f..d1607e841 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -4988,6 +4988,30 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#X-component of sea ice velocity +'X-component of sea ice velocity' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } +#Y-component of sea ice velocity +'Y-component of sea ice velocity' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } #Sea surface practical salinity 'Sea surface practical salinity' = { discipline = 10 ; @@ -6038,6 +6062,32 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Time-mean X-component of sea ice velocity +'Time-mean X-component of sea ice velocity' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean Y-component of sea ice velocity +'Time-mean Y-component of sea ice velocity' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean sea surface practical salinity 'Time-mean sea surface practical salinity' = { discipline = 10 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index e40c6fbc9..85ef8f95b 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -4988,6 +4988,30 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#X-component of sea ice velocity +'262021' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } +#Y-component of sea ice velocity +'262022' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } #Sea surface practical salinity '262100' = { discipline = 10 ; @@ -6038,6 +6062,32 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Time-mean X-component of sea ice velocity +'263021' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean Y-component of sea ice velocity +'263022' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean sea surface practical salinity '263100' = { discipline = 10 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 4fe55e339..8e78383fe 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -4988,6 +4988,30 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#X-component of sea ice velocity +'six' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } +#Y-component of sea ice velocity +'siy' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } #Sea surface practical salinity 'sos' = { discipline = 10 ; @@ -6038,6 +6062,32 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Time-mean X-component of sea ice velocity +'avg_six' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean Y-component of sea ice velocity +'avg_siy' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean sea surface practical salinity 'avg_sos' = { discipline = 10 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 71ab630d9..5cf327ec5 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -4988,6 +4988,30 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#X-component of sea ice velocity +'m s**-1' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } +#Y-component of sea ice velocity +'m s**-1' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } #Sea surface practical salinity 'g kg**-1' = { discipline = 10 ; @@ -6038,6 +6062,32 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Time-mean X-component of sea ice velocity +'m s**-1' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean Y-component of sea ice velocity +'m s**-1' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean sea surface practical salinity 'g kg**-1' = { discipline = 10 ; From dbb439c658fd5f4ab91daac8adb60c1a28e1bb95 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 4 Aug 2023 16:57:34 +0000 Subject: [PATCH 097/372] ECC-1662: Fix the parameter number to be in the local-use range --- definitions/grib2/localConcepts/ecmf/cfVarName.def | 4 ++-- definitions/grib2/localConcepts/ecmf/name.def | 4 ++-- definitions/grib2/localConcepts/ecmf/paramId.def | 4 ++-- definitions/grib2/localConcepts/ecmf/shortName.def | 4 ++-- definitions/grib2/localConcepts/ecmf/units.def | 4 ++-- definitions/grib2/tables/local/ecmf/1/4.2.10.2.table | 1 + 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index 5bf129d80..edb9d4e48 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -13913,7 +13913,7 @@ localTablesVersion = 1 ; discipline = 10 ; parameterCategory = 2 ; - parameterNumber = 26 ; + parameterNumber = 193 ; typeOfFirstFixedSurface = 174 ; typeOfSecondFixedSurface = 176 ; scaledValueOfFirstFixedSurface = missing() ; @@ -13940,7 +13940,7 @@ localTablesVersion = 1 ; discipline = 10 ; parameterCategory = 2 ; - parameterNumber = 26 ; + parameterNumber = 193 ; typeOfFirstFixedSurface = 174 ; typeOfSecondFixedSurface = 176 ; scaledValueOfFirstFixedSurface = missing() ; diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index 8d7b95d8d..f969f0c90 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -13913,7 +13913,7 @@ localTablesVersion = 1 ; discipline = 10 ; parameterCategory = 2 ; - parameterNumber = 26 ; + parameterNumber = 193 ; typeOfFirstFixedSurface = 174 ; typeOfSecondFixedSurface = 176 ; scaledValueOfFirstFixedSurface = missing() ; @@ -13940,7 +13940,7 @@ localTablesVersion = 1 ; discipline = 10 ; parameterCategory = 2 ; - parameterNumber = 26 ; + parameterNumber = 193 ; typeOfFirstFixedSurface = 174 ; typeOfSecondFixedSurface = 176 ; scaledValueOfFirstFixedSurface = missing() ; diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index b0ee0148c..5736d447a 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -13913,7 +13913,7 @@ localTablesVersion = 1 ; discipline = 10 ; parameterCategory = 2 ; - parameterNumber = 26 ; + parameterNumber = 193 ; typeOfFirstFixedSurface = 174 ; typeOfSecondFixedSurface = 176 ; scaledValueOfFirstFixedSurface = missing() ; @@ -13940,7 +13940,7 @@ localTablesVersion = 1 ; discipline = 10 ; parameterCategory = 2 ; - parameterNumber = 26 ; + parameterNumber = 193 ; typeOfFirstFixedSurface = 174 ; typeOfSecondFixedSurface = 176 ; scaledValueOfFirstFixedSurface = missing() ; diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index a14c07a5d..844dc0b19 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -13913,7 +13913,7 @@ localTablesVersion = 1 ; discipline = 10 ; parameterCategory = 2 ; - parameterNumber = 26 ; + parameterNumber = 193 ; typeOfFirstFixedSurface = 174 ; typeOfSecondFixedSurface = 176 ; scaledValueOfFirstFixedSurface = missing() ; @@ -13940,7 +13940,7 @@ localTablesVersion = 1 ; discipline = 10 ; parameterCategory = 2 ; - parameterNumber = 26 ; + parameterNumber = 193 ; typeOfFirstFixedSurface = 174 ; typeOfSecondFixedSurface = 176 ; scaledValueOfFirstFixedSurface = missing() ; diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index 389b5dfd5..cc40b138b 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -13913,7 +13913,7 @@ localTablesVersion = 1 ; discipline = 10 ; parameterCategory = 2 ; - parameterNumber = 26 ; + parameterNumber = 193 ; typeOfFirstFixedSurface = 174 ; typeOfSecondFixedSurface = 176 ; scaledValueOfFirstFixedSurface = missing() ; @@ -13940,7 +13940,7 @@ localTablesVersion = 1 ; discipline = 10 ; parameterCategory = 2 ; - parameterNumber = 26 ; + parameterNumber = 193 ; typeOfFirstFixedSurface = 174 ; typeOfSecondFixedSurface = 176 ; scaledValueOfFirstFixedSurface = missing() ; diff --git a/definitions/grib2/tables/local/ecmf/1/4.2.10.2.table b/definitions/grib2/tables/local/ecmf/1/4.2.10.2.table index 48358d2ad..3b2d71bb0 100644 --- a/definitions/grib2/tables/local/ecmf/1/4.2.10.2.table +++ b/definitions/grib2/tables/local/ecmf/1/4.2.10.2.table @@ -1 +1,2 @@ 192 192 Snow thickness over sea ice (m) +193 193 Sea ice salinity (g kg**-1) From b2217d46b0f1b1f2e32e56ce5e6c79cd6575f9a5 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 4 Aug 2023 18:58:14 +0000 Subject: [PATCH 098/372] Utility function: string_to_long plus tests --- src/eccodes_prototypes.h | 2 +- src/grib_accessor_class_codetable.cc | 2 +- src/grib_accessor_class_concept.cc | 2 +- src/grib_accessor_class_long.cc | 2 +- src/grib_expression_class_functor.cc | 2 +- src/grib_parse_utils.cc | 3 ++- src/string_util.cc | 14 ++++++++++---- tests/bufr_check_descriptors.cc | 9 +++++---- tests/unit_tests.cc | 26 ++++++++++++++++++++++++++ tools/grib_repair.cc | 2 +- 10 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 43ff0711f..40045b65d 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -1456,7 +1456,7 @@ void string_rtrim(char* s); void string_lrtrim(char** x, int do_left, int do_right); const char* extract_filename(const char* filepath); char** string_split(char* inputString, const char* delimiter); -int string_to_long(const char* input, long* output); +int string_to_long(const char* input, long* output, int strict); int string_ends_with(const char* str1, const char* str2); int string_count_char(const char* str, char c); const char* codes_get_product_name(ProductKind product); diff --git a/src/grib_accessor_class_codetable.cc b/src/grib_accessor_class_codetable.cc index e823a8659..d623f09e1 100644 --- a/src/grib_accessor_class_codetable.cc +++ b/src/grib_accessor_class_codetable.cc @@ -642,7 +642,7 @@ static int pack_string(grib_accessor* a, const char* buffer, size_t* len) { long lValue = 0; Assert(buffer); - if (is_number(buffer) && string_to_long(buffer, &lValue) == GRIB_SUCCESS) { + if (is_number(buffer) && string_to_long(buffer, &lValue, 1) == GRIB_SUCCESS) { // ECC-1654: If value is a pure number, just pack as long size_t l = 1; return grib_pack_long(a, &lValue, &l); diff --git a/src/grib_accessor_class_concept.cc b/src/grib_accessor_class_concept.cc index 20b76059d..28c09006d 100644 --- a/src/grib_accessor_class_concept.cc +++ b/src/grib_accessor_class_concept.cc @@ -382,7 +382,7 @@ static int grib_concept_apply(grib_accessor* a, const char* name) grib_context_log(h->context, GRIB_LOG_ERROR, "concept: input handle edition=%ld, centre=%s", editionNumber, centre_s); } if (strcmp(act->name, "paramId") == 0) { - if (string_to_long(name, &dummy) == GRIB_SUCCESS) { + if (string_to_long(name, &dummy, 1) == GRIB_SUCCESS) { // The paramId value is an integer. Show them the param DB grib_context_log(h->context, GRIB_LOG_ERROR, "Please check the Parameter Database 'https://codes.ecmwf.int/grib/param-db/?id=%s'", name); diff --git a/src/grib_accessor_class_long.cc b/src/grib_accessor_class_long.cc index 6caec017a..c939189a5 100644 --- a/src/grib_accessor_class_long.cc +++ b/src/grib_accessor_class_long.cc @@ -257,7 +257,7 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) // return pack_missing(a); //} - if (string_to_long(val, &v) != GRIB_SUCCESS) { + if (string_to_long(val, &v, 1) != GRIB_SUCCESS) { grib_context_log(a->context, GRIB_LOG_ERROR, "Trying to pack \"%s\" as long. String cannot be converted to an integer", val); return GRIB_WRONG_TYPE; diff --git a/src/grib_expression_class_functor.cc b/src/grib_expression_class_functor.cc index 99ab0ad36..c7ffc072e 100644 --- a/src/grib_expression_class_functor.cc +++ b/src/grib_expression_class_functor.cc @@ -144,7 +144,7 @@ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) char* env = getenv(p); if (env) { long lval = 0; - if (string_to_long(env, &lval) == GRIB_SUCCESS) { + if (string_to_long(env, &lval, 1) == GRIB_SUCCESS) { *lres = lval; return GRIB_SUCCESS; } diff --git a/src/grib_parse_utils.cc b/src/grib_parse_utils.cc index e7c752f09..bbebf7df6 100644 --- a/src/grib_parse_utils.cc +++ b/src/grib_parse_utils.cc @@ -473,7 +473,8 @@ int grib_recompose_print(grib_handle* h, grib_accessor* observer, const char* un break; case '!': pp = (char*)uname; - if (string_to_long(uname + i + 1, &numcols) == GRIB_SUCCESS) { + // Turn off strict as the input string will have a final ']' suffix + if (string_to_long(uname + i + 1, &numcols, /*strict=*/0) == GRIB_SUCCESS) { maxcols = (int)numcols; } else { diff --git a/src/string_util.cc b/src/string_util.cc index 65583f93e..831a4a4c4 100644 --- a/src/string_util.cc +++ b/src/string_util.cc @@ -124,8 +124,10 @@ char** string_split(char* inputString, const char* delimiter) return result; } -/* Return GRIB_SUCCESS if can convert input to an integer, GRIB_INVALID_ARGUMENT otherwise */ -int string_to_long(const char* input, long* output) +// Return GRIB_SUCCESS if we can convert 'input' to an integer, GRIB_INVALID_ARGUMENT otherwise. +// If 'strict' is 1 then disallow characters at the end which are not valid digits. +// E.g., in strict mode, "4i" will be rejected. Otherwise it will convert it to 4 +int string_to_long(const char* input, long* output, int strict) { const int base = 10; char* endptr; @@ -138,11 +140,15 @@ int string_to_long(const char* input, long* output) val = strtol(input, &endptr, base); if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN)) || (errno != 0 && val == 0)) { - /*perror("strtol");*/ + // perror("strtol"); return GRIB_INVALID_ARGUMENT; } if (endptr == input) { - /*fprintf(stderr, "No digits were found. EXIT_FAILURE\n");*/ + // fprintf(stderr, "No digits were found\n"); + return GRIB_INVALID_ARGUMENT; + } + if (strict && *endptr != 0) { + // fprintf(stderr, "Left over characters at the end; not a pure number\n"); return GRIB_INVALID_ARGUMENT; } *output = val; diff --git a/tests/bufr_check_descriptors.cc b/tests/bufr_check_descriptors.cc index 76cec0f1f..eec3a14eb 100644 --- a/tests/bufr_check_descriptors.cc +++ b/tests/bufr_check_descriptors.cc @@ -68,7 +68,7 @@ int main(int argc, char** argv) return 1; } str_code = list[0]; - if (string_to_long(str_code, &lValue) != GRIB_SUCCESS) { + if (string_to_long(str_code, &lValue, 1) != GRIB_SUCCESS) { fprintf(stderr, "Error on line %zu: descriptor code '%s' (column 1) is not numeric.\n", line_number, str_code); return 1; @@ -103,17 +103,18 @@ int main(int argc, char** argv) str_scale = list[5]; str_ref = list[6]; str_width = list[7]; - if (string_to_long(str_scale, &lValue) != GRIB_SUCCESS) { + if (string_to_long(str_scale, &lValue, 1) != GRIB_SUCCESS) { fprintf(stderr, "Error on line %zu: descriptor scale '%s' (column 6) is not numeric.\n", line_number, str_scale); return 1; } - if (string_to_long(str_ref, &lValue) != GRIB_SUCCESS) { + if (string_to_long(str_ref, &lValue, 1) != GRIB_SUCCESS) { fprintf(stderr, "Error on line %zu: descriptor reference '%s' (column 7) is not numeric.\n", line_number, str_ref); return 1; } - if (string_to_long(str_width, &lValue) != GRIB_SUCCESS) { + // The final width column can have spaces etc at the end. So turn off strict mode + if (string_to_long(str_width, &lValue, /*strict=*/0) != GRIB_SUCCESS) { fprintf(stderr, "Error on line %zu: descriptor width '%s' (column 8) is not numeric.\n", line_number, str_width); return 1; diff --git a/tests/unit_tests.cc b/tests/unit_tests.cc index 6ea0b2d15..d160b63ed 100644 --- a/tests/unit_tests.cc +++ b/tests/unit_tests.cc @@ -319,6 +319,31 @@ static void test_string_ends_with() Assert( string_ends_with("GRIB2.tmpl", " ") == 0 ); } +static void test_string_to_long() +{ + printf("Testing: test_string_to_long...\n"); + long lVal = 0; + Assert( string_to_long("0", &lVal, 1) == GRIB_SUCCESS); + Assert( lVal == 0 ); + + Assert( string_to_long("42", &lVal, 1) == GRIB_SUCCESS); + Assert( lVal == 42 ); + + Assert( string_to_long("-1", &lVal, 1) == GRIB_SUCCESS); + Assert( lVal == -1 ); + Assert( string_to_long("+999", &lVal, 1) == GRIB_SUCCESS); + Assert( lVal == 999 ); + + Assert( string_to_long("15MB", &lVal, 0) == GRIB_SUCCESS); + Assert( lVal == 15 ); + + // illegal cases + Assert( string_to_long("4000000000000000000000", &lVal, 1) == GRIB_INVALID_ARGUMENT); + Assert( string_to_long("XY", &lVal, 1) == GRIB_INVALID_ARGUMENT); + Assert( string_to_long("A6", &lVal, 1) == GRIB_INVALID_ARGUMENT); + Assert( string_to_long("5K", &lVal, 1) == GRIB_INVALID_ARGUMENT); +} + static void test_gribex_mode() { grib_context* c = grib_context_get_default(); @@ -497,6 +522,7 @@ int main(int argc, char** argv) test_trimming(); test_string_ends_with(); + test_string_to_long(); test_get_git_sha1(); test_get_build_date(); diff --git a/tools/grib_repair.cc b/tools/grib_repair.cc index 00737e3e8..484bfe69f 100644 --- a/tools/grib_repair.cc +++ b/tools/grib_repair.cc @@ -64,7 +64,7 @@ int main(int argc, char** argv) sMaxNumMessages = getenv(ENV_VAR); if (sMaxNumMessages) { long lmax = 0; - if (string_to_long(sMaxNumMessages, &lmax) == GRIB_SUCCESS) { + if (string_to_long(sMaxNumMessages, &lmax, 1) == GRIB_SUCCESS) { MAX_NUM_MESSAGES = lmax; } } From 32e95711c598dabfc56745b4ad9f785e49370105 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 4 Aug 2023 22:17:04 +0100 Subject: [PATCH 099/372] Testing: string utilities --- tests/unit_tests.cc | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/tests/unit_tests.cc b/tests/unit_tests.cc index d160b63ed..b567f79ae 100644 --- a/tests/unit_tests.cc +++ b/tests/unit_tests.cc @@ -235,13 +235,13 @@ static void test_logging_proc() /* Override default behaviour */ grib_context_set_logging_proc(context, my_logging_proc); - grib_context_log(context, GRIB_LOG_ERROR, "This error will be handled by me"); + grib_context_log(context, GRIB_LOG_ERROR, "test_logging_proc: This error will be handled by me"); Assert(logging_caught == 1); /* Restore the logging proc */ logging_caught = 0; grib_context_set_logging_proc(context, NULL); - grib_context_log(context, GRIB_LOG_ERROR, "This will come out as normal"); + grib_context_log(context, GRIB_LOG_ERROR, "test_logging_proc: This error will come out as normal"); Assert(logging_caught == 0); } @@ -273,7 +273,7 @@ static void test_concept_condition_strings() grib_handle_delete(h); } -static void test_trimming() +static void test_string_trimming() { char a[] = " Standing "; char b[] = " Weeping "; @@ -286,7 +286,7 @@ static void test_trimming() char* pD = d; char* pE = e; - printf("Testing: test_trimming...\n"); + printf("Testing: test_string_trimming...\n"); string_lrtrim(&pA, 0, 1); /*right only*/ Assert( strcmp(pA, " Standing")==0 ); @@ -344,6 +344,24 @@ static void test_string_to_long() Assert( string_to_long("5K", &lVal, 1) == GRIB_INVALID_ARGUMENT); } +static void test_string_replace_char() +{ + printf("Testing: test_string_replace_char...\n"); + char input[32] = {0,}; + + strncpy(input, "Mask Of Zoro", sizeof(input)); + string_replace_char(input, ' ', '-'); + Assert(STR_EQUAL(input, "Mask-Of-Zoro")); +} + +static void test_string_remove_char() +{ + printf("Testing: test_string_remove_char...\n"); + char input[64] = "a:b:c"; + string_remove_char(input, ':'); + Assert(STR_EQUAL(input, "abc")); +} + static void test_gribex_mode() { grib_context* c = grib_context_get_default(); @@ -520,10 +538,6 @@ int main(int argc, char** argv) test_grib_binary_search(); test_parse_keyval_string(); - test_trimming(); - test_string_ends_with(); - test_string_to_long(); - test_get_git_sha1(); test_get_build_date(); test_gribex_mode(); @@ -553,6 +567,11 @@ int main(int argc, char** argv) test_grib_nearest_smaller_ieeefloat(); test_string_splitting(); + test_string_ends_with(); + test_string_to_long(); + test_string_trimming(); + test_string_replace_char(); + test_string_remove_char(); return 0; } From 731e381ef6b909b74e6e12c1413e2922403c9f9c Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 4 Aug 2023 22:19:53 +0100 Subject: [PATCH 100/372] Correct spelling of JasPer library --- CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 35eb80630..0cf89afc7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -102,9 +102,9 @@ ecbuild_add_option( FEATURE BUILD_TOOLS ecbuild_add_option( FEATURE JPG DESCRIPTION "Support for JPG decoding/encoding" DEFAULT ON ) -# Options related to JPG. The Jasper and OpenJPEG libraries +# Options related to JPG. The JasPer and OpenJPEG libraries ecbuild_add_option( FEATURE JPG_LIBJASPER - DESCRIPTION "Support for JPG decoding/encoding with the Jasper library" + DESCRIPTION "Support for JPG decoding/encoding with the JasPer library" CONDITION ENABLE_JPG DEFAULT ON ) ecbuild_add_option( FEATURE JPG_LIBOPENJPEG @@ -217,7 +217,7 @@ set( HAVE_LIBJASPER 0 ) set( HAVE_LIBOPENJPEG 0 ) if( ENABLE_JPG ) - # Note: The function ecbuild_add_extra_search_paths is deprecated but we need it to find Jasper at ECMWF. + # Note: The function ecbuild_add_extra_search_paths is deprecated but we need it to find JasPer at ECMWF. # It modifies CMAKE_PREFIX_PATH # which can affect future package discovery if not undone by the caller. # The current CMAKE_PREFIX_PATH is backed up as _CMAKE_PREFIX_PATH @@ -234,7 +234,7 @@ if( ENABLE_JPG ) list( APPEND ECCODES_TPLS Jasper ) set( HAVE_JPEG 1 ) set( HAVE_LIBJASPER 1 ) - # Extract Jasper's major version number to enable conditional code. See ECC-396 + # Extract JasPer's major version number to enable conditional code. See ECC-396 string(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" JASPER_VERSION_MAJOR "${JASPER_VERSION_STRING}") endif() From 86fef3a72cbff3cef35fa3f539e3b7f776d8737b Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 5 Aug 2023 12:37:42 +0100 Subject: [PATCH 101/372] Testing: Print info using __func__ --- tests/grib_run_length_packing.sh | 33 ++++++++++++++++ tests/unit_tests.cc | 65 +++++++++++++++++++------------- 2 files changed, 71 insertions(+), 27 deletions(-) create mode 100755 tests/grib_run_length_packing.sh diff --git a/tests/grib_run_length_packing.sh b/tests/grib_run_length_packing.sh new file mode 100755 index 000000000..e9be4f4ac --- /dev/null +++ b/tests/grib_run_length_packing.sh @@ -0,0 +1,33 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +REDIRECT=/dev/null + +label="grib_run_length_packing_test" +tempGrib=temp.$label.grib +tempLog=temp.$label.log + +input=$data_dir/run_length_packing.grib2 +if [ ! -f "$input" ]; then + echo " Input data file missing: $input" + exit 0 +fi + +${tools_dir}/grib_dump $input + +stats=$(${tools_dir}/grib_get -F%.5f -p packingType,min,max,avg $input) +[ "$stats" = "grid_run_length 1.00000 3.00000 1.00303" ] + +grib_check_key_equals $input numberOfMissing 71493 +grib_check_key_equals $input missingValuesPresent 1 + +rm -f $tempGrib $tempLog diff --git a/tests/unit_tests.cc b/tests/unit_tests.cc index b567f79ae..02a77a92b 100644 --- a/tests/unit_tests.cc +++ b/tests/unit_tests.cc @@ -42,23 +42,26 @@ static void check_float_representation(const double val, const double expected, static void test_get_git_sha1() { + printf("Running %s ...\n", __func__); + const char* sha1 = grib_get_git_sha1(); Assert(sha1 != NULL); - printf("Testing: test_get_git_sha1... %s\n", sha1); } static void test_get_build_date() { + printf("Running %s ...\n", __func__); + const char* bdate = codes_get_build_date(); Assert(bdate != NULL); /* Should be of the format YYYY.MM.DD or empty (not implemented) */ Assert( strlen(bdate) == 0 || isdigit(bdate[0]) ); - printf("Testing: test_get_build_date... %s\n", bdate); } static void test_grib_nearest_smaller_ibmfloat() { - printf("Testing: test_grib_nearest_smaller_ibmfloat...\n"); + printf("Running %s ...\n", __func__); + check_float_representation(-1.0, -1.0, IBM_FLOAT); check_float_representation(0.0, 0.0, IBM_FLOAT); check_float_representation(1.0, 1.0, IBM_FLOAT); @@ -69,7 +72,8 @@ static void test_grib_nearest_smaller_ibmfloat() static void test_grib_nearest_smaller_ieeefloat() { - printf("Testing: test_grib_nearest_smaller_ieeefloat...\n"); + printf("Running %s ...\n", __func__); + check_float_representation(-1.0, -1.0, IEEE_FLOAT); check_float_representation(0.0, 0.0, IEEE_FLOAT); check_float_representation(1.0, 1.0, IEEE_FLOAT); @@ -80,11 +84,13 @@ static void test_grib_nearest_smaller_ieeefloat() static void test_gaussian_latitudes(int order) { + printf("Running %s ...\n", __func__); + int ret = 0; const int num = 2 * order; double lat1 = 0, lat2 = 0; double* lats = (double*)malloc(sizeof(double) * num); - printf("Testing: test_gaussian_latitudes order=%d...\n", order); + ret = grib_get_gaussian_latitudes(order, lats); Assert(ret == GRIB_SUCCESS); @@ -98,7 +104,9 @@ static void test_gaussian_latitudes(int order) static void test_gaussian_latitude_640() { - /* Test all latitudes for one specific Gaussian number */ + printf("Running %s ...\n", __func__); + + /* Test latitudes for one specific Gaussian number */ const int order = 640; const int num = 2 * order; int ret = 0; @@ -106,7 +114,6 @@ static void test_gaussian_latitude_640() double* lats = (double*)malloc(sizeof(double) * num); ret = grib_get_gaussian_latitudes(order, lats); Assert(ret == GRIB_SUCCESS); - printf("Testing: test_gaussian_latitude_640...\n"); compare_doubles(lats[0], 89.892396, tolerance); compare_doubles(lats[1], 89.753005, tolerance); @@ -149,10 +156,11 @@ static void test_gaussian_latitude_640() static void test_string_splitting() { + printf("Running %s ...\n", __func__); + int i = 0; char input[80] = "Born|To|Be|Wild"; char** list = 0; - printf("Testing: test_string_splitting...\n"); list = string_split(input, "|"); if (!list) { Assert(!"List is NULL"); return; } @@ -201,14 +209,14 @@ static void my_assertion_proc(const char* message) static void test_assertion_catching() { + printf("Running %s ...\n", __func__); + char empty[] = ""; char** list = 0; int i = 0; Assert(assertion_caught == 0); codes_set_codes_assertion_failed_proc(&my_assertion_proc); - printf("Testing: test_assertion_catching...\n"); - /* Do something illegal */ list = string_split(empty, " "); @@ -223,7 +231,6 @@ static void test_assertion_catching() free(list); } - static void my_logging_proc(const grib_context* c, int level, const char* mesg) { logging_caught = 1; @@ -247,13 +254,13 @@ static void test_logging_proc() static void test_concept_condition_strings() { + printf("Running %s ...\n", __func__); + int err = 0; char result[1024] = {0,}; grib_context* context = NULL; grib_handle* h = grib_handle_new_from_samples(context, "GRIB2"); - printf("Testing: test_concept_condition_strings...\n"); - err = get_concept_condition_string(h, "typeOfLevel", NULL, result); Assert(!err); Assert(strcmp(result, "typeOfFirstFixedSurface=1,typeOfSecondFixedSurface=255") == 0); @@ -275,6 +282,8 @@ static void test_concept_condition_strings() static void test_string_trimming() { + printf("Running %s ...\n", __func__); + char a[] = " Standing "; char b[] = " Weeping "; char c[] = " Silhouette "; @@ -286,8 +295,6 @@ static void test_string_trimming() char* pD = d; char* pE = e; - printf("Testing: test_string_trimming...\n"); - string_lrtrim(&pA, 0, 1); /*right only*/ Assert( strcmp(pA, " Standing")==0 ); @@ -306,7 +313,8 @@ static void test_string_trimming() static void test_string_ends_with() { - printf("Testing: test_string_ends_with...\n"); + printf("Running %s ...\n", __func__); + Assert( string_ends_with("GRIB2.tmpl", "tmpl") == 1 ); Assert( string_ends_with("GRIB2.tmpl", ".tmpl") == 1 ); Assert( string_ends_with("", "") == 1 ); @@ -321,7 +329,8 @@ static void test_string_ends_with() static void test_string_to_long() { - printf("Testing: test_string_to_long...\n"); + printf("Running %s ...\n", __func__); + long lVal = 0; Assert( string_to_long("0", &lVal, 1) == GRIB_SUCCESS); Assert( lVal == 0 ); @@ -346,9 +355,9 @@ static void test_string_to_long() static void test_string_replace_char() { - printf("Testing: test_string_replace_char...\n"); - char input[32] = {0,}; + printf("Running %s ...\n", __func__); + char input[32] = {0,}; strncpy(input, "Mask Of Zoro", sizeof(input)); string_replace_char(input, ' ', '-'); Assert(STR_EQUAL(input, "Mask-Of-Zoro")); @@ -356,7 +365,7 @@ static void test_string_replace_char() static void test_string_remove_char() { - printf("Testing: test_string_remove_char...\n"); + printf("Running %s ...\n", __func__); char input[64] = "a:b:c"; string_remove_char(input, ':'); Assert(STR_EQUAL(input, "abc")); @@ -365,7 +374,7 @@ static void test_string_remove_char() static void test_gribex_mode() { grib_context* c = grib_context_get_default(); - printf("Testing: test_gribex_mode...\n"); + printf("Running %s ...\n", __func__); Assert( grib_get_gribex_mode(c) == 0 ); /* default is OFF */ grib_gribex_mode_on(c); @@ -376,14 +385,14 @@ static void test_gribex_mode() static void test_grib_binary_search() { + printf("Running %s ...\n", __func__); + double array_asc[] = {-0.1, 33.4, 56.1, 101.8}; double array_desc[] = {88, 78, 0, -88}; const size_t idx_asc_max = NUMBER(array_asc) - 1; const size_t idx_desc_max = NUMBER(array_desc) - 1; size_t idx_upper=0, idx_lower = 0; - printf("Testing: test_grib_binary_search...\n"); - grib_binary_search(array_asc, idx_asc_max, 56.0, &idx_upper, &idx_lower); Assert(idx_lower == 1 && idx_upper == 2); grib_binary_search(array_asc, idx_asc_max, 56.1, &idx_upper, &idx_lower); @@ -401,6 +410,8 @@ static void test_grib_binary_search() static void test_parse_keyval_string() { + printf("Running %s ...\n", __func__); + int err = 0; int values_required = 1; int count = 0; @@ -412,8 +423,6 @@ static void test_parse_keyval_string() char input2[] = "x=14"; char input3[] = "mars.level=0.978"; - printf("Testing: parse_keyval_string...\n"); - count = max_count; err = parse_keyval_string(NULL, input1, values_required, GRIB_TYPE_UNDEFINED, values1, &count); @@ -453,7 +462,8 @@ static void test_parse_keyval_string() static void test_dates() { - printf("Testing: dates...\n"); + printf("Running %s ...\n", __func__); + Assert( is_date_valid(1979,12, 1, 0,0,0) ); Assert( is_date_valid(1900, 1, 1, 0,0,0) ); Assert( is_date_valid(1964, 4, 6, 0,0,0) ); @@ -486,11 +496,12 @@ static void test_dates() void test_scale_factor_scaled_values() { + printf("Running %s ...\n", __func__); + int err =0; int64_t value, factor; const int64_t scaled_value_max = 4294967295; // usually 4 octets const int64_t scale_factor_max = 255; // usually 1 octet - printf("Testing: scaled values and scale factors...\n"); err = compute_scaled_value_and_scale_factor(0, scaled_value_max, scale_factor_max, &value, &factor); Assert(!err); From cc5de4c83502019c59b0b5101086ec22aa52d276 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 5 Aug 2023 12:38:06 +0100 Subject: [PATCH 102/372] Testing: Run length packing --- data/grib_data_files.txt | 1 + tests/CMakeLists.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/data/grib_data_files.txt b/data/grib_data_files.txt index 2774f12c7..9fa6fb818 100644 --- a/data/grib_data_files.txt +++ b/data/grib_data_files.txt @@ -88,3 +88,4 @@ msl.octa.glob.grib1 test_file.grib2 gfs.complex.mvmu.grib2 mercator.grib2 +run_length_packing.grib2 diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index d5ce08fdf..7166eb199 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -149,6 +149,7 @@ if( HAVE_BUILD_TOOLS ) grib_complex grib_double_cmp grib_change_packing + grib_run_length_packing grib_grid_space_view grib_partial_message grib_headers_only From 901f81a430297fc3b4cf08814a9b1f588f79bc6e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 5 Aug 2023 18:09:31 +0100 Subject: [PATCH 103/372] Dead code removal: assert --- src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 1 - .../grib_accessor_class_assert.cc | 0 src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - src/grib_accessor_classes_hash.cc | 1003 +++++++++-------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 8 files changed, 504 insertions(+), 506 deletions(-) rename src/{ => deprecated}/grib_accessor_class_assert.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8ee669912..c7161ad97 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -57,7 +57,6 @@ list( APPEND eccodes_src_files grib_iarray.cc grib_viarray.cc codes_memfs.cc - grib_accessor_class_assert.cc grib_accessor_class_ascii.cc grib_accessor_class_bit.cc grib_accessor_class_bitmap.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index 3dcc6bc06..a6807276d 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -18,7 +18,6 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |-----grib_accessor_class_mars_step |-----grib_accessor_class_sprintf |-----grib_accessor_class_trim - |---grib_accessor_class_assert |---grib_accessor_class_bits |---grib_accessor_class_blob |---grib_accessor_class_bufr_data_array diff --git a/src/grib_accessor_class_assert.cc b/src/deprecated/grib_accessor_class_assert.cc similarity index 100% rename from src/grib_accessor_class_assert.cc rename to src/deprecated/grib_accessor_class_assert.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 40045b65d..ab7137890 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -266,8 +266,6 @@ grib_viarray* grib_viarray_push(grib_context* c, grib_viarray* v, grib_iarray* v void grib_viarray_delete(grib_context* c, grib_viarray* v); void grib_viarray_delete_content(grib_context* c, grib_viarray* v); -/* grib_accessor_class_assert.cc*/ - /* grib_accessor_class_ascii.cc*/ /* grib_accessor_class_bit.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index 84f577ed2..24cc9bd76 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -2,7 +2,6 @@ extern grib_accessor_class* grib_accessor_class_abstract_long_vector; extern grib_accessor_class* grib_accessor_class_abstract_vector; extern grib_accessor_class* grib_accessor_class_ascii; -extern grib_accessor_class* grib_accessor_class_assert; extern grib_accessor_class* grib_accessor_class_bit; extern grib_accessor_class* grib_accessor_class_bitmap; extern grib_accessor_class* grib_accessor_class_bits; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index 55f69b87c..6f07dddd6 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,12 +37,12 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 214 +#define TOTAL_KEYWORDS 213 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 -#define MAX_HASH_VALUE 586 -/* maximum key range = 586, duplicates = 0 */ +#define MAX_HASH_VALUE 594 +/* maximum key range = 594, duplicates = 0 */ #ifdef __GNUC__ @@ -55,32 +55,32 @@ static unsigned int grib_accessor_classes_get_id (const char *str, size_t len) { static const unsigned short asso_values[] = { - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 0, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 2, 124, - 14, 18, 8, 587, 21, 587, 24, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 0, 587, 0, 68, 126, - 0, 0, 108, 29, 147, 1, 11, 4, 53, 231, - 13, 57, 20, 587, 61, 1, 42, 96, 134, 4, - 1, 4, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587 + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 0, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 2, 145, + 14, 6, 41, 595, 48, 595, 0, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 0, 595, 0, 85, 137, + 0, 0, 61, 29, 177, 1, 0, 3, 76, 139, + 13, 57, 20, 595, 129, 1, 42, 62, 196, 1, + 1, 6, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595 }; unsigned int hval = len; @@ -117,534 +117,539 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, -#line 187 "accessor_class_list.gperf" +#line 186 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, -#line 184 "accessor_class_list.gperf" +#line 183 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, - {""}, -#line 78 "accessor_class_list.gperf" - {"dirty", &grib_accessor_class_dirty}, {""}, {""}, {""}, -#line 185 "accessor_class_list.gperf" +#line 77 "accessor_class_list.gperf" + {"dirty", &grib_accessor_class_dirty}, + {""}, +#line 184 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, {""}, -#line 69 "accessor_class_list.gperf" +#line 68 "accessor_class_list.gperf" {"data_raw_packing", &grib_accessor_class_data_raw_packing}, {""}, -#line 131 "accessor_class_list.gperf" +#line 130 "accessor_class_list.gperf" {"int8", &grib_accessor_class_int8}, {""}, -#line 75 "accessor_class_list.gperf" +#line 74 "accessor_class_list.gperf" {"data_simple_packing", &grib_accessor_class_data_simple_packing}, -#line 71 "accessor_class_list.gperf" +#line 70 "accessor_class_list.gperf" {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 178 "accessor_class_list.gperf" +#line 177 "accessor_class_list.gperf" {"section", &grib_accessor_class_section}, -#line 164 "accessor_class_list.gperf" +#line 163 "accessor_class_list.gperf" {"pad", &grib_accessor_class_pad}, -#line 190 "accessor_class_list.gperf" +#line 189 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, -#line 77 "accessor_class_list.gperf" +#line 76 "accessor_class_list.gperf" {"dictionary", &grib_accessor_class_dictionary}, - {""}, -#line 129 "accessor_class_list.gperf" - {"int64", &grib_accessor_class_int64}, - {""}, -#line 68 "accessor_class_list.gperf" + {""}, {""}, {""}, +#line 67 "accessor_class_list.gperf" {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 180 "accessor_class_list.gperf" +#line 179 "accessor_class_list.gperf" {"section_padding", &grib_accessor_class_section_padding}, -#line 181 "accessor_class_list.gperf" +#line 180 "accessor_class_list.gperf" {"section_pointer", &grib_accessor_class_section_pointer}, -#line 115 "accessor_class_list.gperf" +#line 114 "accessor_class_list.gperf" {"gen", &grib_accessor_class_gen}, -#line 127 "accessor_class_list.gperf" +#line 126 "accessor_class_list.gperf" {"int32", &grib_accessor_class_int32}, -#line 83 "accessor_class_list.gperf" +#line 82 "accessor_class_list.gperf" {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, -#line 60 "accessor_class_list.gperf" +#line 59 "accessor_class_list.gperf" {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, {""}, -#line 45 "accessor_class_list.gperf" - {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, -#line 64 "accessor_class_list.gperf" - {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, - {""}, -#line 125 "accessor_class_list.gperf" - {"int16", &grib_accessor_class_int16}, -#line 177 "accessor_class_list.gperf" - {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 179 "accessor_class_list.gperf" - {"section_length", &grib_accessor_class_section_length}, -#line 67 "accessor_class_list.gperf" - {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, -#line 48 "accessor_class_list.gperf" - {"data_apply_gdsnotpresent", &grib_accessor_class_data_apply_gdsnotpresent}, -#line 113 "accessor_class_list.gperf" - {"gds_is_present", &grib_accessor_class_gds_is_present}, -#line 46 "accessor_class_list.gperf" - {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, -#line 199 "accessor_class_list.gperf" - {"time", &grib_accessor_class_time}, -#line 116 "accessor_class_list.gperf" - {"getenv", &grib_accessor_class_getenv}, - {""}, -#line 107 "accessor_class_list.gperf" - {"g2grid", &grib_accessor_class_g2grid}, - {""}, {""}, -#line 47 "accessor_class_list.gperf" - {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, -#line 106 "accessor_class_list.gperf" - {"g2end_step", &grib_accessor_class_g2end_step}, -#line 65 "accessor_class_list.gperf" - {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, -#line 62 "accessor_class_list.gperf" - {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, -#line 165 "accessor_class_list.gperf" - {"padding", &grib_accessor_class_padding}, - {""}, {""}, {""}, -#line 110 "accessor_class_list.gperf" - {"g2lon", &grib_accessor_class_g2lon}, -#line 152 "accessor_class_list.gperf" - {"nearest", &grib_accessor_class_nearest}, -#line 137 "accessor_class_list.gperf" - {"laplacian", &grib_accessor_class_laplacian}, -#line 171 "accessor_class_list.gperf" - {"raw", &grib_accessor_class_raw}, - {""}, {""}, {""}, -#line 13 "accessor_class_list.gperf" - {"assert", &grib_accessor_class_assert}, -#line 101 "accessor_class_list.gperf" - {"g2_eps", &grib_accessor_class_g2_eps}, -#line 196 "accessor_class_list.gperf" - {"step_in_units", &grib_accessor_class_step_in_units}, - {""}, -#line 14 "accessor_class_list.gperf" - {"bit", &grib_accessor_class_bit}, -#line 16 "accessor_class_list.gperf" - {"bits", &grib_accessor_class_bits}, -#line 66 "accessor_class_list.gperf" - {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, -#line 15 "accessor_class_list.gperf" - {"bitmap", &grib_accessor_class_bitmap}, - {""}, -#line 50 "accessor_class_list.gperf" - {"data_complex_packing", &grib_accessor_class_data_complex_packing}, -#line 30 "accessor_class_list.gperf" - {"bytes", &grib_accessor_class_bytes}, -#line 186 "accessor_class_list.gperf" - {"simple_packing_error", &grib_accessor_class_simple_packing_error}, -#line 172 "accessor_class_list.gperf" - {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, - {""}, -#line 166 "accessor_class_list.gperf" - {"padto", &grib_accessor_class_padto}, -#line 17 "accessor_class_list.gperf" - {"bits_per_value", &grib_accessor_class_bits_per_value}, -#line 111 "accessor_class_list.gperf" - {"g2step_range", &grib_accessor_class_g2step_range}, - {""}, {""}, {""}, {""}, {""}, {""}, -#line 105 "accessor_class_list.gperf" - {"g2date", &grib_accessor_class_g2date}, - {""}, -#line 103 "accessor_class_list.gperf" - {"g2bitmap", &grib_accessor_class_g2bitmap}, -#line 63 "accessor_class_list.gperf" - {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, -#line 61 "accessor_class_list.gperf" - {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, -#line 193 "accessor_class_list.gperf" - {"statistics", &grib_accessor_class_statistics}, - {""}, -#line 117 "accessor_class_list.gperf" - {"global_gaussian", &grib_accessor_class_global_gaussian}, -#line 153 "accessor_class_list.gperf" - {"non_alpha", &grib_accessor_class_non_alpha}, -#line 197 "accessor_class_list.gperf" - {"sum", &grib_accessor_class_sum}, - {""}, -#line 81 "accessor_class_list.gperf" - {"element", &grib_accessor_class_element}, -#line 183 "accessor_class_list.gperf" - {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, -#line 138 "accessor_class_list.gperf" - {"latitudes", &grib_accessor_class_latitudes}, -#line 194 "accessor_class_list.gperf" - {"statistics_spectral", &grib_accessor_class_statistics_spectral}, -#line 114 "accessor_class_list.gperf" - {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, -#line 205 "accessor_class_list.gperf" - {"trim", &grib_accessor_class_trim}, -#line 132 "accessor_class_list.gperf" - {"iterator", &grib_accessor_class_iterator}, -#line 112 "accessor_class_list.gperf" - {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, -#line 99 "accessor_class_list.gperf" - {"g2_aerosol", &grib_accessor_class_g2_aerosol}, -#line 136 "accessor_class_list.gperf" - {"label", &grib_accessor_class_label}, -#line 51 "accessor_class_list.gperf" - {"data_dummy_field", &grib_accessor_class_data_dummy_field}, -#line 203 "accessor_class_list.gperf" - {"transient", &grib_accessor_class_transient}, -#line 143 "accessor_class_list.gperf" - {"long", &grib_accessor_class_long}, -#line 118 "accessor_class_list.gperf" - {"group", &grib_accessor_class_group}, -#line 80 "accessor_class_list.gperf" - {"double", &grib_accessor_class_double}, -#line 134 "accessor_class_list.gperf" - {"julian_day", &grib_accessor_class_julian_day}, -#line 133 "accessor_class_list.gperf" - {"julian_date", &grib_accessor_class_julian_date}, -#line 70 "accessor_class_list.gperf" - {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, -#line 204 "accessor_class_list.gperf" - {"transient_darray", &grib_accessor_class_transient_darray}, -#line 208 "accessor_class_list.gperf" - {"uint32", &grib_accessor_class_uint32}, -#line 201 "accessor_class_list.gperf" - {"to_integer", &grib_accessor_class_to_integer}, -#line 174 "accessor_class_list.gperf" - {"round", &grib_accessor_class_round}, -#line 210 "accessor_class_list.gperf" - {"uint64", &grib_accessor_class_uint64}, -#line 18 "accessor_class_list.gperf" - {"blob", &grib_accessor_class_blob}, -#line 212 "accessor_class_list.gperf" - {"uint8", &grib_accessor_class_uint8}, - {""}, -#line 102 "accessor_class_list.gperf" - {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, - {""}, -#line 122 "accessor_class_list.gperf" - {"ibmfloat", &grib_accessor_class_ibmfloat}, - {""}, -#line 175 "accessor_class_list.gperf" - {"scale", &grib_accessor_class_scale}, - {""}, -#line 141 "accessor_class_list.gperf" - {"library_version", &grib_accessor_class_library_version}, -#line 79 "accessor_class_list.gperf" - {"divdouble", &grib_accessor_class_divdouble}, - {""}, #line 44 "accessor_class_list.gperf" - {"data_2order_packing", &grib_accessor_class_data_2order_packing}, - {""}, {""}, -#line 219 "accessor_class_list.gperf" - {"values", &grib_accessor_class_values}, - {""}, {""}, -#line 191 "accessor_class_list.gperf" - {"spectral_truncation", &grib_accessor_class_spectral_truncation}, -#line 49 "accessor_class_list.gperf" - {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, -#line 155 "accessor_class_list.gperf" - {"number_of_points", &grib_accessor_class_number_of_points}, -#line 215 "accessor_class_list.gperf" - {"unsigned", &grib_accessor_class_unsigned}, -#line 130 "accessor_class_list.gperf" - {"int64_little_endian", &grib_accessor_class_int64_little_endian}, -#line 58 "accessor_class_list.gperf" - {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, -#line 192 "accessor_class_list.gperf" - {"sprintf", &grib_accessor_class_sprintf}, -#line 108 "accessor_class_list.gperf" - {"g2latlon", &grib_accessor_class_g2latlon}, -#line 202 "accessor_class_list.gperf" - {"to_string", &grib_accessor_class_to_string}, -#line 216 "accessor_class_list.gperf" - {"unsigned_bits", &grib_accessor_class_unsigned_bits}, -#line 128 "accessor_class_list.gperf" - {"int32_little_endian", &grib_accessor_class_int32_little_endian}, -#line 156 "accessor_class_list.gperf" - {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, -#line 222 "accessor_class_list.gperf" - {"when", &grib_accessor_class_when}, - {""}, {""}, -#line 195 "accessor_class_list.gperf" - {"step_human_readable", &grib_accessor_class_step_human_readable}, - {""}, -#line 126 "accessor_class_list.gperf" - {"int16_little_endian", &grib_accessor_class_int16_little_endian}, - {""}, -#line 104 "accessor_class_list.gperf" - {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, -#line 170 "accessor_class_list.gperf" - {"proj_string", &grib_accessor_class_proj_string}, -#line 213 "accessor_class_list.gperf" - {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, -#line 59 "accessor_class_list.gperf" - {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, -#line 52 "accessor_class_list.gperf" - {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 182 "accessor_class_list.gperf" - {"select_step_template", &grib_accessor_class_select_step_template}, - {""}, -#line 198 "accessor_class_list.gperf" - {"suppressed", &grib_accessor_class_suppressed}, - {""}, -#line 86 "accessor_class_list.gperf" - {"g1_message_length", &grib_accessor_class_g1_message_length}, - {""}, {""}, {""}, -#line 123 "accessor_class_list.gperf" - {"ieeefloat", &grib_accessor_class_ieeefloat}, -#line 161 "accessor_class_list.gperf" - {"offset_file", &grib_accessor_class_offset_file}, -#line 209 "accessor_class_list.gperf" - {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, - {""}, -#line 20 "accessor_class_list.gperf" - {"bufr_data_array", &grib_accessor_class_bufr_data_array}, -#line 211 "accessor_class_list.gperf" - {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, -#line 21 "accessor_class_list.gperf" - {"bufr_data_element", &grib_accessor_class_bufr_data_element}, -#line 144 "accessor_class_list.gperf" - {"long_vector", &grib_accessor_class_long_vector}, -#line 73 "accessor_class_list.gperf" - {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, -#line 169 "accessor_class_list.gperf" - {"position", &grib_accessor_class_position}, -#line 27 "accessor_class_list.gperf" - {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, - {""}, -#line 139 "accessor_class_list.gperf" - {"latlon_increment", &grib_accessor_class_latlon_increment}, -#line 74 "accessor_class_list.gperf" - {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, -#line 217 "accessor_class_list.gperf" - {"validity_date", &grib_accessor_class_validity_date}, -#line 218 "accessor_class_list.gperf" - {"validity_time", &grib_accessor_class_validity_time}, -#line 29 "accessor_class_list.gperf" - {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, -#line 142 "accessor_class_list.gperf" - {"local_definition", &grib_accessor_class_local_definition}, - {""}, -#line 97 "accessor_class_list.gperf" - {"g1step_range", &grib_accessor_class_g1step_range}, -#line 220 "accessor_class_list.gperf" - {"variable", &grib_accessor_class_variable}, - {""}, -#line 221 "accessor_class_list.gperf" - {"vector", &grib_accessor_class_vector}, - {""}, -#line 124 "accessor_class_list.gperf" - {"ifs_param", &grib_accessor_class_ifs_param}, - {""}, -#line 89 "accessor_class_list.gperf" - {"g1date", &grib_accessor_class_g1date}, -#line 135 "accessor_class_list.gperf" - {"ksec1expver", &grib_accessor_class_ksec1expver}, -#line 88 "accessor_class_list.gperf" - {"g1bitmap", &grib_accessor_class_g1bitmap}, -#line 57 "accessor_class_list.gperf" - {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, - {""}, -#line 168 "accessor_class_list.gperf" - {"padtomultiple", &grib_accessor_class_padtomultiple}, - {""}, {""}, {""}, {""}, {""}, -#line 146 "accessor_class_list.gperf" - {"lookup", &grib_accessor_class_lookup}, -#line 121 "accessor_class_list.gperf" - {"headers_only", &grib_accessor_class_headers_only}, -#line 19 "accessor_class_list.gperf" - {"budgdate", &grib_accessor_class_budgdate}, - {""}, -#line 55 "accessor_class_list.gperf" - {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, -#line 145 "accessor_class_list.gperf" - {"longitudes", &grib_accessor_class_longitudes}, -#line 120 "accessor_class_list.gperf" - {"hash_array", &grib_accessor_class_hash_array}, -#line 56 "accessor_class_list.gperf" - {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, -#line 167 "accessor_class_list.gperf" - {"padtoeven", &grib_accessor_class_padtoeven}, -#line 87 "accessor_class_list.gperf" - {"g1_section4_length", &grib_accessor_class_g1_section4_length}, - {""}, -#line 53 "accessor_class_list.gperf" - {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, - {""}, -#line 54 "accessor_class_list.gperf" - {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, - {""}, -#line 206 "accessor_class_list.gperf" - {"uint16", &grib_accessor_class_uint16}, -#line 119 "accessor_class_list.gperf" - {"gts_header", &grib_accessor_class_gts_header}, - {""}, {""}, {""}, -#line 39 "accessor_class_list.gperf" - {"concept", &grib_accessor_class_concept}, -#line 200 "accessor_class_list.gperf" - {"to_double", &grib_accessor_class_to_double}, -#line 149 "accessor_class_list.gperf" - {"md5", &grib_accessor_class_md5}, -#line 26 "accessor_class_list.gperf" - {"bufr_group", &grib_accessor_class_bufr_group}, - {""}, -#line 109 "accessor_class_list.gperf" - {"g2level", &grib_accessor_class_g2level}, -#line 150 "accessor_class_list.gperf" - {"message", &grib_accessor_class_message}, - {""}, {""}, -#line 147 "accessor_class_list.gperf" - {"mars_param", &grib_accessor_class_mars_param}, - {""}, {""}, -#line 92 "accessor_class_list.gperf" - {"g1fcperiod", &grib_accessor_class_g1fcperiod}, - {""}, -#line 40 "accessor_class_list.gperf" - {"constant", &grib_accessor_class_constant}, - {""}, -#line 91 "accessor_class_list.gperf" - {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, -#line 22 "accessor_class_list.gperf" - {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, -#line 160 "accessor_class_list.gperf" - {"octet_number", &grib_accessor_class_octet_number}, - {""}, {""}, -#line 28 "accessor_class_list.gperf" - {"bufr_string_values", &grib_accessor_class_bufr_string_values}, - {""}, {""}, -#line 140 "accessor_class_list.gperf" - {"latlonvalues", &grib_accessor_class_latlonvalues}, -#line 154 "accessor_class_list.gperf" - {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, - {""}, -#line 157 "accessor_class_list.gperf" - {"number_of_values", &grib_accessor_class_number_of_values}, - {""}, {""}, {""}, -#line 151 "accessor_class_list.gperf" - {"message_copy", &grib_accessor_class_message_copy}, - {""}, {""}, -#line 163 "accessor_class_list.gperf" - {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, - {""}, {""}, {""}, -#line 11 "accessor_class_list.gperf" - {"abstract_vector", &grib_accessor_class_abstract_vector}, + {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, +#line 63 "accessor_class_list.gperf" + {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, {""}, {""}, #line 176 "accessor_class_list.gperf" - {"scale_values", &grib_accessor_class_scale_values}, -#line 162 "accessor_class_list.gperf" - {"offset_values", &grib_accessor_class_offset_values}, -#line 34 "accessor_class_list.gperf" - {"closest_date", &grib_accessor_class_closest_date}, -#line 158 "accessor_class_list.gperf" - {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, - {""}, {""}, {""}, -#line 82 "accessor_class_list.gperf" - {"evaluate", &grib_accessor_class_evaluate}, + {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, +#line 178 "accessor_class_list.gperf" + {"section_length", &grib_accessor_class_section_length}, +#line 66 "accessor_class_list.gperf" + {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, +#line 47 "accessor_class_list.gperf" + {"data_apply_gdsnotpresent", &grib_accessor_class_data_apply_gdsnotpresent}, +#line 112 "accessor_class_list.gperf" + {"gds_is_present", &grib_accessor_class_gds_is_present}, +#line 45 "accessor_class_list.gperf" + {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, +#line 198 "accessor_class_list.gperf" + {"time", &grib_accessor_class_time}, +#line 115 "accessor_class_list.gperf" + {"getenv", &grib_accessor_class_getenv}, {""}, -#line 148 "accessor_class_list.gperf" - {"mars_step", &grib_accessor_class_mars_step}, +#line 106 "accessor_class_list.gperf" + {"g2grid", &grib_accessor_class_g2grid}, + {""}, {""}, +#line 46 "accessor_class_list.gperf" + {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, +#line 105 "accessor_class_list.gperf" + {"g2end_step", &grib_accessor_class_g2end_step}, +#line 64 "accessor_class_list.gperf" + {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, +#line 61 "accessor_class_list.gperf" + {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, +#line 164 "accessor_class_list.gperf" + {"padding", &grib_accessor_class_padding}, + {""}, {""}, +#line 128 "accessor_class_list.gperf" + {"int64", &grib_accessor_class_int64}, +#line 109 "accessor_class_list.gperf" + {"g2lon", &grib_accessor_class_g2lon}, +#line 151 "accessor_class_list.gperf" + {"nearest", &grib_accessor_class_nearest}, + {""}, {""}, {""}, +#line 196 "accessor_class_list.gperf" + {"sum", &grib_accessor_class_sum}, +#line 124 "accessor_class_list.gperf" + {"int16", &grib_accessor_class_int16}, +#line 211 "accessor_class_list.gperf" + {"uint8", &grib_accessor_class_uint8}, +#line 100 "accessor_class_list.gperf" + {"g2_eps", &grib_accessor_class_g2_eps}, +#line 195 "accessor_class_list.gperf" + {"step_in_units", &grib_accessor_class_step_in_units}, + {""}, +#line 133 "accessor_class_list.gperf" + {"julian_day", &grib_accessor_class_julian_day}, +#line 132 "accessor_class_list.gperf" + {"julian_date", &grib_accessor_class_julian_date}, +#line 65 "accessor_class_list.gperf" + {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, #line 207 "accessor_class_list.gperf" - {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, + {"uint32", &grib_accessor_class_uint32}, + {""}, +#line 49 "accessor_class_list.gperf" + {"data_complex_packing", &grib_accessor_class_data_complex_packing}, +#line 50 "accessor_class_list.gperf" + {"data_dummy_field", &grib_accessor_class_data_dummy_field}, {""}, {""}, {""}, -#line 72 "accessor_class_list.gperf" - {"data_sh_packed", &grib_accessor_class_data_sh_packed}, - {""}, {""}, -#line 173 "accessor_class_list.gperf" - {"reference_value_error", &grib_accessor_class_reference_value_error}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 35 "accessor_class_list.gperf" - {"codeflag", &grib_accessor_class_codeflag}, +#line 165 "accessor_class_list.gperf" + {"padto", &grib_accessor_class_padto}, {""}, -#line 76 "accessor_class_list.gperf" - {"decimal_precision", &grib_accessor_class_decimal_precision}, -#line 36 "accessor_class_list.gperf" - {"codetable", &grib_accessor_class_codetable}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 25 "accessor_class_list.gperf" - {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, +#line 110 "accessor_class_list.gperf" + {"g2step_range", &grib_accessor_class_g2step_range}, +#line 69 "accessor_class_list.gperf" + {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, +#line 136 "accessor_class_list.gperf" + {"laplacian", &grib_accessor_class_laplacian}, {""}, {""}, +#line 13 "accessor_class_list.gperf" + {"bit", &grib_accessor_class_bit}, +#line 15 "accessor_class_list.gperf" + {"bits", &grib_accessor_class_bits}, +#line 104 "accessor_class_list.gperf" + {"g2date", &grib_accessor_class_g2date}, +#line 14 "accessor_class_list.gperf" + {"bitmap", &grib_accessor_class_bitmap}, +#line 102 "accessor_class_list.gperf" + {"g2bitmap", &grib_accessor_class_g2bitmap}, +#line 62 "accessor_class_list.gperf" + {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, +#line 60 "accessor_class_list.gperf" + {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, +#line 192 "accessor_class_list.gperf" + {"statistics", &grib_accessor_class_statistics}, +#line 29 "accessor_class_list.gperf" + {"bytes", &grib_accessor_class_bytes}, + {""}, +#line 152 "accessor_class_list.gperf" + {"non_alpha", &grib_accessor_class_non_alpha}, +#line 16 "accessor_class_list.gperf" + {"bits_per_value", &grib_accessor_class_bits_per_value}, +#line 185 "accessor_class_list.gperf" + {"simple_packing_error", &grib_accessor_class_simple_packing_error}, +#line 191 "accessor_class_list.gperf" + {"sprintf", &grib_accessor_class_sprintf}, + {""}, {""}, +#line 193 "accessor_class_list.gperf" + {"statistics_spectral", &grib_accessor_class_statistics_spectral}, +#line 113 "accessor_class_list.gperf" + {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, + {""}, +#line 131 "accessor_class_list.gperf" + {"iterator", &grib_accessor_class_iterator}, + {""}, +#line 98 "accessor_class_list.gperf" + {"g2_aerosol", &grib_accessor_class_g2_aerosol}, +#line 154 "accessor_class_list.gperf" + {"number_of_points", &grib_accessor_class_number_of_points}, #line 214 "accessor_class_list.gperf" - {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, + {"unsigned", &grib_accessor_class_unsigned}, + {""}, {""}, {""}, {""}, +#line 209 "accessor_class_list.gperf" + {"uint64", &grib_accessor_class_uint64}, +#line 215 "accessor_class_list.gperf" + {"unsigned_bits", &grib_accessor_class_unsigned_bits}, {""}, -#line 23 "accessor_class_list.gperf" +#line 155 "accessor_class_list.gperf" + {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, +#line 116 "accessor_class_list.gperf" + {"global_gaussian", &grib_accessor_class_global_gaussian}, +#line 200 "accessor_class_list.gperf" + {"to_integer", &grib_accessor_class_to_integer}, + {""}, +#line 194 "accessor_class_list.gperf" + {"step_human_readable", &grib_accessor_class_step_human_readable}, +#line 80 "accessor_class_list.gperf" + {"element", &grib_accessor_class_element}, +#line 182 "accessor_class_list.gperf" + {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, +#line 137 "accessor_class_list.gperf" + {"latitudes", &grib_accessor_class_latitudes}, +#line 122 "accessor_class_list.gperf" + {"ieeefloat", &grib_accessor_class_ieeefloat}, +#line 160 "accessor_class_list.gperf" + {"offset_file", &grib_accessor_class_offset_file}, +#line 212 "accessor_class_list.gperf" + {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, +#line 208 "accessor_class_list.gperf" + {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, +#line 170 "accessor_class_list.gperf" + {"raw", &grib_accessor_class_raw}, + {""}, {""}, {""}, {""}, +#line 142 "accessor_class_list.gperf" + {"long", &grib_accessor_class_long}, + {""}, +#line 79 "accessor_class_list.gperf" + {"double", &grib_accessor_class_double}, + {""}, {""}, +#line 148 "accessor_class_list.gperf" + {"md5", &grib_accessor_class_md5}, +#line 174 "accessor_class_list.gperf" + {"scale", &grib_accessor_class_scale}, + {""}, +#line 101 "accessor_class_list.gperf" + {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, +#line 149 "accessor_class_list.gperf" + {"message", &grib_accessor_class_message}, + {""}, +#line 171 "accessor_class_list.gperf" + {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, +#line 146 "accessor_class_list.gperf" + {"mars_param", &grib_accessor_class_mars_param}, +#line 107 "accessor_class_list.gperf" + {"g2latlon", &grib_accessor_class_g2latlon}, +#line 201 "accessor_class_list.gperf" + {"to_string", &grib_accessor_class_to_string}, +#line 78 "accessor_class_list.gperf" + {"divdouble", &grib_accessor_class_divdouble}, + {""}, {""}, +#line 48 "accessor_class_list.gperf" + {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, + {""}, +#line 135 "accessor_class_list.gperf" + {"label", &grib_accessor_class_label}, + {""}, {""}, {""}, {""}, +#line 19 "accessor_class_list.gperf" + {"bufr_data_array", &grib_accessor_class_bufr_data_array}, + {""}, +#line 20 "accessor_class_list.gperf" + {"bufr_data_element", &grib_accessor_class_bufr_data_element}, +#line 17 "accessor_class_list.gperf" + {"blob", &grib_accessor_class_blob}, + {""}, {""}, +#line 26 "accessor_class_list.gperf" + {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, +#line 57 "accessor_class_list.gperf" + {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, +#line 121 "accessor_class_list.gperf" + {"ibmfloat", &grib_accessor_class_ibmfloat}, +#line 150 "accessor_class_list.gperf" + {"message_copy", &grib_accessor_class_message_copy}, +#line 167 "accessor_class_list.gperf" + {"padtomultiple", &grib_accessor_class_padtomultiple}, +#line 210 "accessor_class_list.gperf" + {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, +#line 28 "accessor_class_list.gperf" + {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, +#line 204 "accessor_class_list.gperf" + {"trim", &grib_accessor_class_trim}, + {""}, +#line 111 "accessor_class_list.gperf" + {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, +#line 181 "accessor_class_list.gperf" + {"select_step_template", &grib_accessor_class_select_step_template}, + {""}, {""}, +#line 202 "accessor_class_list.gperf" + {"transient", &grib_accessor_class_transient}, +#line 221 "accessor_class_list.gperf" + {"when", &grib_accessor_class_when}, +#line 117 "accessor_class_list.gperf" + {"group", &grib_accessor_class_group}, +#line 168 "accessor_class_list.gperf" + {"position", &grib_accessor_class_position}, + {""}, +#line 58 "accessor_class_list.gperf" + {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, +#line 51 "accessor_class_list.gperf" + {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, +#line 203 "accessor_class_list.gperf" + {"transient_darray", &grib_accessor_class_transient_darray}, + {""}, +#line 147 "accessor_class_list.gperf" + {"mars_step", &grib_accessor_class_mars_step}, +#line 173 "accessor_class_list.gperf" + {"round", &grib_accessor_class_round}, +#line 85 "accessor_class_list.gperf" + {"g1_message_length", &grib_accessor_class_g1_message_length}, +#line 161 "accessor_class_list.gperf" + {"offset_values", &grib_accessor_class_offset_values}, + {""}, {""}, {""}, +#line 18 "accessor_class_list.gperf" + {"budgdate", &grib_accessor_class_budgdate}, + {""}, +#line 127 "accessor_class_list.gperf" + {"int32_little_endian", &grib_accessor_class_int32_little_endian}, + {""}, +#line 145 "accessor_class_list.gperf" + {"lookup", &grib_accessor_class_lookup}, +#line 218 "accessor_class_list.gperf" + {"values", &grib_accessor_class_values}, +#line 197 "accessor_class_list.gperf" + {"suppressed", &grib_accessor_class_suppressed}, + {""}, +#line 43 "accessor_class_list.gperf" + {"data_2order_packing", &grib_accessor_class_data_2order_packing}, +#line 144 "accessor_class_list.gperf" + {"longitudes", &grib_accessor_class_longitudes}, + {""}, {""}, {""}, {""}, +#line 190 "accessor_class_list.gperf" + {"spectral_truncation", &grib_accessor_class_spectral_truncation}, + {""}, +#line 72 "accessor_class_list.gperf" + {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, +#line 205 "accessor_class_list.gperf" + {"uint16", &grib_accessor_class_uint16}, +#line 96 "accessor_class_list.gperf" + {"g1step_range", &grib_accessor_class_g1step_range}, + {""}, {""}, +#line 73 "accessor_class_list.gperf" + {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, + {""}, +#line 123 "accessor_class_list.gperf" + {"ifs_param", &grib_accessor_class_ifs_param}, + {""}, +#line 88 "accessor_class_list.gperf" + {"g1date", &grib_accessor_class_g1date}, + {""}, +#line 87 "accessor_class_list.gperf" + {"g1bitmap", &grib_accessor_class_g1bitmap}, +#line 56 "accessor_class_list.gperf" + {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, +#line 129 "accessor_class_list.gperf" + {"int64_little_endian", &grib_accessor_class_int64_little_endian}, +#line 140 "accessor_class_list.gperf" + {"library_version", &grib_accessor_class_library_version}, + {""}, {""}, +#line 103 "accessor_class_list.gperf" + {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, +#line 169 "accessor_class_list.gperf" + {"proj_string", &grib_accessor_class_proj_string}, +#line 75 "accessor_class_list.gperf" + {"decimal_precision", &grib_accessor_class_decimal_precision}, +#line 125 "accessor_class_list.gperf" + {"int16_little_endian", &grib_accessor_class_int16_little_endian}, +#line 153 "accessor_class_list.gperf" + {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, +#line 187 "accessor_class_list.gperf" + {"smart_table", &grib_accessor_class_smart_table}, +#line 27 "accessor_class_list.gperf" + {"bufr_string_values", &grib_accessor_class_bufr_string_values}, +#line 54 "accessor_class_list.gperf" + {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, +#line 141 "accessor_class_list.gperf" + {"local_definition", &grib_accessor_class_local_definition}, + {""}, +#line 55 "accessor_class_list.gperf" + {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, + {""}, +#line 188 "accessor_class_list.gperf" + {"smart_table_column", &grib_accessor_class_smart_table_column}, +#line 38 "accessor_class_list.gperf" + {"concept", &grib_accessor_class_concept}, +#line 52 "accessor_class_list.gperf" + {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, + {""}, +#line 53 "accessor_class_list.gperf" + {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, + {""}, {""}, {""}, +#line 199 "accessor_class_list.gperf" + {"to_double", &grib_accessor_class_to_double}, +#line 216 "accessor_class_list.gperf" + {"validity_date", &grib_accessor_class_validity_date}, +#line 217 "accessor_class_list.gperf" + {"validity_time", &grib_accessor_class_validity_time}, + {""}, {""}, +#line 21 "accessor_class_list.gperf" + {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, + {""}, +#line 39 "accessor_class_list.gperf" + {"constant", &grib_accessor_class_constant}, +#line 118 "accessor_class_list.gperf" + {"gts_header", &grib_accessor_class_gts_header}, +#line 220 "accessor_class_list.gperf" + {"vector", &grib_accessor_class_vector}, + {""}, +#line 159 "accessor_class_list.gperf" + {"octet_number", &grib_accessor_class_octet_number}, + {""}, +#line 34 "accessor_class_list.gperf" + {"codeflag", &grib_accessor_class_codeflag}, + {""}, {""}, +#line 120 "accessor_class_list.gperf" + {"headers_only", &grib_accessor_class_headers_only}, + {""}, {""}, +#line 90 "accessor_class_list.gperf" + {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, +#line 206 "accessor_class_list.gperf" + {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, + {""}, {""}, +#line 143 "accessor_class_list.gperf" + {"long_vector", &grib_accessor_class_long_vector}, + {""}, +#line 86 "accessor_class_list.gperf" + {"g1_section4_length", &grib_accessor_class_g1_section4_length}, + {""}, {""}, +#line 138 "accessor_class_list.gperf" + {"latlon_increment", &grib_accessor_class_latlon_increment}, + {""}, +#line 219 "accessor_class_list.gperf" + {"variable", &grib_accessor_class_variable}, + {""}, +#line 166 "accessor_class_list.gperf" + {"padtoeven", &grib_accessor_class_padtoeven}, + {""}, {""}, {""}, +#line 25 "accessor_class_list.gperf" + {"bufr_group", &grib_accessor_class_bufr_group}, +#line 156 "accessor_class_list.gperf" + {"number_of_values", &grib_accessor_class_number_of_values}, + {""}, {""}, +#line 134 "accessor_class_list.gperf" + {"ksec1expver", &grib_accessor_class_ksec1expver}, + {""}, {""}, {""}, +#line 162 "accessor_class_list.gperf" + {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, + {""}, {""}, {""}, +#line 84 "accessor_class_list.gperf" + {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, + {""}, {""}, {""}, {""}, {""}, +#line 157 "accessor_class_list.gperf" + {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, +#line 24 "accessor_class_list.gperf" + {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, + {""}, +#line 40 "accessor_class_list.gperf" + {"count_file", &grib_accessor_class_count_file}, +#line 81 "accessor_class_list.gperf" + {"evaluate", &grib_accessor_class_evaluate}, +#line 33 "accessor_class_list.gperf" + {"closest_date", &grib_accessor_class_closest_date}, +#line 22 "accessor_class_list.gperf" {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, {""}, {""}, {""}, -#line 24 "accessor_class_list.gperf" +#line 23 "accessor_class_list.gperf" {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, - {""}, {""}, {""}, -#line 85 "accessor_class_list.gperf" - {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, -#line 84 "accessor_class_list.gperf" - {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, -#line 94 "accessor_class_list.gperf" - {"g1monthlydate", &grib_accessor_class_g1monthlydate}, -#line 188 "accessor_class_list.gperf" - {"smart_table", &grib_accessor_class_smart_table}, - {""}, {""}, {""}, -#line 43 "accessor_class_list.gperf" - {"count_total", &grib_accessor_class_count_total}, -#line 10 "accessor_class_list.gperf" - {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, -#line 31 "accessor_class_list.gperf" - {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, -#line 189 "accessor_class_list.gperf" - {"smart_table_column", &grib_accessor_class_smart_table_column}, + {""}, +#line 119 "accessor_class_list.gperf" + {"hash_array", &grib_accessor_class_hash_array}, {""}, {""}, {""}, {""}, {""}, -#line 32 "accessor_class_list.gperf" - {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, +#line 108 "accessor_class_list.gperf" + {"g2level", &grib_accessor_class_g2level}, + {""}, {""}, {""}, {""}, {""}, +#line 71 "accessor_class_list.gperf" + {"data_sh_packed", &grib_accessor_class_data_sh_packed}, + {""}, +#line 35 "accessor_class_list.gperf" + {"codetable", &grib_accessor_class_codetable}, {""}, {""}, -#line 41 "accessor_class_list.gperf" - {"count_file", &grib_accessor_class_count_file}, - {""}, {""}, {""}, {""}, {""}, -#line 159 "accessor_class_list.gperf" - {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, -#line 37 "accessor_class_list.gperf" - {"codetable_title", &grib_accessor_class_codetable_title}, +#line 91 "accessor_class_list.gperf" + {"g1fcperiod", &grib_accessor_class_g1fcperiod}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 139 "accessor_class_list.gperf" + {"latlonvalues", &grib_accessor_class_latlonvalues}, + {""}, {""}, {""}, {""}, +#line 175 "accessor_class_list.gperf" + {"scale_values", &grib_accessor_class_scale_values}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 33 "accessor_class_list.gperf" - {"check_internal_version", &grib_accessor_class_check_internal_version}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 83 "accessor_class_list.gperf" + {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, + {""}, +#line 213 "accessor_class_list.gperf" + {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, + {""}, {""}, {""}, {""}, {""}, +#line 42 "accessor_class_list.gperf" + {"count_total", &grib_accessor_class_count_total}, +#line 11 "accessor_class_list.gperf" + {"abstract_vector", &grib_accessor_class_abstract_vector}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 30 "accessor_class_list.gperf" + {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, {""}, {""}, -#line 98 "accessor_class_list.gperf" - {"g1verificationdate", &grib_accessor_class_g1verificationdate}, -#line 90 "accessor_class_list.gperf" - {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 93 "accessor_class_list.gperf" + {"g1monthlydate", &grib_accessor_class_g1monthlydate}, +#line 36 "accessor_class_list.gperf" + {"codetable_title", &grib_accessor_class_codetable_title}, {""}, {""}, -#line 38 "accessor_class_list.gperf" +#line 31 "accessor_class_list.gperf" + {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 41 "accessor_class_list.gperf" + {"count_missing", &grib_accessor_class_count_missing}, +#line 158 "accessor_class_list.gperf" + {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 37 "accessor_class_list.gperf" {"codetable_units", &grib_accessor_class_codetable_units}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, -#line 42 "accessor_class_list.gperf" - {"count_missing", &grib_accessor_class_count_missing}, +#line 95 "accessor_class_list.gperf" + {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, +#line 94 "accessor_class_list.gperf" + {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 100 "accessor_class_list.gperf" +#line 97 "accessor_class_list.gperf" + {"g1verificationdate", &grib_accessor_class_g1verificationdate}, + {""}, {""}, {""}, +#line 10 "accessor_class_list.gperf" + {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 89 "accessor_class_list.gperf" + {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 99 "accessor_class_list.gperf" {"g2_chemical", &grib_accessor_class_g2_chemical}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 96 "accessor_class_list.gperf" - {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, -#line 95 "accessor_class_list.gperf" - {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, +#line 32 "accessor_class_list.gperf" + {"check_internal_version", &grib_accessor_class_check_internal_version}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 172 "accessor_class_list.gperf" + {"reference_value_error", &grib_accessor_class_reference_value_error}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, -#line 93 "accessor_class_list.gperf" + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 92 "accessor_class_list.gperf" {"g1forecastmonth", &grib_accessor_class_g1forecastmonth} }; diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index c419316fb..062e295fd 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -2,7 +2,6 @@ { "abstract_long_vector", &grib_accessor_class_abstract_long_vector, }, { "abstract_vector", &grib_accessor_class_abstract_vector, }, { "ascii", &grib_accessor_class_ascii, }, -{ "assert", &grib_accessor_class_assert, }, { "bit", &grib_accessor_class_bit, }, { "bitmap", &grib_accessor_class_bitmap, }, { "bits", &grib_accessor_class_bits, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index f133588ea..5542098da 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -3,7 +3,6 @@ abstract_long_vector, &grib_accessor_class_abstract_long_vector abstract_vector, &grib_accessor_class_abstract_vector ascii, &grib_accessor_class_ascii -assert, &grib_accessor_class_assert bit, &grib_accessor_class_bit bitmap, &grib_accessor_class_bitmap bits, &grib_accessor_class_bits From f56703b299f7f7d79315017fd52b9f231dbba93c Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 5 Aug 2023 18:43:26 +0100 Subject: [PATCH 104/372] Cleanup --- src/string_util.cc | 42 +++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/src/string_util.cc b/src/string_util.cc index 831a4a4c4..b2faa3674 100644 --- a/src/string_util.cc +++ b/src/string_util.cc @@ -10,10 +10,9 @@ #include "grib_api_internal.h" -/* Compare two strings ignoring case. - * strcasecmp is not in the C standard. However, it's defined by - * 4.4BSD, POSIX.1-2001. So we use our own - */ +// Compare two strings ignoring case. +// strcasecmp is not in the C standard. However, it's defined by +// 4.4BSD, POSIX.1-2001. So we use our own int strcmp_nocase(const char* s1, const char* s2) { const unsigned char *us1 = (const unsigned char*)s1, @@ -26,7 +25,7 @@ int strcmp_nocase(const char* s1, const char* s2) return (tolower(*us1) - tolower(*--us2)); } -/* Strip whitespace from the end of a string */ +// Strip whitespace from the end of a string void string_rtrim(char* s) { size_t len = 0; @@ -58,14 +57,13 @@ void string_lrtrim(char** x, int do_left, int do_right) } } -/* Return the component after final slash */ -/* "/tmp/x" -> "x" */ -/* "/tmp/" -> "" */ +// Return the component after final slash +// "/tmp/x" -> "x" +// "/tmp/" -> "" const char* extract_filename(const char* filepath) { - /* Note: Windows users could pass in fwd slashes! - * so have to check both separators - */ + // Note: Windows users could pass in fwd slashes! + // so have to check both separators const char* s = strrchr(filepath, '/'); if (!s) s = strrchr(filepath, '\\'); @@ -75,10 +73,9 @@ const char* extract_filename(const char* filepath) return s + 1; } -/* Returns an array of strings the last of which is NULL. - * Note: The delimiter here is a 'string' but must be ONE character! - * Splitting with several delimiters is not supported. - */ +// Returns an array of strings the last of which is NULL. +// Note: The delimiter here is a 'string' but must be ONE character! +// Splitting with several delimiters is not supported. char** string_split(char* inputString, const char* delimiter) { char** result = NULL; @@ -104,14 +101,14 @@ char** string_split(char* inputString, const char* delimiter) } strLength = strlen(inputString); if (lastDelimiter < (inputString + strLength - 1)) { - ++numTokens; /* there is a trailing token */ + ++numTokens; // there is a trailing token } - ++numTokens; /* terminating NULL string to mark the end */ + ++numTokens; // terminating NULL string to mark the end result = (char**)malloc(numTokens * sizeof(char*)); Assert(result); - /* Start tokenizing */ + // Start tokenizing aToken = strtok_r(inputString, delimiter, &lasts); while (aToken) { Assert(index < numTokens); @@ -155,7 +152,7 @@ int string_to_long(const char* input, long* output, int strict) return GRIB_SUCCESS; } -/* Return 1 if 's' ends with 'suffix', 0 otherwise */ +// Return 1 if 's' ends with 'suffix', 0 otherwise int string_ends_with(const char* s, const char* suffix) { const size_t len1 = strlen(s); @@ -216,9 +213,8 @@ const char* grib_get_type_name(int type) return "unknown"; } -/* Replace all occurrences of character in string. -* Returns pointer to the NUL byte at the end of 's' -*/ +// Replace all occurrences of character in string. +// Returns pointer to the NUL byte at the end of 's' char* string_replace_char(char *s, char oldc, char newc) { for (; *s; ++s) @@ -227,7 +223,7 @@ char* string_replace_char(char *s, char oldc, char newc) return s; } -/* Remove all instances of character 'c' from 'str' */ +// Remove all instances of character 'c' from 'str' void string_remove_char(char* str, char c) { size_t i, j; From f01b2e0c3654f3d88b8856f7baf5e703366f0826 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 5 Aug 2023 18:54:50 +0000 Subject: [PATCH 105/372] Testing: GRIB1 Boustrophedonic ordering --- data/grib_data_files.txt | 1 + tests/grib_second_order.sh | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/data/grib_data_files.txt b/data/grib_data_files.txt index 9fa6fb818..0647dc142 100644 --- a/data/grib_data_files.txt +++ b/data/grib_data_files.txt @@ -89,3 +89,4 @@ test_file.grib2 gfs.complex.mvmu.grib2 mercator.grib2 run_length_packing.grib2 +boustrophedonic.grib1 diff --git a/tests/grib_second_order.sh b/tests/grib_second_order.sh index dfe245e46..7fab5e736 100755 --- a/tests/grib_second_order.sh +++ b/tests/grib_second_order.sh @@ -177,6 +177,11 @@ infile=$ECCODES_SAMPLES_PATH/GRIB2.tmpl ${tools_dir}/grib_set -r -s packingType=grid_second_order $infile $temp1 grib_check_key_equals $temp1 packingType grid_simple +export ECCODES_GRIBEX_BOUSTROPHEDONIC=1 +${tools_dir}/grib_get -n statistics boustrophedonic.grib1 +${tools_dir}/grib_set -s scaleValuesBy=1.1 boustrophedonic.grib1 $temp1 +unset ECCODES_GRIBEX_BOUSTROPHEDONIC + # Clean up rm -f $temp_stat1 $temp_stat2 From 436fc112272cf8cbc2656e5cb3341b38dc1619b2 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 6 Aug 2023 13:45:46 +0100 Subject: [PATCH 106/372] Dead code removal: while --- src/action_class_while.cc | 163 +------------------------ src/deprecated/action_class_while.cc | 176 +++++++++++++++++++++++++++ tests/grib_filter.sh | 13 ++ 3 files changed, 192 insertions(+), 160 deletions(-) create mode 100644 src/deprecated/action_class_while.cc diff --git a/src/action_class_while.cc b/src/action_class_while.cc index 0b5c7ca4c..6ec144d15 100644 --- a/src/action_class_while.cc +++ b/src/action_class_while.cc @@ -9,168 +9,11 @@ */ #include "grib_api_internal.h" -/* - This is used by make_class.pl - - START_CLASS_DEF - CLASS = action - SUPER = action_class_section - IMPLEMENTS = create_accessor - IMPLEMENTS = dump - IMPLEMENTS = destroy - MEMBERS = grib_expression *expression - MEMBERS = grib_action *block_while - 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 "action.class" and rerun ./make_class.pl - -*/ - -static void init_class (grib_action_class*); -static void dump (grib_action* d, FILE*,int); -static void destroy (grib_context*,grib_action*); -static int create_accessor(grib_section*,grib_action*,grib_loader*); - - -typedef struct grib_action_while { - grib_action act; - /* Members defined in section */ - /* Members defined in while */ - grib_expression *expression; - grib_action *block_while; -} grib_action_while; - -extern grib_action_class* grib_action_class_section; - -static grib_action_class _grib_action_class_while = { - &grib_action_class_section, /* super */ - "action_class_while", /* name */ - sizeof(grib_action_while), /* size */ - 0, /* inited */ - &init_class, /* init_class */ - 0, /* init */ - &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - &create_accessor, /* create_accessor*/ - - 0, /* notify_change */ - 0, /* reparse */ - 0, /* execute */ -}; - -grib_action_class* grib_action_class_while = &_grib_action_class_while; - -static void init_class(grib_action_class* c) -{ - c->xref = (*(c->super))->xref; - c->notify_change = (*(c->super))->notify_change; - c->reparse = (*(c->super))->reparse; - c->execute = (*(c->super))->execute; -} -/* END_CLASS_IMP */ - -static void dump(grib_action* act, FILE* f, int lvl) -{ - Assert(!"action_class_while::dump: 'while' statement is deprecated"); - -// grib_action_while* a = (grib_action_while*)act; -// int i = 0; -// for (i = 0; i < lvl; i++) -// grib_context_print(act->context, f, " "); -// grib_context_print(act->context, f, "Loop %s\n", act->name); -// grib_dump_action_branch(f, a->block_while, lvl + 1); -} - -static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) -{ - Assert(!"action_class_while::create_accessor: 'while' statement is deprecated"); - -// grib_action_while* a = (grib_action_while*)act; -// grib_accessor* ga = NULL; -// grib_section* gs = NULL; -// grib_action* la = NULL; -// grib_action* next = NULL; -// int ret = 0; -// ga = grib_accessor_factory(p, act, 0, NULL); -// if (!ga) -// return GRIB_BUFFER_TOO_SMALL; -// gs = ga->sub_section; - -// grib_push_accessor(ga, p->block); -// la = a->block_while; - -// for (;;) { -// long val = 0; - -// if ((ret = grib_expression_evaluate_long(p->h, a->expression, &val)) != GRIB_SUCCESS) { -// grib_context_log(p->h->context, GRIB_LOG_DEBUG, " List %s creating %d values unable to evaluate long \n", act->name, val); -// return ret; -// } -// if (!val) -// break; - -// next = la; -// while (next) { -// ret = grib_create_accessor(gs, next, h); -// if (ret != GRIB_SUCCESS) -// return ret; -// next = next->next; -// } -// } - - return GRIB_SUCCESS; -} +// No longer used: For the original intent see +// src/deprecated/action_class_while.cc grib_action* grib_action_create_while(grib_context* context, grib_expression* expression, grib_action* block) { - Assert(!"action_class_while::grib_action_create_while: 'while' statement is deprecated"); + grib_context_log(context, GRIB_LOG_FATAL, "The 'while' statement is deprecated"); return NULL; - -// char name[80]; -// const size_t nameLen = sizeof(name); -// grib_action_while* a; -// grib_action_class* c = grib_action_class_while; -// grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context, c->size); -// act->cclass = c; -// act->context = context; -// a = (grib_action_while*)act; -// act->next = NULL; - -// snprintf(name, nameLen, "_while%p", (void*)a); -// act->name = grib_context_strdup_persistent(context, name); -// act->op = grib_context_strdup_persistent(context, "section"); -// a->expression = expression; - -// a->block_while = block; - -// grib_context_log(context, GRIB_LOG_DEBUG, " Action List %s is created \n", act->name); -// return act; -} - -static void destroy(grib_context* context, grib_action* act) -{ - Assert(!"action_class_while::destroy: 'while' statement is deprecated"); - - // grib_action_while* self = (grib_action_while*)act; - // grib_action* a = self->block_while; - - // while (a) { - // grib_action* na = a->next; - // grib_action_delete(context, a); - // a = na; - // } - // grib_context_free_persistent(context, act->name); - // grib_context_free_persistent(context, act->op); - // grib_expression_free(context, self->expression); } diff --git a/src/deprecated/action_class_while.cc b/src/deprecated/action_class_while.cc new file mode 100644 index 000000000..0b5c7ca4c --- /dev/null +++ b/src/deprecated/action_class_while.cc @@ -0,0 +1,176 @@ +/* + * (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 + CLASS = action + SUPER = action_class_section + IMPLEMENTS = create_accessor + IMPLEMENTS = dump + IMPLEMENTS = destroy + MEMBERS = grib_expression *expression + MEMBERS = grib_action *block_while + 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 "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void destroy (grib_context*,grib_action*); +static int create_accessor(grib_section*,grib_action*,grib_loader*); + + +typedef struct grib_action_while { + grib_action act; + /* Members defined in section */ + /* Members defined in while */ + grib_expression *expression; + grib_action *block_while; +} grib_action_while; + +extern grib_action_class* grib_action_class_section; + +static grib_action_class _grib_action_class_while = { + &grib_action_class_section, /* super */ + "action_class_while", /* name */ + sizeof(grib_action_while), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + 0, /* xref */ + + &create_accessor, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + 0, /* execute */ +}; + +grib_action_class* grib_action_class_while = &_grib_action_class_while; + +static void init_class(grib_action_class* c) +{ + c->xref = (*(c->super))->xref; + c->notify_change = (*(c->super))->notify_change; + c->reparse = (*(c->super))->reparse; + c->execute = (*(c->super))->execute; +} +/* END_CLASS_IMP */ + +static void dump(grib_action* act, FILE* f, int lvl) +{ + Assert(!"action_class_while::dump: 'while' statement is deprecated"); + +// grib_action_while* a = (grib_action_while*)act; +// int i = 0; +// for (i = 0; i < lvl; i++) +// grib_context_print(act->context, f, " "); +// grib_context_print(act->context, f, "Loop %s\n", act->name); +// grib_dump_action_branch(f, a->block_while, lvl + 1); +} + +static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) +{ + Assert(!"action_class_while::create_accessor: 'while' statement is deprecated"); + +// grib_action_while* a = (grib_action_while*)act; +// grib_accessor* ga = NULL; +// grib_section* gs = NULL; +// grib_action* la = NULL; +// grib_action* next = NULL; +// int ret = 0; +// ga = grib_accessor_factory(p, act, 0, NULL); +// if (!ga) +// return GRIB_BUFFER_TOO_SMALL; +// gs = ga->sub_section; + +// grib_push_accessor(ga, p->block); +// la = a->block_while; + +// for (;;) { +// long val = 0; + +// if ((ret = grib_expression_evaluate_long(p->h, a->expression, &val)) != GRIB_SUCCESS) { +// grib_context_log(p->h->context, GRIB_LOG_DEBUG, " List %s creating %d values unable to evaluate long \n", act->name, val); +// return ret; +// } +// if (!val) +// break; + +// next = la; +// while (next) { +// ret = grib_create_accessor(gs, next, h); +// if (ret != GRIB_SUCCESS) +// return ret; +// next = next->next; +// } +// } + + return GRIB_SUCCESS; +} + +grib_action* grib_action_create_while(grib_context* context, grib_expression* expression, grib_action* block) +{ + Assert(!"action_class_while::grib_action_create_while: 'while' statement is deprecated"); + return NULL; + +// char name[80]; +// const size_t nameLen = sizeof(name); +// grib_action_while* a; +// grib_action_class* c = grib_action_class_while; +// grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context, c->size); +// act->cclass = c; +// act->context = context; +// a = (grib_action_while*)act; +// act->next = NULL; + +// snprintf(name, nameLen, "_while%p", (void*)a); +// act->name = grib_context_strdup_persistent(context, name); +// act->op = grib_context_strdup_persistent(context, "section"); +// a->expression = expression; + +// a->block_while = block; + +// grib_context_log(context, GRIB_LOG_DEBUG, " Action List %s is created \n", act->name); +// return act; +} + +static void destroy(grib_context* context, grib_action* act) +{ + Assert(!"action_class_while::destroy: 'while' statement is deprecated"); + + // grib_action_while* self = (grib_action_while*)act; + // grib_action* a = self->block_while; + + // while (a) { + // grib_action* na = a->next; + // grib_action_delete(context, a); + // a = na; + // } + // grib_context_free_persistent(context, act->name); + // grib_context_free_persistent(context, act->op); + // grib_expression_free(context, self->expression); +} diff --git a/tests/grib_filter.sh b/tests/grib_filter.sh index ff5f81b83..ffc284cb0 100755 --- a/tests/grib_filter.sh +++ b/tests/grib_filter.sh @@ -308,6 +308,19 @@ ${tools_dir}/grib_filter $tempFilt $input cd .. rm -rf $tempDir +echo "Deprecated while statement" +# ----------------------------------------- +input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +cat >$tempFilt < $tempOut 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "statement is deprecated" $tempOut + # Clean up rm -f $tempGrib $tempFilt $tempOut $tempRef From 522641a001d80afc4c8b6a1e08a58022e8112bf3 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 6 Aug 2023 13:57:28 +0100 Subject: [PATCH 107/372] Definitions: Cleanup --- definitions/grib1/data.grid_second_order.def | 11 +++++------ definitions/grib1/data.spectral_ieee.def | 4 ++-- definitions/grib1/data.spectral_simple.def | 2 +- definitions/grib1/local.82.82.def | 2 +- definitions/grib1/mars_labeling.82.def | 2 +- definitions/grib2/boot.def | 2 +- definitions/grib2/local.85.1.def | 2 +- definitions/grib2/template.3.90.def | 2 +- definitions/grib2/template.3.stretching.def | 16 ++++++++-------- definitions/grib2/template.4.109.def | 2 +- definitions/grib2/template.4.localtime.def | 12 ++++++------ definitions/grib2/template.5.1.def | 2 +- definitions/grib2/template.7.2.def | 2 +- definitions/grib2/template.7.50001.def | 6 +++--- definitions/grib2/template.7.50002.def | 8 ++++---- definitions/grib2/template.7.second_order.def | 2 +- .../grib2/typeOfUnstructuredGridConcept.def | 8 ++++---- 17 files changed, 42 insertions(+), 43 deletions(-) diff --git a/definitions/grib1/data.grid_second_order.def b/definitions/grib1/data.grid_second_order.def index a62dc7dba..012fd9d3b 100644 --- a/definitions/grib1/data.grid_second_order.def +++ b/definitions/grib1/data.grid_second_order.def @@ -16,8 +16,7 @@ unsigned [2] NL : dump; if (orderOfSPD) { unsigned[1] widthOfSPD ; meta SPD spd(widthOfSPD,orderOfSPD) : read_only; -} - +} meta groupWidths unsigned_bits(widthOfWidths,numberOfGroups) : read_only; meta groupLengths unsigned_bits(widthOfLengths,numberOfGroups) : read_only; @@ -41,7 +40,7 @@ if(bitmapPresent) { unitsBias, changingPrecision, numberOfCodedValues, - bitsPerValue, + bitsPerValue, referenceValue, binaryScaleFactor, decimalScaleFactor, @@ -70,7 +69,7 @@ if(bitmapPresent) { numberOfPoints ): read_only; - alias data.packedValues = codedValues; + alias data.packedValues = codedValues; if (boustrophedonicOrdering) { @@ -100,7 +99,7 @@ if(bitmapPresent) { unitsBias, changingPrecision, numberOfCodedValues, - bitsPerValue, + bitsPerValue, referenceValue, binaryScaleFactor, decimalScaleFactor, @@ -139,7 +138,7 @@ if(bitmapPresent) { unitsBias, changingPrecision, numberOfCodedValues, - bitsPerValue, + bitsPerValue, referenceValue, binaryScaleFactor, decimalScaleFactor, diff --git a/definitions/grib1/data.spectral_ieee.def b/definitions/grib1/data.spectral_ieee.def index bae584c06..4ac0f9787 100644 --- a/definitions/grib1/data.spectral_ieee.def +++ b/definitions/grib1/data.spectral_ieee.def @@ -13,7 +13,7 @@ constant PUnset = -32767; # N is a pointer to the start of the packed data (i.e. gives octet number) unsigned[2] N : read_only,dump; signed[2] P = PUnset; - + unsigned[1] JS=0 : dump; unsigned[1] KS=0 : dump; unsigned[1] MS=0 : dump; @@ -24,7 +24,7 @@ alias subSetM=MS; constant GRIBEXShBugPresent = 1; transient computeLaplacianOperator=0; - + meta data.laplacianOperator scale(P,oneConstant,grib1divider,truncateLaplacian) : dump; meta laplacianOperatorIsSet evaluate(P != PUnset && !computeLaplacianOperator ); diff --git a/definitions/grib1/data.spectral_simple.def b/definitions/grib1/data.spectral_simple.def index a9b6d7e94..5bc8f1e72 100644 --- a/definitions/grib1/data.spectral_simple.def +++ b/definitions/grib1/data.spectral_simple.def @@ -35,7 +35,7 @@ meta codedValues data_g1simple_packing( ): read_only; meta values data_g1shsimple_packing(codedValues,realPart) : dump; -alias data.packedValues = values; +alias data.packedValues = values; meta numberOfCodedValues g1number_of_coded_values_sh_simple(bitsPerValue,offsetBeforeData,offsetAfterData,halfByte,numberOfValues) : dump; template statistics "common/statistics_spectral.def"; diff --git a/definitions/grib1/local.82.82.def b/definitions/grib1/local.82.82.def index f1ab62d82..0ecc03562 100644 --- a/definitions/grib1/local.82.82.def +++ b/definitions/grib1/local.82.82.def @@ -2,7 +2,7 @@ # # author: Sebastien Villaume # created: 6 Oct 2011 -# modified: 20 Feb 2014 +# modified: 20 Feb 2014 # ######################## ### LOCAL SECTION 82 ### diff --git a/definitions/grib1/mars_labeling.82.def b/definitions/grib1/mars_labeling.82.def index 576d26f72..ef95ce754 100644 --- a/definitions/grib1/mars_labeling.82.def +++ b/definitions/grib1/mars_labeling.82.def @@ -29,5 +29,5 @@ if ( localDefinitionNumber == 83 ) { alias mars.aerosolbinnumber = matchAerosolBinNumber; concept_nofail matchAerosolPacking (unknown,"aerosolPackingConcept.def",conceptsLocalMarsDirAll,conceptsMasterMarsDir); - alias mars.aerosolpacking = matchAerosolPacking; + alias mars.aerosolpacking = matchAerosolPacking; } diff --git a/definitions/grib2/boot.def b/definitions/grib2/boot.def index 32f262bef..296dba179 100644 --- a/definitions/grib2/boot.def +++ b/definitions/grib2/boot.def @@ -2,7 +2,7 @@ # # 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. # diff --git a/definitions/grib2/local.85.1.def b/definitions/grib2/local.85.1.def index c85e4d3c9..39e7c6132 100644 --- a/definitions/grib2/local.85.1.def +++ b/definitions/grib2/local.85.1.def @@ -7,7 +7,7 @@ concept faLevelName (defaultFaLevelName,"faLevelName.def",conceptsMasterDir,conc concept faModelName (defaultFaModelName,"faModelName.def",conceptsMasterDir,conceptsLocalDirAll) : no_copy; # 0 = Accumulation or time range from last event -# 1 = Accumulation or time range from the start +# 1 = Accumulation or time range from the start transient LSTCUM = 0; # Scaling factor for levels diff --git a/definitions/grib2/template.3.90.def b/definitions/grib2/template.3.90.def index 38ea4cab5..4f8813f25 100644 --- a/definitions/grib2/template.3.90.def +++ b/definitions/grib2/template.3.90.def @@ -52,7 +52,7 @@ include "grib2/template.3.scanning_mode.def"; # of the sub-satellite point in the direction of increasing latitude signed[4] orientationOfTheGrid : edition_specific; meta geography.orientationOfTheGridInDegrees - scale(orientationOfTheGrid,oneConstant,grib2divider,truncateDegrees) : dump; + scale(orientationOfTheGrid,oneConstant,grib2divider,truncateDegrees) : dump; # Nr - altitude of the camera from the Earth's centre, measured in units of the Earth's # (equatorial) radius multiplied by a scale factor of 10^6 diff --git a/definitions/grib2/template.3.stretching.def b/definitions/grib2/template.3.stretching.def index 11c0b12c3..38e435802 100644 --- a/definitions/grib2/template.3.stretching.def +++ b/definitions/grib2/template.3.stretching.def @@ -1,19 +1,19 @@ # (C) Copyright 2005- ECMWF. -# Latitude of the pole of stretching -signed[4] latitudeOfThePoleOfStretching : edition_specific,no_copy; +# Latitude of the pole of stretching +signed[4] latitudeOfThePoleOfStretching : edition_specific,no_copy; -# Longitude of the pole of stretching -signed[4] longitudeOfThePoleOfStretching : edition_specific,no_copy; +# Longitude of the pole of stretching +signed[4] longitudeOfThePoleOfStretching : edition_specific,no_copy; meta geography.latitudeOfStretchingPoleInDegrees scale(latitudeOfThePoleOfStretching,oneConstant,grib2divider,truncateDegrees) : dump; meta geography.longitudeOfStretchingPoleInDegrees scale(longitudeOfThePoleOfStretching,oneConstant,grib2divider,truncateDegrees) : dump; -# Stretching factor -unsigned[4] stretchingFactorScaled : edition_specific,no_copy; +# Stretching factor +unsigned[4] stretchingFactorScaled : edition_specific,no_copy; -meta geography.stretchingFactor - scale(stretchingFactorScaled,oneConstant,grib2divider) : dump; +meta geography.stretchingFactor + scale(stretchingFactorScaled,oneConstant,grib2divider) : dump; diff --git a/definitions/grib2/template.4.109.def b/definitions/grib2/template.4.109.def index ba75dadd6..bece80dee 100644 --- a/definitions/grib2/template.4.109.def +++ b/definitions/grib2/template.4.109.def @@ -1,6 +1,6 @@ # (C) Copyright 2005- ECMWF. -# TEMPLATE 4.109, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for generic optical properties +# TEMPLATE 4.109, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for generic optical properties include "grib2/template.4.parameter.def" include "grib2/template.4.optical.def" diff --git a/definitions/grib2/template.4.localtime.def b/definitions/grib2/template.4.localtime.def index 01491217c..72a00e586 100644 --- a/definitions/grib2/template.4.localtime.def +++ b/definitions/grib2/template.4.localtime.def @@ -16,10 +16,10 @@ unsigned[1] numberOfForecastsUsedInLocalTime : dump; localTimeForecastList list(numberOfForecastsUsedInLocalTime) { - # Year of Forecast used in Local Time + # Year of Forecast used in Local Time unsigned[2] yearOfForecastUsedInLocalTime=0 : dump, edition_specific; - # Month of Forecast used in Local Time + # Month of Forecast used in Local Time unsigned[1] monthOfForecastUsedInLocalTime=0 : dump, edition_specific; # Day of Forecast used in Local Time @@ -34,7 +34,7 @@ localTimeForecastList list(numberOfForecastsUsedInLocalTime) # Second of Forecast used in Local Time unsigned[1] secondOfForecastUsedInLocalTime=0 : dump, edition_specific; - # Indicator of unit of time for ForecastTime + # Indicator of unit of time for ForecastTime codetable[1] indicatorOfUnitForForecastTime ('4.4.table',masterDir,localDir)=1 : dump; # Length of the time range over which statistical processing is done, in units defined by the previous octet @@ -60,7 +60,7 @@ if (numberOfForecastsUsedInLocalTime == 1) { meta dateOfForecastUsedInLocalTime g2date(yearOfForecastUsedInLocalTime, monthOfForecastUsedInLocalTime, dayOfForecastUsedInLocalTime) : dump; meta timeOfForecastUsedInLocalTime time(hourOfForecastUsedInLocalTime, minuteOfForecastUsedInLocalTime, secondOfForecastUsedInLocalTime) : dump; - #transient stepOfForecastUsedInLocalTime = forecastTime : dump; + #transient stepOfForecastUsedInLocalTime = forecastTime : dump; # need something here to compute the diff between date time of *OfForecastUsedInLocalTime and the local time defined in section 1 (dataDate and dataTime) # this would be the offset (step) used to index data in mars as mars.step @@ -103,10 +103,10 @@ if (numberOfForecastsUsedInLocalTime > 1) { meta selectedSecond element(secondOfForecastUsedInLocalTime, selectedFcIndex); meta dateOfForecastUsedInLocalTime g2date(selectedYear, selectedMonth, selectedDay); meta timeOfForecastUsedInLocalTime time(selectedHour, selectedMinute, selectedSecond); - + meta jdLocal julian_day(dataDate, hour,minute,second); #section 1 meta jdSelected julian_day(dateOfForecastUsedInLocalTime, selectedHour, selectedMinute, selectedSecond); - + transient diffInDays = (jdLocal - jdSelected) : hidden; # float transient diffInHours = (diffInDays * 1440 + 0.5)/60 : hidden; meta _endStep round(diffInHours, 10): dump, long_type; diff --git a/definitions/grib2/template.5.1.def b/definitions/grib2/template.5.1.def index e01b7f3e4..65e389950 100644 --- a/definitions/grib2/template.5.1.def +++ b/definitions/grib2/template.5.1.def @@ -11,7 +11,7 @@ unsigned[1] matrixBitmapsPresent; alias secondaryBitmapPresent=matrixBitmapsPresent; # Number of data values encoded in Section 7 -unsigned[4] numberOfCodedValues; +unsigned[4] numberOfCodedValues; # NR - first dimension (rows) unsigned[2] firstDimension; diff --git a/definitions/grib2/template.7.2.def b/definitions/grib2/template.7.2.def index bbff89acc..e243e7755 100644 --- a/definitions/grib2/template.7.2.def +++ b/definitions/grib2/template.7.2.def @@ -43,7 +43,7 @@ meta values data_apply_bitmap(codedValues, numberOfDataPoints, numberOfValues) : dump; -alias data.packedValues = codedValues; +alias data.packedValues = codedValues; template statistics "common/statistics_grid.def"; meta numberOfMissing count_missing(bitmap,unusedBitsInBitmap,numberOfDataPoints,missingValueManagementUsed) : dump; diff --git a/definitions/grib2/template.7.50001.def b/definitions/grib2/template.7.50001.def index 1eb465a32..18bc0ca32 100644 --- a/definitions/grib2/template.7.50001.def +++ b/definitions/grib2/template.7.50001.def @@ -22,7 +22,7 @@ if(bitmapPresent) { unitsBias, changingPrecision, numberOfCodedValues, - bitsPerValue, + bitsPerValue, referenceValue, binaryScaleFactor, decimalScaleFactor, @@ -51,7 +51,7 @@ if(bitmapPresent) { numberOfPoints ): read_only; - alias data.packedValues = codedValues; + alias data.packedValues = codedValues; meta values data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : dump; } else { @@ -64,7 +64,7 @@ if(bitmapPresent) { unitsBias, changingPrecision, numberOfCodedValues, - bitsPerValue, + bitsPerValue, referenceValue, binaryScaleFactor, decimalScaleFactor, diff --git a/definitions/grib2/template.7.50002.def b/definitions/grib2/template.7.50002.def index b68c95816..be47b0604 100644 --- a/definitions/grib2/template.7.50002.def +++ b/definitions/grib2/template.7.50002.def @@ -20,7 +20,7 @@ if(bitmapPresent) { unitsBias, changingPrecision, numberOfCodedValues, - bitsPerValue, + bitsPerValue, referenceValue, binaryScaleFactor, decimalScaleFactor, @@ -49,7 +49,7 @@ if(bitmapPresent) { numberOfPoints ): read_only; - alias data.packedValues = codedValues; + alias data.packedValues = codedValues; if (boustrophedonicOrdering) { meta preBitmapValues data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : read_only; @@ -69,7 +69,7 @@ if(bitmapPresent) { unitsBias, changingPrecision, numberOfCodedValues, - bitsPerValue, + bitsPerValue, referenceValue, binaryScaleFactor, decimalScaleFactor, @@ -111,7 +111,7 @@ if(bitmapPresent) { unitsBias, changingPrecision, numberOfCodedValues, - bitsPerValue, + bitsPerValue, referenceValue, binaryScaleFactor, decimalScaleFactor, diff --git a/definitions/grib2/template.7.second_order.def b/definitions/grib2/template.7.second_order.def index 9bc13b274..2455f80c7 100644 --- a/definitions/grib2/template.7.second_order.def +++ b/definitions/grib2/template.7.second_order.def @@ -51,7 +51,7 @@ meta values data_apply_bitmap(codedValues, numberOfDataPoints, numberOfValues) : dump; -alias data.packedValues = codedValues; +alias data.packedValues = codedValues; template statistics "common/statistics_grid.def"; template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib2/typeOfUnstructuredGridConcept.def b/definitions/grib2/typeOfUnstructuredGridConcept.def index 4a36af701..6eeae3b3f 100644 --- a/definitions/grib2/typeOfUnstructuredGridConcept.def +++ b/definitions/grib2/typeOfUnstructuredGridConcept.def @@ -1,5 +1,5 @@ 'undefined' = { numberOfGridInReference = 0; } -'T grid' = { numberOfGridInReference = 1; } -'U grid' = { numberOfGridInReference = 2; } -'V grid' = { numberOfGridInReference = 3; } -'W grid' = { numberOfGridInReference = 4; } +'T grid' = { numberOfGridInReference = 1; } +'U grid' = { numberOfGridInReference = 2; } +'V grid' = { numberOfGridInReference = 3; } +'W grid' = { numberOfGridInReference = 4; } From 450d2243695bd416dac1c06daa23a12edb8787ac Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 6 Aug 2023 14:32:30 +0100 Subject: [PATCH 108/372] Dead code removal: Unused data members --- src/grib_api_internal.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/grib_api_internal.h b/src/grib_api_internal.h index 1fe196076..0ae6ccccf 100644 --- a/src/grib_api_internal.h +++ b/src/grib_api_internal.h @@ -860,9 +860,8 @@ struct grib_handle { grib_context* context; /** < context attached to this handle */ grib_buffer* buffer; /** < buffer attached to the handle */ - grib_section* root; /** the root section*/ - grib_section* asserts; /** the assertion section*/ - grib_section* rules; /** the rules section*/ + grib_section* root; /** the root section*/ + grib_section* rules; /** the rules section*/ grib_dependency* dependencies; /** List of dependencies */ grib_handle* main; /** Used during reparsing */ grib_handle* kid; /** Used during reparsing */ @@ -870,7 +869,6 @@ struct grib_handle int values_stack; const grib_values* values[MAX_SET_VALUES]; /** Used when setting multiple values at once */ size_t values_count[MAX_SET_VALUES]; /** Used when setting multiple values at once */ - int dont_trigger; /** Don't notify triggers */ int partial; /** Not a complete message (just headers) */ int header_mode; /** Header not jet complete */ char* gts_header; @@ -883,8 +881,6 @@ struct grib_handle int sections_count; off_t offset; /* grib_accessor* groups[MAX_NUM_GROUPS]; */ - long missingValueLong; - double missingValueDouble; ProductKind product_kind; /* grib_trie* bufr_elements_table; */ }; From e9fa8bd8e4f10002d33b6b5b50c523d8269834d8 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 6 Aug 2023 14:45:18 +0100 Subject: [PATCH 109/372] Dead code removal: trigger --- src/action_class_hierarchy.txt | 2 - src/action_class_trigger.cc | 152 +--------------------- src/deprecated/action_class_trigger.cc | 167 +++++++++++++++++++++++++ 3 files changed, 168 insertions(+), 153 deletions(-) create mode 100644 src/deprecated/action_class_trigger.cc diff --git a/src/action_class_hierarchy.txt b/src/action_class_hierarchy.txt index 6c311c70c..8391f6c6e 100644 --- a/src/action_class_hierarchy.txt +++ b/src/action_class_hierarchy.txt @@ -21,8 +21,6 @@ Action Class Hierarchy |---action_class_list |---action_class_switch |---action_class_template - |---action_class_trigger - |---action_class_while |-action_class_set |-action_class_set_darray |-action_class_set_iarray diff --git a/src/action_class_trigger.cc b/src/action_class_trigger.cc index 82e4e9e43..f4a7413dc 100644 --- a/src/action_class_trigger.cc +++ b/src/action_class_trigger.cc @@ -8,160 +8,10 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - ***************************************************************************/ - #include "grib_api_internal.h" -/* - This is used by make_class.pl - - START_CLASS_DEF - CLASS = action - SUPER = action_class_section - IMPLEMENTS = create_accessor - IMPLEMENTS = dump - IMPLEMENTS = destroy - IMPLEMENTS = reparse - MEMBERS = grib_arguments* trigger_on - MEMBERS = grib_action *block - 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 "action.class" and rerun ./make_class.pl - -*/ - -static void init_class (grib_action_class*); -static void dump (grib_action* d, FILE*,int); -static void destroy (grib_context*,grib_action*); -static int create_accessor(grib_section*,grib_action*,grib_loader*); -static grib_action* reparse(grib_action* a,grib_accessor* acc,int *doit); - - -typedef struct grib_action_trigger { - grib_action act; - /* Members defined in section */ - /* Members defined in trigger */ - grib_arguments* trigger_on; - grib_action *block; -} grib_action_trigger; - -extern grib_action_class* grib_action_class_section; - -static grib_action_class _grib_action_class_trigger = { - &grib_action_class_section, /* super */ - "action_class_trigger", /* name */ - sizeof(grib_action_trigger), /* size */ - 0, /* inited */ - &init_class, /* init_class */ - 0, /* init */ - &destroy, /* destroy */ - - &dump, /* dump */ - 0, /* xref */ - - &create_accessor, /* create_accessor*/ - - 0, /* notify_change */ - &reparse, /* reparse */ - 0, /* execute */ -}; - -grib_action_class* grib_action_class_trigger = &_grib_action_class_trigger; - -static void init_class(grib_action_class* c) -{ - c->xref = (*(c->super))->xref; - c->notify_change = (*(c->super))->notify_change; - c->execute = (*(c->super))->execute; -} -/* END_CLASS_IMP */ grib_action* grib_action_create_trigger(grib_context* context, grib_arguments* args, grib_action* block) { - Assert(!"action_class_trigger::grib_action_create_trigger: 'trigger' statement is deprecated"); + grib_context_log(context, GRIB_LOG_FATAL, "The 'trigger' statement is deprecated"); return NULL; - -// char name[1024]; -// const size_t nameLen = sizeof(name); -// grib_action_trigger* a = 0; -// grib_action_class* c = grib_action_class_trigger; -// grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context, c->size); -// snprintf(name, nameLen, "_trigger%p", (void*)act); -// act->name = grib_context_strdup_persistent(context, name); -// act->op = grib_context_strdup_persistent(context, "section"); -// act->cclass = c; -// act->next = NULL; -// act->context = context; -// a = (grib_action_trigger*)act; -// a->trigger_on = args; -// a->block = block; -// return act; -} - -static void dump(grib_action* act, FILE* f, int lvl) -{ - Assert(!"action_class_trigger::dump: 'trigger' statement is deprecated"); - - // int i = 0; - // for (i = 0; i < lvl; i++) - // grib_context_print(act->context, f, " "); - // grib_context_print(act->context, f, "Trigger\n"); -} - -static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) -{ - Assert(!"action_class_trigger::create_accessor: 'trigger' statement is deprecated"); - -// int ret = GRIB_SUCCESS; -// grib_action_trigger* a = (grib_action_trigger*)act; -// grib_action* next = NULL; -// grib_accessor* as = NULL; -// grib_section* gs = NULL; -// as = grib_accessor_factory(p, act, 0, NULL); -// if (!as) -// return GRIB_INTERNAL_ERROR; - -// gs = as->sub_section; -// gs->branch = 0; /* Force a reparse each time */ -// grib_push_accessor(as, p->block); -// grib_dependency_observe_arguments(as, a->trigger_on); -// next = a->block; -// while (next) { -// ret = grib_create_accessor(gs, next, h); -// if (ret != GRIB_SUCCESS) -// return ret; -// next = next->next; -// } - return GRIB_SUCCESS; -} - -static grib_action* reparse(grib_action* a, grib_accessor* acc, int* doit) -{ - grib_action_trigger* self = (grib_action_trigger*)a; - return self->block; -} - -static void destroy(grib_context* context, grib_action* act) -{ - Assert(!"action_class_trigger::destroy: 'trigger' statement is deprecated"); - -// grib_action_trigger* a = (grib_action_trigger*)act; -// grib_action* b = a->block; -// while (b) { -// grib_action* n = b->next; -// grib_action_delete(context, b); -// b = n; -// } -// grib_arguments_free(context, a->trigger_on); -// grib_context_free_persistent(context, act->name); -// grib_context_free_persistent(context, act->op); } diff --git a/src/deprecated/action_class_trigger.cc b/src/deprecated/action_class_trigger.cc new file mode 100644 index 000000000..82e4e9e43 --- /dev/null +++ b/src/deprecated/action_class_trigger.cc @@ -0,0 +1,167 @@ +/* + * (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. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + ***************************************************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + SUPER = action_class_section + IMPLEMENTS = create_accessor + IMPLEMENTS = dump + IMPLEMENTS = destroy + IMPLEMENTS = reparse + MEMBERS = grib_arguments* trigger_on + MEMBERS = grib_action *block + 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 "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void destroy (grib_context*,grib_action*); +static int create_accessor(grib_section*,grib_action*,grib_loader*); +static grib_action* reparse(grib_action* a,grib_accessor* acc,int *doit); + + +typedef struct grib_action_trigger { + grib_action act; + /* Members defined in section */ + /* Members defined in trigger */ + grib_arguments* trigger_on; + grib_action *block; +} grib_action_trigger; + +extern grib_action_class* grib_action_class_section; + +static grib_action_class _grib_action_class_trigger = { + &grib_action_class_section, /* super */ + "action_class_trigger", /* name */ + sizeof(grib_action_trigger), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + 0, /* xref */ + + &create_accessor, /* create_accessor*/ + + 0, /* notify_change */ + &reparse, /* reparse */ + 0, /* execute */ +}; + +grib_action_class* grib_action_class_trigger = &_grib_action_class_trigger; + +static void init_class(grib_action_class* c) +{ + c->xref = (*(c->super))->xref; + c->notify_change = (*(c->super))->notify_change; + c->execute = (*(c->super))->execute; +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_trigger(grib_context* context, grib_arguments* args, grib_action* block) +{ + Assert(!"action_class_trigger::grib_action_create_trigger: 'trigger' statement is deprecated"); + return NULL; + +// char name[1024]; +// const size_t nameLen = sizeof(name); +// grib_action_trigger* a = 0; +// grib_action_class* c = grib_action_class_trigger; +// grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context, c->size); +// snprintf(name, nameLen, "_trigger%p", (void*)act); +// act->name = grib_context_strdup_persistent(context, name); +// act->op = grib_context_strdup_persistent(context, "section"); +// act->cclass = c; +// act->next = NULL; +// act->context = context; +// a = (grib_action_trigger*)act; +// a->trigger_on = args; +// a->block = block; +// return act; +} + +static void dump(grib_action* act, FILE* f, int lvl) +{ + Assert(!"action_class_trigger::dump: 'trigger' statement is deprecated"); + + // int i = 0; + // for (i = 0; i < lvl; i++) + // grib_context_print(act->context, f, " "); + // grib_context_print(act->context, f, "Trigger\n"); +} + +static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) +{ + Assert(!"action_class_trigger::create_accessor: 'trigger' statement is deprecated"); + +// int ret = GRIB_SUCCESS; +// grib_action_trigger* a = (grib_action_trigger*)act; +// grib_action* next = NULL; +// grib_accessor* as = NULL; +// grib_section* gs = NULL; +// as = grib_accessor_factory(p, act, 0, NULL); +// if (!as) +// return GRIB_INTERNAL_ERROR; + +// gs = as->sub_section; +// gs->branch = 0; /* Force a reparse each time */ +// grib_push_accessor(as, p->block); +// grib_dependency_observe_arguments(as, a->trigger_on); +// next = a->block; +// while (next) { +// ret = grib_create_accessor(gs, next, h); +// if (ret != GRIB_SUCCESS) +// return ret; +// next = next->next; +// } + return GRIB_SUCCESS; +} + +static grib_action* reparse(grib_action* a, grib_accessor* acc, int* doit) +{ + grib_action_trigger* self = (grib_action_trigger*)a; + return self->block; +} + +static void destroy(grib_context* context, grib_action* act) +{ + Assert(!"action_class_trigger::destroy: 'trigger' statement is deprecated"); + +// grib_action_trigger* a = (grib_action_trigger*)act; +// grib_action* b = a->block; +// while (b) { +// grib_action* n = b->next; +// grib_action_delete(context, b); +// b = n; +// } +// grib_arguments_free(context, a->trigger_on); +// grib_context_free_persistent(context, act->name); +// grib_context_free_persistent(context, act->op); +} From 26e5e9b03136c5c46bb38aa43447d4745ea85564 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 6 Aug 2023 15:29:07 +0100 Subject: [PATCH 110/372] Testing: Deprecated statements --- tests/CMakeLists.txt | 1 + tests/codes_deprecated.sh | 49 +++++++++++++++++++++++++++++++++++++++ tests/grib_filter.sh | 13 ----------- 3 files changed, 50 insertions(+), 13 deletions(-) create mode 100755 tests/codes_deprecated.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 7166eb199..f85d2f954 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -74,6 +74,7 @@ if( HAVE_BUILD_TOOLS ) # and are generally quick list(APPEND tests_basic codes_info + codes_deprecated unit_tests julian grib_dump_samples diff --git a/tests/codes_deprecated.sh b/tests/codes_deprecated.sh new file mode 100755 index 000000000..3dd59188b --- /dev/null +++ b/tests/codes_deprecated.sh @@ -0,0 +1,49 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +REDIRECT=/dev/null +label="codes_deprecated_test" +tempFilt="temp.$label.filt" +tempGrib="temp.$label.grib" +tempOut="temp.$label.txt" +tempRef="temp.$label.ref" + +input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + +echo "Deprecated while statement" +# ----------------------------------------- +cat >$tempFilt < $tempOut 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "statement is deprecated" $tempOut + + +echo "Deprecated trigger statement" +# ----------------------------------------- +cat >$tempFilt < $tempOut 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "statement is deprecated" $tempOut + + +# Clean up +rm -f $tempGrib $tempFilt $tempOut $tempRef diff --git a/tests/grib_filter.sh b/tests/grib_filter.sh index ffc284cb0..ff5f81b83 100755 --- a/tests/grib_filter.sh +++ b/tests/grib_filter.sh @@ -308,19 +308,6 @@ ${tools_dir}/grib_filter $tempFilt $input cd .. rm -rf $tempDir -echo "Deprecated while statement" -# ----------------------------------------- -input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl -cat >$tempFilt < $tempOut 2>&1 -status=$? -set -e -[ $status -ne 0 ] -grep -q "statement is deprecated" $tempOut - # Clean up rm -f $tempGrib $tempFilt $tempOut $tempRef From a628b627f462c7a65a21d659fe4145b0c04d9207 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 7 Aug 2023 15:14:04 +0000 Subject: [PATCH 111/372] ECC-1659: GRIB2: Update encodings with 192 discipline --- .../grib1/localConcepts/ecmf/cfVarName.def | 4 +- definitions/grib1/localConcepts/ecmf/name.def | 8 ++-- .../grib1/localConcepts/ecmf/paramId.def | 4 +- .../grib1/localConcepts/ecmf/shortName.def | 4 +- .../grib1/localConcepts/ecmf/units.def | 8 ++-- definitions/grib2/cfVarName.def | 42 ++++++++++++++++++ .../grib2/localConcepts/ecmf/cfVarName.def | 42 ------------------ .../localConcepts/ecmf/cfVarName.legacy.def | 42 ++++++++++++++++++ definitions/grib2/localConcepts/ecmf/name.def | 42 ------------------ .../grib2/localConcepts/ecmf/name.legacy.def | 42 ++++++++++++++++++ .../grib2/localConcepts/ecmf/paramId.def | 42 ------------------ .../localConcepts/ecmf/paramId.legacy.def | 42 ++++++++++++++++++ .../grib2/localConcepts/ecmf/shortName.def | 42 ------------------ .../localConcepts/ecmf/shortName.legacy.def | 42 ++++++++++++++++++ .../grib2/localConcepts/ecmf/units.def | 44 +------------------ .../grib2/localConcepts/ecmf/units.legacy.def | 42 ++++++++++++++++++ definitions/grib2/name.def | 42 ++++++++++++++++++ definitions/grib2/paramId.def | 42 ++++++++++++++++++ definitions/grib2/shortName.def | 42 ++++++++++++++++++ definitions/grib2/units.def | 42 ++++++++++++++++++ 20 files changed, 435 insertions(+), 225 deletions(-) diff --git a/definitions/grib1/localConcepts/ecmf/cfVarName.def b/definitions/grib1/localConcepts/ecmf/cfVarName.def index 9a1427af6..e64852a08 100644 --- a/definitions/grib1/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib1/localConcepts/ecmf/cfVarName.def @@ -17814,12 +17814,12 @@ table2Version = 234 ; indicatorOfParameter = 228 ; } -#U-component stokes drift +#U-component surface stokes drift 'ust' = { table2Version = 140 ; indicatorOfParameter = 215 ; } -#V-component stokes drift +#V-component surface stokes drift 'vst' = { table2Version = 140 ; indicatorOfParameter = 216 ; diff --git a/definitions/grib1/localConcepts/ecmf/name.def b/definitions/grib1/localConcepts/ecmf/name.def index 035d18919..fd2b9af79 100644 --- a/definitions/grib1/localConcepts/ecmf/name.def +++ b/definitions/grib1/localConcepts/ecmf/name.def @@ -17814,13 +17814,13 @@ table2Version = 234 ; indicatorOfParameter = 228 ; } -#U-component stokes drift -'U-component stokes drift' = { +#U-component surface stokes drift +'U-component surface stokes drift' = { table2Version = 140 ; indicatorOfParameter = 215 ; } -#V-component stokes drift -'V-component stokes drift' = { +#V-component surface stokes drift +'V-component surface stokes drift' = { table2Version = 140 ; indicatorOfParameter = 216 ; } diff --git a/definitions/grib1/localConcepts/ecmf/paramId.def b/definitions/grib1/localConcepts/ecmf/paramId.def index ad2c54d37..46ed99774 100644 --- a/definitions/grib1/localConcepts/ecmf/paramId.def +++ b/definitions/grib1/localConcepts/ecmf/paramId.def @@ -17814,12 +17814,12 @@ table2Version = 234 ; indicatorOfParameter = 228 ; } -#U-component stokes drift +#U-component surface stokes drift '140215' = { table2Version = 140 ; indicatorOfParameter = 215 ; } -#V-component stokes drift +#V-component surface stokes drift '140216' = { table2Version = 140 ; indicatorOfParameter = 216 ; diff --git a/definitions/grib1/localConcepts/ecmf/shortName.def b/definitions/grib1/localConcepts/ecmf/shortName.def index bc3f286fe..159ebb628 100644 --- a/definitions/grib1/localConcepts/ecmf/shortName.def +++ b/definitions/grib1/localConcepts/ecmf/shortName.def @@ -17814,12 +17814,12 @@ table2Version = 234 ; indicatorOfParameter = 228 ; } -#U-component stokes drift +#U-component surface stokes drift 'ust' = { table2Version = 140 ; indicatorOfParameter = 215 ; } -#V-component stokes drift +#V-component surface stokes drift 'vst' = { table2Version = 140 ; indicatorOfParameter = 216 ; diff --git a/definitions/grib1/localConcepts/ecmf/units.def b/definitions/grib1/localConcepts/ecmf/units.def index 6df0d3fae..3d335fe0e 100644 --- a/definitions/grib1/localConcepts/ecmf/units.def +++ b/definitions/grib1/localConcepts/ecmf/units.def @@ -1170,7 +1170,7 @@ indicatorOfParameter = 159 ; } #Standard deviation of orography -'m' = { +'Numeric' = { table2Version = 128 ; indicatorOfParameter = 160 ; } @@ -1185,7 +1185,7 @@ indicatorOfParameter = 162 ; } #Slope of sub-gridscale orography -'~' = { +'Numeric' = { table2Version = 128 ; indicatorOfParameter = 163 ; } @@ -17814,12 +17814,12 @@ table2Version = 234 ; indicatorOfParameter = 228 ; } -#U-component stokes drift +#U-component surface stokes drift 'm s**-1' = { table2Version = 140 ; indicatorOfParameter = 215 ; } -#V-component stokes drift +#V-component surface stokes drift 'm s**-1' = { table2Version = 140 ; indicatorOfParameter = 216 ; diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index faec9ccd8..aa3d59ee7 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -139,6 +139,12 @@ parameterCategory = 2 ; parameterNumber = 45 ; } +#Lake cover +'cl' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } #Low vegetation cover 'cvl' = { discipline = 2 ; @@ -214,6 +220,12 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Montgomery potential +'mont' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + } #Downward UV radiation at the surface 'uvb' = { discipline = 0 ; @@ -310,6 +322,24 @@ parameterCategory = 3 ; parameterNumber = 18 ; } +#Anisotropy of sub-gridscale orography +'isor' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 24 ; + } +#Angle of sub-gridscale orography +'anor' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 21 ; + } +#Slope of sub-gridscale orography +'slor' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + } #Surface short-wave (solar) radiation downwards 'ssrd' = { discipline = 0 ; @@ -7905,6 +7935,18 @@ scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; } +#U-component surface stokes drift +'ust' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + } +#V-component surface stokes drift +'vst' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + } #100 metre U wind component 'u100' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index edb9d4e48..03adf0e13 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -115,12 +115,6 @@ parameterCategory = 128 ; parameterNumber = 25 ; } -#Lake cover -'cl' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 26 ; - } #Snow albedo 'asn' = { localTablesVersion = 1 ; @@ -224,12 +218,6 @@ typeOfStatisticalProcessing = 3 ; lengthOfTimeRange = 24 ; } -#Montgomery potential -'mont' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 53 ; - } #Mean temperature at 2 metres in the last 24 hours 'mean2t24' = { discipline = 192 ; @@ -673,24 +661,6 @@ parameterCategory = 128 ; parameterNumber = 160 ; } -#Anisotropy of sub-gridscale orography -'isor' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 161 ; - } -#Angle of sub-gridscale orography -'anor' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 162 ; - } -#Slope of sub-gridscale orography -'slor' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 163 ; - } #Total cloud cover 'tcc' = { localTablesVersion = 1 ; @@ -21820,18 +21790,6 @@ parameterCategory = 234 ; parameterNumber = 228 ; } -#U-component stokes drift -'ust' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 215 ; - } -#V-component stokes drift -'vst' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 216 ; - } #Wildfire radiative power maximum 'maxfrpfire' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def index edf784bdc..f7bcee7d1 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def @@ -1183,3 +1183,45 @@ parameterCategory = 140 ; parameterNumber = 253 ; } +#Montgomery stream Function +'mntsf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 53 ; +} +#Water fraction +'fldfrc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; +} +#Anisotropy of sub-gridscale orography +'isor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 161 ; +} +#Angle of sub-gridscale orography +'anor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 162 ; +} +#Slope of sub-gridscale orography +'slor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 163 ; +} +#U-component surface stokes drift +'ust' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 215 ; +} +#V-component surface stokes drift +'vst' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 216 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index f969f0c90..754be2298 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -115,12 +115,6 @@ parameterCategory = 128 ; parameterNumber = 25 ; } -#Lake cover -'Lake cover' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 26 ; - } #Snow albedo 'Snow albedo' = { localTablesVersion = 1 ; @@ -224,12 +218,6 @@ typeOfStatisticalProcessing = 3 ; lengthOfTimeRange = 24 ; } -#Montgomery potential -'Montgomery potential' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 53 ; - } #Mean temperature at 2 metres in the last 24 hours 'Mean temperature at 2 metres in the last 24 hours' = { discipline = 192 ; @@ -673,24 +661,6 @@ parameterCategory = 128 ; parameterNumber = 160 ; } -#Anisotropy of sub-gridscale orography -'Anisotropy of sub-gridscale orography' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 161 ; - } -#Angle of sub-gridscale orography -'Angle of sub-gridscale orography' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 162 ; - } -#Slope of sub-gridscale orography -'Slope of sub-gridscale orography' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 163 ; - } #Total cloud cover 'Total cloud cover' = { localTablesVersion = 1 ; @@ -21820,18 +21790,6 @@ parameterCategory = 234 ; parameterNumber = 228 ; } -#U-component stokes drift -'U-component stokes drift' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 215 ; - } -#V-component stokes drift -'V-component stokes drift' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 216 ; - } #Wildfire radiative power maximum 'Wildfire radiative power maximum' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/name.legacy.def b/definitions/grib2/localConcepts/ecmf/name.legacy.def index b18fd8905..a57bbf939 100644 --- a/definitions/grib2/localConcepts/ecmf/name.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/name.legacy.def @@ -1183,3 +1183,45 @@ parameterCategory = 140 ; parameterNumber = 253 ; } +#Montgomery stream Function +'Montgomery stream Function' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 53 ; +} +#Water fraction +'Water fraction' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; +} +#Anisotropy of sub-gridscale orography +'Anisotropy of sub-gridscale orography' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 161 ; +} +#Angle of sub-gridscale orography +'Angle of sub-gridscale orography' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 162 ; +} +#Slope of sub-gridscale orography +'Slope of sub-gridscale orography' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 163 ; +} +#U-component surface stokes drift +'U-component surface stokes drift' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 215 ; +} +#V-component surface stokes drift +'V-component surface stokes drift' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 216 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index 5736d447a..358d9a58e 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -115,12 +115,6 @@ parameterCategory = 128 ; parameterNumber = 25 ; } -#Lake cover -'26' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 26 ; - } #Snow albedo '32' = { localTablesVersion = 1 ; @@ -224,12 +218,6 @@ typeOfStatisticalProcessing = 3 ; lengthOfTimeRange = 24 ; } -#Montgomery potential -'53' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 53 ; - } #Mean temperature at 2 metres in the last 24 hours '55' = { discipline = 192 ; @@ -673,24 +661,6 @@ parameterCategory = 128 ; parameterNumber = 160 ; } -#Anisotropy of sub-gridscale orography -'161' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 161 ; - } -#Angle of sub-gridscale orography -'162' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 162 ; - } -#Slope of sub-gridscale orography -'163' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 163 ; - } #Total cloud cover '164' = { localTablesVersion = 1 ; @@ -21820,18 +21790,6 @@ parameterCategory = 234 ; parameterNumber = 228 ; } -#U-component stokes drift -'140215' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 215 ; - } -#V-component stokes drift -'140216' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 216 ; - } #Wildfire radiative power maximum '210101' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def index 8b8386cb1..598fa6dea 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def @@ -1183,3 +1183,45 @@ parameterCategory = 140 ; parameterNumber = 253 ; } +#Montgomery stream Function +'53' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 53 ; +} +#Water fraction +'26' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; +} +#Anisotropy of sub-gridscale orography +'161' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 161 ; +} +#Angle of sub-gridscale orography +'162' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 162 ; +} +#Slope of sub-gridscale orography +'163' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 163 ; +} +#U-component surface stokes drift +'140215' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 215 ; +} +#V-component surface stokes drift +'140216' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 216 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index 844dc0b19..46e086f46 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -115,12 +115,6 @@ parameterCategory = 128 ; parameterNumber = 25 ; } -#Lake cover -'cl' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 26 ; - } #Snow albedo 'asn' = { localTablesVersion = 1 ; @@ -224,12 +218,6 @@ typeOfStatisticalProcessing = 3 ; lengthOfTimeRange = 24 ; } -#Montgomery potential -'mont' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 53 ; - } #Mean temperature at 2 metres in the last 24 hours 'mean2t24' = { discipline = 192 ; @@ -673,24 +661,6 @@ parameterCategory = 128 ; parameterNumber = 160 ; } -#Anisotropy of sub-gridscale orography -'isor' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 161 ; - } -#Angle of sub-gridscale orography -'anor' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 162 ; - } -#Slope of sub-gridscale orography -'slor' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 163 ; - } #Total cloud cover 'tcc' = { localTablesVersion = 1 ; @@ -21820,18 +21790,6 @@ parameterCategory = 234 ; parameterNumber = 228 ; } -#U-component stokes drift -'ust' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 215 ; - } -#V-component stokes drift -'vst' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 216 ; - } #Wildfire radiative power maximum 'maxfrpfire' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def index 7e8351c20..a043040a0 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def @@ -1183,3 +1183,45 @@ parameterCategory = 140 ; parameterNumber = 253 ; } +#Montgomery stream Function +'mntsf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 53 ; +} +#Water fraction +'fldfrc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; +} +#Anisotropy of sub-gridscale orography +'isor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 161 ; +} +#Angle of sub-gridscale orography +'anor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 162 ; +} +#Slope of sub-gridscale orography +'slor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 163 ; +} +#U-component surface stokes drift +'ust' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 215 ; +} +#V-component surface stokes drift +'vst' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 216 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index cc40b138b..5a9877f33 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -115,12 +115,6 @@ parameterCategory = 128 ; parameterNumber = 25 ; } -#Lake cover -'(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 26 ; - } #Snow albedo '(0 - 1)' = { localTablesVersion = 1 ; @@ -224,12 +218,6 @@ typeOfStatisticalProcessing = 3 ; lengthOfTimeRange = 24 ; } -#Montgomery potential -'m**2 s**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 53 ; - } #Mean temperature at 2 metres in the last 24 hours 'K' = { discipline = 192 ; @@ -668,29 +656,11 @@ parameterNumber = 158 ; } #Standard deviation of orography -'m' = { +'Numeric' = { discipline = 192 ; parameterCategory = 128 ; parameterNumber = 160 ; } -#Anisotropy of sub-gridscale orography -'~' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 161 ; - } -#Angle of sub-gridscale orography -'radians' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 162 ; - } -#Slope of sub-gridscale orography -'~' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 163 ; - } #Total cloud cover '(0 - 1)' = { localTablesVersion = 1 ; @@ -21820,18 +21790,6 @@ parameterCategory = 234 ; parameterNumber = 228 ; } -#U-component stokes drift -'m s**-1' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 215 ; - } -#V-component stokes drift -'m s**-1' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 216 ; - } #Wildfire radiative power maximum 'W' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/units.legacy.def b/definitions/grib2/localConcepts/ecmf/units.legacy.def index 6193f580a..74e470e08 100644 --- a/definitions/grib2/localConcepts/ecmf/units.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/units.legacy.def @@ -1183,3 +1183,45 @@ parameterCategory = 140 ; parameterNumber = 253 ; } +#Montgomery stream Function +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 53 ; +} +#Water fraction +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; +} +#Anisotropy of sub-gridscale orography +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 161 ; +} +#Angle of sub-gridscale orography +'radians' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 162 ; +} +#Slope of sub-gridscale orography +'Numeric' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 163 ; +} +#U-component surface stokes drift +'m s**-1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 215 ; +} +#V-component surface stokes drift +'m s**-1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 216 ; +} diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index d1607e841..cfdf6707b 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -139,6 +139,12 @@ parameterCategory = 2 ; parameterNumber = 45 ; } +#Lake cover +'Lake cover' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } #Low vegetation cover 'Low vegetation cover' = { discipline = 2 ; @@ -214,6 +220,12 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Montgomery potential +'Montgomery potential' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + } #Downward UV radiation at the surface 'Downward UV radiation at the surface' = { discipline = 0 ; @@ -310,6 +322,24 @@ parameterCategory = 3 ; parameterNumber = 18 ; } +#Anisotropy of sub-gridscale orography +'Anisotropy of sub-gridscale orography' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 24 ; + } +#Angle of sub-gridscale orography +'Angle of sub-gridscale orography' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 21 ; + } +#Slope of sub-gridscale orography +'Slope of sub-gridscale orography' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + } #Surface short-wave (solar) radiation downwards 'Surface short-wave (solar) radiation downwards' = { discipline = 0 ; @@ -7905,6 +7935,18 @@ scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; } +#U-component surface stokes drift +'U-component surface stokes drift' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + } +#V-component surface stokes drift +'V-component surface stokes drift' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + } #100 metre U wind component '100 metre U wind component' = { discipline = 0 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 85ef8f95b..ac9c17e8f 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -139,6 +139,12 @@ parameterCategory = 2 ; parameterNumber = 45 ; } +#Lake cover +'26' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } #Low vegetation cover '27' = { discipline = 2 ; @@ -214,6 +220,12 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Montgomery potential +'53' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + } #Downward UV radiation at the surface '57' = { discipline = 0 ; @@ -310,6 +322,24 @@ parameterCategory = 3 ; parameterNumber = 18 ; } +#Anisotropy of sub-gridscale orography +'161' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 24 ; + } +#Angle of sub-gridscale orography +'162' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 21 ; + } +#Slope of sub-gridscale orography +'163' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + } #Surface short-wave (solar) radiation downwards '169' = { discipline = 0 ; @@ -7905,6 +7935,18 @@ scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; } +#U-component surface stokes drift +'140215' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + } +#V-component surface stokes drift +'140216' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + } #100 metre U wind component '228246' = { discipline = 0 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 8e78383fe..e68343995 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -139,6 +139,12 @@ parameterCategory = 2 ; parameterNumber = 45 ; } +#Lake cover +'cl' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } #Low vegetation cover 'cvl' = { discipline = 2 ; @@ -214,6 +220,12 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Montgomery potential +'mont' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + } #Downward UV radiation at the surface 'uvb' = { discipline = 0 ; @@ -310,6 +322,24 @@ parameterCategory = 3 ; parameterNumber = 18 ; } +#Anisotropy of sub-gridscale orography +'isor' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 24 ; + } +#Angle of sub-gridscale orography +'anor' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 21 ; + } +#Slope of sub-gridscale orography +'slor' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + } #Surface short-wave (solar) radiation downwards 'ssrd' = { discipline = 0 ; @@ -7905,6 +7935,18 @@ scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; } +#U-component surface stokes drift +'ust' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + } +#V-component surface stokes drift +'vst' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + } #100 metre U wind component '100u' = { discipline = 0 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 5cf327ec5..c85fe2d77 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -139,6 +139,12 @@ parameterCategory = 2 ; parameterNumber = 45 ; } +#Lake cover +'(0 - 1)' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } #Low vegetation cover '(0 - 1)' = { discipline = 2 ; @@ -214,6 +220,12 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Montgomery potential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + } #Downward UV radiation at the surface 'J m**-2' = { discipline = 0 ; @@ -310,6 +322,24 @@ parameterCategory = 3 ; parameterNumber = 18 ; } +#Anisotropy of sub-gridscale orography +'~' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 24 ; + } +#Angle of sub-gridscale orography +'radians' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 21 ; + } +#Slope of sub-gridscale orography +'Numeric' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + } #Surface short-wave (solar) radiation downwards 'J m**-2' = { discipline = 0 ; @@ -7905,6 +7935,18 @@ scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; } +#U-component surface stokes drift +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + } +#V-component surface stokes drift +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + } #100 metre U wind component 'm s**-1' = { discipline = 0 ; From feb3bf181d91790c9a556d136a8156998e266068 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 7 Aug 2023 15:25:31 +0000 Subject: [PATCH 112/372] ECC-1659: GRIB2: Update encodings with 192 discipline --- definitions/grib1/localConcepts/ecmf/units.def | 4 ++-- definitions/grib2/localConcepts/ecmf/units.def | 2 +- definitions/grib2/units.def | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/definitions/grib1/localConcepts/ecmf/units.def b/definitions/grib1/localConcepts/ecmf/units.def index 3d335fe0e..332d39fc1 100644 --- a/definitions/grib1/localConcepts/ecmf/units.def +++ b/definitions/grib1/localConcepts/ecmf/units.def @@ -1170,12 +1170,12 @@ indicatorOfParameter = 159 ; } #Standard deviation of orography -'Numeric' = { +'~' = { table2Version = 128 ; indicatorOfParameter = 160 ; } #Anisotropy of sub-gridscale orography -'~' = { +'Numeric' = { table2Version = 128 ; indicatorOfParameter = 161 ; } diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index 5a9877f33..1fc67eeb8 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -656,7 +656,7 @@ parameterNumber = 158 ; } #Standard deviation of orography -'Numeric' = { +'~' = { discipline = 192 ; parameterCategory = 128 ; parameterNumber = 160 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index c85fe2d77..b39e3a33d 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -323,7 +323,7 @@ parameterNumber = 18 ; } #Anisotropy of sub-gridscale orography -'~' = { +'Numeric' = { discipline = 0 ; parameterCategory = 3 ; parameterNumber = 24 ; From 28ece2bbdb963a937ddd36958049f05f2110fa12 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 7 Aug 2023 16:04:22 +0000 Subject: [PATCH 113/372] Definitions: Revert mistake re units of 160 --- definitions/grib1/localConcepts/ecmf/units.def | 2 +- definitions/grib2/localConcepts/ecmf/units.def | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/definitions/grib1/localConcepts/ecmf/units.def b/definitions/grib1/localConcepts/ecmf/units.def index 332d39fc1..f34142102 100644 --- a/definitions/grib1/localConcepts/ecmf/units.def +++ b/definitions/grib1/localConcepts/ecmf/units.def @@ -1170,7 +1170,7 @@ indicatorOfParameter = 159 ; } #Standard deviation of orography -'~' = { +'m' = { table2Version = 128 ; indicatorOfParameter = 160 ; } diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index 1fc67eeb8..a0227627d 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -656,7 +656,7 @@ parameterNumber = 158 ; } #Standard deviation of orography -'~' = { +'m' = { discipline = 192 ; parameterCategory = 128 ; parameterNumber = 160 ; From 1a9b2f87e81534d79b729f12314d0daa21dcdead Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 8 Aug 2023 10:41:36 +0100 Subject: [PATCH 114/372] Tools: Test for error conditions --- tests/grib_set.sh | 12 +++++++++++- tools/grib_set.cc | 32 ++++++++++++++++---------------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/tests/grib_set.sh b/tests/grib_set.sh index 4268158dd..45ddc4fb0 100755 --- a/tests/grib_set.sh +++ b/tests/grib_set.sh @@ -50,10 +50,20 @@ centre=`${tools_dir}/grib_get -p centre:l $outfile` # Set without -s. Expected to fail # ---------------------------------------------------- set +e -${tools_dir}/grib_set -p levtype $infile $outfile 2> $REDIRECT > $REDIRECT +${tools_dir}/grib_set -p levtype $infile $outfile > $temp 2>&1 status=$? set -e [ $status -ne 0 ] +grep -q "provide some keys to set" $temp + +# Set with empty -s. Expected to fail +# ---------------------------------------------------- +set +e +${tools_dir}/grib_set -s '' $infile $outfile > $temp 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "provide some keys to set" $temp # Out-of-bounds value. Expected to fail # ---------------------------------------------------- diff --git a/tools/grib_set.cc b/tools/grib_set.cc index a8e562a21..bf0697a8b 100644 --- a/tools/grib_set.cc +++ b/tools/grib_set.cc @@ -65,28 +65,28 @@ int grib_tool_before_getopt(grib_runtime_options* options) int grib_tool_init(grib_runtime_options* options) { if (options->set_values_count == 0 && !options->repack && !options->constant) { - printf("ERROR: please provide some keys to set through the -s option or use the -r/-d options\n"); + fprintf(stderr, "ERROR: Please provide some keys to set through the -s option or use the -r/-d options\n"); exit(1); } if (options->verbose) options->print_header = 1; - /*if (grib_options_on("n:")) { - noise=atof(grib_options_get_option("n:")); - options->repack=1; - }*/ + // if (grib_options_on("n:")) { + // noise=atof(grib_options_get_option("n:")); + // options->repack=1; + // } - if (grib_options_on("n:") && grib_options_on("d:")) { - printf("Error: -n and -d options are incompatible. Choose one of the two please.\n"); - exit(1); - } + // if (grib_options_on("n:") && grib_options_on("d:")) { + // fprintf(stderr, "Error: -n and -d options are incompatible. Choose one of the two please.\n"); + // exit(1); + // } -// if (options->outfile && options->outfile->name) { -// options->outfile->file = fopen(options->outfile->name,"w"); -// if(!options->outfile->file) { -// perror(options->outfile->name); -// exit(1); -// } -// } + // if (options->outfile && options->outfile->name) { + // options->outfile->file = fopen(options->outfile->name,"w"); + // if(!options->outfile->file) { + // perror(options->outfile->name); + // exit(1); + // } + // } return 0; } From 44cb31cfd1c1b64cbb3a702b2d9f2e05a1e94c3d Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 8 Aug 2023 13:16:05 +0100 Subject: [PATCH 115/372] Tools: Test for error conditions --- tests/grib_ls.sh | 11 +++++++++++ tools/grib_tools.cc | 3 +-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/tests/grib_ls.sh b/tests/grib_ls.sh index b9a3d7b4b..29ede3bcf 100755 --- a/tests/grib_ls.sh +++ b/tests/grib_ls.sh @@ -191,5 +191,16 @@ set -e [ $status -ne 0 ] grep -q "Invalid type for key=shortName" $tempText +# Do list after an offset +file=tigge_pf_ecmwf.grib2 +${tools_dir}/grib_ls -X 62414 $file +set +e +${tools_dir}/grib_ls -X -1 $file > $tempText 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Invalid file offset" $tempText + + # Clean up rm -f $temp1 $temp2 $tempText $tempLog diff --git a/tools/grib_tools.cc b/tools/grib_tools.cc index 8b6becee7..51e918ec4 100644 --- a/tools/grib_tools.cc +++ b/tools/grib_tools.cc @@ -343,8 +343,7 @@ static int grib_tool_without_orderby(grib_runtime_options* options) #endif err = fseeko(infile->file, options->infile_offset, SEEK_SET); if (err) { - /*fprintf(stderr, "Invalid file offset: %ld\n", options->infile_offset);*/ - perror("Invalid file offset"); + fprintf(stderr, "%s: Invalid file offset: %lld\n", tool_name, options->infile_offset); exit(1); } } From 59ad1d156f489f22a29bba9a99840fe64f071a15 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 8 Aug 2023 14:01:40 +0000 Subject: [PATCH 116/372] ECC-1659: Revert parameter 26 change (clashes with 240016) --- definitions/grib2/cfVarName.def | 6 ------ definitions/grib2/localConcepts/ecmf/cfVarName.def | 6 ++++++ definitions/grib2/localConcepts/ecmf/name.def | 6 ++++++ definitions/grib2/localConcepts/ecmf/paramId.def | 6 ++++++ definitions/grib2/localConcepts/ecmf/shortName.def | 6 ++++++ definitions/grib2/localConcepts/ecmf/units.def | 6 ++++++ definitions/grib2/name.def | 6 ------ definitions/grib2/paramId.def | 6 ------ definitions/grib2/shortName.def | 6 ------ definitions/grib2/units.def | 6 ------ 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index aa3d59ee7..93f415a1a 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -139,12 +139,6 @@ parameterCategory = 2 ; parameterNumber = 45 ; } -#Lake cover -'cl' = { - discipline = 1 ; - parameterCategory = 2 ; - parameterNumber = 2 ; - } #Low vegetation cover 'cvl' = { discipline = 2 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index 03adf0e13..50d38a32b 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -115,6 +115,12 @@ parameterCategory = 128 ; parameterNumber = 25 ; } +#Lake cover +'cl' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; + } #Snow albedo 'asn' = { localTablesVersion = 1 ; diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index 754be2298..9aaaccc21 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -115,6 +115,12 @@ parameterCategory = 128 ; parameterNumber = 25 ; } +#Lake cover +'Lake cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; + } #Snow albedo 'Snow albedo' = { localTablesVersion = 1 ; diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index 358d9a58e..b333b780c 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -115,6 +115,12 @@ parameterCategory = 128 ; parameterNumber = 25 ; } +#Lake cover +'26' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; + } #Snow albedo '32' = { localTablesVersion = 1 ; diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index 46e086f46..08c773a66 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -115,6 +115,12 @@ parameterCategory = 128 ; parameterNumber = 25 ; } +#Lake cover +'cl' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; + } #Snow albedo 'asn' = { localTablesVersion = 1 ; diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index a0227627d..a36fc4dca 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -115,6 +115,12 @@ parameterCategory = 128 ; parameterNumber = 25 ; } +#Lake cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; + } #Snow albedo '(0 - 1)' = { localTablesVersion = 1 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index cfdf6707b..b3b411c06 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -139,12 +139,6 @@ parameterCategory = 2 ; parameterNumber = 45 ; } -#Lake cover -'Lake cover' = { - discipline = 1 ; - parameterCategory = 2 ; - parameterNumber = 2 ; - } #Low vegetation cover 'Low vegetation cover' = { discipline = 2 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index ac9c17e8f..9de929cc1 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -139,12 +139,6 @@ parameterCategory = 2 ; parameterNumber = 45 ; } -#Lake cover -'26' = { - discipline = 1 ; - parameterCategory = 2 ; - parameterNumber = 2 ; - } #Low vegetation cover '27' = { discipline = 2 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index e68343995..0ff4d6085 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -139,12 +139,6 @@ parameterCategory = 2 ; parameterNumber = 45 ; } -#Lake cover -'cl' = { - discipline = 1 ; - parameterCategory = 2 ; - parameterNumber = 2 ; - } #Low vegetation cover 'cvl' = { discipline = 2 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index b39e3a33d..37aba4c60 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -139,12 +139,6 @@ parameterCategory = 2 ; parameterNumber = 45 ; } -#Lake cover -'(0 - 1)' = { - discipline = 1 ; - parameterCategory = 2 ; - parameterNumber = 2 ; - } #Low vegetation cover '(0 - 1)' = { discipline = 2 ; From 8889b5229db79bc88f575057b60976ffb8d16d60 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 8 Aug 2023 14:02:11 +0000 Subject: [PATCH 117/372] Tools: Fix format error --- tools/grib_tools.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/grib_tools.cc b/tools/grib_tools.cc index 51e918ec4..3eff69efd 100644 --- a/tools/grib_tools.cc +++ b/tools/grib_tools.cc @@ -343,7 +343,7 @@ static int grib_tool_without_orderby(grib_runtime_options* options) #endif err = fseeko(infile->file, options->infile_offset, SEEK_SET); if (err) { - fprintf(stderr, "%s: Invalid file offset: %lld\n", tool_name, options->infile_offset); + fprintf(stderr, "%s: Invalid file offset: %ld\n", tool_name, (long)options->infile_offset); exit(1); } } From d8c17620bb727eeb48ffe5495654f126fb9d15a7 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 8 Aug 2023 17:31:22 +0100 Subject: [PATCH 118/372] Tools: Error messages --- tools/grib_get.cc | 4 ++-- tools/grib_ls.cc | 8 ++++---- tools/grib_set.cc | 4 ++-- tools/grib_tools.cc | 14 +++++++------- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tools/grib_get.cc b/tools/grib_get.cc index 4d5040bfa..12acb78da 100644 --- a/tools/grib_get.cc +++ b/tools/grib_get.cc @@ -76,7 +76,7 @@ int grib_tool_init(grib_runtime_options* options) if (options->latlon) { lat = strtod(options->latlon, &theEnd); if (*theEnd != ',') { - fprintf(stderr, "Error %s: wrong latitude value. Please use 'latitude,longitude'\n", tool_name); + fprintf(stderr, "%s: Wrong latitude value. Please use 'latitude,longitude'\n", tool_name); exit(1); } lon = strtod(++theEnd, &end1); @@ -96,7 +96,7 @@ int grib_tool_init(grib_runtime_options* options) options->latlon_mode = 1; } else { - fprintf(stderr, "Error %s: wrong mode given in option -l\n", tool_name); + fprintf(stderr, "%s: Wrong mode given for the '-l' option (Please use 1 or 4)\n", tool_name); exit(1); } } diff --git a/tools/grib_ls.cc b/tools/grib_ls.cc index 4482370c9..0193b3e17 100644 --- a/tools/grib_ls.cc +++ b/tools/grib_ls.cc @@ -97,7 +97,7 @@ int grib_tool_init(grib_runtime_options* options) if (options->latlon) { lat = strtod(options->latlon, &theEnd); if (*theEnd != ',') { - fprintf(stderr, "Error %s: wrong latitude value. Please use 'latitude,longitude'\n", tool_name); + fprintf(stderr, "%s: Wrong latitude value. Please use 'latitude,longitude'\n", tool_name); exit(1); } lon = strtod(++theEnd, &end1); @@ -117,7 +117,7 @@ int grib_tool_init(grib_runtime_options* options) options->latlon_mode = 1; } else { - fprintf(stderr, "Error %s: wrong mode given in option -l\n", tool_name); + fprintf(stderr, "%s: Wrong mode given for the '-l' option (Please use 1 or 4)\n", tool_name); exit(1); } } @@ -286,9 +286,9 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) size_t g_len = sizeof(grid_desc); err1 = grib_get_string(h, "gridDefinitionDescription", grid_desc, &g_len); if (!err1) { - fprintf(stderr, "Nearest neighbour functionality is not supported for grid: %s\n", grid_desc); + fprintf(stderr, "%s: Nearest neighbour functionality is not supported for grid: %s\n", tool_name, grid_desc); } else { - fprintf(stderr, "Nearest neighbour functionality is not supported for this grid type\n"); + fprintf(stderr, "%s: Nearest neighbour functionality is not supported for this grid type\n", tool_name); } } GRIB_CHECK_NOLINE(err, 0); diff --git a/tools/grib_set.cc b/tools/grib_set.cc index bf0697a8b..4e47264c6 100644 --- a/tools/grib_set.cc +++ b/tools/grib_set.cc @@ -65,7 +65,7 @@ int grib_tool_before_getopt(grib_runtime_options* options) int grib_tool_init(grib_runtime_options* options) { if (options->set_values_count == 0 && !options->repack && !options->constant) { - fprintf(stderr, "ERROR: Please provide some keys to set through the -s option or use the -r/-d options\n"); + fprintf(stderr, "%s: Please provide some keys to set through the -s option or use the -r/-d options\n", tool_name); exit(1); } if (options->verbose) @@ -114,7 +114,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) v = (double*)calloc(size, sizeof(double)); if (!v) { - fprintf(stderr, "failed to allocate %d bytes\n", (int)(size * sizeof(double))); + fprintf(stderr, "%s: Failed to allocate %zu bytes\n", tool_name, size * sizeof(double)); exit(1); } diff --git a/tools/grib_tools.cc b/tools/grib_tools.cc index 3eff69efd..faa2ca00f 100644 --- a/tools/grib_tools.cc +++ b/tools/grib_tools.cc @@ -296,7 +296,7 @@ static int grib_tool_with_orderby(grib_runtime_options* options) grib_handle_delete(h); } - if (set->size==0) fprintf(stderr, "No messages found in fieldset\n"); + if (set->size==0) fprintf(stderr, "%s: No messages found in fieldset\n", tool_name); grib_tool_finalise_action(options); grib_fieldset_delete(set); @@ -417,7 +417,7 @@ static int grib_tool_without_orderby(grib_runtime_options* options) fclose(infile->file); if (infile->handle_count == 0) { - fprintf(stderr, "no messages found in %s\n", infile->name); + fprintf(stderr, "%s: No messages found in %s\n", tool_name, infile->name); if (options->fail) exit(1); } @@ -735,7 +735,7 @@ static void grib_tools_set_print_keys(grib_runtime_options* options, grib_handle if (ns) { kiter = grib_keys_iterator_new(h, 0, ns); if (!kiter) { - fprintf(stderr, "ERROR: Unable to create keys iterator\n"); + fprintf(stderr, "%s: Unable to create keys iterator\n", tool_name); exit(1); } @@ -743,8 +743,8 @@ static void grib_tools_set_print_keys(grib_runtime_options* options, grib_handle const char* name = grib_keys_iterator_get_name(kiter); if (options->print_keys_count >= MAX_KEYS) { - fprintf(stderr, "ERROR: keys list too long (more than %d keys)\n", - options->print_keys_count); + fprintf(stderr, "%s: Keys list too long (more than %d keys)\n", + tool_name, options->print_keys_count); exit(1); } if (options->print_keys[options->print_keys_count].name) { @@ -1273,8 +1273,8 @@ void grib_print_key_values(grib_runtime_options* options, grib_handle* h) the_index = options->index; if (the_index >= size) { fprintf(dump_file, "\n"); - fprintf(stderr, "ERROR: Invalid index value %d (should be between 0 and %d)\n", - options->index, (int)(size - 1)); + fprintf(stderr, "%s: Invalid index value %d (should be between 0 and %d)\n", + tool_name, options->index, (int)(size - 1)); exit(1); } v = values[options->index]; From 4aec267301eb7e0a48c41d2bcade6d904d70f963 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 8 Aug 2023 17:43:47 +0100 Subject: [PATCH 119/372] Nearest: Refactoring --- src/eccodes_prototypes.h | 2 +- src/grib_nearest.cc | 9 --------- src/grib_nearest_class_lambert_azimuthal_equal_area.cc | 2 -- src/grib_nearest_class_lambert_conformal.cc | 2 -- src/grib_nearest_class_latlon_reduced.cc | 2 -- src/grib_nearest_class_mercator.cc | 2 -- src/grib_nearest_class_polar_stereographic.cc | 2 -- src/grib_nearest_class_reduced.cc | 2 -- src/grib_nearest_class_space_view.cc | 2 -- 9 files changed, 1 insertion(+), 24 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index ab7137890..8c0ca3504 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -1330,7 +1330,7 @@ int grib_nearest_get_radius(grib_handle* h, double* radiusInKm); void grib_binary_search(const double xx[], const size_t n, double x, size_t* ju, size_t* jl); int grib_nearest_find_multiple(const grib_handle* h, int is_lsm, const double* inlats, const double* inlons, long npoints, double* outlats, double* outlons, double* values, double* distances, int* indexes); int grib_nearest_find_generic(grib_nearest* nearest, grib_handle* h, double inlat, double inlon, unsigned long flags, - const char* values_keyname, const char* Ni_keyname, const char* Nj_keyname, + const char* values_keyname, double** out_lats, int* out_lats_count, double** out_lons, diff --git a/src/grib_nearest.cc b/src/grib_nearest.cc index feb895267..1367daaf3 100644 --- a/src/grib_nearest.cc +++ b/src/grib_nearest.cc @@ -295,8 +295,6 @@ int grib_nearest_find_generic( double inlat, double inlon, unsigned long flags, const char* values_keyname, - const char* Ni_keyname, - const char* Nj_keyname, double** out_lats, int* out_lats_count, double** out_lons, @@ -343,13 +341,6 @@ int grib_nearest_find_generic( double lat1 = 0, lat2 = 0; /* inlat will be between these */ const double LAT_DELTA = 10.0; /* in degrees */ - /* Note: If this is being called for a REDUCED grid, its Ni will be missing */ - - if (grib_is_missing(h, Nj_keyname, &ret)) { - grib_context_log(h->context, GRIB_LOG_DEBUG, "Key '%s' is missing", Nj_keyname); - return ret ? ret : GRIB_GEOCALCULUS_PROBLEM; - } - *out_lons_count = nvalues; /* Maybe overestimate but safe */ *out_lats_count = nvalues; diff --git a/src/grib_nearest_class_lambert_azimuthal_equal_area.cc b/src/grib_nearest_class_lambert_azimuthal_equal_area.cc index fb193d915..911827ffd 100644 --- a/src/grib_nearest_class_lambert_azimuthal_equal_area.cc +++ b/src/grib_nearest_class_lambert_azimuthal_equal_area.cc @@ -109,8 +109,6 @@ static int find(grib_nearest* nearest, grib_handle* h, nearest, h, inlat, inlon, flags, /* inputs */ self->values_key, /* outputs to set the 'self' object */ - self->Ni, - self->Nj, &(self->lats), &(self->lats_count), &(self->lons), diff --git a/src/grib_nearest_class_lambert_conformal.cc b/src/grib_nearest_class_lambert_conformal.cc index 7a538b8d1..883f3a868 100644 --- a/src/grib_nearest_class_lambert_conformal.cc +++ b/src/grib_nearest_class_lambert_conformal.cc @@ -109,8 +109,6 @@ static int find(grib_nearest* nearest, grib_handle* h, nearest, h, inlat, inlon, flags, /* inputs */ self->values_key, /* outputs to set the 'self' object */ - self->Ni, - self->Nj, &(self->lats), &(self->lats_count), &(self->lons), diff --git a/src/grib_nearest_class_latlon_reduced.cc b/src/grib_nearest_class_latlon_reduced.cc index 9262723c6..992b29f2e 100644 --- a/src/grib_nearest_class_latlon_reduced.cc +++ b/src/grib_nearest_class_latlon_reduced.cc @@ -142,8 +142,6 @@ static int find(grib_nearest* nearest, grib_handle* h, err = grib_nearest_find_generic( nearest, h, inlat, inlon, flags, self->values_key, - "Ni", - self->Nj, &(self->lats), &(self->lats_count), &(self->lons), diff --git a/src/grib_nearest_class_mercator.cc b/src/grib_nearest_class_mercator.cc index 62fdd60d6..c966012d4 100644 --- a/src/grib_nearest_class_mercator.cc +++ b/src/grib_nearest_class_mercator.cc @@ -111,8 +111,6 @@ static int find(grib_nearest* nearest, grib_handle* h, nearest, h, inlat, inlon, flags, /* inputs */ self->values_key, /* outputs to set the 'self' object */ - self->Ni, - self->Nj, &(self->lats), &(self->lats_count), &(self->lons), diff --git a/src/grib_nearest_class_polar_stereographic.cc b/src/grib_nearest_class_polar_stereographic.cc index f07e6a3e4..a160db445 100644 --- a/src/grib_nearest_class_polar_stereographic.cc +++ b/src/grib_nearest_class_polar_stereographic.cc @@ -109,8 +109,6 @@ static int find(grib_nearest* nearest, grib_handle* h, nearest, h, inlat, inlon, flags, /* inputs */ self->values_key, /* outputs to set the 'self' object */ - self->Ni, - self->Nj, &(self->lats), &(self->lats_count), &(self->lons), diff --git a/src/grib_nearest_class_reduced.cc b/src/grib_nearest_class_reduced.cc index 9556149c9..603c1a441 100644 --- a/src/grib_nearest_class_reduced.cc +++ b/src/grib_nearest_class_reduced.cc @@ -169,8 +169,6 @@ static int find(grib_nearest* nearest, grib_handle* h, err = grib_nearest_find_generic( nearest, h, inlat, inlon, flags, self->values_key, - "Ni", - self->Nj, &(self->lats), &(self->lats_count), &(self->lons), diff --git a/src/grib_nearest_class_space_view.cc b/src/grib_nearest_class_space_view.cc index e698498f5..8d471b8fa 100644 --- a/src/grib_nearest_class_space_view.cc +++ b/src/grib_nearest_class_space_view.cc @@ -109,8 +109,6 @@ static int find(grib_nearest* nearest, grib_handle* h, nearest, h, inlat, inlon, flags, /* inputs */ self->values_key, /* outputs to set the 'self' object */ - self->Ni, - self->Nj, &(self->lats), &(self->lats_count), &(self->lons), From 7e882a34c4d55c128079a6e0e80107dd8167bb74 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 8 Aug 2023 19:49:28 +0100 Subject: [PATCH 120/372] Tools: Error messages --- tools/bufr_compare.cc | 10 +++++----- tools/bufr_dump.cc | 28 ++++++++++++++-------------- tools/bufr_split_by_rdbSubtype.cc | 16 ++++++++-------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/tools/bufr_compare.cc b/tools/bufr_compare.cc index 5f56254bd..2478fd943 100644 --- a/tools/bufr_compare.cc +++ b/tools/bufr_compare.cc @@ -118,7 +118,7 @@ static void new_keys_list() grib_context* c = grib_context_get_default(); keys_list = (grib_string_list*)grib_context_malloc_clear(c, sizeof(grib_string_list)); if (!keys_list) { - fprintf(stderr, "Failed to allocate memory for keys list"); + fprintf(stderr, "%s: Failed to allocate memory for keys list", tool_name); exit(1); } } @@ -281,11 +281,11 @@ int grib_tool_init(grib_runtime_options* options) headerMode = 0; if (grib_options_on("H") && grib_options_on("c:")) { - fprintf(stderr, "Error: -H and -c options are incompatible. Choose one of the two please.\n"); + fprintf(stderr, "%s: -H and -c options are incompatible. Choose one of the two please.\n",tool_name); exit(1); } if (grib_options_on("a") && !grib_options_on("c:")) { - fprintf(stderr, "Error: -a option requires -c option. Please define a list of keys with the -c option.\n"); + fprintf(stderr, "%s: -a option requires -c option. Please define a list of keys with the -c option.\n",tool_name); exit(1); } @@ -314,8 +314,8 @@ int grib_tool_init(grib_runtime_options* options) options->idx = grib_fieldset_new_from_files(context, filename, nfiles, 0, 0, 0, orderby, &ret); if (ret) { - fprintf(stderr, "unable to create index for input file %s (%s)", - options->infile_extra->name, grib_get_error_message(ret)); + fprintf(stderr, "%s: Unable to create index for input file %s (%s)", + tool_name, options->infile_extra->name, grib_get_error_message(ret)); exit(ret); } } diff --git a/tools/bufr_dump.cc b/tools/bufr_dump.cc index e17873699..60265b085 100644 --- a/tools/bufr_dump.cc +++ b/tools/bufr_dump.cc @@ -307,7 +307,7 @@ static void bufr_dump_descriptors(grib_handle* h) GRIB_CHECK_NOLINE(grib_get_size(h, the_key, &size_desc), 0); array_descriptors = (long*)malloc(size_desc * sizeof(long)); if (!array_descriptors) { - fprintf(stderr, "%s: Memory allocation error", the_key); + fprintf(stderr, "%s: Memory allocation error. Key %s\n", tool_name, the_key); exit(GRIB_OUT_OF_MEMORY); } GRIB_CHECK_NOLINE(grib_get_long_array(h, the_key, array_descriptors, &size_desc), 0); @@ -325,7 +325,7 @@ static void bufr_dump_descriptors(grib_handle* h) GRIB_CHECK_NOLINE(grib_get_size(h, the_key, &size_abbrevs), 0); array_abbrevs = (char**)malloc(size_abbrevs * sizeof(char*)); if (!array_abbrevs) { - fprintf(stderr, "%s: Memory allocation error", the_key); + fprintf(stderr, "%s: Memory allocation error. Key %s\n", tool_name, the_key); exit(GRIB_OUT_OF_MEMORY); } GRIB_CHECK_NOLINE(grib_get_string_array(h, the_key, array_abbrevs, &size_abbrevs), 0); @@ -335,7 +335,7 @@ static void bufr_dump_descriptors(grib_handle* h) GRIB_CHECK_NOLINE(grib_get_size(h, the_key, &size_names), 0); array_names = (char**)malloc(size_names * sizeof(char*)); if (!array_names) { - fprintf(stderr, "%s: Memory allocation error", the_key); + fprintf(stderr, "%s: Memory allocation error. Key %s\n", tool_name, the_key); exit(GRIB_OUT_OF_MEMORY); } GRIB_CHECK_NOLINE(grib_get_string_array(h, the_key, array_names, &size_names), 0); @@ -345,7 +345,7 @@ static void bufr_dump_descriptors(grib_handle* h) GRIB_CHECK_NOLINE(grib_get_size(h, the_key, &size_units), 0); array_units = (char**)malloc(size_units * sizeof(char*)); if (!array_units) { - fprintf(stderr, "%s: Memory allocation error", the_key); + fprintf(stderr, "%s: Memory allocation error. Key %s\n", tool_name, the_key); exit(GRIB_OUT_OF_MEMORY); } GRIB_CHECK_NOLINE(grib_get_string_array(h, the_key, array_units, &size_units), 0); @@ -423,7 +423,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) char* str = grib_options_get_option("S:"); err = grib_get_long(h, "numberOfSubsets", &numberOfSubsets); if (err) { - fprintf(stderr, "ERROR: Failed to get numberOfSubsets.\n"); + fprintf(stderr, "%s: Failed to get numberOfSubsets.\n", tool_name); exit(1); } @@ -451,7 +451,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) } } else { - fprintf(stderr, "ERROR: -S option: Please specify a subset number > 0 and < %ld\n", numberOfSubsets + 1); + fprintf(stderr, "%s: -S option: Please specify a subset number > 0 and < %ld\n", tool_name, numberOfSubsets + 1); exit(1); } } @@ -470,8 +470,8 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) err = grib_set_long(h, "unpack", 2); if (err) { if (options->fail) { - fprintf(stderr, "ERROR: unable to unpack data section: %s (message=%d)\n", - grib_get_error_message(err), options->handle_count); + fprintf(stderr, "%s: Unable to unpack data section: %s (message=%d)\n", + tool_name, grib_get_error_message(err), options->handle_count); exit(err); } else { @@ -489,8 +489,8 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) err = grib_set_long(h, "unpack", 1); if (err) { if (options->fail) { - fprintf(stderr, "ERROR: unable to unpack data section: %s (message=%d)\n", - grib_get_error_message(err), options->handle_count); + fprintf(stderr, "%s: Unable to unpack data section: %s (message=%d)\n", + tool_name, grib_get_error_message(err), options->handle_count); exit(err); } else { @@ -505,8 +505,8 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) err = grib_set_long(h, "unpack", 1); if (err) { if (options->fail) { - fprintf(stderr, "ERROR: unable to unpack data section: %s (message=%d)\n", - grib_get_error_message(err), options->handle_count); + fprintf(stderr, "%s: Unable to unpack data section: %s (message=%d)\n", + tool_name, grib_get_error_message(err), options->handle_count); exit(err); } else { @@ -519,7 +519,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) grib_dump_content(h, stdout, options->dump_mode, options->dump_flags, 0); break; default: - printf("Unknown JSON option %s\n", json_option); + fprintf(stderr, "%s: Unknown JSON option %s\n", tool_name, json_option); exit(1); } if (!strcmp(options->dump_mode, "default")) { @@ -546,7 +546,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) err = grib_set_long(h, "unpack", 1); if (err) { if (options->fail) { - fprintf(stderr, "ERROR: unable to unpack data section: %s\n", grib_get_error_message(err)); + fprintf(stderr, "%s: unable to unpack data section: %s\n", tool_name, grib_get_error_message(err)); exit(err); } else { diff --git a/tools/bufr_split_by_rdbSubtype.cc b/tools/bufr_split_by_rdbSubtype.cc index 5f7beaf4c..2db7d7bbf 100644 --- a/tools/bufr_split_by_rdbSubtype.cc +++ b/tools/bufr_split_by_rdbSubtype.cc @@ -22,6 +22,7 @@ static int verbose = 0; static const char* OUTPUT_FILENAME_DEFAULT = "split_rdbSubtype.undef.bufr"; static const char* OUTPUT_FILENAME_SUBTYPE = "split_rdbSubtype.%ld.bufr"; +const char* tool_name = "bufr_split_by_rdbSubtype"; static void usage(const char* prog) { @@ -56,7 +57,7 @@ static int decode_rdbSubtype(const void* msg, long* rdbSubtype) edition = (long)grib_decode_unsigned_long(message, &pos_edition, nbits_edition); if (edition != 2 && edition != 3 && edition != 4) { - fprintf(stderr, "ERROR: Unsupported BUFR edition: %ld", edition); + fprintf(stderr, "%s: Unsupported BUFR edition: %ld", tool_name, edition); return GRIB_DECODING_ERROR; } section1Length = (long)grib_decode_unsigned_long(message, &pos_section1Length, nbits_section1Length); @@ -73,7 +74,7 @@ static int decode_rdbSubtype(const void* msg, long* rdbSubtype) section1Flags = (long)grib_decode_unsigned_long(message, &pos_section1Flags, nbits_section1Flags); if (section1Flags != 0 && section1Flags != 128) { - fprintf(stderr, "ERROR: Invalid BUFR section1 flags: %ld", section1Flags); + fprintf(stderr, "%s: Invalid BUFR section1 flags: %ld\n", tool_name, section1Flags); return GRIB_DECODING_ERROR; } ecmwfLocalSectionPresent = (bufrHeaderCentre == 98 && section1Flags != 0); @@ -121,7 +122,7 @@ static int split_file_by_subtype(FILE* in, const char* filename, unsigned long* long rdbSubtype = 0; int status = decode_rdbSubtype(mesg, &rdbSubtype); if (status != GRIB_SUCCESS) { - fprintf(stderr, "ERROR: Failed to decode rdbSubtype from message %lu\n", *count); + fprintf(stderr, "%s: Failed to decode rdbSubtype from message %lu\n", tool_name, *count); return status; } @@ -135,12 +136,12 @@ static int split_file_by_subtype(FILE* in, const char* filename, unsigned long* } out = fopen(ofilename, "ab"); if (!out) { - fprintf(stderr, "ERROR: Failed to open output file '%s'\n", ofilename); + fprintf(stderr, "%s: Failed to open output file '%s'\n", tool_name, ofilename); perror(ofilename); return GRIB_IO_PROBLEM; } if (fwrite(mesg, 1, size, out) != size) { - fprintf(stderr, "ERROR: Failed to append to file '%s'\n", ofilename); + fprintf(stderr, "%s: Failed to append to file '%s'\n", tool_name, ofilename); perror(ofilename); fclose(out); return GRIB_IO_PROBLEM; @@ -178,7 +179,7 @@ int main(int argc, char* argv[]) filename = argv[i]; if (path_is_directory(filename)) { - fprintf(stderr, "ERROR: %s: Is a directory\n", filename); + fprintf(stderr, "%s: %s: Is a directory\n", tool_name, filename); return 1; } infh = fopen(filename, "rb"); @@ -190,8 +191,7 @@ int main(int argc, char* argv[]) count = 0; err = split_file_by_subtype(infh, filename, &count); if (err) { - fprintf(stderr, "ERROR: Failed to split BUFR file %s", filename); - fprintf(stderr, "\n"); + fprintf(stderr, "%s: Failed to split BUFR file %s\n", tool_name, filename); status = 1; } else { From d0fd3ed254b74b0c243dfda66c81824ef999c0e8 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 9 Aug 2023 12:09:13 +0100 Subject: [PATCH 121/372] Tools: Error messages --- tools/grib_compare.cc | 8 ++++---- tools/grib_copy.cc | 2 +- tools/grib_options.cc | 2 +- tools/grib_set.cc | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tools/grib_compare.cc b/tools/grib_compare.cc index b82377dea..dbcb8ed7e 100644 --- a/tools/grib_compare.cc +++ b/tools/grib_compare.cc @@ -268,8 +268,8 @@ int grib_tool_init(grib_runtime_options* options) options->idx = grib_fieldset_new_from_files(context, filename, nfiles, 0, 0, 0, orderby, &ret); if (ret) { - fprintf(stderr, "Unable to create index for input file %s (%s)", - options->infile_extra->name, grib_get_error_message(ret)); + fprintf(stderr, "%s: Unable to create index for input file %s (%s)", + tool_name, options->infile_extra->name, grib_get_error_message(ret)); exit(ret); } } @@ -307,7 +307,7 @@ int grib_tool_init(grib_runtime_options* options) if (grib_options_on("R:")) { maxAbsoluteError = strtod(absTolStr, &endPtr); if (*endPtr) { - fprintf(stderr, "Invalid absolute error: '%s'\n", absTolStr); + fprintf(stderr, "%s: Invalid absolute error: '%s'\n", tool_name, absTolStr); exit(1); } } @@ -315,7 +315,7 @@ int grib_tool_init(grib_runtime_options* options) compare_double = &compare_double_absolute; global_tolerance = strtod(absTolStr, &endPtr); if (*endPtr) { - fprintf(stderr, "Invalid absolute error: '%s'\n", absTolStr); + fprintf(stderr, "%s: Invalid absolute error: '%s'\n",tool_name, absTolStr); exit(1); } } diff --git a/tools/grib_copy.cc b/tools/grib_copy.cc index 20823e2a5..ccc4c690a 100644 --- a/tools/grib_copy.cc +++ b/tools/grib_copy.cc @@ -104,7 +104,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) v = (double*)calloc(size, sizeof(double)); if (!v) { - fprintf(stderr, "failed to allocate %ld bytes\n", (long)(size * sizeof(double))); + fprintf(stderr, "%s: Failed to allocate %zu bytes\n", tool_name, size * sizeof(double)); exit(1); } diff --git a/tools/grib_options.cc b/tools/grib_options.cc index 6f1af95fe..78e82d1d8 100644 --- a/tools/grib_options.cc +++ b/tools/grib_options.cc @@ -265,7 +265,7 @@ int grib_process_runtime_options(grib_context* context, int argc, char** argv, g const char* optionStr = grib_options_get_option("d:"); options->constant = strtod(optionStr, &endPtr); if (*endPtr) { - fprintf(stderr, "Invalid number for -d option: '%s'\n", optionStr); + fprintf(stderr, "%s: Invalid number for -d option: '%s'\n", tool_name, optionStr); exit(1); } options->repack = 1; diff --git a/tools/grib_set.cc b/tools/grib_set.cc index 4e47264c6..13adcde65 100644 --- a/tools/grib_set.cc +++ b/tools/grib_set.cc @@ -76,7 +76,7 @@ int grib_tool_init(grib_runtime_options* options) // } // if (grib_options_on("n:") && grib_options_on("d:")) { - // fprintf(stderr, "Error: -n and -d options are incompatible. Choose one of the two please.\n"); + // fprintf(stderr, "%s: -n and -d options are incompatible. Choose one of the two please.\n",tool_name); // exit(1); // } From 1b2f76fed434440089500d4f1aaa32b0895bd9f4 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 9 Aug 2023 12:09:29 +0100 Subject: [PATCH 122/372] Native type --- src/grib_accessor_class_int32.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/grib_accessor_class_int32.cc b/src/grib_accessor_class_int32.cc index b1d9143d8..c040bb2d5 100644 --- a/src/grib_accessor_class_int32.cc +++ b/src/grib_accessor_class_int32.cc @@ -18,6 +18,7 @@ SUPER = grib_accessor_class_gen IMPLEMENTS = unpack_long IMPLEMENTS = pack_long + IMPLEMENTS = get_native_type END_CLASS_DEF */ @@ -32,6 +33,7 @@ or edit "accessor.class" and rerun ./make_class.pl */ +static int get_native_type(grib_accessor*); static int pack_long(grib_accessor*, const long* val, size_t* len); static int unpack_long(grib_accessor*, long* val, size_t* len); @@ -59,7 +61,7 @@ static grib_accessor_class _grib_accessor_class_int32 = { 0, /* get number of values */ 0, /* get number of bytes */ 0, /* get offset to bytes */ - 0, /* get native type */ + &get_native_type, /* get native type */ 0, /* get sub_section */ 0, /* pack_missing */ 0, /* is_missing */ @@ -97,6 +99,11 @@ grib_accessor_class* grib_accessor_class_int32 = &_grib_accessor_class_int32; /* END_CLASS_IMP */ +static int get_native_type(grib_accessor* a) +{ + return GRIB_TYPE_LONG; +} + static int unpack_long(grib_accessor* a, long* val, size_t* len) { long value = 0; From c89dd9377e361a83f62b56f66fd641c10a3a285c Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 9 Aug 2023 12:09:47 +0100 Subject: [PATCH 123/372] Testing: grib_compare with -A option --- tests/grib_compare.sh | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/grib_compare.sh b/tests/grib_compare.sh index 5d1ca0741..8affc0247 100755 --- a/tests/grib_compare.sh +++ b/tests/grib_compare.sh @@ -13,7 +13,7 @@ label="grib_compare_test" REDIRECT=/dev/null -outfile=temp.$label.$$ +outfile=temp.$label.grib rm -f $outfile @@ -102,6 +102,20 @@ status=$? set -e [ $status -eq 1 ] +# ---------------------------------------- +# Test -A switch +# ---------------------------------------- +infile=${data_dir}/sample.grib2 +${tools_dir}/grib_set -s scaleValuesBy=1.01 $infile $temp1 +# max absolute diff. = 3.11 +set +e +${tools_dir}/grib_compare -b referenceValue -A 3.1 $infile $temp1 +status=$? +set -e +[ $status -eq 1 ] +# Raise the tolerance +${tools_dir}/grib_compare -b referenceValue -A 3.2 $infile $temp1 + # ---------------------------------------- # ECC-355: -R with "all" option From c38c1390e62d6c52e1d6152f1c8268dc89712113 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 9 Aug 2023 12:17:41 +0100 Subject: [PATCH 124/372] Testing: grib_compare with -v with indexes --- tests/grib_indexing.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/grib_indexing.sh b/tests/grib_indexing.sh index 51f64842b..453208f62 100755 --- a/tests/grib_indexing.sh +++ b/tests/grib_indexing.sh @@ -106,7 +106,7 @@ cat ${data_dir}/sample.grib2 ${data_dir}/high_level_api.grib2 > $tempGr ${tools_dir}/grib_index_build -N -o $tempIndex1 $tempGribFile1 ${tools_dir}/grib_index_build -N -o $tempIndex2 $tempGribFile2 -${tools_dir}/grib_compare $tempIndex1 $tempIndex2 +${tools_dir}/grib_compare -v $tempIndex1 $tempIndex2 rm -f $tempIndex1 $tempIndex2 $tempGribFile1 $tempGribFile2 # ECC-1516 From a81667b34105249eceaccfa8487ab54b33ad92a6 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 9 Aug 2023 12:24:15 +0100 Subject: [PATCH 125/372] Testing: grib_compare missing value --- tests/grib_compare.sh | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tests/grib_compare.sh b/tests/grib_compare.sh index 8affc0247..503e1d06a 100755 --- a/tests/grib_compare.sh +++ b/tests/grib_compare.sh @@ -177,11 +177,24 @@ EOF diff $reffile $outfile rm -f $reffile +sample_g2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + +# ---------------------------------------- +# Keys with value='Missing' +# ---------------------------------------- +${tools_dir}/grib_set -s scaleFactorOfFirstFixedSurface=1 $sample_g2 $temp1 +set +e +${tools_dir}/grib_compare $sample_g2 $temp1 > $outfile +status=$? +set -e +[ $status -eq 1 ] +grep -q "scaleFactorOfFirstFixedSurface is set to missing in 1st field but is not missing in 2nd field" $outfile +${tools_dir}/grib_compare -b scaleFactorOfFirstFixedSurface $sample_g2 $temp1 > $outfile + # ---------------------------------------- # Test -R overriding "referenceValueError" # ---------------------------------------- -sample_g2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl echo 'set values = { 9.99999957911723157871e-26 }; write;' | ${tools_dir}/grib_filter -o $temp1 - $sample_g2 echo 'set values = { 1.00000001954148137826e-25 }; write;' | ${tools_dir}/grib_filter -o $temp2 - $sample_g2 # Plain grib_compare uses the referenceValueError as tolerance and will see the files as identical From 42de684b6aa4bd598376e65b817e9c7dacc38ea8 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 9 Aug 2023 13:24:56 +0100 Subject: [PATCH 126/372] Testing: grib_compare missing value --- tests/grib_compare.sh | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tests/grib_compare.sh b/tests/grib_compare.sh index 503e1d06a..e2a9d705c 100755 --- a/tests/grib_compare.sh +++ b/tests/grib_compare.sh @@ -179,9 +179,9 @@ rm -f $reffile sample_g2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl -# ---------------------------------------- -# Keys with value='Missing' -# ---------------------------------------- +# -------------------------------------------- +# Key='Missing' in one field and not the other +# -------------------------------------------- ${tools_dir}/grib_set -s scaleFactorOfFirstFixedSurface=1 $sample_g2 $temp1 set +e ${tools_dir}/grib_compare $sample_g2 $temp1 > $outfile @@ -189,6 +189,14 @@ status=$? set -e [ $status -eq 1 ] grep -q "scaleFactorOfFirstFixedSurface is set to missing in 1st field but is not missing in 2nd field" $outfile + +set +e +${tools_dir}/grib_compare $temp1 $sample_g2 > $outfile +status=$? +set -e +[ $status -eq 1 ] +grep -q "scaleFactorOfFirstFixedSurface is set to missing in 2nd field but is not missing in 1st field" $outfile + ${tools_dir}/grib_compare -b scaleFactorOfFirstFixedSurface $sample_g2 $temp1 > $outfile From 15d9df4e47e352ea75fd9c8a1eb4e518d5d6d340 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 9 Aug 2023 13:41:13 +0100 Subject: [PATCH 127/372] Tools: grib_tool_new_file_action --- tools/grib_merge.cc | 2 +- tools/metar_copy.cc | 1 + tools/metar_dump.cc | 10 ++-------- tools/metar_filter.cc | 1 + tools/metar_get.cc | 1 + tools/metar_ls.cc | 22 ++-------------------- 6 files changed, 8 insertions(+), 29 deletions(-) diff --git a/tools/grib_merge.cc b/tools/grib_merge.cc index 26853c332..8e18e54ea 100644 --- a/tools/grib_merge.cc +++ b/tools/grib_merge.cc @@ -9,7 +9,7 @@ */ /* - * Author: Enrico Fucile + * Author: Enrico Fucile * Description: * In Observations team we need a tool to merge the GRIB messages coming from GTS. * They come with compatible grid (lat/lon) but they are split in different quadrants. diff --git a/tools/metar_copy.cc b/tools/metar_copy.cc index ce3ada95d..0ea7e14d4 100644 --- a/tools/metar_copy.cc +++ b/tools/metar_copy.cc @@ -67,6 +67,7 @@ int grib_tool_new_filename_action(grib_runtime_options* options, const char* fil int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* file) { + exit_if_input_is_directory(tool_name, file->name); return 0; } diff --git a/tools/metar_dump.cc b/tools/metar_dump.cc index 4e0e2b8d4..66bf48959 100644 --- a/tools/metar_dump.cc +++ b/tools/metar_dump.cc @@ -8,14 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * Implementation: grib_dump - * - * Author: Enrico Fucile - * - * - */ - #include "grib_tools.h" grib_option grib_options[] = { @@ -106,6 +98,8 @@ int grib_tool_new_filename_action(grib_runtime_options* options, const char* fil int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* file) { + exit_if_input_is_directory(tool_name, file->name); + char tmp[1024]; if (!options->current_infile->name) return 0; diff --git a/tools/metar_filter.cc b/tools/metar_filter.cc index e0e0fe131..6cfd6514f 100644 --- a/tools/metar_filter.cc +++ b/tools/metar_filter.cc @@ -66,6 +66,7 @@ int grib_tool_new_filename_action(grib_runtime_options* options, const char* fil int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* file) { + exit_if_input_is_directory(tool_name, file->name); return 0; } diff --git a/tools/metar_get.cc b/tools/metar_get.cc index 122dbf92a..79fd1342c 100644 --- a/tools/metar_get.cc +++ b/tools/metar_get.cc @@ -69,6 +69,7 @@ int grib_tool_new_filename_action(grib_runtime_options* options, const char* fil int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* file) { + exit_if_input_is_directory(tool_name, file->name); return 0; } diff --git a/tools/metar_ls.cc b/tools/metar_ls.cc index 794438715..98c748863 100644 --- a/tools/metar_ls.cc +++ b/tools/metar_ls.cc @@ -8,13 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * Implementation: grib_ls - * - * Author: Enrico Fucile - * - * - */ #include "grib_tools.h" grib_option grib_options[] = { @@ -24,7 +17,7 @@ grib_option grib_options[] = { { "F:", 0, 0, 1, 1, "%g" }, { "P:", 0, 0, 0, 1, 0 }, { "w:", 0, 0, 0, 1, 0 }, - { "j", 0, "json output\n", 0, 1, 0 }, + // { "j", 0, "json output\n", 0, 1, 0 }, { "B:", 0, 0, 0, 1, 0 }, /* {"l:",0,0,0,1,0}, */ { "s:", 0, 0, 0, 1, 0 }, @@ -55,7 +48,6 @@ int grib_options_count = sizeof(grib_options) / sizeof(grib_option); double lat = 0; double lon = 0; int mode = 0; -static int json = 0; int main(int argc, char* argv[]) { @@ -79,14 +71,6 @@ Initialization and startup can be done here */ int grib_tool_init(grib_runtime_options* options) { - if (grib_options_on("j")) { - options->verbose = 0; - json = 1; - } - - if (json) - printf("[\n"); - return 0; } @@ -101,6 +85,7 @@ int grib_tool_new_filename_action(grib_runtime_options* options, const char* fil int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* file) { + exit_if_input_is_directory(tool_name, file->name); return 0; } @@ -140,9 +125,6 @@ void grib_tool_print_key_values(grib_runtime_options* options, grib_handle* h) /* this is executed after the last message in the last file is processed */ int grib_tool_finalise_action(grib_runtime_options* options) { - if (json) - printf("\n]\n"); - return 0; } From af7d3461c5482590ff1901d8639c011d883da08c Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 10 Aug 2023 14:38:16 +0000 Subject: [PATCH 128/372] ECC-1660: GRIB: Delete parameter 3037 --- definitions/grib2/cfVarName.def | 6 ------ definitions/grib2/name.def | 6 ------ definitions/grib2/paramId.def | 6 ------ definitions/grib2/shortName.def | 6 ------ definitions/grib2/units.def | 6 ------ 5 files changed, 30 deletions(-) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index 93f415a1a..cee55292b 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -9675,12 +9675,6 @@ parameterCategory = 0 ; parameterNumber = 2 ; } -#Montgomery stream Function -'mntsf' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 6 ; - } #Sigma coordinate vertical velocity 'sgcvv' = { discipline = 0 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index b3b411c06..ebbda71fb 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -9675,12 +9675,6 @@ parameterCategory = 0 ; parameterNumber = 2 ; } -#Montgomery stream Function -'Montgomery stream Function' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 6 ; - } #Sigma coordinate vertical velocity 'Sigma coordinate vertical velocity' = { discipline = 0 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 9de929cc1..b6fbce26f 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -9675,12 +9675,6 @@ parameterCategory = 0 ; parameterNumber = 2 ; } -#Montgomery stream Function -'3037' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 6 ; - } #Sigma coordinate vertical velocity '3038' = { discipline = 0 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 0ff4d6085..e30fefa22 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -9675,12 +9675,6 @@ parameterCategory = 0 ; parameterNumber = 2 ; } -#Montgomery stream Function -'mntsf' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 6 ; - } #Sigma coordinate vertical velocity 'sgcvv' = { discipline = 0 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 37aba4c60..a18221ce4 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -9675,12 +9675,6 @@ parameterCategory = 0 ; parameterNumber = 2 ; } -#Montgomery stream Function -'m**2 s**-2' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 6 ; - } #Sigma coordinate vertical velocity 's**-1' = { discipline = 0 ; From 433cbe98f2d4b1855ae9cef375151ff6e19ac69b Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 10 Aug 2023 15:32:36 +0000 Subject: [PATCH 129/372] ECC-1658: GRIB2: Add WMO encoding to parameters --- .../grib1/localConcepts/ecmf/cfVarName.def | 8 +++---- definitions/grib1/localConcepts/ecmf/name.def | 8 +++---- .../grib1/localConcepts/ecmf/paramId.def | 4 ++-- .../grib1/localConcepts/ecmf/shortName.def | 4 ++-- .../grib1/localConcepts/ecmf/units.def | 4 ++-- definitions/grib2/cfVarName.def | 24 +++++++++++++++++++ definitions/grib2/name.def | 24 +++++++++++++++++++ definitions/grib2/paramId.def | 24 +++++++++++++++++++ definitions/grib2/shortName.def | 24 +++++++++++++++++++ definitions/grib2/units.def | 24 +++++++++++++++++++ 10 files changed, 134 insertions(+), 14 deletions(-) diff --git a/definitions/grib1/localConcepts/ecmf/cfVarName.def b/definitions/grib1/localConcepts/ecmf/cfVarName.def index e64852a08..b200c239a 100644 --- a/definitions/grib1/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib1/localConcepts/ecmf/cfVarName.def @@ -10149,23 +10149,23 @@ table2Version = 228 ; indicatorOfParameter = 225 ; } -#Maximum total precipitation rate since previous post-processing +#Maximum total precipitation rate 'mxtpr' = { table2Version = 228 ; indicatorOfParameter = 226 ; } -#Minimum total precipitation rate since previous post-processing +#Minimum total precipitation rate 'mntpr' = { table2Version = 228 ; indicatorOfParameter = 227 ; } #SMOS first Brightness Temperature Bias Correction parameter -'p228229' = { +'smos_tb_cdfa' = { table2Version = 228 ; indicatorOfParameter = 229 ; } #SMOS second Brightness Temperature Bias Correction parameter -'p228230' = { +'smos_tb_cdfb' = { table2Version = 228 ; indicatorOfParameter = 230 ; } diff --git a/definitions/grib1/localConcepts/ecmf/name.def b/definitions/grib1/localConcepts/ecmf/name.def index fd2b9af79..47c3ae001 100644 --- a/definitions/grib1/localConcepts/ecmf/name.def +++ b/definitions/grib1/localConcepts/ecmf/name.def @@ -10149,13 +10149,13 @@ table2Version = 228 ; indicatorOfParameter = 225 ; } -#Maximum total precipitation rate since previous post-processing -'Maximum total precipitation rate since previous post-processing' = { +#Maximum total precipitation rate +'Maximum total precipitation rate' = { table2Version = 228 ; indicatorOfParameter = 226 ; } -#Minimum total precipitation rate since previous post-processing -'Minimum total precipitation rate since previous post-processing' = { +#Minimum total precipitation rate +'Minimum total precipitation rate' = { table2Version = 228 ; indicatorOfParameter = 227 ; } diff --git a/definitions/grib1/localConcepts/ecmf/paramId.def b/definitions/grib1/localConcepts/ecmf/paramId.def index 46ed99774..5e6f07eb5 100644 --- a/definitions/grib1/localConcepts/ecmf/paramId.def +++ b/definitions/grib1/localConcepts/ecmf/paramId.def @@ -10149,12 +10149,12 @@ table2Version = 228 ; indicatorOfParameter = 225 ; } -#Maximum total precipitation rate since previous post-processing +#Maximum total precipitation rate '228226' = { table2Version = 228 ; indicatorOfParameter = 226 ; } -#Minimum total precipitation rate since previous post-processing +#Minimum total precipitation rate '228227' = { table2Version = 228 ; indicatorOfParameter = 227 ; diff --git a/definitions/grib1/localConcepts/ecmf/shortName.def b/definitions/grib1/localConcepts/ecmf/shortName.def index 159ebb628..97f8c180f 100644 --- a/definitions/grib1/localConcepts/ecmf/shortName.def +++ b/definitions/grib1/localConcepts/ecmf/shortName.def @@ -10149,12 +10149,12 @@ table2Version = 228 ; indicatorOfParameter = 225 ; } -#Maximum total precipitation rate since previous post-processing +#Maximum total precipitation rate 'mxtpr' = { table2Version = 228 ; indicatorOfParameter = 226 ; } -#Minimum total precipitation rate since previous post-processing +#Minimum total precipitation rate 'mntpr' = { table2Version = 228 ; indicatorOfParameter = 227 ; diff --git a/definitions/grib1/localConcepts/ecmf/units.def b/definitions/grib1/localConcepts/ecmf/units.def index f34142102..e2d814c8c 100644 --- a/definitions/grib1/localConcepts/ecmf/units.def +++ b/definitions/grib1/localConcepts/ecmf/units.def @@ -10149,12 +10149,12 @@ table2Version = 228 ; indicatorOfParameter = 225 ; } -#Maximum total precipitation rate since previous post-processing +#Maximum total precipitation rate 'kg m**-2 s**-1' = { table2Version = 228 ; indicatorOfParameter = 226 ; } -#Minimum total precipitation rate since previous post-processing +#Minimum total precipitation rate 'kg m**-2 s**-1' = { table2Version = 228 ; indicatorOfParameter = 227 ; diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index cee55292b..11a166b74 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -2765,6 +2765,22 @@ parameterNumber = 56 ; typeOfFirstFixedSurface = 1 ; } +#Maximum total precipitation rate +'mxtpr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Minimum total precipitation rate +'mntpr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } #Mixed-layer CAPE in the lowest 50 hPa 'mlcape50' = { discipline = 0 ; @@ -3527,6 +3543,14 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean magnitude of turbulent surface stress +'mmtss' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean large-scale precipitation fraction 'mlspf' = { discipline = 0 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index ebbda71fb..4960cdbd3 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -2765,6 +2765,22 @@ parameterNumber = 56 ; typeOfFirstFixedSurface = 1 ; } +#Maximum total precipitation rate +'Maximum total precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Minimum total precipitation rate +'Minimum total precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } #Mixed-layer CAPE in the lowest 50 hPa 'Mixed-layer CAPE in the lowest 50 hPa' = { discipline = 0 ; @@ -3527,6 +3543,14 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean magnitude of turbulent surface stress +'Mean magnitude of turbulent surface stress' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean large-scale precipitation fraction 'Mean large-scale precipitation fraction' = { discipline = 0 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index b6fbce26f..f1cdd37ce 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -2765,6 +2765,22 @@ parameterNumber = 56 ; typeOfFirstFixedSurface = 1 ; } +#Maximum total precipitation rate +'228226' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Minimum total precipitation rate +'228227' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } #Mixed-layer CAPE in the lowest 50 hPa '228231' = { discipline = 0 ; @@ -3527,6 +3543,14 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean magnitude of turbulent surface stress +'235025' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean large-scale precipitation fraction '235026' = { discipline = 0 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index e30fefa22..2081a7de9 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -2765,6 +2765,22 @@ parameterNumber = 56 ; typeOfFirstFixedSurface = 1 ; } +#Maximum total precipitation rate +'mxtpr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Minimum total precipitation rate +'mntpr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } #Mixed-layer CAPE in the lowest 50 hPa 'mlcape50' = { discipline = 0 ; @@ -3527,6 +3543,14 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean magnitude of turbulent surface stress +'mmtss' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean large-scale precipitation fraction 'mlspf' = { discipline = 0 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index a18221ce4..ba4fc8fd6 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -2765,6 +2765,22 @@ parameterNumber = 56 ; typeOfFirstFixedSurface = 1 ; } +#Maximum total precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Minimum total precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } #Mixed-layer CAPE in the lowest 50 hPa 'J kg**-1' = { discipline = 0 ; @@ -3527,6 +3543,14 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean magnitude of turbulent surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 58 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean large-scale precipitation fraction 'Proportion' = { discipline = 0 ; From 13ab0480f42ec062766c4da19e144561284e5752 Mon Sep 17 00:00:00 2001 From: Matthew Griffith Date: Wed, 9 Aug 2023 13:09:27 +0000 Subject: [PATCH 130/372] ECC-1664: Added lowCloudLayer, mediumCloudLayer and highCloudLayer typeOfLevelConcepts, as well as their corresponding sfc marsLevtypeConcepts. --- definitions/grib2/marsLevtypeConcept.def | 6 ++++++ definitions/grib2/typeOfLevelConcept.def | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/definitions/grib2/marsLevtypeConcept.def b/definitions/grib2/marsLevtypeConcept.def index e72a2d701..1bfb06e6d 100644 --- a/definitions/grib2/marsLevtypeConcept.def +++ b/definitions/grib2/marsLevtypeConcept.def @@ -12,6 +12,12 @@ 'o2d' = {typeOfFirstFixedSurface=20; typeOfSecondFixedSurface=255;} 'pl' = {typeOfFirstFixedSurface=100; typeOfSecondFixedSurface=255;} 'pl' = {typeOfFirstFixedSurface=100; typeOfSecondFixedSurface=100;} +'sfc' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=100; + scaleFactorOfSecondFixedSurface=0; scaledValueOfSecondFixedSurface=80000;} +'sfc' = {typeOfFirstFixedSurface=100; scaleFactorOfFirstFixedSurface=0; scaledValueOfFirstFixedSurface=80000; + typeOfSecondFixedSurface=100; scaleFactorOfSecondFixedSurface=0; scaledValueOfSecondFixedSurface=45000;} +'sfc' = {typeOfFirstFixedSurface=100; scaleFactorOfFirstFixedSurface=0; + scaledValueOfFirstFixedSurface=45000; typeOfSecondFixedSurface=8;} 'sfc' = {typeOfFirstFixedSurface=101; typeOfSecondFixedSurface=255;} 'sfc' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;} 'sfc' = {typeOfFirstFixedSurface=103; typeOfSecondFixedSurface=255;} diff --git a/definitions/grib2/typeOfLevelConcept.def b/definitions/grib2/typeOfLevelConcept.def index 0353e9af6..30fad4464 100644 --- a/definitions/grib2/typeOfLevelConcept.def +++ b/definitions/grib2/typeOfLevelConcept.def @@ -24,6 +24,12 @@ 'isobaricInPa' = {typeOfFirstFixedSurface=100; typeOfSecondFixedSurface=255; pressureUnits='Pa';} 'isobaricInhPa' = {typeOfFirstFixedSurface=100; pressureUnits='hPa'; typeOfSecondFixedSurface=255;} 'isobaricLayer' = {typeOfFirstFixedSurface=100; typeOfSecondFixedSurface=100;} +'lowCloudLayer' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=100; + scaleFactorOfSecondFixedSurface=0; scaledValueOfSecondFixedSurface=80000;} +'mediumCloudLayer' = {typeOfFirstFixedSurface=100; scaleFactorOfFirstFixedSurface=0; scaledValueOfFirstFixedSurface=80000; + typeOfSecondFixedSurface=100; scaleFactorOfSecondFixedSurface=0; scaledValueOfSecondFixedSurface=45000;} +'highCloudLayer' = {typeOfFirstFixedSurface=100; scaleFactorOfFirstFixedSurface=0; + scaledValueOfFirstFixedSurface=45000; typeOfSecondFixedSurface=8;} 'meanSea' = {typeOfFirstFixedSurface=101; typeOfSecondFixedSurface=255;} 'heightAboveSea' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;} 'heightAboveSeaLayer' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=102;} From 80caa47eb33a4ed4ef02b75dadc81fd2213fb359 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 11 Aug 2023 13:02:58 +0100 Subject: [PATCH 131/372] ECC-1667: GRIB: Add new key 'validityDateTime' --- definitions/grib1/section.1.def | 1 + definitions/grib2/template.4.point_in_time.def | 1 + definitions/grib2/template.4.statistical.def | 1 + tests/grib_jpeg.sh | 7 +++++++ tests/grib_step.sh | 7 +++++++ 5 files changed, 17 insertions(+) diff --git a/definitions/grib1/section.1.def b/definitions/grib1/section.1.def index 0a1985904..fc0c82e86 100644 --- a/definitions/grib1/section.1.def +++ b/definitions/grib1/section.1.def @@ -246,6 +246,7 @@ if (centre == 34 && subCentre == 241) meta time.validityDate validity_date(dataDate,dataTime,step,stepUnits); meta time.validityTime validity_time(dataDate,dataTime,step,stepUnits); +meta validityDateTime julian_date(validityDate, validityTime) : no_copy; transient deleteLocalDefinition=0; diff --git a/definitions/grib2/template.4.point_in_time.def b/definitions/grib2/template.4.point_in_time.def index f2e8606fd..98885540a 100644 --- a/definitions/grib2/template.4.point_in_time.def +++ b/definitions/grib2/template.4.point_in_time.def @@ -28,4 +28,5 @@ alias time.endStep=endStep; meta time.validityDate validity_date(dataDate,dataTime,step,stepUnits) : no_copy; meta time.validityTime validity_time(dataDate,dataTime,step,stepUnits) : no_copy; +meta validityDateTime julian_date(validityDate, validityTime) : no_copy; diff --git a/definitions/grib2/template.4.statistical.def b/definitions/grib2/template.4.statistical.def index 63545eea0..108e949f9 100644 --- a/definitions/grib2/template.4.statistical.def +++ b/definitions/grib2/template.4.statistical.def @@ -125,3 +125,4 @@ meta time.validityDate validity_date(date,dataTime,step,stepUnits,yearOfEndOfOve monthOfEndOfOverallTimeInterval,dayOfEndOfOverallTimeInterval) : no_copy; meta time.validityTime validity_time(date,dataTime,step,stepUnits,hourOfEndOfOverallTimeInterval, minuteOfEndOfOverallTimeInterval) : no_copy; +meta validityDateTime julian_date(validityDate, validityTime) : no_copy; diff --git a/tests/grib_jpeg.sh b/tests/grib_jpeg.sh index ddf5868f9..e6c2485da 100755 --- a/tests/grib_jpeg.sh +++ b/tests/grib_jpeg.sh @@ -124,4 +124,11 @@ stats=`${tools_dir}/grib_get -M -F%.2f -p min,max $tempGrib` [ "$stats" = "-0.01 98.99" ] +# Constant field +${tools_dir}/grib_set -d1 ${data_dir}/jpeg.grib2 $tempGrib +grib_check_key_equals $tempGrib isConstant 1 +${tools_dir}/grib_ls -n statistics $tempGrib + + +# Clean up rm -f $tempFilt $tempGrib diff --git a/tests/grib_step.sh b/tests/grib_step.sh index 7a79a6e6b..407d07540 100755 --- a/tests/grib_step.sh +++ b/tests/grib_step.sh @@ -140,6 +140,13 @@ grib_check_key_equals $temp "stepRange,startStep,endStep" "24 24 24" ${tools_dir}/grib_set -s stepRange:d=14.56 $grib2_sample $temp grib_check_key_equals $temp "stepRange,startStep,endStep" "14 14 14" +# Key validityDateTime +# ----------------------------------------------- +input=${data_dir}/constant_field.grib2 +grib_check_key_equals $input "dataDate,dataTime,step" "20061205 1200 6" +grib_check_key_equals $input "validityDate,validityTime" "20061205 1800" +grib_check_key_equals $input "validityDateTime:s" "20061205 001800" + # Clean up rm -f $temp From 4d2428189194e8240607c4fcbfa69dbc49bdf940 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 11 Aug 2023 13:36:42 +0100 Subject: [PATCH 132/372] Testing: Set packingType when it is disabled --- tests/grib_change_packing.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/grib_change_packing.sh b/tests/grib_change_packing.sh index 790ef04c7..190bead45 100755 --- a/tests/grib_change_packing.sh +++ b/tests/grib_change_packing.sh @@ -168,5 +168,16 @@ set -e grep -q "ECCODES ERROR.*no match for packingType=xxxxx" $temp_err cat $temp_err +# Set packingType when it is disabled +# ----------------------------------- +if [ $HAVE_PNG -eq 0 ]; then + set +e + ${tools_dir}/grib_set -s packingType=grid_png $ECCODES_SAMPLES_PATH/GRIB2.tmpl $temp > $temp_err 2>&1 + status=$? + set -e + [ $status -ne 0 ] + grep -q "ECCODES ERROR.*PNG support not enabled" $temp_err +fi + # Clean up rm -f $temp $temp_err From b4f7909e4c2061714b9ca59d5cbfa861237f9bf4 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 11 Aug 2023 13:46:57 +0100 Subject: [PATCH 133/372] Testing: grid_simple_log_preprocessing unpacking --- tests/grib_change_packing.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/grib_change_packing.sh b/tests/grib_change_packing.sh index 190bead45..322572c8e 100755 --- a/tests/grib_change_packing.sh +++ b/tests/grib_change_packing.sh @@ -136,6 +136,13 @@ if [ $HAVE_AEC -eq 0 ]; then grep -q "CCSDS support not enabled. Please rebuild with -DENABLE_AEC=ON" $temp_err fi +# grid_simple_log_preprocessing +# ----------------------------- +input=${data_dir}/sample.grib2 +${tools_dir}/grib_set -r -s packingType=grid_simple_log_preprocessing $input $temp +grib_check_key_equals $temp packingType 'grid_simple_log_preprocessing' +${tools_dir}/grib_compare -c data:n -R packedValues=2e-6 $input $temp + # Large constant fields # ----------------------- input=${data_dir}/sample.grib2 From a7f2d559eae29543bdcc3869e708a892182501fe Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 11 Aug 2023 14:18:52 +0100 Subject: [PATCH 134/372] Testing: julianDay --- tests/grib_step.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/grib_step.sh b/tests/grib_step.sh index 407d07540..e3f90142b 100755 --- a/tests/grib_step.sh +++ b/tests/grib_step.sh @@ -147,6 +147,14 @@ grib_check_key_equals $input "dataDate,dataTime,step" "20061205 1200 6" grib_check_key_equals $input "validityDate,validityTime" "20061205 1800" grib_check_key_equals $input "validityDateTime:s" "20061205 001800" +# Key julianDay +# ----------------------------------------------- +input=${data_dir}/sample.grib2 +grib_check_key_equals $input 'julianDay:i' '2454503' +${tools_dir}/grib_set -s julianDay=2454504 $input $temp +grib_check_key_equals $input day 6 +grib_check_key_equals $temp day 7 + # Clean up rm -f $temp From 94b428d997a4aa283a9e3307af07121f18835f87 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 11 Aug 2023 15:49:28 +0100 Subject: [PATCH 135/372] Testing: Fortran julian date conversions --- examples/F90/CMakeLists.txt | 1 + examples/F90/codes_datetime_julian.f90 | 34 ++++++++++++++++++++++++++ examples/F90/codes_datetime_julian.sh | 15 ++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 examples/F90/codes_datetime_julian.f90 create mode 100755 examples/F90/codes_datetime_julian.sh diff --git a/examples/F90/CMakeLists.txt b/examples/F90/CMakeLists.txt index 72f71ec9b..65d127cc9 100644 --- a/examples/F90/CMakeLists.txt +++ b/examples/F90/CMakeLists.txt @@ -9,6 +9,7 @@ configure_file( include.ctest.sh.in include.ctest.sh @ONLY ) if( HAVE_BUILD_TOOLS ) list( APPEND tests_sanity codes_ecc-1392 + codes_datetime_julian grib_set_pv grib_set_data bufr_ecc-1284 diff --git a/examples/F90/codes_datetime_julian.f90 b/examples/F90/codes_datetime_julian.f90 new file mode 100644 index 000000000..fa1e8ffd6 --- /dev/null +++ b/examples/F90/codes_datetime_julian.f90 @@ -0,0 +1,34 @@ +! (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. +! +! +program codes_datetime_julian + use eccodes + implicit none + + integer(kind=8) :: year=2012, month=1, day=2, hour=13, min=0, sec=48 + integer(kind=8) :: year2, month2, day2, hour2, min2, sec2 + real(kind=8) :: julian + + CALL codes_datetime_to_julian(year, month, day, hour, min, sec, julian) + PRINT *, 'datetime to julian ', julian + + CALL codes_julian_to_datetime(julian, year2, month2, day2, hour2, min2, sec2) + PRINT *, 'julian to datetime ', year2, month2, day2, hour2, min2, sec2 + + IF (year /= year2) THEN + call codes_check(CODES_INTERNAL_ERROR, 'Error', 'Year is wrong') + END IF + IF (month /= month2) THEN + call codes_check(CODES_INTERNAL_ERROR, 'Error', 'Month is wrong') + END IF + IF (day /= day2) THEN + call codes_check(CODES_INTERNAL_ERROR, 'Error', 'Day is wrong') + END IF + +end program codes_datetime_julian diff --git a/examples/F90/codes_datetime_julian.sh b/examples/F90/codes_datetime_julian.sh new file mode 100755 index 000000000..5d7ba0c8c --- /dev/null +++ b/examples/F90/codes_datetime_julian.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +label="codes_datetime_julian_test_f" + +${examples_dir}/eccodes_f_codes_datetime_julian From 774dbab5ec0cdf7ed38d2077287d3f6656121f4a Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 11 Aug 2023 21:57:13 +0100 Subject: [PATCH 136/372] Tools: Dead code removal --- tools/gts_compare.cc | 95 ++------------------------- tools/metar_compare.cc | 143 ++++------------------------------------- 2 files changed, 18 insertions(+), 220 deletions(-) diff --git a/tools/gts_compare.cc b/tools/gts_compare.cc index 0ae081661..047839d4a 100644 --- a/tools/gts_compare.cc +++ b/tools/gts_compare.cc @@ -42,9 +42,7 @@ const char* tool_description = const char* tool_name = "gts_compare"; const char* tool_online_doc = NULL; -const char* tool_usage = - "[options] " - "file file"; +const char* tool_usage = "[options] file file"; GRIB_INLINE static int grib_inline_strcmp(const char* a, const char* b) @@ -157,9 +155,6 @@ int grib_tool_before_getopt(grib_runtime_options* options) int grib_tool_init(grib_runtime_options* options) { - int ret = 0; - int nfiles = 1; - char orderby[] = "md5Headers"; grib_context* context = grib_context_get_default(); options->strict = 1; @@ -218,27 +213,12 @@ int grib_tool_init(grib_runtime_options* options) context->blocklist = blocklist; } - if (grib_options_on("r")) { - const char* filename[1]; - filename[0] = options->infile_extra->name; - options->random = 1; - options->orderby = strdup(orderby); - options->idx = grib_fieldset_new_from_files(context, filename, - nfiles, 0, 0, 0, orderby, &ret); - if (ret) { - printf("unable to create index for input file %s (%s)", - options->infile_extra->name, grib_get_error_message(ret)); - exit(ret); - } - } - else { - options->random = 0; - options->infile_extra->file = fopen(options->infile_extra->name, "r"); + options->random = 0; + options->infile_extra->file = fopen(options->infile_extra->name, "r"); - if (!options->infile_extra->file) { - perror(options->infile_extra->name); - exit(1); - } + if (!options->infile_extra->file) { + perror(options->infile_extra->name); + exit(1); } if (grib_options_on("t:")) @@ -279,19 +259,6 @@ static void printInfo(grib_handle* h) lastPrint = count; } -static void print_index_key_values(grib_index* index, int cnt, const char* error_message) -{ - grib_index_key* keys = index->keys; - printf("== %d == ", cnt); - if (error_message) - printf("%s == ", error_message); - while (keys) { - printf("%s=%s ", keys->name, keys->value); - keys = keys->next; - } - printf("\n"); -} - static grib_handle* gts_handle_new_from_file_x( grib_context* c, FILE* f, int mode, int headers_only, int* err) { @@ -303,51 +270,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) int err = 0; count++; - if (options->through_index) { - grib_index* idx1 = options->index1; - verbose = 0; - counter++; - - if (start > 0 && counter < start) - return 0; - if (end > 0 && counter > end) { - options->stop = 1; - return 0; - } - - grib_index_search_same(idx1, h); - global_handle = codes_new_from_index(idx1, CODES_GTS, &err); - if (options->verbose) { - off_t offset = 0; - char* filename = grib_get_field_file(options->index2, &offset); - printf("file1=\"%s\" ", filename); - filename = grib_get_field_file(options->index1, &offset); - printf("file2=\"%s\" \n", filename); - print_index_key_values(options->index1, counter, NULL); - } - - if (!global_handle) { - if (!options->verbose) - print_index_key_values(idx1, counter, "NOT FOUND "); - } - - if (!global_handle || err != GRIB_SUCCESS) { - morein1++; - grib_handle_delete(global_handle); - return 0; - } - - if (compare_handles(h, global_handle, options)) { - error++; - if (!force) - exit(1); - } - - grib_handle_delete(global_handle); - - return 0; - } - else if (options->random) + if (options->random) global_handle = grib_fieldset_next_handle(options->idx, &err); else global_handle = gts_handle_new_from_file_x(h->context, options->infile_extra->file, options->mode, 0, &err); @@ -430,10 +353,6 @@ int grib_tool_finalise_action(grib_runtime_options* options) printf("##\n## %d different messages out of %d\n\n", error, count); } - if (options->through_index) { - grib_index_delete(options->index1); - grib_index_delete(options->index2); - } if (error != 0) exit(1); diff --git a/tools/metar_compare.cc b/tools/metar_compare.cc index 097efd61c..4b1a8ee46 100644 --- a/tools/metar_compare.cc +++ b/tools/metar_compare.cc @@ -12,7 +12,6 @@ grib_option grib_options[] = { /* {id, args, help}, on, command_line, value*/ - { "r", 0, "Compare files in which the messages are not in the same order. This option is time expensive.\n", 0, 1, 0 }, { "b:", 0, 0, 0, 1, 0 }, { "d", 0, "Write different messages on files\n", 0, 1, 0 }, { "T:", 0, 0, 1, 0, "M" }, /* METAR */ @@ -44,9 +43,7 @@ const char* tool_description = const char* tool_name = "metar_compare"; const char* tool_online_doc = NULL; -const char* tool_usage = - "[options] " - "file file"; +const char* tool_usage = "[options] file file"; GRIB_INLINE static int grib_inline_strcmp(const char* a, const char* b) @@ -91,7 +88,6 @@ static int verbose = 0; static double tolerance_factor = 1; static int write_error = 0; static grib_handle* global_handle = NULL; -static int global_counter = 0; static int start = -1; static int end = -1; static int write_count = 0; @@ -196,9 +192,6 @@ int grib_tool_before_getopt(grib_runtime_options* options) int grib_tool_init(grib_runtime_options* options) { - int ret = 0, i; - int nfiles = 1; - char orderby[] = "md5Headers"; grib_context* context = grib_context_get_default(); options->strict = 1; @@ -243,7 +236,7 @@ int grib_tool_init(grib_runtime_options* options) blocklist = (grib_string_list*)grib_context_malloc_clear(context, sizeof(grib_string_list)); blocklist->value = grib_context_strdup(context, options->set_values[0].name); next = blocklist; - for (i = 1; i < options->set_values_count; i++) { + for (int i = 1; i < options->set_values_count; i++) { next->next = (grib_string_list*)grib_context_malloc_clear(context, sizeof(grib_string_list)); next->next->value = grib_context_strdup(context, options->set_values[i].name); next = next->next; @@ -251,34 +244,19 @@ int grib_tool_init(grib_runtime_options* options) context->blocklist = blocklist; } - if (grib_options_on("r")) { - const char* filename[1]; - filename[0] = options->infile_extra->name; - options->random = 1; - options->orderby = strdup(orderby); - options->idx = grib_fieldset_new_from_files(context, filename, - nfiles, 0, 0, 0, orderby, &ret); - if (ret) { - printf("unable to create index for input file %s (%s)", - options->infile_extra->name, grib_get_error_message(ret)); - exit(ret); - } - } - else { - options->random = 0; - options->infile_extra->file = fopen(options->infile_extra->name, "r"); + options->random = 0; + options->infile_extra->file = fopen(options->infile_extra->name, "r"); - if (!options->infile_extra->file) { - perror(options->infile_extra->name); - exit(1); - } + if (!options->infile_extra->file) { + perror(options->infile_extra->name); + exit(1); } global_tolerance = 0; compare_double = &compare_double_absolute; if (grib_options_on("R:")) { global_tolerance = 0; - for (i = 0; i < options->tolerance_count; i++) { + for (int i = 0; i < options->tolerance_count; i++) { if (!strcmp((options->tolerance[i]).name, "all")) { global_tolerance = (options->tolerance[i]).double_value; break; @@ -344,21 +322,7 @@ static void printInfo(grib_handle* h) lastPrint = count; } -static void print_index_key_values(grib_index* index, int counter, const char* error_message) -{ - grib_index_key* keys = index->keys; - printf("== %d == ", counter); - if (error_message) - printf("%s == ", error_message); - while (keys) { - printf("%s=%s ", keys->name, keys->value); - keys = keys->next; - } - printf("\n"); -} - -static grib_handle* metar_handle_new_from_file_x( - grib_context* c, FILE* f, int mode, int headers_only, int* err) +static grib_handle* metar_handle_new_from_file_x(grib_context* c, FILE* f, int mode, int headers_only, int* err) { return codes_handle_new_from_file(c, f, PRODUCT_METAR, err); } @@ -368,52 +332,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) int err = 0; count++; - if (options->through_index) { - grib_index* idx1 = options->index1; - verbose = 0; - global_counter++; - - if (start > 0 && global_counter < start) - return 0; - if (end > 0 && global_counter > end) { - options->stop = 1; - return 0; - } - - grib_index_search_same(idx1, h); - global_handle = codes_new_from_index(idx1, CODES_METAR, &err); - if (options->verbose) { - off_t offset = 0; - char* filename = grib_get_field_file(options->index2, &offset); - printf("file1=\"%s\" ", filename); - filename = grib_get_field_file(options->index1, &offset); - printf("file2=\"%s\" \n", filename); - print_index_key_values(options->index1, global_counter, NULL); - } - - if (!global_handle) { - if (!options->verbose) - print_index_key_values(idx1, global_counter, "NOT FOUND "); - } - - if (!global_handle || err != GRIB_SUCCESS) { - morein1++; - if (global_handle) - grib_handle_delete(global_handle); - return 0; - } - - if (compare_handles(h, global_handle, options)) { - error++; - if (!force) - exit(1); - } - - grib_handle_delete(global_handle); - - return 0; - } - else if (options->random) + if (options->random) global_handle = grib_fieldset_next_handle(options->idx, &err); else global_handle = metar_handle_new_from_file_x(h->context, options->infile_extra->file, options->mode, 0, &err); @@ -496,10 +415,6 @@ int grib_tool_finalise_action(grib_runtime_options* options) printf("##\n## %d different messages out of %d\n\n", error, count); } - if (options->through_index) { - grib_index_delete(options->index1); - grib_index_delete(options->index2); - } if (error != 0) exit(1); @@ -548,7 +463,6 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h int err2; int type1, type2; int countdiff; - int isangle = 0; int isMissing1 = 0, isMissing2 = 0; char *sval1 = NULL, *sval2 = NULL; @@ -585,16 +499,6 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h return err; } - /* - if(type1 != type2) - { - printInfo(h1); - printf("Warning, [%s] has different types: 1st field: [%s], 2nd field: [%s]\n", - name,grib_get_type_name(type1),grib_get_type_name(type2)); - return GRIB_TYPE_MISMATCH; - } - */ - if (type1 == GRIB_TYPE_LABEL) return err; @@ -623,16 +527,6 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h return err; } - /* - if(len1 != len2 && type1 != GRIB_TYPE_STRING) - { - printInfo(h1); - printf("[%s] has different size: 1st field: %ld, 2nd field: %ld\n",name,(long)len1,(long)len2); - save_error(c,name); - return GRIB_COUNT_MISMATCH; - } - */ - if (options->mode != MODE_METAR) { /* TODO: Ignore missing values for keys in METAR. Not yet implemented */ isMissing1 = ((grib_is_missing(h1, name, &err1) == 1) && (err1 == 0)) ? 1 : 0; @@ -770,7 +664,6 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h dval1 = (double*)grib_context_malloc(h1->context, len1 * sizeof(double)); dval2 = (double*)grib_context_malloc(h2->context, len2 * sizeof(double)); - isangle = 0; value_tolerance = global_tolerance; if (!grib_inline_strcmp(name, "packedValues") || !grib_inline_strcmp(name, "values") || !grib_inline_strcmp(name, "codedValues")) { packingError1 = 0; @@ -835,26 +728,12 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h if (err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1 == len2) { int imaxdiff; double diff; - double *pv1, *pv2, dnew1, dnew2; + double *pv1, *pv2; maxdiff = 0; imaxdiff = 0; countdiff = 0; pv1 = dval1; pv2 = dval2; - if (isangle) { - dnew1 = *dval1; - dnew2 = *dval2; - pv1 = &dnew1; - pv2 = &dnew2; - if (*dval1 < 0) - dnew1 += 360.0; - if (*dval2 < 0) - dnew2 += 360.0; - if (*dval1 > 360) - dnew1 -= 360.0; - if (*dval2 > 360) - dnew2 -= 360.0; - } value_tolerance *= tolerance_factor; if (verbose) printf(" (%d values) tolerance=%g\n", (int)len1, value_tolerance); From b3e4351635ddd45c18e8bd012aae6b8345c3619d Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 11 Aug 2023 22:03:09 +0100 Subject: [PATCH 137/372] Tools: Cleanup --- tools/gts_copy.cc | 1 + tools/gts_get.cc | 1 + tools/gts_ls.cc | 1 + 3 files changed, 3 insertions(+) diff --git a/tools/gts_copy.cc b/tools/gts_copy.cc index 92dfe4530..9fdf7041a 100644 --- a/tools/gts_copy.cc +++ b/tools/gts_copy.cc @@ -67,6 +67,7 @@ int grib_tool_new_filename_action(grib_runtime_options* options, const char* fil int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* file) { + exit_if_input_is_directory(tool_name, file->name); return 0; } diff --git a/tools/gts_get.cc b/tools/gts_get.cc index 39c1d2731..ccdf51d83 100644 --- a/tools/gts_get.cc +++ b/tools/gts_get.cc @@ -66,6 +66,7 @@ int grib_tool_new_filename_action(grib_runtime_options* options, const char* fil int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* file) { + exit_if_input_is_directory(tool_name, file->name); return 0; } diff --git a/tools/gts_ls.cc b/tools/gts_ls.cc index b6a8a6666..50a8a70cf 100644 --- a/tools/gts_ls.cc +++ b/tools/gts_ls.cc @@ -78,6 +78,7 @@ int grib_tool_new_filename_action(grib_runtime_options* options, const char* fil int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* file) { + exit_if_input_is_directory(tool_name, file->name); return 0; } From 0212ba471a1bd17fa41938e2ed51f788cabe151c Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 12 Aug 2023 13:28:48 +0100 Subject: [PATCH 138/372] Dump action tree --- src/action.cc | 6 +++++- src/eccodes.cc | 4 ++++ src/eccodes_prototypes.h | 1 - tests/decode.cc | 9 --------- 4 files changed, 9 insertions(+), 11 deletions(-) delete mode 100644 tests/decode.cc diff --git a/src/action.cc b/src/action.cc index b89cf74cf..847862edc 100644 --- a/src/action.cc +++ b/src/action.cc @@ -83,7 +83,7 @@ static void init(grib_action_class* c) // GRIB_MUTEX_UNLOCK(&mutex1); // } -void grib_dump(grib_action* a, FILE* f, int l) +static void grib_dump(grib_action* a, FILE* f, int l) { grib_action_class* c = a->cclass; init(c); @@ -207,6 +207,10 @@ void grib_dump_action_branch(FILE* out, grib_action* a, int decay) void grib_dump_action_tree(grib_context* ctx, FILE* out) { + Assert(ctx); + Assert(ctx->grib_reader); + Assert(ctx->grib_reader->first); + Assert(out); grib_dump_action_branch(out, ctx->grib_reader->first->root, 0); } diff --git a/src/eccodes.cc b/src/eccodes.cc index 70264eb10..13b23ddc0 100644 --- a/src/eccodes.cc +++ b/src/eccodes.cc @@ -447,6 +447,10 @@ void codes_dump_content(const grib_handle* h, FILE* out, const char* mode, unsig { grib_dump_content(h, out, mode, option_flags, arg); } +void codes_dump_action_tree(codes_context* c, FILE* f) +{ + grib_dump_action_tree(c, f); +} /* GTS, GRIBEX */ /******************************************************************************/ void codes_gts_header_off(grib_context* c) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 8c0ca3504..6b45921c9 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -5,7 +5,6 @@ #endif /* action.cc */ -void grib_dump(grib_action* a, FILE* f, int l); void grib_xref(grib_action* a, FILE* f, const char* path); void grib_action_delete(grib_context* context, grib_action* a); int grib_create_accessor(grib_section* p, grib_action* a, grib_loader* h); diff --git a/tests/decode.cc b/tests/decode.cc deleted file mode 100644 index adbea9ba8..000000000 --- a/tests/decode.cc +++ /dev/null @@ -1,9 +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. - */ From 02694d6828105b30780a82c9c6e654318021b9cc Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 12 Aug 2023 13:39:44 +0100 Subject: [PATCH 139/372] Testing: Dump action tree --- tests/CMakeLists.txt | 2 ++ tests/codes_dump_action_tree.cc | 35 +++++++++++++++++++++++++++++++++ tests/codes_dump_action_tree.sh | 14 +++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 tests/codes_dump_action_tree.cc create mode 100755 tests/codes_dump_action_tree.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f85d2f954..eafa1df4c 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -44,6 +44,7 @@ list(APPEND test_c_bins bufr_check_descriptors bufr_coordinate_descriptors codes_new_from_samples + codes_dump_action_tree codes_set_samples_path codes_compare_keys grib_sh_ieee64 @@ -286,6 +287,7 @@ if( HAVE_BUILD_TOOLS ) grib_statistics read_any codes_new_from_samples + codes_dump_action_tree codes_set_samples_path codes_compare_keys grib_dump diff --git a/tests/codes_dump_action_tree.cc b/tests/codes_dump_action_tree.cc new file mode 100644 index 000000000..fa895ea97 --- /dev/null +++ b/tests/codes_dump_action_tree.cc @@ -0,0 +1,35 @@ +/* + * (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. + */ + +#undef NDEBUG +#include +#include "eccodes.h" + +int main(int argc, char** argv) +{ + int err = 0; + codes_context* c = codes_context_get_default(); + + assert(argc == 2); + + char* filename = argv[1]; + FILE* fp = fopen(filename, "rb"); + assert(fp); + codes_handle* h = codes_handle_new_from_file(c, fp, PRODUCT_ANY, &err); + assert(h); + assert(!err); + + codes_dump_action_tree(c, stdout); + + codes_handle_delete(h); + fclose(fp); + + return 0; +} diff --git a/tests/codes_dump_action_tree.sh b/tests/codes_dump_action_tree.sh new file mode 100755 index 000000000..ad562c9e5 --- /dev/null +++ b/tests/codes_dump_action_tree.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +$EXEC ${test_dir}/codes_dump_action_tree "$input" From e22fb03bfbbc15fe940fcf59138978e1cd206c86 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 12 Aug 2023 14:11:20 +0100 Subject: [PATCH 140/372] Comments --- src/eccodes.h | 17 ++++++++++------- src/grib_api.h | 17 ++++++++++------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/eccodes.h b/src/eccodes.h index bded1a49c..b5d42c955 100644 --- a/src/eccodes.h +++ b/src/eccodes.h @@ -433,7 +433,7 @@ codes_handle* codes_handle_new_from_message(codes_context* c, const void* data, /** * Create a handle from a user message in memory. The message will not be freed at the end. * The message will be copied as soon as a modification is needed. - * This function works also with GRIB multi-field messages. + * This function also works with GRIB multi-field messages. * * @param c : the context from which the handle will be created (NULL for default context) * @param data : the actual message @@ -1229,7 +1229,7 @@ void codes_grib_multi_support_on(codes_context* c); void codes_grib_multi_support_off(codes_context* c); /** - * Reset file handle in multiple GRIB field support mode + * Reset file handle in GRIB multi-field support mode * * @param c : the context to be modified * @param f : the file pointer @@ -1351,9 +1351,12 @@ int codes_set_values(codes_handle* h, codes_values* codes_values, size_t arg_cou codes_handle* codes_handle_new_from_partial_message_copy(codes_context* c, const void* data, size_t size); codes_handle* codes_handle_new_from_partial_message(codes_context* c, const void* data, size_t buflen); -/* Returns a bool i.e. 0 or 1. The error code is the final argument */ +/* Check whether the given key has the value 'missing'. + Returns a bool i.e. 0 or 1. The error code is an argument */ int codes_is_missing(const codes_handle* h, const char* key, int* err); -/* Returns a bool i.e. 0 or 1 */ + +/* Check whether the given key is defined (exists). + Returns a bool i.e. 0 or 1 */ int codes_is_defined(const codes_handle* h, const char* key); /* Returns 1 if the BUFR key is in the header and 0 if it is in the data section. @@ -1364,8 +1367,10 @@ int codes_bufr_key_is_header(const codes_handle* h, const char* key, int* err); The error code is the final argument */ int codes_bufr_key_is_coordinate(const codes_handle* h, const char* key, int* err); +/* Set the given key to have the value 'missing' */ int codes_set_missing(codes_handle* h, const char* key); -/* The truncation is the Gaussian number (or order) */ + +/* The truncation is the Gaussian number (also called order) */ int codes_get_gaussian_latitudes(long truncation, double* latitudes); int codes_julian_to_datetime(double jd, long* year, long* month, long* day, long* hour, long* minute, long* second); @@ -1386,7 +1391,6 @@ int codes_check_message_footer(const void* bytes, size_t length, ProductKind pro /* --------------------------------------- */ - #define CODES_UTIL_GRID_SPEC_REGULAR_LL GRIB_UTIL_GRID_SPEC_REGULAR_LL #define CODES_UTIL_GRID_SPEC_ROTATED_LL GRIB_UTIL_GRID_SPEC_ROTATED_LL #define CODES_UTIL_GRID_SPEC_REGULAR_GG GRIB_UTIL_GRID_SPEC_REGULAR_GG @@ -1418,7 +1422,6 @@ int codes_check_message_footer(const void* bytes, size_t length, ProductKind pro #define CODES_UTIL_ACCURACY_SAME_DECIMAL_SCALE_FACTOR_AS_INPUT GRIB_UTIL_ACCURACY_SAME_DECIMAL_SCALE_FACTOR_AS_INPUT #define CODES_UTIL_ACCURACY_USE_PROVIDED_DECIMAL_SCALE_FACTOR GRIB_UTIL_ACCURACY_USE_PROVIDED_DECIMAL_SCALE_FACTOR - codes_handle* codes_grib_util_set_spec(codes_handle* h, const codes_util_grid_spec* grid_spec, const codes_util_packing_spec* packing_spec, /* NULL for defaults (same as input) */ diff --git a/src/grib_api.h b/src/grib_api.h index cc0ddb5cc..0d62c0f5a 100644 --- a/src/grib_api.h +++ b/src/grib_api.h @@ -1231,7 +1231,7 @@ void grib_multi_support_on(grib_context* c); void grib_multi_support_off(grib_context* c); /** - * Reset file handle in multi-field support mode + * Reset file handle in GRIB multi-field support mode * * @param c : the context to be modified * @param f : the file pointer @@ -1334,27 +1334,30 @@ void grib_update_sections_lengths(grib_handle* h); * @return the error message */ const char* grib_get_error_message(int code); + const char* grib_get_type_name(int type); - int grib_get_native_type(const grib_handle* h, const char* name, int* type); - void grib_check(const char* call, const char* file, int line, int e, const char* msg); + #define GRIB_CHECK(a, msg) grib_check(#a, __FILE__, __LINE__, a, msg) #define GRIB_CHECK_NOLINE(a, msg) grib_check(#a, 0, 0, a, msg) - int grib_set_values(grib_handle* h, grib_values* grib_values, size_t arg_count); grib_handle* grib_handle_new_from_partial_message_copy(grib_context* c, const void* data, size_t size); grib_handle* grib_handle_new_from_partial_message(grib_context* c, const void* data, size_t buflen); -/* Returns a bool i.e. 0 or 1. The error code is an argument */ +/* Check whether the given key has the value 'missing'. + Returns a bool i.e. 0 or 1. The error code is an argument */ int grib_is_missing(const grib_handle* h, const char* key, int* err); -/* Returns a bool i.e. 0 or 1 */ +/* Check whether the given key is defined (exists). + Returns a bool i.e. 0 or 1 */ int grib_is_defined(const grib_handle* h, const char* key); +/* Set the given key to have the value 'missing' */ int grib_set_missing(grib_handle* h, const char* key); -/* The truncation is the Gaussian number (or order) */ + +/* The truncation is the Gaussian number (also called order) */ int grib_get_gaussian_latitudes(long truncation, double* latitudes); int grib_julian_to_datetime(double jd, long* year, long* month, long* day, long* hour, long* minute, long* second); From 796f4bc177707e9f0f0dda249b88d653a0181651 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 12 Aug 2023 14:11:59 +0100 Subject: [PATCH 141/372] Refactoring --- src/grib_util.cc | 72 +++++++++++++++++++++--------------------------- 1 file changed, 31 insertions(+), 41 deletions(-) diff --git a/src/grib_util.cc b/src/grib_util.cc index 9e69d269d..9e5dbaf39 100644 --- a/src/grib_util.cc +++ b/src/grib_util.cc @@ -826,6 +826,28 @@ static int is_constant_field(const double missingValue, const double* data_value return constant; } +static int write_out_error_data_file(const double* data_values, size_t data_values_count) +{ + FILE* ferror; + size_t ii, lcount; + + ferror = fopen("error.data", "w"); + lcount = 0; + fprintf(ferror, "# data_values_count=%zu\n", data_values_count); + fprintf(ferror, "set values={ "); + for (ii = 0; ii < data_values_count - 1; ii++) { + fprintf(ferror, "%g, ", data_values[ii]); + if (lcount > 10) { + fprintf(ferror, "\n"); + lcount = 0; + } + lcount++; + } + fprintf(ferror, "%g }", data_values[data_values_count - 1]); + fclose(ferror); + return GRIB_SUCCESS; +} + grib_handle* grib_util_set_spec(grib_handle* h, const grib_util_grid_spec* spec, const grib_util_packing_spec* packing_spec, @@ -927,26 +949,19 @@ grib_handle* grib_util_set_spec2(grib_handle* h, } while (0) grib_values values[1024] = {{0,},}; - size_t count = 0; - int i; - long editionNumber; + grib_context* c = grib_context_get_default(); grib_handle* h_out = NULL; grib_handle* h_sample = NULL; const char* grid_type = NULL; - char sample_name[1024]; /* name of sample file */ + char sample_name[1024]; /* name of the GRIB sample file */ char input_grid_type[100]; char input_packing_type[100]; - long input_bits_per_value = 0; - long input_decimal_scale_factor = 0; - size_t len = 100; + long input_bits_per_value = 0, editionNumber = 0, input_decimal_scale_factor = 0; + size_t count = 0, len = 100, slen = 20; size_t input_grid_type_len = 100; double laplacianOperator; - int packingTypeIsSet = 0; - int setSecondOrder = 0; - int setJpegPacking = 0; - int setCcsdsPacking = 0; + int i = 0, packingTypeIsSet = 0, setSecondOrder = 0, setJpegPacking = 0, setCcsdsPacking = 0; int convertEditionEarlier = 0; /* For cases when we cannot set some keys without converting */ - size_t slen = 17; int grib1_high_resolution_fix = 0; /* boolean: See GRIB-863 */ int global_grid = 0; /* boolean */ int expandBoundingBox = 0; @@ -960,7 +975,6 @@ grib_handle* grib_util_set_spec2(grib_handle* h, /* Get edition number from input handle */ if ((*err = grib_get_long(h, "edition", &editionNumber)) != 0) { - grib_context* c = grib_context_get_default(); if (c->write_on_fail) grib_write_message(h, "error.grib", "w"); return NULL; } @@ -978,8 +992,7 @@ grib_handle* grib_util_set_spec2(grib_handle* h, fprintf(stderr, "ECCODES DEBUG grib_util: input_decimal_scale_factor = %ld\n", input_decimal_scale_factor); } - /* ECC-1201, ECC-1529, ECC-1530 - Make sure input packing type is preserved */ + /* ECC-1201, ECC-1529, ECC-1530: Make sure input packing type is preserved */ if (packing_spec->packing == GRIB_UTIL_PACKING_SAME_AS_INPUT && packing_spec->packing_type == GRIB_UTIL_PACKING_TYPE_SAME_AS_INPUT) { @@ -1001,7 +1014,7 @@ grib_handle* grib_util_set_spec2(grib_handle* h, /* ECC-1269: * Code that was here was moved to "deprecated" directory - * See grib_util.GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING.c + * See grib_util.GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING. * Dealing with obsolete option GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING */ @@ -1053,7 +1066,6 @@ grib_handle* grib_util_set_spec2(grib_handle* h, } } - /* TODO: recycle h_sample handle */ h_sample = grib_handle_new_from_samples(NULL, sample_name); if (!h_sample) { *err = GRIB_INVALID_FILE; @@ -1111,7 +1123,6 @@ grib_handle* grib_util_set_spec2(grib_handle* h, COPY_SPEC_LONG(Nj); COPY_SPEC_LONG(N); - /* TODO: Compute here ... */ COPY_SPEC_DOUBLE(longitudeOfFirstGridPointInDegrees); COPY_SPEC_DOUBLE(longitudeOfLastGridPointInDegrees); @@ -1191,7 +1202,6 @@ grib_handle* grib_util_set_spec2(grib_handle* h, // Note: DxInMetres and DyInMetres // should be 'double' and not integer. WMO GRIB2 uses millimetres! // TODO(masn): Add other keys like Latin1, LoV etc - break; case GRIB_UTIL_GRID_SPEC_REDUCED_GG: @@ -1243,7 +1253,6 @@ grib_handle* grib_util_set_spec2(grib_handle* h, } } } - break; } @@ -1469,25 +1478,8 @@ grib_handle* grib_util_set_spec2(grib_handle* h, goto cleanup; } - if ((*err = grib_set_double_array(h_out, "values", data_values, data_values_count)) != 0) { - FILE* ferror; - size_t ii, lcount; - grib_context* c = grib_context_get_default(); - - ferror = fopen("error.data", "w"); - lcount = 0; - fprintf(ferror, "# data_values_count=%zu\n", data_values_count); - fprintf(ferror, "set values={ "); - for (ii = 0; ii < data_values_count - 1; ii++) { - fprintf(ferror, "%g, ", data_values[ii]); - if (lcount > 10) { - fprintf(ferror, "\n"); - lcount = 0; - } - lcount++; - } - fprintf(ferror, "%g }", data_values[data_values_count - 1]); - fclose(ferror); + if ((*err = grib_set_double_array(h_out, "values", data_values, data_values_count)) != GRIB_SUCCESS) { + write_out_error_data_file(data_values, data_values_count); if (c->write_on_fail) grib_write_message(h_out, "error.grib", "w"); goto cleanup; } @@ -1610,9 +1602,7 @@ grib_handle* grib_util_set_spec2(grib_handle* h, } /* Disable check: need to re-examine GRIB-864 */ - // if ( (*err = check_handle_against_spec(h_out, editionNumber, spec, global_grid)) != GRIB_SUCCESS) { -// grib_context* c=grib_context_get_default(); // fprintf(stderr,"GRIB_UTIL_SET_SPEC: Geometry check failed: %s\n", grib_get_error_message(*err)); // if (editionNumber == 1) { // fprintf(stderr,"Note: in GRIB edition 1 latitude and longitude values cannot be represented with sub-millidegree precision.\n"); From dcde9eeb754c7036d0f93440be575b3dda7f01af Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 12 Aug 2023 18:47:02 +0100 Subject: [PATCH 142/372] grib_util_set_spec: Refactoring --- src/grib_util.cc | 97 +++++++++++++++++++++++++++--------------------- 1 file changed, 54 insertions(+), 43 deletions(-) diff --git a/src/grib_util.cc b/src/grib_util.cc index 9e5dbaf39..c1d274a02 100644 --- a/src/grib_util.cc +++ b/src/grib_util.cc @@ -826,16 +826,16 @@ static int is_constant_field(const double missingValue, const double* data_value return constant; } +// Utility function for when we fail to set the GRIB data values. +// Write out a text file called error.data containing the count of values +// and the actual values as doubles static int write_out_error_data_file(const double* data_values, size_t data_values_count) { - FILE* ferror; - size_t ii, lcount; - - ferror = fopen("error.data", "w"); - lcount = 0; + FILE* ferror = fopen("error.data", "w"); + size_t lcount = 0; fprintf(ferror, "# data_values_count=%zu\n", data_values_count); fprintf(ferror, "set values={ "); - for (ii = 0; ii < data_values_count - 1; ii++) { + for (size_t ii = 0; ii < data_values_count - 1; ii++) { fprintf(ferror, "%g, ", data_values[ii]); if (lcount > 10) { fprintf(ferror, "\n"); @@ -848,6 +848,41 @@ static int write_out_error_data_file(const double* data_values, size_t data_valu return GRIB_SUCCESS; } +static int get_grib_sample_name(grib_handle* h, long editionNumber, + const grib_util_grid_spec2* spec, const char* grid_type, char* sample_name) +{ + const size_t sample_name_len = 1024; + switch (spec->grid_type) { + case GRIB_UTIL_GRID_SPEC_REDUCED_GG: + case GRIB_UTIL_GRID_SPEC_REDUCED_ROTATED_GG: + /* Choose a sample with the right Gaussian number and edition */ + snprintf(sample_name, sample_name_len, "%s_pl_%ld_grib%ld", grid_type, spec->N, editionNumber); + if (spec->pl && spec->pl_size) { + /* GRIB-834: pl is given so can use any of the reduced_gg_pl samples */ + snprintf(sample_name, sample_name_len, "%s_pl_grib%ld", grid_type, editionNumber); + } + break; + case GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA: + case GRIB_UTIL_GRID_SPEC_UNSTRUCTURED: + case GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL: + snprintf(sample_name, sample_name_len, "GRIB%ld", editionNumber); + break; + default: + snprintf(sample_name, sample_name_len, "%s_pl_grib%ld", grid_type, editionNumber); + } + + if (spec->pl && spec->grid_name) { + /* Cannot have BOTH pl and grid name specified */ + fprintf(stderr, "GRIB_UTIL_SET_SPEC: Cannot set BOTH spec.pl and spec.grid_name!\n"); + return GRIB_INTERNAL_ERROR; + } + if (spec->grid_name) { + snprintf(sample_name, sample_name_len, "%s_grib%ld", spec->grid_name, editionNumber); + } + + return GRIB_SUCCESS; +} + grib_handle* grib_util_set_spec(grib_handle* h, const grib_util_grid_spec* spec, const grib_util_packing_spec* packing_spec, @@ -957,8 +992,7 @@ grib_handle* grib_util_set_spec2(grib_handle* h, char input_grid_type[100]; char input_packing_type[100]; long input_bits_per_value = 0, editionNumber = 0, input_decimal_scale_factor = 0; - size_t count = 0, len = 100, slen = 20; - size_t input_grid_type_len = 100; + size_t count = 0, len = 100, slen = 20, input_grid_type_len = 100; double laplacianOperator; int i = 0, packingTypeIsSet = 0, setSecondOrder = 0, setJpegPacking = 0, setCcsdsPacking = 0; int convertEditionEarlier = 0; /* For cases when we cannot set some keys without converting */ @@ -1027,42 +1061,19 @@ grib_handle* grib_util_set_spec2(grib_handle* h, SET_STRING_VALUE("gridType", grid_type); /* The "pl" is given from the template, but "section_copy" will take care of setting the right headers */ - { - switch (spec->grid_type) { - case GRIB_UTIL_GRID_SPEC_REDUCED_GG: - case GRIB_UTIL_GRID_SPEC_REDUCED_ROTATED_GG: - /* Choose a sample with the right Gaussian number and edition */ - snprintf(sample_name, sizeof(sample_name), "%s_pl_%ld_grib%ld", grid_type, spec->N, editionNumber); - if (spec->pl && spec->pl_size) { - /* GRIB-834: pl is given so can use any of the reduced_gg_pl samples */ - snprintf(sample_name, sizeof(sample_name), "%s_pl_grib%ld", grid_type, editionNumber); - } - break; - case GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA: - case GRIB_UTIL_GRID_SPEC_UNSTRUCTURED: - if (editionNumber == 1) { /* This grid type is not available in edition 1 */ - if (h->context->debug == -1) - fprintf(stderr, "ECCODES DEBUG grib_util: '%s' specified " - "but input is GRIB1. Output must be a higher edition!\n", - grid_type); - convertEditionEarlier = 1; - } - snprintf(sample_name, sizeof(sample_name), "GRIB%ld", editionNumber); - break; - case GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL: - snprintf(sample_name, sizeof(sample_name), "GRIB%ld", editionNumber); - break; - default: - snprintf(sample_name, sizeof(sample_name), "%s_pl_grib%ld", grid_type, editionNumber); - } + if (get_grib_sample_name(h, editionNumber, spec, grid_type, sample_name) != GRIB_SUCCESS) { + goto cleanup; + } - if (spec->pl && spec->grid_name) { - /* Cannot have BOTH pl and grid name specified */ - fprintf(stderr, "GRIB_UTIL_SET_SPEC: Cannot set BOTH spec.pl and spec.grid_name!\n"); - goto cleanup; - } - if (spec->grid_name) { - snprintf(sample_name,sizeof(sample_name), "%s_grib%ld", spec->grid_name, editionNumber); + if (spec->grid_type == GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA || + spec->grid_type == GRIB_UTIL_GRID_SPEC_UNSTRUCTURED) { + if (editionNumber == 1) { /* These grid types are not available in edition 1 */ + if (h->context->debug == -1) + fprintf(stderr, + "ECCODES DEBUG grib_util: '%s' specified " + "but input is GRIB1. Output must be a higher edition!\n", + grid_type); + convertEditionEarlier = 1; } } From 1f13cec828a8fccf976295198c83ccbd1bf20648 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 12 Aug 2023 19:32:54 +0100 Subject: [PATCH 143/372] grib_util_set_spec: Get rid of redundant structs/functions --- src/eccodes_prototypes.h | 1 - src/grib_api.h | 58 +------------------------------------- src/grib_util.cc | 61 ++++------------------------------------ 3 files changed, 7 insertions(+), 113 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 6b45921c9..f7a090b41 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -1423,7 +1423,6 @@ grib_handle* grib_util_sections_copy(grib_handle* hfrom, grib_handle* hto, int w grib_string_list* grib_util_get_param_id(const char* mars_param); grib_string_list* grib_util_get_mars_param(const char* param_id); grib_handle* grib_util_set_spec(grib_handle* h, const grib_util_grid_spec* spec, const grib_util_packing_spec* packing_spec, int flags, const double* data_values, size_t data_values_count, int* err); -grib_handle* grib_util_set_spec2(grib_handle* h, const grib_util_grid_spec2* spec, const grib_util_packing_spec* packing_spec, int flags, const double* data_values, size_t data_values_count, int* err); int parse_keyval_string(const char* grib_tool, char* arg, int values_required, int default_type, grib_values values[], int* count); int grib2_is_PDTN_EPS(long productDefinitionTemplateNumber); int grib2_is_PDTN_Chemical(long productDefinitionTemplateNumber); diff --git a/src/grib_api.h b/src/grib_api.h index 0d62c0f5a..28ff1eec8 100644 --- a/src/grib_api.h +++ b/src/grib_api.h @@ -1403,55 +1403,7 @@ int grib_get_message_size(const grib_handle* h, size_t* size); #define GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL 11 #define GRIB_UTIL_GRID_SPEC_UNSTRUCTURED 12 - typedef struct grib_util_grid_spec -{ - int grid_type; /* e.g. GRIB_UTIL_GRID_SPEC_REGULAR_LL etc */ - - /* Grid */ - long Ni; - long Nj; - - double iDirectionIncrementInDegrees; - double jDirectionIncrementInDegrees; - - double longitudeOfFirstGridPointInDegrees; - double longitudeOfLastGridPointInDegrees; - - double latitudeOfFirstGridPointInDegrees; - double latitudeOfLastGridPointInDegrees; - - /* Rotation */ - long uvRelativeToGrid; - double latitudeOfSouthernPoleInDegrees; - double longitudeOfSouthernPoleInDegrees; - - /* Scanning mode */ - long iScansNegatively; - long jScansPositively; - - /* Gaussian number */ - long N; - - /* Bitmap */ - long bitmapPresent; - double missingValue; /* 0 means use the default */ - - /* 'pl' array for reduced Gaussian grids */ - const long* pl; - long pl_size; - - /* Spherical harmonics */ - long truncation; - - /* Polar stereographic */ - double orientationOfTheGridInDegrees; - long DyInMetres; - long DxInMetres; - -} grib_util_grid_spec; - -typedef struct grib_util_grid_spec2 { int grid_type; /* e.g. GRIB_UTIL_GRID_SPEC_REGULAR_LL etc */ const char* grid_name; /* e.g. N320 */ @@ -1498,7 +1450,7 @@ typedef struct grib_util_grid_spec2 long DyInMetres; long DxInMetres; -} grib_util_grid_spec2; +} grib_util_grid_spec; #define GRIB_UTIL_PACKING_TYPE_SAME_AS_INPUT 0 #define GRIB_UTIL_PACKING_TYPE_SPECTRAL_COMPLEX 1 @@ -1554,14 +1506,6 @@ grib_handle* grib_util_set_spec(grib_handle* h, size_t data_values_count, int* err); -grib_handle* grib_util_set_spec2(grib_handle* h, - const grib_util_grid_spec2* grid_spec, - const grib_util_packing_spec* packing_spec, /* NULL for defaults (same as input) */ - int flags, - const double* data_values, - size_t data_values_count, - int* err); - int parse_keyval_string(const char* grib_tool, char* arg, int values_required, int default_type, grib_values values[], int* count); grib_handle* grib_new_from_file(grib_context* c, FILE* f, int headers_only, int* error); diff --git a/src/grib_util.cc b/src/grib_util.cc index c1d274a02..59aa54b1c 100644 --- a/src/grib_util.cc +++ b/src/grib_util.cc @@ -374,7 +374,7 @@ static const char* get_packing_spec_packing_type_name(long packing_spec_packing_ /* For debugging purposes */ static void print_values(grib_context* c, - const grib_util_grid_spec2* spec, + const grib_util_grid_spec* spec, const grib_util_packing_spec* packing_spec, const double* data_values, const size_t data_values_count, /* the data pay load */ const grib_values* keyval_pairs, const size_t count) /* keys and their values */ @@ -612,7 +612,7 @@ static int check_values(const double* data_values, size_t data_values_count) return GRIB_SUCCESS; }*/ -static int check_geometry(grib_handle* handle, const grib_util_grid_spec2* spec, +static int check_geometry(grib_handle* handle, const grib_util_grid_spec* spec, size_t data_values_count, int specified_as_global) { int err = 0; @@ -634,11 +634,12 @@ static int check_geometry(grib_handle* handle, const grib_util_grid_spec2* spec, return err; } + #if defined(CHECK_HANDLE_AGAINST_SPEC) /* Check what is coded in the handle is what is requested by the spec. */ /* Return GRIB_SUCCESS if the geometry matches, otherwise the error code */ static int check_handle_against_spec(grib_handle* handle, const long edition, - const grib_util_grid_spec2* spec, int global_grid) + const grib_util_grid_spec* spec, int global_grid) { int err = 0; int check_latitudes = 1; @@ -849,7 +850,7 @@ static int write_out_error_data_file(const double* data_values, size_t data_valu } static int get_grib_sample_name(grib_handle* h, long editionNumber, - const grib_util_grid_spec2* spec, const char* grid_type, char* sample_name) + const grib_util_grid_spec* spec, const char* grid_type, char* sample_name) { const size_t sample_name_len = 1024; switch (spec->grid_type) { @@ -884,57 +885,7 @@ static int get_grib_sample_name(grib_handle* h, long editionNumber, } grib_handle* grib_util_set_spec(grib_handle* h, - const grib_util_grid_spec* spec, - const grib_util_packing_spec* packing_spec, - int flags, - const double* data_values, - size_t data_values_count, - int* err) -{ - /* Create a spec v2 from spec v1 */ - grib_util_grid_spec2 spec2; - Assert(h); - - spec2.grid_type = spec->grid_type; - spec2.Ni = spec->Ni; - spec2.Nj = spec->Nj; - spec2.iDirectionIncrementInDegrees = spec->iDirectionIncrementInDegrees; - spec2.jDirectionIncrementInDegrees = spec->jDirectionIncrementInDegrees; - spec2.longitudeOfFirstGridPointInDegrees = spec->longitudeOfFirstGridPointInDegrees; - spec2.longitudeOfLastGridPointInDegrees = spec->longitudeOfLastGridPointInDegrees; - spec2.latitudeOfFirstGridPointInDegrees = spec->latitudeOfFirstGridPointInDegrees; - spec2.latitudeOfLastGridPointInDegrees = spec->latitudeOfLastGridPointInDegrees; - spec2.uvRelativeToGrid = spec->uvRelativeToGrid; - spec2.latitudeOfSouthernPoleInDegrees = spec->latitudeOfSouthernPoleInDegrees; - spec2.longitudeOfSouthernPoleInDegrees = spec->longitudeOfSouthernPoleInDegrees; - spec2.iScansNegatively = spec->iScansNegatively; - spec2.jScansPositively = spec->jScansPositively; - spec2.N = spec->N; - spec2.bitmapPresent = spec->bitmapPresent; - spec2.missingValue = spec->missingValue; - spec2.pl = spec->pl; - spec2.pl_size = spec->pl_size; - spec2.truncation = spec->truncation; - spec2.orientationOfTheGridInDegrees = spec->orientationOfTheGridInDegrees; - spec2.DyInMetres = spec->DyInMetres; - spec2.DxInMetres = spec->DxInMetres; - - /* New data members of spec2 take default values */ - spec2.angleOfRotationInDegrees = 0; - spec2.grid_name = NULL; - - return grib_util_set_spec2( - h, - &spec2, - packing_spec, - flags, - data_values, - data_values_count, - err); -} - -grib_handle* grib_util_set_spec2(grib_handle* h, - const grib_util_grid_spec2* spec, + const grib_util_grid_spec* spec, const grib_util_packing_spec* packing_spec, int flags, const double* data_values, From 1a3b1554f998420f73bdb07e2375e4ee075ed940 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 12 Aug 2023 22:21:58 +0100 Subject: [PATCH 144/372] Testing: MARS keys --- tests/grib_mars_keys2.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/grib_mars_keys2.sh b/tests/grib_mars_keys2.sh index 2e86b581a..4024a06d0 100755 --- a/tests/grib_mars_keys2.sh +++ b/tests/grib_mars_keys2.sh @@ -23,9 +23,11 @@ for cfg in $ECCODES_DEFINITION_PATH/mars/grib.*.*.def; do # Each file should be of the form grib.$stream.$type.def stream=$(echo $b | awk -F. '{print $2}') type=$(echo $b | awk -F. '{print $3}') - ${tools_dir}/grib_set -s stream=$stream,type=$type $grib2_sample $tempGrib - ${tools_dir}/grib_ls -m $tempGrib > /dev/null - i=$((i + 1)) + if [ $type = "fc" -o $type = "an" ]; then + ${tools_dir}/grib_set -s stream=$stream,type=$type $grib2_sample $tempGrib + ${tools_dir}/grib_ls -m $tempGrib > /dev/null + i=$((i + 1)) + fi done echo "Checked $i files" From 3a122d8fc20917e846d1c8d53825bc22a5a339d3 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 12 Aug 2023 23:43:27 +0100 Subject: [PATCH 145/372] Dead code removal: sh nearest --- src/CMakeLists.txt | 1 - src/{ => deprecated}/grib_nearest_class_sh.cc | 0 src/eccodes_prototypes.h | 2 -- src/grib_nearest_class.h | 1 - src/grib_nearest_factory.h | 1 - 5 files changed, 5 deletions(-) rename src/{ => deprecated}/grib_nearest_class_sh.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c7161ad97..78aaa903d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -323,7 +323,6 @@ list( APPEND eccodes_src_files grib_nearest_class_regular.cc grib_nearest_class_reduced.cc grib_nearest_class_latlon_reduced.cc - grib_nearest_class_sh.cc grib_nearest_class_lambert_conformal.cc grib_nearest_class_lambert_azimuthal_equal_area.cc grib_nearest_class_mercator.cc diff --git a/src/grib_nearest_class_sh.cc b/src/deprecated/grib_nearest_class_sh.cc similarity index 100% rename from src/grib_nearest_class_sh.cc rename to src/deprecated/grib_nearest_class_sh.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index f7a090b41..944a8f043 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -1348,8 +1348,6 @@ grib_nearest* grib_nearest_factory(grib_handle* h, grib_arguments* args); /* grib_nearest_class_latlon_reduced.cc*/ -/* grib_nearest_class_sh.cc*/ - /* grib_nearest_class_lambert_conformal.cc*/ /* grib_nearest_class_polar_stereographic.cc*/ diff --git a/src/grib_nearest_class.h b/src/grib_nearest_class.h index e6e58ed80..531eb200a 100644 --- a/src/grib_nearest_class.h +++ b/src/grib_nearest_class.h @@ -7,5 +7,4 @@ extern grib_nearest_class* grib_nearest_class_mercator; extern grib_nearest_class* grib_nearest_class_polar_stereographic; extern grib_nearest_class* grib_nearest_class_reduced; extern grib_nearest_class* grib_nearest_class_regular; -extern grib_nearest_class* grib_nearest_class_sh; extern grib_nearest_class* grib_nearest_class_space_view; diff --git a/src/grib_nearest_factory.h b/src/grib_nearest_factory.h index bf9f01ec7..be537e8e6 100644 --- a/src/grib_nearest_factory.h +++ b/src/grib_nearest_factory.h @@ -7,5 +7,4 @@ { "polar_stereographic", &grib_nearest_class_polar_stereographic, }, { "reduced", &grib_nearest_class_reduced, }, { "regular", &grib_nearest_class_regular, }, -{ "sh", &grib_nearest_class_sh, }, { "space_view", &grib_nearest_class_space_view, }, From 0f220e44fec77efe35cd968d50339db0a3c4044a Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 13 Aug 2023 13:52:07 +0100 Subject: [PATCH 146/372] Testing: dump in different modes --- tests/CMakeLists.txt | 2 ++ tests/codes_dump_content.cc | 35 +++++++++++++++++++++++++++++++++++ tests/codes_dump_content.sh | 24 ++++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 tests/codes_dump_content.cc create mode 100755 tests/codes_dump_content.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index eafa1df4c..9b7110b9c 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -47,6 +47,7 @@ list(APPEND test_c_bins codes_dump_action_tree codes_set_samples_path codes_compare_keys + codes_dump_content grib_sh_ieee64 grib_ieee grib_set_bytes @@ -290,6 +291,7 @@ if( HAVE_BUILD_TOOLS ) codes_dump_action_tree codes_set_samples_path codes_compare_keys + codes_dump_content grib_dump grib_dump_debug grib_dump_json diff --git a/tests/codes_dump_content.cc b/tests/codes_dump_content.cc new file mode 100644 index 000000000..f2ab36430 --- /dev/null +++ b/tests/codes_dump_content.cc @@ -0,0 +1,35 @@ +/* + * (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 +#undef NDEBUG +#include +#include "eccodes.h" + +int main(int argc, char* argv[]) +{ + int err = 0; + assert (argc == 3); + + char* mode = argv[1]; + char* filename = argv[2]; + + FILE* in = fopen(filename, "rb"); + assert(in); + + codes_handle* h = codes_handle_new_from_file(0, in, PRODUCT_ANY, &err); + assert(h); + + grib_dump_content(h, stdout, mode, 0, NULL); + + codes_handle_delete(h); + fclose(in); + + return 0; +} diff --git a/tests/codes_dump_content.sh b/tests/codes_dump_content.sh new file mode 100755 index 000000000..1cad7d169 --- /dev/null +++ b/tests/codes_dump_content.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +label="codes_dump_content_test" +temp=temp.$label.grib + +infile=$data_dir/sample.grib2 + +modes="default wmo json serialize debug grib_encode_C" +for mode in $modes; do + $EXEC ${test_dir}/codes_dump_content $mode $infile +done + +# Clean up +rm -f $temp From 6b1af9c38498277b48477f2a848c6309b645f9ca Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 13 Aug 2023 14:27:43 +0100 Subject: [PATCH 147/372] Testing: Invalid dump modes --- src/grib_dumper_class.cc | 12 ++++++++++++ tests/codes_dump_content.sh | 5 ++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/grib_dumper_class.cc b/src/grib_dumper_class.cc index 2c68e22df..3f204957c 100644 --- a/src/grib_dumper_class.cc +++ b/src/grib_dumper_class.cc @@ -81,6 +81,16 @@ void grib_dump_content(const grib_handle* h, FILE* f, const char* mode, unsigned { grib_dumper* dumper; dumper = grib_dumper_factory(mode ? mode : "serialize", h, f, flags, data); + if (!dumper) { + fprintf(stderr, "Here are some possible values for the dumper mode:\n"); + for (size_t i = 0; i < NUMBER(table); i++) { + const char* t = table[i].type; + if (strstr(t, "bufr") == NULL && strstr(t, "grib") == NULL) { + fprintf(stderr, "\t%s\n", t); + } + } + return; + } grib_dump_header(dumper, h); grib_dump_accessors_block(dumper, h->root->block); grib_dump_footer(dumper, h); @@ -92,6 +102,7 @@ void grib_dump_keys(grib_handle* h, FILE* f, const char* mode, unsigned long fla size_t i; grib_accessor* acc = NULL; grib_dumper* dumper = grib_dumper_factory(mode ? mode : "serialize", h, f, flags, data); + if (!dumper) return; for (i = 0; i < num_keys; ++i) { acc = grib_find_accessor(h, keys[i]); if (acc) @@ -125,6 +136,7 @@ void codes_dump_bufr_flat(grib_accessors_list* al, grib_handle* h, FILE* f, cons grib_dumper* dumper = NULL; Assert(h->product_kind == PRODUCT_BUFR); dumper = grib_dumper_factory(mode ? mode : "serialize", h, f, flags, data); + if (!dumper) return; grib_dump_header(dumper, h); grib_dump_accessors_list(dumper, al); grib_dump_footer(dumper, h); diff --git a/tests/codes_dump_content.sh b/tests/codes_dump_content.sh index 1cad7d169..e5d72b343 100755 --- a/tests/codes_dump_content.sh +++ b/tests/codes_dump_content.sh @@ -11,7 +11,7 @@ . ./include.ctest.sh label="codes_dump_content_test" -temp=temp.$label.grib +temp=temp.$label.txt infile=$data_dir/sample.grib2 @@ -20,5 +20,8 @@ for mode in $modes; do $EXEC ${test_dir}/codes_dump_content $mode $infile done +${test_dir}/codes_dump_content rubbish $infile > $temp 2>&1 +grep -q "ERROR.*Unknown type : 'rubbish' for dumper" $temp + # Clean up rm -f $temp From 0eea2e41ffa8868b1713b45b826d45b59fa66319 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 13 Aug 2023 15:15:27 +0100 Subject: [PATCH 148/372] Dead code removal: laplacian accessor --- src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 1 - .../grib_accessor_class_laplacian.cc | 0 src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - src/grib_accessor_classes_hash.cc | 614 +++++++++--------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 8 files changed, 311 insertions(+), 310 deletions(-) rename src/{ => deprecated}/grib_accessor_class_laplacian.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 78aaa903d..97b042014 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -140,7 +140,6 @@ list( APPEND eccodes_src_files grib_accessor_class_message.cc grib_accessor_class_nearest.cc grib_accessor_class_ksec1expver.cc - grib_accessor_class_laplacian.cc grib_accessor_class_label.cc grib_accessor_class_long.cc grib_accessor_class_lookup.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index a6807276d..23c94b712 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -70,7 +70,6 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |-----grib_accessor_class_ieeefloat |-----grib_accessor_class_julian_date |-----grib_accessor_class_julian_day - |-----grib_accessor_class_laplacian |-----grib_accessor_class_latitudes |-----grib_accessor_class_latlon_increment |-----grib_accessor_class_latlonvalues diff --git a/src/grib_accessor_class_laplacian.cc b/src/deprecated/grib_accessor_class_laplacian.cc similarity index 100% rename from src/grib_accessor_class_laplacian.cc rename to src/deprecated/grib_accessor_class_laplacian.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 944a8f043..08abc0577 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -491,8 +491,6 @@ grib_nearest* grib_nearest_new(const grib_handle* h, int* error); /* grib_accessor_class_ksec1expver.cc*/ -/* grib_accessor_class_laplacian.cc*/ - /* grib_accessor_class_label.cc*/ /* grib_accessor_class_long.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index 24cc9bd76..16d0b32b5 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -126,7 +126,6 @@ extern grib_accessor_class* grib_accessor_class_julian_date; extern grib_accessor_class* grib_accessor_class_julian_day; extern grib_accessor_class* grib_accessor_class_ksec1expver; extern grib_accessor_class* grib_accessor_class_label; -extern grib_accessor_class* grib_accessor_class_laplacian; extern grib_accessor_class* grib_accessor_class_latitudes; extern grib_accessor_class* grib_accessor_class_latlon_increment; extern grib_accessor_class* grib_accessor_class_latlonvalues; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index 6f07dddd6..b0f921efc 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,12 +37,12 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 213 +#define TOTAL_KEYWORDS 212 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 -#define MAX_HASH_VALUE 594 -/* maximum key range = 594, duplicates = 0 */ +#define MAX_HASH_VALUE 620 +/* maximum key range = 620, duplicates = 0 */ #ifdef __GNUC__ @@ -55,32 +55,32 @@ static unsigned int grib_accessor_classes_get_id (const char *str, size_t len) { static const unsigned short asso_values[] = { - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 0, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 2, 145, - 14, 6, 41, 595, 48, 595, 0, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 0, 595, 0, 85, 137, - 0, 0, 61, 29, 177, 1, 0, 3, 76, 139, - 13, 57, 20, 595, 129, 1, 42, 62, 196, 1, - 1, 6, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595 + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 0, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 2, 144, + 14, 10, 20, 621, 7, 621, 0, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 0, 621, 0, 82, 111, + 0, 0, 102, 29, 186, 1, 0, 2, 76, 193, + 13, 57, 20, 621, 128, 1, 42, 62, 201, 3, + 18, 21, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621 }; unsigned int hval = len; @@ -117,17 +117,14 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, -#line 186 "accessor_class_list.gperf" +#line 185 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, -#line 183 "accessor_class_list.gperf" +#line 182 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, - {""}, {""}, {""}, -#line 77 "accessor_class_list.gperf" - {"dirty", &grib_accessor_class_dirty}, - {""}, -#line 184 "accessor_class_list.gperf" + {""}, {""}, {""}, {""}, {""}, +#line 183 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, {""}, #line 68 "accessor_class_list.gperf" @@ -140,27 +137,30 @@ static const struct accessor_class_hash classes[] = {"data_simple_packing", &grib_accessor_class_data_simple_packing}, #line 70 "accessor_class_list.gperf" {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 177 "accessor_class_list.gperf" +#line 176 "accessor_class_list.gperf" {"section", &grib_accessor_class_section}, -#line 163 "accessor_class_list.gperf" +#line 162 "accessor_class_list.gperf" {"pad", &grib_accessor_class_pad}, -#line 189 "accessor_class_list.gperf" +#line 188 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, #line 76 "accessor_class_list.gperf" {"dictionary", &grib_accessor_class_dictionary}, - {""}, {""}, {""}, +#line 124 "accessor_class_list.gperf" + {"int16", &grib_accessor_class_int16}, +#line 77 "accessor_class_list.gperf" + {"dirty", &grib_accessor_class_dirty}, + {""}, #line 67 "accessor_class_list.gperf" {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 179 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" {"section_padding", &grib_accessor_class_section_padding}, -#line 180 "accessor_class_list.gperf" +#line 179 "accessor_class_list.gperf" {"section_pointer", &grib_accessor_class_section_pointer}, #line 114 "accessor_class_list.gperf" {"gen", &grib_accessor_class_gen}, #line 126 "accessor_class_list.gperf" {"int32", &grib_accessor_class_int32}, -#line 82 "accessor_class_list.gperf" - {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, + {""}, #line 59 "accessor_class_list.gperf" {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, {""}, @@ -168,10 +168,12 @@ static const struct accessor_class_hash classes[] = {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, #line 63 "accessor_class_list.gperf" {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, - {""}, {""}, -#line 176 "accessor_class_list.gperf" +#line 128 "accessor_class_list.gperf" + {"int64", &grib_accessor_class_int64}, + {""}, +#line 175 "accessor_class_list.gperf" {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 178 "accessor_class_list.gperf" +#line 177 "accessor_class_list.gperf" {"section_length", &grib_accessor_class_section_length}, #line 66 "accessor_class_list.gperf" {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, @@ -181,14 +183,16 @@ static const struct accessor_class_hash classes[] = {"gds_is_present", &grib_accessor_class_gds_is_present}, #line 45 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, -#line 198 "accessor_class_list.gperf" +#line 197 "accessor_class_list.gperf" {"time", &grib_accessor_class_time}, #line 115 "accessor_class_list.gperf" {"getenv", &grib_accessor_class_getenv}, {""}, #line 106 "accessor_class_list.gperf" {"g2grid", &grib_accessor_class_g2grid}, - {""}, {""}, +#line 82 "accessor_class_list.gperf" + {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, + {""}, #line 46 "accessor_class_list.gperf" {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, #line 105 "accessor_class_list.gperf" @@ -197,25 +201,22 @@ static const struct accessor_class_hash classes[] = {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, #line 61 "accessor_class_list.gperf" {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, -#line 164 "accessor_class_list.gperf" +#line 163 "accessor_class_list.gperf" {"padding", &grib_accessor_class_padding}, - {""}, {""}, -#line 128 "accessor_class_list.gperf" - {"int64", &grib_accessor_class_int64}, + {""}, {""}, {""}, #line 109 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, -#line 151 "accessor_class_list.gperf" +#line 150 "accessor_class_list.gperf" {"nearest", &grib_accessor_class_nearest}, {""}, {""}, {""}, -#line 196 "accessor_class_list.gperf" +#line 195 "accessor_class_list.gperf" {"sum", &grib_accessor_class_sum}, -#line 124 "accessor_class_list.gperf" - {"int16", &grib_accessor_class_int16}, -#line 211 "accessor_class_list.gperf" + {""}, +#line 210 "accessor_class_list.gperf" {"uint8", &grib_accessor_class_uint8}, #line 100 "accessor_class_list.gperf" {"g2_eps", &grib_accessor_class_g2_eps}, -#line 195 "accessor_class_list.gperf" +#line 194 "accessor_class_list.gperf" {"step_in_units", &grib_accessor_class_step_in_units}, {""}, #line 133 "accessor_class_list.gperf" @@ -224,131 +225,125 @@ static const struct accessor_class_hash classes[] = {"julian_date", &grib_accessor_class_julian_date}, #line 65 "accessor_class_list.gperf" {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, -#line 207 "accessor_class_list.gperf" - {"uint32", &grib_accessor_class_uint32}, {""}, +#line 208 "accessor_class_list.gperf" + {"uint64", &grib_accessor_class_uint64}, #line 49 "accessor_class_list.gperf" {"data_complex_packing", &grib_accessor_class_data_complex_packing}, #line 50 "accessor_class_list.gperf" {"data_dummy_field", &grib_accessor_class_data_dummy_field}, - {""}, {""}, {""}, -#line 165 "accessor_class_list.gperf" +#line 206 "accessor_class_list.gperf" + {"uint32", &grib_accessor_class_uint32}, + {""}, {""}, +#line 164 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, {""}, #line 110 "accessor_class_list.gperf" {"g2step_range", &grib_accessor_class_g2step_range}, #line 69 "accessor_class_list.gperf" {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, -#line 136 "accessor_class_list.gperf" - {"laplacian", &grib_accessor_class_laplacian}, - {""}, {""}, #line 13 "accessor_class_list.gperf" {"bit", &grib_accessor_class_bit}, #line 15 "accessor_class_list.gperf" {"bits", &grib_accessor_class_bits}, -#line 104 "accessor_class_list.gperf" - {"g2date", &grib_accessor_class_g2date}, + {""}, #line 14 "accessor_class_list.gperf" {"bitmap", &grib_accessor_class_bitmap}, + {""}, +#line 104 "accessor_class_list.gperf" + {"g2date", &grib_accessor_class_g2date}, + {""}, #line 102 "accessor_class_list.gperf" {"g2bitmap", &grib_accessor_class_g2bitmap}, #line 62 "accessor_class_list.gperf" {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, #line 60 "accessor_class_list.gperf" {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, -#line 192 "accessor_class_list.gperf" +#line 191 "accessor_class_list.gperf" {"statistics", &grib_accessor_class_statistics}, -#line 29 "accessor_class_list.gperf" - {"bytes", &grib_accessor_class_bytes}, - {""}, -#line 152 "accessor_class_list.gperf" - {"non_alpha", &grib_accessor_class_non_alpha}, #line 16 "accessor_class_list.gperf" {"bits_per_value", &grib_accessor_class_bits_per_value}, -#line 185 "accessor_class_list.gperf" + {""}, +#line 151 "accessor_class_list.gperf" + {"non_alpha", &grib_accessor_class_non_alpha}, +#line 184 "accessor_class_list.gperf" {"simple_packing_error", &grib_accessor_class_simple_packing_error}, -#line 191 "accessor_class_list.gperf" - {"sprintf", &grib_accessor_class_sprintf}, - {""}, {""}, -#line 193 "accessor_class_list.gperf" + {""}, {""}, {""}, {""}, +#line 192 "accessor_class_list.gperf" {"statistics_spectral", &grib_accessor_class_statistics_spectral}, #line 113 "accessor_class_list.gperf" {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, {""}, #line 131 "accessor_class_list.gperf" {"iterator", &grib_accessor_class_iterator}, - {""}, +#line 29 "accessor_class_list.gperf" + {"bytes", &grib_accessor_class_bytes}, #line 98 "accessor_class_list.gperf" {"g2_aerosol", &grib_accessor_class_g2_aerosol}, -#line 154 "accessor_class_list.gperf" +#line 153 "accessor_class_list.gperf" {"number_of_points", &grib_accessor_class_number_of_points}, -#line 214 "accessor_class_list.gperf" +#line 213 "accessor_class_list.gperf" {"unsigned", &grib_accessor_class_unsigned}, {""}, {""}, {""}, {""}, -#line 209 "accessor_class_list.gperf" - {"uint64", &grib_accessor_class_uint64}, -#line 215 "accessor_class_list.gperf" +#line 173 "accessor_class_list.gperf" + {"scale", &grib_accessor_class_scale}, +#line 214 "accessor_class_list.gperf" {"unsigned_bits", &grib_accessor_class_unsigned_bits}, {""}, -#line 155 "accessor_class_list.gperf" +#line 154 "accessor_class_list.gperf" {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, #line 116 "accessor_class_list.gperf" {"global_gaussian", &grib_accessor_class_global_gaussian}, -#line 200 "accessor_class_list.gperf" +#line 199 "accessor_class_list.gperf" {"to_integer", &grib_accessor_class_to_integer}, {""}, -#line 194 "accessor_class_list.gperf" +#line 193 "accessor_class_list.gperf" {"step_human_readable", &grib_accessor_class_step_human_readable}, #line 80 "accessor_class_list.gperf" {"element", &grib_accessor_class_element}, -#line 182 "accessor_class_list.gperf" +#line 181 "accessor_class_list.gperf" {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, -#line 137 "accessor_class_list.gperf" +#line 136 "accessor_class_list.gperf" {"latitudes", &grib_accessor_class_latitudes}, -#line 122 "accessor_class_list.gperf" - {"ieeefloat", &grib_accessor_class_ieeefloat}, -#line 160 "accessor_class_list.gperf" - {"offset_file", &grib_accessor_class_offset_file}, -#line 212 "accessor_class_list.gperf" + {""}, +#line 48 "accessor_class_list.gperf" + {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, +#line 211 "accessor_class_list.gperf" {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, -#line 208 "accessor_class_list.gperf" - {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, -#line 170 "accessor_class_list.gperf" +#line 169 "accessor_class_list.gperf" {"raw", &grib_accessor_class_raw}, - {""}, {""}, {""}, {""}, -#line 142 "accessor_class_list.gperf" +#line 209 "accessor_class_list.gperf" + {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, + {""}, {""}, +#line 207 "accessor_class_list.gperf" + {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, + {""}, +#line 141 "accessor_class_list.gperf" {"long", &grib_accessor_class_long}, {""}, #line 79 "accessor_class_list.gperf" {"double", &grib_accessor_class_double}, {""}, {""}, -#line 148 "accessor_class_list.gperf" - {"md5", &grib_accessor_class_md5}, -#line 174 "accessor_class_list.gperf" - {"scale", &grib_accessor_class_scale}, - {""}, #line 101 "accessor_class_list.gperf" {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, -#line 149 "accessor_class_list.gperf" - {"message", &grib_accessor_class_message}, - {""}, -#line 171 "accessor_class_list.gperf" +#line 190 "accessor_class_list.gperf" + {"sprintf", &grib_accessor_class_sprintf}, + {""}, {""}, {""}, +#line 170 "accessor_class_list.gperf" {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, -#line 146 "accessor_class_list.gperf" - {"mars_param", &grib_accessor_class_mars_param}, -#line 107 "accessor_class_list.gperf" - {"g2latlon", &grib_accessor_class_g2latlon}, -#line 201 "accessor_class_list.gperf" - {"to_string", &grib_accessor_class_to_string}, + {""}, #line 78 "accessor_class_list.gperf" {"divdouble", &grib_accessor_class_divdouble}, - {""}, {""}, -#line 48 "accessor_class_list.gperf" - {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, - {""}, +#line 107 "accessor_class_list.gperf" + {"g2latlon", &grib_accessor_class_g2latlon}, +#line 200 "accessor_class_list.gperf" + {"to_string", &grib_accessor_class_to_string}, +#line 180 "accessor_class_list.gperf" + {"select_step_template", &grib_accessor_class_select_step_template}, + {""}, {""}, {""}, {""}, #line 135 "accessor_class_list.gperf" {"label", &grib_accessor_class_label}, - {""}, {""}, {""}, {""}, + {""}, #line 19 "accessor_class_list.gperf" {"bufr_data_array", &grib_accessor_class_bufr_data_array}, {""}, @@ -359,284 +354,298 @@ static const struct accessor_class_hash classes[] = {""}, {""}, #line 26 "accessor_class_list.gperf" {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, -#line 57 "accessor_class_list.gperf" - {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, + {""}, #line 121 "accessor_class_list.gperf" {"ibmfloat", &grib_accessor_class_ibmfloat}, -#line 150 "accessor_class_list.gperf" - {"message_copy", &grib_accessor_class_message_copy}, -#line 167 "accessor_class_list.gperf" - {"padtomultiple", &grib_accessor_class_padtomultiple}, -#line 210 "accessor_class_list.gperf" - {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, +#line 57 "accessor_class_list.gperf" + {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, +#line 122 "accessor_class_list.gperf" + {"ieeefloat", &grib_accessor_class_ieeefloat}, +#line 159 "accessor_class_list.gperf" + {"offset_file", &grib_accessor_class_offset_file}, #line 28 "accessor_class_list.gperf" {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, -#line 204 "accessor_class_list.gperf" +#line 166 "accessor_class_list.gperf" + {"padtomultiple", &grib_accessor_class_padtomultiple}, + {""}, +#line 203 "accessor_class_list.gperf" {"trim", &grib_accessor_class_trim}, {""}, #line 111 "accessor_class_list.gperf" {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, -#line 181 "accessor_class_list.gperf" - {"select_step_template", &grib_accessor_class_select_step_template}, - {""}, {""}, -#line 202 "accessor_class_list.gperf" + {""}, {""}, {""}, +#line 201 "accessor_class_list.gperf" {"transient", &grib_accessor_class_transient}, -#line 221 "accessor_class_list.gperf" - {"when", &grib_accessor_class_when}, + {""}, #line 117 "accessor_class_list.gperf" {"group", &grib_accessor_class_group}, -#line 168 "accessor_class_list.gperf" - {"position", &grib_accessor_class_position}, {""}, +#line 167 "accessor_class_list.gperf" + {"position", &grib_accessor_class_position}, #line 58 "accessor_class_list.gperf" {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, #line 51 "accessor_class_list.gperf" {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 203 "accessor_class_list.gperf" +#line 202 "accessor_class_list.gperf" {"transient_darray", &grib_accessor_class_transient_darray}, - {""}, -#line 147 "accessor_class_list.gperf" - {"mars_step", &grib_accessor_class_mars_step}, -#line 173 "accessor_class_list.gperf" + {""}, {""}, +#line 172 "accessor_class_list.gperf" {"round", &grib_accessor_class_round}, #line 85 "accessor_class_list.gperf" {"g1_message_length", &grib_accessor_class_g1_message_length}, -#line 161 "accessor_class_list.gperf" - {"offset_values", &grib_accessor_class_offset_values}, - {""}, {""}, {""}, +#line 125 "accessor_class_list.gperf" + {"int16_little_endian", &grib_accessor_class_int16_little_endian}, +#line 220 "accessor_class_list.gperf" + {"when", &grib_accessor_class_when}, #line 18 "accessor_class_list.gperf" {"budgdate", &grib_accessor_class_budgdate}, {""}, +#line 147 "accessor_class_list.gperf" + {"md5", &grib_accessor_class_md5}, + {""}, {""}, #line 127 "accessor_class_list.gperf" {"int32_little_endian", &grib_accessor_class_int32_little_endian}, - {""}, -#line 145 "accessor_class_list.gperf" +#line 148 "accessor_class_list.gperf" + {"message", &grib_accessor_class_message}, +#line 144 "accessor_class_list.gperf" {"lookup", &grib_accessor_class_lookup}, -#line 218 "accessor_class_list.gperf" - {"values", &grib_accessor_class_values}, -#line 197 "accessor_class_list.gperf" +#line 196 "accessor_class_list.gperf" {"suppressed", &grib_accessor_class_suppressed}, - {""}, +#line 145 "accessor_class_list.gperf" + {"mars_param", &grib_accessor_class_mars_param}, #line 43 "accessor_class_list.gperf" {"data_2order_packing", &grib_accessor_class_data_2order_packing}, -#line 144 "accessor_class_list.gperf" +#line 129 "accessor_class_list.gperf" + {"int64_little_endian", &grib_accessor_class_int64_little_endian}, +#line 143 "accessor_class_list.gperf" {"longitudes", &grib_accessor_class_longitudes}, - {""}, {""}, {""}, {""}, -#line 190 "accessor_class_list.gperf" - {"spectral_truncation", &grib_accessor_class_spectral_truncation}, +#line 217 "accessor_class_list.gperf" + {"values", &grib_accessor_class_values}, +#line 152 "accessor_class_list.gperf" + {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, {""}, -#line 72 "accessor_class_list.gperf" - {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, -#line 205 "accessor_class_list.gperf" +#line 189 "accessor_class_list.gperf" + {"spectral_truncation", &grib_accessor_class_spectral_truncation}, + {""}, {""}, +#line 204 "accessor_class_list.gperf" {"uint16", &grib_accessor_class_uint16}, #line 96 "accessor_class_list.gperf" {"g1step_range", &grib_accessor_class_g1step_range}, {""}, {""}, -#line 73 "accessor_class_list.gperf" - {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, - {""}, -#line 123 "accessor_class_list.gperf" - {"ifs_param", &grib_accessor_class_ifs_param}, - {""}, +#line 38 "accessor_class_list.gperf" + {"concept", &grib_accessor_class_concept}, + {""}, {""}, {""}, #line 88 "accessor_class_list.gperf" {"g1date", &grib_accessor_class_g1date}, - {""}, +#line 72 "accessor_class_list.gperf" + {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, #line 87 "accessor_class_list.gperf" {"g1bitmap", &grib_accessor_class_g1bitmap}, #line 56 "accessor_class_list.gperf" {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, -#line 129 "accessor_class_list.gperf" - {"int64_little_endian", &grib_accessor_class_int64_little_endian}, -#line 140 "accessor_class_list.gperf" - {"library_version", &grib_accessor_class_library_version}, - {""}, {""}, +#line 149 "accessor_class_list.gperf" + {"message_copy", &grib_accessor_class_message_copy}, + {""}, +#line 73 "accessor_class_list.gperf" + {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, + {""}, #line 103 "accessor_class_list.gperf" {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, -#line 169 "accessor_class_list.gperf" +#line 168 "accessor_class_list.gperf" {"proj_string", &grib_accessor_class_proj_string}, -#line 75 "accessor_class_list.gperf" - {"decimal_precision", &grib_accessor_class_decimal_precision}, -#line 125 "accessor_class_list.gperf" - {"int16_little_endian", &grib_accessor_class_int16_little_endian}, -#line 153 "accessor_class_list.gperf" - {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, -#line 187 "accessor_class_list.gperf" - {"smart_table", &grib_accessor_class_smart_table}, +#line 39 "accessor_class_list.gperf" + {"constant", &grib_accessor_class_constant}, + {""}, #line 27 "accessor_class_list.gperf" {"bufr_string_values", &grib_accessor_class_bufr_string_values}, +#line 160 "accessor_class_list.gperf" + {"offset_values", &grib_accessor_class_offset_values}, +#line 158 "accessor_class_list.gperf" + {"octet_number", &grib_accessor_class_octet_number}, #line 54 "accessor_class_list.gperf" {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, -#line 141 "accessor_class_list.gperf" - {"local_definition", &grib_accessor_class_local_definition}, {""}, +#line 140 "accessor_class_list.gperf" + {"local_definition", &grib_accessor_class_local_definition}, #line 55 "accessor_class_list.gperf" {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, {""}, -#line 188 "accessor_class_list.gperf" - {"smart_table_column", &grib_accessor_class_smart_table_column}, -#line 38 "accessor_class_list.gperf" - {"concept", &grib_accessor_class_concept}, +#line 139 "accessor_class_list.gperf" + {"library_version", &grib_accessor_class_library_version}, + {""}, #line 52 "accessor_class_list.gperf" {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, - {""}, +#line 146 "accessor_class_list.gperf" + {"mars_step", &grib_accessor_class_mars_step}, #line 53 "accessor_class_list.gperf" {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, - {""}, {""}, {""}, -#line 199 "accessor_class_list.gperf" + {""}, +#line 198 "accessor_class_list.gperf" {"to_double", &grib_accessor_class_to_double}, -#line 216 "accessor_class_list.gperf" - {"validity_date", &grib_accessor_class_validity_date}, -#line 217 "accessor_class_list.gperf" - {"validity_time", &grib_accessor_class_validity_time}, - {""}, {""}, + {""}, {""}, {""}, {""}, #line 21 "accessor_class_list.gperf" {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, - {""}, -#line 39 "accessor_class_list.gperf" - {"constant", &grib_accessor_class_constant}, -#line 118 "accessor_class_list.gperf" - {"gts_header", &grib_accessor_class_gts_header}, -#line 220 "accessor_class_list.gperf" - {"vector", &grib_accessor_class_vector}, - {""}, -#line 159 "accessor_class_list.gperf" - {"octet_number", &grib_accessor_class_octet_number}, - {""}, -#line 34 "accessor_class_list.gperf" - {"codeflag", &grib_accessor_class_codeflag}, - {""}, {""}, -#line 120 "accessor_class_list.gperf" - {"headers_only", &grib_accessor_class_headers_only}, - {""}, {""}, -#line 90 "accessor_class_list.gperf" - {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, -#line 206 "accessor_class_list.gperf" - {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, - {""}, {""}, -#line 143 "accessor_class_list.gperf" - {"long_vector", &grib_accessor_class_long_vector}, - {""}, #line 86 "accessor_class_list.gperf" {"g1_section4_length", &grib_accessor_class_g1_section4_length}, {""}, {""}, -#line 138 "accessor_class_list.gperf" - {"latlon_increment", &grib_accessor_class_latlon_increment}, - {""}, +#line 215 "accessor_class_list.gperf" + {"validity_date", &grib_accessor_class_validity_date}, +#line 216 "accessor_class_list.gperf" + {"validity_time", &grib_accessor_class_validity_time}, + {""}, {""}, +#line 123 "accessor_class_list.gperf" + {"ifs_param", &grib_accessor_class_ifs_param}, + {""}, {""}, {""}, #line 219 "accessor_class_list.gperf" - {"variable", &grib_accessor_class_variable}, + {"vector", &grib_accessor_class_vector}, + {""}, {""}, +#line 118 "accessor_class_list.gperf" + {"gts_header", &grib_accessor_class_gts_header}, +#line 90 "accessor_class_list.gperf" + {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, +#line 205 "accessor_class_list.gperf" + {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, + {""}, {""}, +#line 142 "accessor_class_list.gperf" + {"long_vector", &grib_accessor_class_long_vector}, + {""}, {""}, +#line 120 "accessor_class_list.gperf" + {"headers_only", &grib_accessor_class_headers_only}, {""}, -#line 166 "accessor_class_list.gperf" - {"padtoeven", &grib_accessor_class_padtoeven}, +#line 137 "accessor_class_list.gperf" + {"latlon_increment", &grib_accessor_class_latlon_increment}, +#line 34 "accessor_class_list.gperf" + {"codeflag", &grib_accessor_class_codeflag}, {""}, {""}, {""}, #line 25 "accessor_class_list.gperf" {"bufr_group", &grib_accessor_class_bufr_group}, -#line 156 "accessor_class_list.gperf" - {"number_of_values", &grib_accessor_class_number_of_values}, - {""}, {""}, -#line 134 "accessor_class_list.gperf" - {"ksec1expver", &grib_accessor_class_ksec1expver}, - {""}, {""}, {""}, -#line 162 "accessor_class_list.gperf" - {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, - {""}, {""}, {""}, -#line 84 "accessor_class_list.gperf" - {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, - {""}, {""}, {""}, {""}, {""}, -#line 157 "accessor_class_list.gperf" - {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, -#line 24 "accessor_class_list.gperf" - {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, - {""}, -#line 40 "accessor_class_list.gperf" - {"count_file", &grib_accessor_class_count_file}, -#line 81 "accessor_class_list.gperf" - {"evaluate", &grib_accessor_class_evaluate}, #line 33 "accessor_class_list.gperf" {"closest_date", &grib_accessor_class_closest_date}, + {""}, +#line 218 "accessor_class_list.gperf" + {"variable", &grib_accessor_class_variable}, +#line 75 "accessor_class_list.gperf" + {"decimal_precision", &grib_accessor_class_decimal_precision}, +#line 165 "accessor_class_list.gperf" + {"padtoeven", &grib_accessor_class_padtoeven}, + {""}, +#line 186 "accessor_class_list.gperf" + {"smart_table", &grib_accessor_class_smart_table}, + {""}, {""}, +#line 155 "accessor_class_list.gperf" + {"number_of_values", &grib_accessor_class_number_of_values}, +#line 24 "accessor_class_list.gperf" + {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, + {""}, {""}, +#line 187 "accessor_class_list.gperf" + {"smart_table_column", &grib_accessor_class_smart_table_column}, + {""}, #line 22 "accessor_class_list.gperf" {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, - {""}, {""}, {""}, -#line 23 "accessor_class_list.gperf" - {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, - {""}, -#line 119 "accessor_class_list.gperf" - {"hash_array", &grib_accessor_class_hash_array}, - {""}, {""}, {""}, {""}, {""}, -#line 108 "accessor_class_list.gperf" - {"g2level", &grib_accessor_class_g2level}, - {""}, {""}, {""}, {""}, {""}, -#line 71 "accessor_class_list.gperf" - {"data_sh_packed", &grib_accessor_class_data_sh_packed}, +#line 161 "accessor_class_list.gperf" + {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, {""}, #line 35 "accessor_class_list.gperf" {"codetable", &grib_accessor_class_codetable}, - {""}, {""}, +#line 23 "accessor_class_list.gperf" + {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, + {""}, +#line 134 "accessor_class_list.gperf" + {"ksec1expver", &grib_accessor_class_ksec1expver}, + {""}, {""}, {""}, {""}, +#line 156 "accessor_class_list.gperf" + {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, + {""}, +#line 71 "accessor_class_list.gperf" + {"data_sh_packed", &grib_accessor_class_data_sh_packed}, + {""}, +#line 81 "accessor_class_list.gperf" + {"evaluate", &grib_accessor_class_evaluate}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 40 "accessor_class_list.gperf" + {"count_file", &grib_accessor_class_count_file}, + {""}, +#line 119 "accessor_class_list.gperf" + {"hash_array", &grib_accessor_class_hash_array}, +#line 174 "accessor_class_list.gperf" + {"scale_values", &grib_accessor_class_scale_values}, + {""}, +#line 108 "accessor_class_list.gperf" + {"g2level", &grib_accessor_class_g2level}, + {""}, {""}, {""}, #line 91 "accessor_class_list.gperf" {"g1fcperiod", &grib_accessor_class_g1fcperiod}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 139 "accessor_class_list.gperf" +#line 212 "accessor_class_list.gperf" + {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, + {""}, {""}, {""}, +#line 11 "accessor_class_list.gperf" + {"abstract_vector", &grib_accessor_class_abstract_vector}, + {""}, +#line 84 "accessor_class_list.gperf" + {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, +#line 42 "accessor_class_list.gperf" + {"count_total", &grib_accessor_class_count_total}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 138 "accessor_class_list.gperf" {"latlonvalues", &grib_accessor_class_latlonvalues}, + {""}, {""}, +#line 36 "accessor_class_list.gperf" + {"codetable_title", &grib_accessor_class_codetable_title}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 30 "accessor_class_list.gperf" + {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 31 "accessor_class_list.gperf" + {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, {""}, {""}, {""}, {""}, -#line 175 "accessor_class_list.gperf" - {"scale_values", &grib_accessor_class_scale_values}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 37 "accessor_class_list.gperf" + {"codetable_units", &grib_accessor_class_codetable_units}, {""}, #line 83 "accessor_class_list.gperf" {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, {""}, -#line 213 "accessor_class_list.gperf" - {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, - {""}, {""}, {""}, {""}, {""}, -#line 42 "accessor_class_list.gperf" - {"count_total", &grib_accessor_class_count_total}, -#line 11 "accessor_class_list.gperf" - {"abstract_vector", &grib_accessor_class_abstract_vector}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 30 "accessor_class_list.gperf" - {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, +#line 157 "accessor_class_list.gperf" + {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, #line 93 "accessor_class_list.gperf" {"g1monthlydate", &grib_accessor_class_g1monthlydate}, -#line 36 "accessor_class_list.gperf" - {"codetable_title", &grib_accessor_class_codetable_title}, - {""}, {""}, -#line 31 "accessor_class_list.gperf" - {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 10 "accessor_class_list.gperf" + {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, #line 41 "accessor_class_list.gperf" {"count_missing", &grib_accessor_class_count_missing}, -#line 158 "accessor_class_list.gperf" - {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 37 "accessor_class_list.gperf" - {"codetable_units", &grib_accessor_class_codetable_units}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, +#line 32 "accessor_class_list.gperf" + {"check_internal_version", &grib_accessor_class_check_internal_version}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 89 "accessor_class_list.gperf" + {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, + {""}, {""}, {""}, +#line 97 "accessor_class_list.gperf" + {"g1verificationdate", &grib_accessor_class_g1verificationdate}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 171 "accessor_class_list.gperf" + {"reference_value_error", &grib_accessor_class_reference_value_error}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, #line 95 "accessor_class_list.gperf" {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, #line 94 "accessor_class_list.gperf" {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 97 "accessor_class_list.gperf" - {"g1verificationdate", &grib_accessor_class_g1verificationdate}, - {""}, {""}, {""}, -#line 10 "accessor_class_list.gperf" - {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 89 "accessor_class_list.gperf" - {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, #line 99 "accessor_class_list.gperf" {"g2_chemical", &grib_accessor_class_g2_chemical}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, -#line 32 "accessor_class_list.gperf" - {"check_internal_version", &grib_accessor_class_check_internal_version}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 172 "accessor_class_list.gperf" - {"reference_value_error", &grib_accessor_class_reference_value_error}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -647,8 +656,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, #line 92 "accessor_class_list.gperf" {"g1forecastmonth", &grib_accessor_class_g1forecastmonth} }; diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index 062e295fd..4c63abbd5 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -125,7 +125,6 @@ { "julian_day", &grib_accessor_class_julian_day, }, { "ksec1expver", &grib_accessor_class_ksec1expver, }, { "label", &grib_accessor_class_label, }, -{ "laplacian", &grib_accessor_class_laplacian, }, { "latitudes", &grib_accessor_class_latitudes, }, { "latlon_increment", &grib_accessor_class_latlon_increment, }, { "latlonvalues", &grib_accessor_class_latlonvalues, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index 5542098da..aea189380 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -126,7 +126,6 @@ julian_date, &grib_accessor_class_julian_date julian_day, &grib_accessor_class_julian_day ksec1expver, &grib_accessor_class_ksec1expver label, &grib_accessor_class_label -laplacian, &grib_accessor_class_laplacian latitudes, &grib_accessor_class_latitudes latlon_increment, &grib_accessor_class_latlon_increment latlonvalues, &grib_accessor_class_latlonvalues From a5815dd37eccf445c773e154bd0e5a3b991e30f7 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 13 Aug 2023 15:47:57 +0100 Subject: [PATCH 149/372] Dead code removal: data_2order_packing --- src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 1 - ...grib_accessor_class_data_2order_packing.cc | 0 src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - src/grib_accessor_classes_hash.cc | 367 +++++++++--------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 8 files changed, 183 insertions(+), 191 deletions(-) rename src/{ => deprecated}/grib_accessor_class_data_2order_packing.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 97b042014..26626b355 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -190,7 +190,6 @@ list( APPEND eccodes_src_files grib_accessor_class_data_g2simple_packing_with_preprocessing.cc grib_accessor_class_data_g2shsimple_packing.cc grib_accessor_class_data_g2complex_packing.cc - grib_accessor_class_data_2order_packing.cc grib_accessor_class_data_g1second_order_row_by_row_packing.cc grib_accessor_class_data_g1second_order_constant_width_packing.cc grib_accessor_class_data_g1second_order_general_packing.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index 23c94b712..97f43b727 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -186,7 +186,6 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |---grib_accessor_class_uint8 |---grib_accessor_class_unpack_bufr_values |---grib_accessor_class_values - |-----grib_accessor_class_data_2order_packing |-----grib_accessor_class_data_ccsds_packing |-----grib_accessor_class_data_g22order_packing |-----grib_accessor_class_data_png_packing diff --git a/src/grib_accessor_class_data_2order_packing.cc b/src/deprecated/grib_accessor_class_data_2order_packing.cc similarity index 100% rename from src/grib_accessor_class_data_2order_packing.cc rename to src/deprecated/grib_accessor_class_data_2order_packing.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 08abc0577..340e1d980 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -591,8 +591,6 @@ void accessor_variable_set_type(grib_accessor* a, int type); /* grib_accessor_class_data_g2complex_packing.cc*/ -/* grib_accessor_class_data_2order_packing.cc*/ - /* grib_accessor_class_data_g1second_order_row_by_row_packing.cc*/ /* grib_accessor_class_data_g1second_order_constant_width_packing.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index 16d0b32b5..52bbfc49c 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -32,7 +32,6 @@ extern grib_accessor_class* grib_accessor_class_constant; extern grib_accessor_class* grib_accessor_class_count_file; extern grib_accessor_class* grib_accessor_class_count_missing; extern grib_accessor_class* grib_accessor_class_count_total; -extern grib_accessor_class* grib_accessor_class_data_2order_packing; extern grib_accessor_class* grib_accessor_class_data_apply_bitmap; extern grib_accessor_class* grib_accessor_class_data_apply_boustrophedonic; extern grib_accessor_class* grib_accessor_class_data_apply_boustrophedonic_bitmap; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index b0f921efc..66c7a9091 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,7 +37,7 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 212 +#define TOTAL_KEYWORDS 211 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 @@ -117,130 +117,130 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, -#line 185 "accessor_class_list.gperf" +#line 184 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, -#line 182 "accessor_class_list.gperf" +#line 181 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, {""}, {""}, {""}, {""}, {""}, -#line 183 "accessor_class_list.gperf" +#line 182 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, {""}, -#line 68 "accessor_class_list.gperf" +#line 67 "accessor_class_list.gperf" {"data_raw_packing", &grib_accessor_class_data_raw_packing}, {""}, -#line 130 "accessor_class_list.gperf" +#line 129 "accessor_class_list.gperf" {"int8", &grib_accessor_class_int8}, {""}, -#line 74 "accessor_class_list.gperf" +#line 73 "accessor_class_list.gperf" {"data_simple_packing", &grib_accessor_class_data_simple_packing}, -#line 70 "accessor_class_list.gperf" +#line 69 "accessor_class_list.gperf" {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 176 "accessor_class_list.gperf" +#line 175 "accessor_class_list.gperf" {"section", &grib_accessor_class_section}, -#line 162 "accessor_class_list.gperf" +#line 161 "accessor_class_list.gperf" {"pad", &grib_accessor_class_pad}, -#line 188 "accessor_class_list.gperf" +#line 187 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, -#line 76 "accessor_class_list.gperf" +#line 75 "accessor_class_list.gperf" {"dictionary", &grib_accessor_class_dictionary}, -#line 124 "accessor_class_list.gperf" +#line 123 "accessor_class_list.gperf" {"int16", &grib_accessor_class_int16}, -#line 77 "accessor_class_list.gperf" +#line 76 "accessor_class_list.gperf" {"dirty", &grib_accessor_class_dirty}, {""}, -#line 67 "accessor_class_list.gperf" +#line 66 "accessor_class_list.gperf" {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 178 "accessor_class_list.gperf" +#line 177 "accessor_class_list.gperf" {"section_padding", &grib_accessor_class_section_padding}, -#line 179 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" {"section_pointer", &grib_accessor_class_section_pointer}, -#line 114 "accessor_class_list.gperf" +#line 113 "accessor_class_list.gperf" {"gen", &grib_accessor_class_gen}, -#line 126 "accessor_class_list.gperf" +#line 125 "accessor_class_list.gperf" {"int32", &grib_accessor_class_int32}, {""}, -#line 59 "accessor_class_list.gperf" +#line 58 "accessor_class_list.gperf" {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, {""}, -#line 44 "accessor_class_list.gperf" +#line 43 "accessor_class_list.gperf" {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, -#line 63 "accessor_class_list.gperf" +#line 62 "accessor_class_list.gperf" {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, -#line 128 "accessor_class_list.gperf" +#line 127 "accessor_class_list.gperf" {"int64", &grib_accessor_class_int64}, {""}, -#line 175 "accessor_class_list.gperf" +#line 174 "accessor_class_list.gperf" {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 177 "accessor_class_list.gperf" +#line 176 "accessor_class_list.gperf" {"section_length", &grib_accessor_class_section_length}, -#line 66 "accessor_class_list.gperf" +#line 65 "accessor_class_list.gperf" {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, -#line 47 "accessor_class_list.gperf" +#line 46 "accessor_class_list.gperf" {"data_apply_gdsnotpresent", &grib_accessor_class_data_apply_gdsnotpresent}, -#line 112 "accessor_class_list.gperf" +#line 111 "accessor_class_list.gperf" {"gds_is_present", &grib_accessor_class_gds_is_present}, -#line 45 "accessor_class_list.gperf" +#line 44 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, -#line 197 "accessor_class_list.gperf" +#line 196 "accessor_class_list.gperf" {"time", &grib_accessor_class_time}, -#line 115 "accessor_class_list.gperf" +#line 114 "accessor_class_list.gperf" {"getenv", &grib_accessor_class_getenv}, {""}, -#line 106 "accessor_class_list.gperf" +#line 105 "accessor_class_list.gperf" {"g2grid", &grib_accessor_class_g2grid}, -#line 82 "accessor_class_list.gperf" +#line 81 "accessor_class_list.gperf" {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, {""}, -#line 46 "accessor_class_list.gperf" +#line 45 "accessor_class_list.gperf" {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, -#line 105 "accessor_class_list.gperf" +#line 104 "accessor_class_list.gperf" {"g2end_step", &grib_accessor_class_g2end_step}, -#line 64 "accessor_class_list.gperf" +#line 63 "accessor_class_list.gperf" {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, -#line 61 "accessor_class_list.gperf" +#line 60 "accessor_class_list.gperf" {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, -#line 163 "accessor_class_list.gperf" +#line 162 "accessor_class_list.gperf" {"padding", &grib_accessor_class_padding}, {""}, {""}, {""}, -#line 109 "accessor_class_list.gperf" +#line 108 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, -#line 150 "accessor_class_list.gperf" +#line 149 "accessor_class_list.gperf" {"nearest", &grib_accessor_class_nearest}, {""}, {""}, {""}, -#line 195 "accessor_class_list.gperf" +#line 194 "accessor_class_list.gperf" {"sum", &grib_accessor_class_sum}, {""}, -#line 210 "accessor_class_list.gperf" +#line 209 "accessor_class_list.gperf" {"uint8", &grib_accessor_class_uint8}, -#line 100 "accessor_class_list.gperf" +#line 99 "accessor_class_list.gperf" {"g2_eps", &grib_accessor_class_g2_eps}, -#line 194 "accessor_class_list.gperf" +#line 193 "accessor_class_list.gperf" {"step_in_units", &grib_accessor_class_step_in_units}, {""}, -#line 133 "accessor_class_list.gperf" - {"julian_day", &grib_accessor_class_julian_day}, #line 132 "accessor_class_list.gperf" + {"julian_day", &grib_accessor_class_julian_day}, +#line 131 "accessor_class_list.gperf" {"julian_date", &grib_accessor_class_julian_date}, -#line 65 "accessor_class_list.gperf" +#line 64 "accessor_class_list.gperf" {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, {""}, -#line 208 "accessor_class_list.gperf" +#line 207 "accessor_class_list.gperf" {"uint64", &grib_accessor_class_uint64}, -#line 49 "accessor_class_list.gperf" +#line 48 "accessor_class_list.gperf" {"data_complex_packing", &grib_accessor_class_data_complex_packing}, -#line 50 "accessor_class_list.gperf" +#line 49 "accessor_class_list.gperf" {"data_dummy_field", &grib_accessor_class_data_dummy_field}, -#line 206 "accessor_class_list.gperf" +#line 205 "accessor_class_list.gperf" {"uint32", &grib_accessor_class_uint32}, {""}, {""}, -#line 164 "accessor_class_list.gperf" +#line 163 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, {""}, -#line 110 "accessor_class_list.gperf" +#line 109 "accessor_class_list.gperf" {"g2step_range", &grib_accessor_class_g2step_range}, -#line 69 "accessor_class_list.gperf" +#line 68 "accessor_class_list.gperf" {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, #line 13 "accessor_class_list.gperf" {"bit", &grib_accessor_class_bit}, @@ -250,98 +250,98 @@ static const struct accessor_class_hash classes[] = #line 14 "accessor_class_list.gperf" {"bitmap", &grib_accessor_class_bitmap}, {""}, -#line 104 "accessor_class_list.gperf" +#line 103 "accessor_class_list.gperf" {"g2date", &grib_accessor_class_g2date}, {""}, -#line 102 "accessor_class_list.gperf" +#line 101 "accessor_class_list.gperf" {"g2bitmap", &grib_accessor_class_g2bitmap}, -#line 62 "accessor_class_list.gperf" +#line 61 "accessor_class_list.gperf" {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, -#line 60 "accessor_class_list.gperf" +#line 59 "accessor_class_list.gperf" {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, -#line 191 "accessor_class_list.gperf" +#line 190 "accessor_class_list.gperf" {"statistics", &grib_accessor_class_statistics}, #line 16 "accessor_class_list.gperf" {"bits_per_value", &grib_accessor_class_bits_per_value}, {""}, -#line 151 "accessor_class_list.gperf" +#line 150 "accessor_class_list.gperf" {"non_alpha", &grib_accessor_class_non_alpha}, -#line 184 "accessor_class_list.gperf" +#line 183 "accessor_class_list.gperf" {"simple_packing_error", &grib_accessor_class_simple_packing_error}, {""}, {""}, {""}, {""}, -#line 192 "accessor_class_list.gperf" +#line 191 "accessor_class_list.gperf" {"statistics_spectral", &grib_accessor_class_statistics_spectral}, -#line 113 "accessor_class_list.gperf" +#line 112 "accessor_class_list.gperf" {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, {""}, -#line 131 "accessor_class_list.gperf" +#line 130 "accessor_class_list.gperf" {"iterator", &grib_accessor_class_iterator}, #line 29 "accessor_class_list.gperf" {"bytes", &grib_accessor_class_bytes}, -#line 98 "accessor_class_list.gperf" +#line 97 "accessor_class_list.gperf" {"g2_aerosol", &grib_accessor_class_g2_aerosol}, -#line 153 "accessor_class_list.gperf" +#line 152 "accessor_class_list.gperf" {"number_of_points", &grib_accessor_class_number_of_points}, -#line 213 "accessor_class_list.gperf" +#line 212 "accessor_class_list.gperf" {"unsigned", &grib_accessor_class_unsigned}, {""}, {""}, {""}, {""}, -#line 173 "accessor_class_list.gperf" +#line 172 "accessor_class_list.gperf" {"scale", &grib_accessor_class_scale}, -#line 214 "accessor_class_list.gperf" +#line 213 "accessor_class_list.gperf" {"unsigned_bits", &grib_accessor_class_unsigned_bits}, {""}, -#line 154 "accessor_class_list.gperf" +#line 153 "accessor_class_list.gperf" {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, -#line 116 "accessor_class_list.gperf" +#line 115 "accessor_class_list.gperf" {"global_gaussian", &grib_accessor_class_global_gaussian}, -#line 199 "accessor_class_list.gperf" +#line 198 "accessor_class_list.gperf" {"to_integer", &grib_accessor_class_to_integer}, {""}, -#line 193 "accessor_class_list.gperf" +#line 192 "accessor_class_list.gperf" {"step_human_readable", &grib_accessor_class_step_human_readable}, -#line 80 "accessor_class_list.gperf" +#line 79 "accessor_class_list.gperf" {"element", &grib_accessor_class_element}, -#line 181 "accessor_class_list.gperf" +#line 180 "accessor_class_list.gperf" {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, -#line 136 "accessor_class_list.gperf" +#line 135 "accessor_class_list.gperf" {"latitudes", &grib_accessor_class_latitudes}, {""}, -#line 48 "accessor_class_list.gperf" +#line 47 "accessor_class_list.gperf" {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, -#line 211 "accessor_class_list.gperf" +#line 210 "accessor_class_list.gperf" {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, -#line 169 "accessor_class_list.gperf" +#line 168 "accessor_class_list.gperf" {"raw", &grib_accessor_class_raw}, -#line 209 "accessor_class_list.gperf" +#line 208 "accessor_class_list.gperf" {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, {""}, {""}, -#line 207 "accessor_class_list.gperf" +#line 206 "accessor_class_list.gperf" {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, {""}, -#line 141 "accessor_class_list.gperf" +#line 140 "accessor_class_list.gperf" {"long", &grib_accessor_class_long}, {""}, -#line 79 "accessor_class_list.gperf" +#line 78 "accessor_class_list.gperf" {"double", &grib_accessor_class_double}, {""}, {""}, -#line 101 "accessor_class_list.gperf" +#line 100 "accessor_class_list.gperf" {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, -#line 190 "accessor_class_list.gperf" +#line 189 "accessor_class_list.gperf" {"sprintf", &grib_accessor_class_sprintf}, {""}, {""}, {""}, -#line 170 "accessor_class_list.gperf" +#line 169 "accessor_class_list.gperf" {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, {""}, -#line 78 "accessor_class_list.gperf" +#line 77 "accessor_class_list.gperf" {"divdouble", &grib_accessor_class_divdouble}, -#line 107 "accessor_class_list.gperf" +#line 106 "accessor_class_list.gperf" {"g2latlon", &grib_accessor_class_g2latlon}, -#line 200 "accessor_class_list.gperf" +#line 199 "accessor_class_list.gperf" {"to_string", &grib_accessor_class_to_string}, -#line 180 "accessor_class_list.gperf" +#line 179 "accessor_class_list.gperf" {"select_step_template", &grib_accessor_class_select_step_template}, {""}, {""}, {""}, {""}, -#line 135 "accessor_class_list.gperf" +#line 134 "accessor_class_list.gperf" {"label", &grib_accessor_class_label}, {""}, #line 19 "accessor_class_list.gperf" @@ -355,164 +355,163 @@ static const struct accessor_class_hash classes[] = #line 26 "accessor_class_list.gperf" {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, {""}, -#line 121 "accessor_class_list.gperf" +#line 120 "accessor_class_list.gperf" {"ibmfloat", &grib_accessor_class_ibmfloat}, -#line 57 "accessor_class_list.gperf" +#line 56 "accessor_class_list.gperf" {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, -#line 122 "accessor_class_list.gperf" +#line 121 "accessor_class_list.gperf" {"ieeefloat", &grib_accessor_class_ieeefloat}, -#line 159 "accessor_class_list.gperf" +#line 158 "accessor_class_list.gperf" {"offset_file", &grib_accessor_class_offset_file}, #line 28 "accessor_class_list.gperf" {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, -#line 166 "accessor_class_list.gperf" +#line 165 "accessor_class_list.gperf" {"padtomultiple", &grib_accessor_class_padtomultiple}, {""}, -#line 203 "accessor_class_list.gperf" +#line 202 "accessor_class_list.gperf" {"trim", &grib_accessor_class_trim}, {""}, -#line 111 "accessor_class_list.gperf" +#line 110 "accessor_class_list.gperf" {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, {""}, {""}, {""}, -#line 201 "accessor_class_list.gperf" +#line 200 "accessor_class_list.gperf" {"transient", &grib_accessor_class_transient}, {""}, -#line 117 "accessor_class_list.gperf" +#line 116 "accessor_class_list.gperf" {"group", &grib_accessor_class_group}, {""}, -#line 167 "accessor_class_list.gperf" +#line 166 "accessor_class_list.gperf" {"position", &grib_accessor_class_position}, -#line 58 "accessor_class_list.gperf" +#line 57 "accessor_class_list.gperf" {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, -#line 51 "accessor_class_list.gperf" +#line 50 "accessor_class_list.gperf" {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 202 "accessor_class_list.gperf" +#line 201 "accessor_class_list.gperf" {"transient_darray", &grib_accessor_class_transient_darray}, {""}, {""}, -#line 172 "accessor_class_list.gperf" +#line 171 "accessor_class_list.gperf" {"round", &grib_accessor_class_round}, -#line 85 "accessor_class_list.gperf" +#line 84 "accessor_class_list.gperf" {"g1_message_length", &grib_accessor_class_g1_message_length}, -#line 125 "accessor_class_list.gperf" +#line 124 "accessor_class_list.gperf" {"int16_little_endian", &grib_accessor_class_int16_little_endian}, -#line 220 "accessor_class_list.gperf" +#line 219 "accessor_class_list.gperf" {"when", &grib_accessor_class_when}, #line 18 "accessor_class_list.gperf" {"budgdate", &grib_accessor_class_budgdate}, {""}, -#line 147 "accessor_class_list.gperf" +#line 146 "accessor_class_list.gperf" {"md5", &grib_accessor_class_md5}, {""}, {""}, -#line 127 "accessor_class_list.gperf" +#line 126 "accessor_class_list.gperf" {"int32_little_endian", &grib_accessor_class_int32_little_endian}, -#line 148 "accessor_class_list.gperf" +#line 147 "accessor_class_list.gperf" {"message", &grib_accessor_class_message}, -#line 144 "accessor_class_list.gperf" - {"lookup", &grib_accessor_class_lookup}, -#line 196 "accessor_class_list.gperf" - {"suppressed", &grib_accessor_class_suppressed}, -#line 145 "accessor_class_list.gperf" - {"mars_param", &grib_accessor_class_mars_param}, -#line 43 "accessor_class_list.gperf" - {"data_2order_packing", &grib_accessor_class_data_2order_packing}, -#line 129 "accessor_class_list.gperf" - {"int64_little_endian", &grib_accessor_class_int64_little_endian}, #line 143 "accessor_class_list.gperf" + {"lookup", &grib_accessor_class_lookup}, +#line 195 "accessor_class_list.gperf" + {"suppressed", &grib_accessor_class_suppressed}, +#line 144 "accessor_class_list.gperf" + {"mars_param", &grib_accessor_class_mars_param}, + {""}, +#line 128 "accessor_class_list.gperf" + {"int64_little_endian", &grib_accessor_class_int64_little_endian}, +#line 142 "accessor_class_list.gperf" {"longitudes", &grib_accessor_class_longitudes}, -#line 217 "accessor_class_list.gperf" +#line 216 "accessor_class_list.gperf" {"values", &grib_accessor_class_values}, -#line 152 "accessor_class_list.gperf" +#line 151 "accessor_class_list.gperf" {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, {""}, -#line 189 "accessor_class_list.gperf" +#line 188 "accessor_class_list.gperf" {"spectral_truncation", &grib_accessor_class_spectral_truncation}, {""}, {""}, -#line 204 "accessor_class_list.gperf" +#line 203 "accessor_class_list.gperf" {"uint16", &grib_accessor_class_uint16}, -#line 96 "accessor_class_list.gperf" +#line 95 "accessor_class_list.gperf" {"g1step_range", &grib_accessor_class_g1step_range}, {""}, {""}, #line 38 "accessor_class_list.gperf" {"concept", &grib_accessor_class_concept}, {""}, {""}, {""}, -#line 88 "accessor_class_list.gperf" - {"g1date", &grib_accessor_class_g1date}, -#line 72 "accessor_class_list.gperf" - {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, #line 87 "accessor_class_list.gperf" + {"g1date", &grib_accessor_class_g1date}, +#line 71 "accessor_class_list.gperf" + {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, +#line 86 "accessor_class_list.gperf" {"g1bitmap", &grib_accessor_class_g1bitmap}, -#line 56 "accessor_class_list.gperf" +#line 55 "accessor_class_list.gperf" {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, -#line 149 "accessor_class_list.gperf" +#line 148 "accessor_class_list.gperf" {"message_copy", &grib_accessor_class_message_copy}, {""}, -#line 73 "accessor_class_list.gperf" +#line 72 "accessor_class_list.gperf" {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, {""}, -#line 103 "accessor_class_list.gperf" +#line 102 "accessor_class_list.gperf" {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, -#line 168 "accessor_class_list.gperf" +#line 167 "accessor_class_list.gperf" {"proj_string", &grib_accessor_class_proj_string}, #line 39 "accessor_class_list.gperf" {"constant", &grib_accessor_class_constant}, {""}, #line 27 "accessor_class_list.gperf" {"bufr_string_values", &grib_accessor_class_bufr_string_values}, -#line 160 "accessor_class_list.gperf" +#line 159 "accessor_class_list.gperf" {"offset_values", &grib_accessor_class_offset_values}, -#line 158 "accessor_class_list.gperf" +#line 157 "accessor_class_list.gperf" {"octet_number", &grib_accessor_class_octet_number}, -#line 54 "accessor_class_list.gperf" +#line 53 "accessor_class_list.gperf" {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, {""}, -#line 140 "accessor_class_list.gperf" +#line 139 "accessor_class_list.gperf" {"local_definition", &grib_accessor_class_local_definition}, -#line 55 "accessor_class_list.gperf" +#line 54 "accessor_class_list.gperf" {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, {""}, -#line 139 "accessor_class_list.gperf" +#line 138 "accessor_class_list.gperf" {"library_version", &grib_accessor_class_library_version}, {""}, -#line 52 "accessor_class_list.gperf" +#line 51 "accessor_class_list.gperf" {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, -#line 146 "accessor_class_list.gperf" +#line 145 "accessor_class_list.gperf" {"mars_step", &grib_accessor_class_mars_step}, -#line 53 "accessor_class_list.gperf" +#line 52 "accessor_class_list.gperf" {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, {""}, -#line 198 "accessor_class_list.gperf" +#line 197 "accessor_class_list.gperf" {"to_double", &grib_accessor_class_to_double}, {""}, {""}, {""}, {""}, #line 21 "accessor_class_list.gperf" {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, -#line 86 "accessor_class_list.gperf" +#line 85 "accessor_class_list.gperf" {"g1_section4_length", &grib_accessor_class_g1_section4_length}, {""}, {""}, -#line 215 "accessor_class_list.gperf" +#line 214 "accessor_class_list.gperf" {"validity_date", &grib_accessor_class_validity_date}, -#line 216 "accessor_class_list.gperf" +#line 215 "accessor_class_list.gperf" {"validity_time", &grib_accessor_class_validity_time}, {""}, {""}, -#line 123 "accessor_class_list.gperf" +#line 122 "accessor_class_list.gperf" {"ifs_param", &grib_accessor_class_ifs_param}, {""}, {""}, {""}, -#line 219 "accessor_class_list.gperf" +#line 218 "accessor_class_list.gperf" {"vector", &grib_accessor_class_vector}, {""}, {""}, -#line 118 "accessor_class_list.gperf" +#line 117 "accessor_class_list.gperf" {"gts_header", &grib_accessor_class_gts_header}, -#line 90 "accessor_class_list.gperf" +#line 89 "accessor_class_list.gperf" {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, -#line 205 "accessor_class_list.gperf" +#line 204 "accessor_class_list.gperf" {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, {""}, {""}, -#line 142 "accessor_class_list.gperf" +#line 141 "accessor_class_list.gperf" {"long_vector", &grib_accessor_class_long_vector}, {""}, {""}, -#line 120 "accessor_class_list.gperf" +#line 119 "accessor_class_list.gperf" {"headers_only", &grib_accessor_class_headers_only}, {""}, -#line 137 "accessor_class_list.gperf" +#line 136 "accessor_class_list.gperf" {"latlon_increment", &grib_accessor_class_latlon_increment}, #line 34 "accessor_class_list.gperf" {"codeflag", &grib_accessor_class_codeflag}, @@ -522,27 +521,27 @@ static const struct accessor_class_hash classes[] = #line 33 "accessor_class_list.gperf" {"closest_date", &grib_accessor_class_closest_date}, {""}, -#line 218 "accessor_class_list.gperf" +#line 217 "accessor_class_list.gperf" {"variable", &grib_accessor_class_variable}, -#line 75 "accessor_class_list.gperf" +#line 74 "accessor_class_list.gperf" {"decimal_precision", &grib_accessor_class_decimal_precision}, -#line 165 "accessor_class_list.gperf" +#line 164 "accessor_class_list.gperf" {"padtoeven", &grib_accessor_class_padtoeven}, {""}, -#line 186 "accessor_class_list.gperf" +#line 185 "accessor_class_list.gperf" {"smart_table", &grib_accessor_class_smart_table}, {""}, {""}, -#line 155 "accessor_class_list.gperf" +#line 154 "accessor_class_list.gperf" {"number_of_values", &grib_accessor_class_number_of_values}, #line 24 "accessor_class_list.gperf" {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, {""}, {""}, -#line 187 "accessor_class_list.gperf" +#line 186 "accessor_class_list.gperf" {"smart_table_column", &grib_accessor_class_smart_table_column}, {""}, #line 22 "accessor_class_list.gperf" {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, -#line 161 "accessor_class_list.gperf" +#line 160 "accessor_class_list.gperf" {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, {""}, #line 35 "accessor_class_list.gperf" @@ -550,43 +549,43 @@ static const struct accessor_class_hash classes[] = #line 23 "accessor_class_list.gperf" {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, {""}, -#line 134 "accessor_class_list.gperf" +#line 133 "accessor_class_list.gperf" {"ksec1expver", &grib_accessor_class_ksec1expver}, {""}, {""}, {""}, {""}, -#line 156 "accessor_class_list.gperf" +#line 155 "accessor_class_list.gperf" {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, {""}, -#line 71 "accessor_class_list.gperf" +#line 70 "accessor_class_list.gperf" {"data_sh_packed", &grib_accessor_class_data_sh_packed}, {""}, -#line 81 "accessor_class_list.gperf" +#line 80 "accessor_class_list.gperf" {"evaluate", &grib_accessor_class_evaluate}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, #line 40 "accessor_class_list.gperf" {"count_file", &grib_accessor_class_count_file}, {""}, -#line 119 "accessor_class_list.gperf" +#line 118 "accessor_class_list.gperf" {"hash_array", &grib_accessor_class_hash_array}, -#line 174 "accessor_class_list.gperf" +#line 173 "accessor_class_list.gperf" {"scale_values", &grib_accessor_class_scale_values}, {""}, -#line 108 "accessor_class_list.gperf" +#line 107 "accessor_class_list.gperf" {"g2level", &grib_accessor_class_g2level}, {""}, {""}, {""}, -#line 91 "accessor_class_list.gperf" +#line 90 "accessor_class_list.gperf" {"g1fcperiod", &grib_accessor_class_g1fcperiod}, -#line 212 "accessor_class_list.gperf" +#line 211 "accessor_class_list.gperf" {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, {""}, {""}, {""}, #line 11 "accessor_class_list.gperf" {"abstract_vector", &grib_accessor_class_abstract_vector}, {""}, -#line 84 "accessor_class_list.gperf" +#line 83 "accessor_class_list.gperf" {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, #line 42 "accessor_class_list.gperf" {"count_total", &grib_accessor_class_count_total}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 138 "accessor_class_list.gperf" +#line 137 "accessor_class_list.gperf" {"latlonvalues", &grib_accessor_class_latlonvalues}, {""}, {""}, #line 36 "accessor_class_list.gperf" @@ -601,14 +600,14 @@ static const struct accessor_class_hash classes[] = #line 37 "accessor_class_list.gperf" {"codetable_units", &grib_accessor_class_codetable_units}, {""}, -#line 83 "accessor_class_list.gperf" +#line 82 "accessor_class_list.gperf" {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, {""}, -#line 157 "accessor_class_list.gperf" +#line 156 "accessor_class_list.gperf" {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 93 "accessor_class_list.gperf" +#line 92 "accessor_class_list.gperf" {"g1monthlydate", &grib_accessor_class_g1monthlydate}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -625,24 +624,24 @@ static const struct accessor_class_hash classes[] = #line 32 "accessor_class_list.gperf" {"check_internal_version", &grib_accessor_class_check_internal_version}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 89 "accessor_class_list.gperf" +#line 88 "accessor_class_list.gperf" {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, {""}, {""}, {""}, -#line 97 "accessor_class_list.gperf" +#line 96 "accessor_class_list.gperf" {"g1verificationdate", &grib_accessor_class_g1verificationdate}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 171 "accessor_class_list.gperf" +#line 170 "accessor_class_list.gperf" {"reference_value_error", &grib_accessor_class_reference_value_error}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 95 "accessor_class_list.gperf" - {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, #line 94 "accessor_class_list.gperf" + {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, +#line 93 "accessor_class_list.gperf" {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, {""}, {""}, {""}, {""}, {""}, -#line 99 "accessor_class_list.gperf" +#line 98 "accessor_class_list.gperf" {"g2_chemical", &grib_accessor_class_g2_chemical}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -657,7 +656,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 92 "accessor_class_list.gperf" +#line 91 "accessor_class_list.gperf" {"g1forecastmonth", &grib_accessor_class_g1forecastmonth} }; diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index 4c63abbd5..1c79ed01a 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -32,7 +32,6 @@ { "count_file", &grib_accessor_class_count_file, }, { "count_missing", &grib_accessor_class_count_missing, }, { "count_total", &grib_accessor_class_count_total, }, -{ "data_2order_packing", &grib_accessor_class_data_2order_packing, }, { "data_apply_bitmap", &grib_accessor_class_data_apply_bitmap, }, { "data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic, }, { "data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index aea189380..e88a4acff 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -33,7 +33,6 @@ constant, &grib_accessor_class_constant count_file, &grib_accessor_class_count_file count_missing, &grib_accessor_class_count_missing count_total, &grib_accessor_class_count_total -data_2order_packing, &grib_accessor_class_data_2order_packing data_apply_bitmap, &grib_accessor_class_data_apply_bitmap data_apply_boustrophedonic, &grib_accessor_class_data_apply_boustrophedonic data_apply_boustrophedonic_bitmap, &grib_accessor_class_data_apply_boustrophedonic_bitmap From 72fc8d9b0498d22ef66796bf5f954fed422fe897 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 13 Aug 2023 21:23:04 +0100 Subject: [PATCH 150/372] Dead code removal --- src/eccodes_prototypes.h | 1 - src/grib_geography.cc | 2011 +------------------------------------- 2 files changed, 52 insertions(+), 1960 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 340e1d980..b9a374b86 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -997,7 +997,6 @@ int is_gaussian_global(double lat1, double lat2, double lon1, double lon2, long void rotate(const double inlat, const double inlon, const double angleOfRot, const double southPoleLat, const double southPoleLon, double* outlat, double* outlon); void unrotate(const double inlat, const double inlon, const double angleOfRot, const double southPoleLat, const double southPoleLon, double* outlat, double* outlon); double geographic_distance_spherical(double radius, double lon1, double lat1, double lon2, double lat2); -double geographic_distance_ellipsoid(double major, double minor, double lon1, double lat1, double lon2, double lat2); /* grib_handle.cc*/ grib_section* grib_section_create(grib_handle* h, grib_accessor* owner); diff --git a/src/grib_geography.cc b/src/grib_geography.cc index 0493f8549..dd0f2ec98 100644 --- a/src/grib_geography.cc +++ b/src/grib_geography.cc @@ -92,6 +92,7 @@ static void gauss_first_guess(long trunc, double* vals) } /* Performance: return the precomputed latitudes for N=1280 */ +/* The provided 'lats' array should have allocated 2*N elements */ static int get_precomputed_latitudes_N1280(double* lats) { lats[0]=89.946187715665616; @@ -1374,1290 +1375,17 @@ static int get_precomputed_latitudes_N1280(double* lats) lats[1277]=0.17574692107801482; lats[1278]=0.10544815264681295; lats[1279]=0.035149384215604956; - lats[1280]=-0.035149384215604956; - lats[1281]=-0.10544815264681295; - lats[1282]=-0.17574692107801482; - lats[1283]=-0.24604568950920663; - lats[1284]=-0.31634445794038429; - lats[1285]=-0.3866432263715438; - lats[1286]=-0.45694199480268116; - lats[1287]=-0.52724076323379232; - lats[1288]=-0.59753953166487306; - lats[1289]=-0.66783830009591949; - lats[1290]=-0.73813706852692773; - lats[1291]=-0.80843583695789356; - lats[1292]=-0.87873460538881287; - lats[1293]=-0.949033373819682; - lats[1294]=-1.0193321422504964; - lats[1295]=-1.0896309106812523; - lats[1296]=-1.1599296791119456; - lats[1297]=-1.2302284475425722; - lats[1298]=-1.300527215973128; - lats[1299]=-1.3708259844036093; - lats[1300]=-1.4411247528340119; - lats[1301]=-1.5114235212643317; - lats[1302]=-1.5817222896945646; - lats[1303]=-1.6520210581247066; - lats[1304]=-1.7223198265547539; - lats[1305]=-1.792618594984702; - lats[1306]=-1.8629173634145471; - lats[1307]=-1.9332161318442849; - lats[1308]=-2.0035149002739114; - lats[1309]=-2.0738136687034232; - lats[1310]=-2.1441124371328155; - lats[1311]=-2.2144112055620848; - lats[1312]=-2.2847099739912267; - lats[1313]=-2.3550087424202366; - lats[1314]=-2.4253075108491116; - lats[1315]=-2.4956062792778466; - lats[1316]=-2.5659050477064382; - lats[1317]=-2.6362038161348824; - lats[1318]=-2.7065025845631743; - lats[1319]=-2.7768013529913107; - lats[1320]=-2.8471001214192873; - lats[1321]=-2.9173988898470999; - lats[1322]=-2.9876976582747439; - lats[1323]=-3.0579964267022164; - lats[1324]=-3.1282951951295126; - lats[1325]=-3.1985939635566285; - lats[1326]=-3.2688927319835597; - lats[1327]=-3.339191500410303; - lats[1328]=-3.4094902688368531; - lats[1329]=-3.4797890372632065; - lats[1330]=-3.5500878056893601; - lats[1331]=-3.6203865741153085; - lats[1332]=-3.6906853425410477; - lats[1333]=-3.7609841109665734; - lats[1334]=-3.8312828793918823; - lats[1335]=-3.90158164781697; - lats[1336]=-3.9718804162418326; - lats[1337]=-4.0421791846664661; - lats[1338]=-4.1124779530908659; - lats[1339]=-4.1827767215150269; - lats[1340]=-4.2530754899389471; - lats[1341]=-4.3233742583626205; - lats[1342]=-4.3936730267860451; - lats[1343]=-4.4639717952092139; - lats[1344]=-4.5342705636321252; - lats[1345]=-4.6045693320547736; - lats[1346]=-4.6748681004771564; - lats[1347]=-4.7451668688992683; - lats[1348]=-4.8154656373211049; - lats[1349]=-4.8857644057426626; - lats[1350]=-4.9560631741639369; - lats[1351]=-5.0263619425849244; - lats[1352]=-5.0966607110056197; - lats[1353]=-5.1669594794260192; - lats[1354]=-5.2372582478461194; - lats[1355]=-5.3075570162659149; - lats[1356]=-5.3778557846854023; - lats[1357]=-5.4481545531045787; - lats[1358]=-5.5184533215234373; - lats[1359]=-5.5887520899419751; - lats[1360]=-5.6590508583601888; - lats[1361]=-5.729349626778073; - lats[1362]=-5.7996483951956233; - lats[1363]=-5.869947163612836; - lats[1364]=-5.9402459320297085; - lats[1365]=-6.0105447004462347; - lats[1366]=-6.0808434688624091; - lats[1367]=-6.151142237278231; - lats[1368]=-6.2214410056936931; - lats[1369]=-6.2917397741087928; - lats[1370]=-6.3620385425235257; - lats[1371]=-6.4323373109378874; - lats[1372]=-6.5026360793518734; - lats[1373]=-6.5729348477654792; - lats[1374]=-6.6432336161787013; - lats[1375]=-6.7135323845915353; - lats[1376]=-6.7838311530039768; - lats[1377]=-6.8541299214160212; - lats[1378]=-6.924428689827665; - lats[1379]=-6.994727458238903; - lats[1380]=-7.0650262266497315; - lats[1381]=-7.1353249950601469; - lats[1382]=-7.2056237634701441; - lats[1383]=-7.2759225318797176; - lats[1384]=-7.3462213002888648; - lats[1385]=-7.4165200686975803; - lats[1386]=-7.4868188371058624; - lats[1387]=-7.557117605513703; - lats[1388]=-7.6274163739210996; - lats[1389]=-7.6977151423280494; - lats[1390]=-7.7680139107345463; - lats[1391]=-7.8383126791405831; - lats[1392]=-7.9086114475461606; - lats[1393]=-7.9789102159512737; - lats[1394]=-8.049208984355916; - lats[1395]=-8.1195077527600841; - lats[1396]=-8.1898065211637725; - lats[1397]=-8.2601052895669778; - lats[1398]=-8.3304040579696963; - lats[1399]=-8.4007028263719228; - lats[1400]=-8.4710015947736537; - lats[1401]=-8.5413003631748801; - lats[1402]=-8.6115991315756055; - lats[1403]=-8.6818978999758194; - lats[1404]=-8.7521966683755217; - lats[1405]=-8.8224954367747017; - lats[1406]=-8.8927942051733631; - lats[1407]=-8.963092973571495; - lats[1408]=-9.0333917419690941; - lats[1409]=-9.1036905103661585; - lats[1410]=-9.1739892787626829; - lats[1411]=-9.2442880471586619; - lats[1412]=-9.3145868155540921; - lats[1413]=-9.3848855839489662; - lats[1414]=-9.4551843523432826; - lats[1415]=-9.5254831207370376; - lats[1416]=-9.5957818891302242; - lats[1417]=-9.6660806575228388; - lats[1418]=-9.7363794259148779; - lats[1419]=-9.8066781943063344; - lats[1420]=-9.8769769626972046; - lats[1421]=-9.9472757310874869; - lats[1422]=-10.017574499477174; - lats[1423]=-10.087873267866264; - lats[1424]=-10.158172036254747; - lats[1425]=-10.228470804642624; - lats[1426]=-10.298769573029887; - lats[1427]=-10.369068341416533; - lats[1428]=-10.439367109802557; - lats[1429]=-10.509665878187954; - lats[1430]=-10.579964646572719; - lats[1431]=-10.65026341495685; - lats[1432]=-10.720562183340341; - lats[1433]=-10.790860951723188; - lats[1434]=-10.861159720105382; - lats[1435]=-10.931458488486923; - lats[1436]=-11.001757256867807; - lats[1437]=-11.072056025248026; - lats[1438]=-11.142354793627575; - lats[1439]=-11.212653562006453; - lats[1440]=-11.282952330384653; - lats[1441]=-11.35325109876217; - lats[1442]=-11.423549867139002; - lats[1443]=-11.493848635515141; - lats[1444]=-11.564147403890583; - lats[1445]=-11.634446172265324; - lats[1446]=-11.704744940639358; - lats[1447]=-11.775043709012685; - lats[1448]=-11.845342477385294; - lats[1449]=-11.915641245757183; - lats[1450]=-11.985940014128348; - lats[1451]=-12.056238782498781; - lats[1452]=-12.126537550868482; - lats[1453]=-12.196836319237443; - lats[1454]=-12.267135087605659; - lats[1455]=-12.337433855973126; - lats[1456]=-12.407732624339841; - lats[1457]=-12.478031392705796; - lats[1458]=-12.548330161070988; - lats[1459]=-12.618628929435411; - lats[1460]=-12.688927697799061; - lats[1461]=-12.759226466161934; - lats[1462]=-12.829525234524022; - lats[1463]=-12.899824002885323; - lats[1464]=-12.970122771245832; - lats[1465]=-13.040421539605545; - lats[1466]=-13.110720307964451; - lats[1467]=-13.181019076322551; - lats[1468]=-13.251317844679837; - lats[1469]=-13.32161661303631; - lats[1470]=-13.391915381391959; - lats[1471]=-13.46221414974678; - lats[1472]=-13.532512918100766; - lats[1473]=-13.602811686453919; - lats[1474]=-13.673110454806226; - lats[1475]=-13.743409223157688; - lats[1476]=-13.813707991508297; - lats[1477]=-13.884006759858046; - lats[1478]=-13.954305528206934; - lats[1479]=-14.024604296554955; - lats[1480]=-14.0949030649021; - lats[1481]=-14.165201833248371; - lats[1482]=-14.23550060159376; - lats[1483]=-14.305799369938256; - lats[1484]=-14.376098138281863; - lats[1485]=-14.446396906624567; - lats[1486]=-14.516695674966371; - lats[1487]=-14.586994443307265; - lats[1488]=-14.657293211647247; - lats[1489]=-14.727591979986309; - lats[1490]=-14.797890748324447; - lats[1491]=-14.868189516661655; - lats[1492]=-14.938488284997929; - lats[1493]=-15.008787053333259; - lats[1494]=-15.07908582166765; - lats[1495]=-15.149384590001089; - lats[1496]=-15.219683358333569; - lats[1497]=-15.289982126665089; - lats[1498]=-15.360280894995643; - lats[1499]=-15.430579663325226; - lats[1500]=-15.500878431653829; - lats[1501]=-15.571177199981456; - lats[1502]=-15.641475968308091; - lats[1503]=-15.711774736633735; - lats[1504]=-15.78207350495838; - lats[1505]=-15.852372273282016; - lats[1506]=-15.922671041604652; - lats[1507]=-15.992969809926265; - lats[1508]=-16.063268578246863; - lats[1509]=-16.133567346566434; - lats[1510]=-16.203866114884974; - lats[1511]=-16.274164883202477; - lats[1512]=-16.344463651518936; - lats[1513]=-16.41476241983435; - lats[1514]=-16.485061188148713; - lats[1515]=-16.555359956462013; - lats[1516]=-16.625658724774254; - lats[1517]=-16.69595749308542; - lats[1518]=-16.766256261395515; - lats[1519]=-16.836555029704527; - lats[1520]=-16.906853798012452; - lats[1521]=-16.977152566319283; - lats[1522]=-17.04745133462502; - lats[1523]=-17.117750102929655; - lats[1524]=-17.188048871233182; - lats[1525]=-17.258347639535586; - lats[1526]=-17.328646407836878; - lats[1527]=-17.39894517613704; - lats[1528]=-17.469243944436066; - lats[1529]=-17.539542712733962; - lats[1530]=-17.60984148103071; - lats[1531]=-17.680140249326314; - lats[1532]=-17.75043901762076; - lats[1533]=-17.820737785914044; - lats[1534]=-17.89103655420616; - lats[1535]=-17.96133532249711; - lats[1536]=-18.031634090786874; - lats[1537]=-18.101932859075458; - lats[1538]=-18.172231627362851; - lats[1539]=-18.242530395649048; - lats[1540]=-18.312829163934047; - lats[1541]=-18.383127932217832; - lats[1542]=-18.453426700500408; - lats[1543]=-18.523725468781763; - lats[1544]=-18.594024237061891; - lats[1545]=-18.664323005340787; - lats[1546]=-18.734621773618446; - lats[1547]=-18.804920541894862; - lats[1548]=-18.875219310170031; - lats[1549]=-18.945518078443939; - lats[1550]=-19.015816846716586; - lats[1551]=-19.086115614987968; - lats[1552]=-19.15641438325807; - lats[1553]=-19.226713151526898; - lats[1554]=-19.297011919794439; - lats[1555]=-19.367310688060684; - lats[1556]=-19.437609456325632; - lats[1557]=-19.507908224589269; - lats[1558]=-19.578206992851602; - lats[1559]=-19.648505761112613; - lats[1560]=-19.718804529372303; - lats[1561]=-19.789103297630657; - lats[1562]=-19.859402065887682; - lats[1563]=-19.929700834143357; - lats[1564]=-19.999999602397686; - lats[1565]=-20.070298370650661; - lats[1566]=-20.140597138902272; - lats[1567]=-20.210895907152516; - lats[1568]=-20.28119467540138; - lats[1569]=-20.35149344364887; - lats[1570]=-20.421792211894967; - lats[1571]=-20.492090980139672; - lats[1572]=-20.562389748382977; - lats[1573]=-20.632688516624874; - lats[1574]=-20.702987284865355; - lats[1575]=-20.773286053104417; - lats[1576]=-20.843584821342048; - lats[1577]=-20.913883589578251; - lats[1578]=-20.984182357813012; - lats[1579]=-21.054481126046323; - lats[1580]=-21.124779894278181; - lats[1581]=-21.195078662508585; - lats[1582]=-21.265377430737512; - lats[1583]=-21.335676198964972; - lats[1584]=-21.40597496719095; - lats[1585]=-21.47627373541544; - lats[1586]=-21.546572503638437; - lats[1587]=-21.616871271859928; - lats[1588]=-21.687170040079913; - lats[1589]=-21.757468808298391; - lats[1590]=-21.827767576515338; - lats[1591]=-21.898066344730758; - lats[1592]=-21.968365112944642; - lats[1593]=-22.038663881156989; - lats[1594]=-22.108962649367779; - lats[1595]=-22.179261417577013; - lats[1596]=-22.249560185784691; - lats[1597]=-22.319858953990789; - lats[1598]=-22.390157722195315; - lats[1599]=-22.460456490398254; - lats[1600]=-22.530755258599601; - lats[1601]=-22.60105402679935; - lats[1602]=-22.671352794997489; - lats[1603]=-22.741651563194019; - lats[1604]=-22.811950331388925; - lats[1605]=-22.882249099582204; - lats[1606]=-22.952547867773848; - lats[1607]=-23.022846635963852; - lats[1608]=-23.0931454041522; - lats[1609]=-23.163444172338895; - lats[1610]=-23.233742940523921; - lats[1611]=-23.304041708707278; - lats[1612]=-23.374340476888957; - lats[1613]=-23.444639245068949; - lats[1614]=-23.514938013247242; - lats[1615]=-23.585236781423838; - lats[1616]=-23.655535549598721; - lats[1617]=-23.725834317771888; - lats[1618]=-23.796133085943328; - lats[1619]=-23.866431854113038; - lats[1620]=-23.936730622281004; - lats[1621]=-24.007029390447226; - lats[1622]=-24.077328158611696; - lats[1623]=-24.1476269267744; - lats[1624]=-24.217925694935328; - lats[1625]=-24.288224463094483; - lats[1626]=-24.358523231251851; - lats[1627]=-24.428821999407425; - lats[1628]=-24.499120767561195; - lats[1629]=-24.569419535713152; - lats[1630]=-24.639718303863294; - lats[1631]=-24.710017072011613; - lats[1632]=-24.780315840158096; - lats[1633]=-24.850614608302738; - lats[1634]=-24.920913376445526; - lats[1635]=-24.991212144586456; - lats[1636]=-25.061510912725527; - lats[1637]=-25.13180968086272; - lats[1638]=-25.202108448998025; - lats[1639]=-25.272407217131445; - lats[1640]=-25.342705985262967; - lats[1641]=-25.413004753392578; - lats[1642]=-25.483303521520277; - lats[1643]=-25.553602289646051; - lats[1644]=-25.623901057769892; - lats[1645]=-25.694199825891793; - lats[1646]=-25.764498594011751; - lats[1647]=-25.834797362129745; - lats[1648]=-25.90509613024577; - lats[1649]=-25.975394898359827; - lats[1650]=-26.045693666471902; - lats[1651]=-26.115992434581983; - lats[1652]=-26.186291202690064; - lats[1653]=-26.256589970796135; - lats[1654]=-26.326888738900195; - lats[1655]=-26.397187507002222; - lats[1656]=-26.467486275102218; - lats[1657]=-26.53778504320017; - lats[1658]=-26.608083811296069; - lats[1659]=-26.678382579389908; - lats[1660]=-26.748681347481678; - lats[1661]=-26.818980115571364; - lats[1662]=-26.889278883658971; - lats[1663]=-26.959577651744471; - lats[1664]=-27.029876419827872; - lats[1665]=-27.100175187909159; - lats[1666]=-27.170473955988321; - lats[1667]=-27.240772724065348; - lats[1668]=-27.311071492140236; - lats[1669]=-27.381370260212968; - lats[1670]=-27.451669028283543; - lats[1671]=-27.521967796351948; - lats[1672]=-27.592266564418171; - lats[1673]=-27.662565332482213; - lats[1674]=-27.732864100544052; - lats[1675]=-27.803162868603682; - lats[1676]=-27.873461636661098; - lats[1677]=-27.94376040471629; - lats[1678]=-28.014059172769244; - lats[1679]=-28.084357940819952; - lats[1680]=-28.154656708868405; - lats[1681]=-28.224955476914594; - lats[1682]=-28.29525424495851; - lats[1683]=-28.365553013000145; - lats[1684]=-28.435851781039485; - lats[1685]=-28.506150549076519; - lats[1686]=-28.576449317111244; - lats[1687]=-28.646748085143642; - lats[1688]=-28.717046853173709; - lats[1689]=-28.787345621201432; - lats[1690]=-28.857644389226806; - lats[1691]=-28.927943157249814; - lats[1692]=-28.998241925270449; - lats[1693]=-29.068540693288696; - lats[1694]=-29.138839461304556; - lats[1695]=-29.209138229318015; - lats[1696]=-29.279436997329057; - lats[1697]=-29.349735765337677; - lats[1698]=-29.420034533343859; - lats[1699]=-29.490333301347597; - lats[1700]=-29.560632069348884; - lats[1701]=-29.630930837347698; - lats[1702]=-29.701229605344039; - lats[1703]=-29.771528373337894; - lats[1704]=-29.841827141329258; - lats[1705]=-29.91212590931811; - lats[1706]=-29.98242467730444; - lats[1707]=-30.052723445288244; - lats[1708]=-30.123022213269511; - lats[1709]=-30.19332098124822; - lats[1710]=-30.263619749224372; - lats[1711]=-30.333918517197947; - lats[1712]=-30.404217285168947; - lats[1713]=-30.47451605313735; - lats[1714]=-30.544814821103138; - lats[1715]=-30.615113589066322; - lats[1716]=-30.685412357026873; - lats[1717]=-30.755711124984781; - lats[1718]=-30.826009892940046; - lats[1719]=-30.896308660892647; - lats[1720]=-30.966607428842572; - lats[1721]=-31.036906196789811; - lats[1722]=-31.107204964734358; - lats[1723]=-31.177503732676204; - lats[1724]=-31.247802500615318; - lats[1725]=-31.318101268551715; - lats[1726]=-31.388400036485361; - lats[1727]=-31.458698804416255; - lats[1728]=-31.528997572344384; - lats[1729]=-31.599296340269738; - lats[1730]=-31.669595108192297; - lats[1731]=-31.739893876112063; - lats[1732]=-31.810192644029012; - lats[1733]=-31.880491411943137; - lats[1734]=-31.950790179854422; - lats[1735]=-32.021088947762863; - lats[1736]=-32.091387715668439; - lats[1737]=-32.161686483571145; - lats[1738]=-32.231985251470959; - lats[1739]=-32.302284019367875; - lats[1740]=-32.372582787261891; - lats[1741]=-32.442881555152965; - lats[1742]=-32.513180323041112; - lats[1743]=-32.583479090926325; - lats[1744]=-32.653777858808567; - lats[1745]=-32.724076626687825; - lats[1746]=-32.794375394564113; - lats[1747]=-32.864674162437396; - lats[1748]=-32.934972930307666; - lats[1749]=-33.005271698174909; - lats[1750]=-33.075570466039117; - lats[1751]=-33.145869233900278; - lats[1752]=-33.216168001758369; - lats[1753]=-33.286466769613391; - lats[1754]=-33.356765537465314; - lats[1755]=-33.42706430531414; - lats[1756]=-33.497363073159853; - lats[1757]=-33.567661841002426; - lats[1758]=-33.637960608841851; - lats[1759]=-33.708259376678136; - lats[1760]=-33.778558144511237; - lats[1761]=-33.848856912341155; - lats[1762]=-33.919155680167876; - lats[1763]=-33.989454447991392; - lats[1764]=-34.059753215811682; - lats[1765]=-34.130051983628725; - lats[1766]=-34.200350751442521; - lats[1767]=-34.270649519253041; - lats[1768]=-34.340948287060286; - lats[1769]=-34.411247054864234; - lats[1770]=-34.481545822664863; - lats[1771]=-34.551844590462188; - lats[1772]=-34.622143358256153; - lats[1773]=-34.692442126046771; - lats[1774]=-34.762740893834028; - lats[1775]=-34.833039661617903; - lats[1776]=-34.903338429398374; - lats[1777]=-34.973637197175435; - lats[1778]=-35.043935964949064; - lats[1779]=-35.114234732719261; - lats[1780]=-35.184533500486005; - lats[1781]=-35.254832268249267; - lats[1782]=-35.325131036009047; - lats[1783]=-35.395429803765317; - lats[1784]=-35.465728571518085; - lats[1785]=-35.536027339267314; - lats[1786]=-35.606326107012997; - lats[1787]=-35.676624874755113; - lats[1788]=-35.746923642493655; - lats[1789]=-35.817222410228595; - lats[1790]=-35.887521177959933; - lats[1791]=-35.957819945687639; - lats[1792]=-36.028118713411708; - lats[1793]=-36.098417481132117; - lats[1794]=-36.16871624884886; - lats[1795]=-36.239015016561908; - lats[1796]=-36.309313784271254; - lats[1797]=-36.379612551976876; - lats[1798]=-36.449911319678755; - lats[1799]=-36.520210087376888; - lats[1800]=-36.590508855071242; - lats[1801]=-36.660807622761808; - lats[1802]=-36.731106390448581; - lats[1803]=-36.801405158131523; - lats[1804]=-36.871703925810628; - lats[1805]=-36.942002693485883; - lats[1806]=-37.012301461157264; - lats[1807]=-37.082600228824752; - lats[1808]=-37.152898996488332; - lats[1809]=-37.223197764147997; - lats[1810]=-37.293496531803719; - lats[1811]=-37.363795299455489; - lats[1812]=-37.434094067103274; - lats[1813]=-37.504392834747065; - lats[1814]=-37.574691602386856; - lats[1815]=-37.644990370022605; - lats[1816]=-37.715289137654317; - lats[1817]=-37.785587905281965; - lats[1818]=-37.855886672905527; - lats[1819]=-37.926185440524989; - lats[1820]=-37.99648420814033; - lats[1821]=-38.066782975751536; - lats[1822]=-38.137081743358586; - lats[1823]=-38.20738051096145; - lats[1824]=-38.277679278560143; - lats[1825]=-38.347978046154608; - lats[1826]=-38.418276813744846; - lats[1827]=-38.488575581330842; - lats[1828]=-38.558874348912568; - lats[1829]=-38.629173116490001; - lats[1830]=-38.699471884063136; - lats[1831]=-38.769770651631937; - lats[1832]=-38.840069419196389; - lats[1833]=-38.910368186756479; - lats[1834]=-38.980666954312184; - lats[1835]=-39.050965721863491; - lats[1836]=-39.121264489410365; - lats[1837]=-39.191563256952804; - lats[1838]=-39.261862024490775; - lats[1839]=-39.332160792024254; - lats[1840]=-39.402459559553229; - lats[1841]=-39.472758327077692; - lats[1842]=-39.543057094597607; - lats[1843]=-39.613355862112947; - lats[1844]=-39.683654629623703; - lats[1845]=-39.753953397129855; - lats[1846]=-39.824252164631375; - lats[1847]=-39.894550932128247; - lats[1848]=-39.964849699620437; - lats[1849]=-40.035148467107952; - lats[1850]=-40.105447234590748; - lats[1851]=-40.175746002068806; - lats[1852]=-40.246044769542102; - lats[1853]=-40.316343537010617; - lats[1854]=-40.386642304474343; - lats[1855]=-40.456941071933244; - lats[1856]=-40.527239839387299; - lats[1857]=-40.597538606836487; - lats[1858]=-40.667837374280786; - lats[1859]=-40.738136141720176; - lats[1860]=-40.808434909154634; - lats[1861]=-40.878733676584126; - lats[1862]=-40.949032444008644; - lats[1863]=-41.01933121142816; - lats[1864]=-41.089629978842645; - lats[1865]=-41.159928746252085; - lats[1866]=-41.230227513656445; - lats[1867]=-41.300526281055724; - lats[1868]=-41.370825048449873; - lats[1869]=-41.441123815838885; - lats[1870]=-41.511422583222718; - lats[1871]=-41.581721350601363; - lats[1872]=-41.6520201179748; - lats[1873]=-41.722318885343; - lats[1874]=-41.792617652705921; - lats[1875]=-41.862916420063563; - lats[1876]=-41.933215187415882; - lats[1877]=-42.003513954762873; - lats[1878]=-42.073812722104492; - lats[1879]=-42.144111489440725; - lats[1880]=-42.214410256771551; - lats[1881]=-42.284709024096927; - lats[1882]=-42.355007791416853; - lats[1883]=-42.425306558731272; - lats[1884]=-42.495605326040177; - lats[1885]=-42.565904093343548; - lats[1886]=-42.63620286064134; - lats[1887]=-42.706501627933541; - lats[1888]=-42.776800395220121; - lats[1889]=-42.847099162501053; - lats[1890]=-42.917397929776307; - lats[1891]=-42.987696697045862; - lats[1892]=-43.057995464309691; - lats[1893]=-43.128294231567757; - lats[1894]=-43.19859299882004; - lats[1895]=-43.26889176606651; - lats[1896]=-43.339190533307139; - lats[1897]=-43.409489300541907; - lats[1898]=-43.479788067770777; - lats[1899]=-43.550086834993728; - lats[1900]=-43.620385602210717; - lats[1901]=-43.690684369421732; - lats[1902]=-43.760983136626741; - lats[1903]=-43.831281903825705; - lats[1904]=-43.9015806710186; - lats[1905]=-43.971879438205391; - lats[1906]=-44.042178205386072; - lats[1907]=-44.112476972560586; - lats[1908]=-44.182775739728925; - lats[1909]=-44.253074506891046; - lats[1910]=-44.323373274046915; - lats[1911]=-44.39367204119651; - lats[1912]=-44.463970808339802; - lats[1913]=-44.534269575476756; - lats[1914]=-44.604568342607337; - lats[1915]=-44.674867109731515; - lats[1916]=-44.745165876849271; - lats[1917]=-44.81546464396056; - lats[1918]=-44.885763411065362; - lats[1919]=-44.956062178163634; - lats[1920]=-45.026360945255341; - lats[1921]=-45.096659712340461; - lats[1922]=-45.166958479418959; - lats[1923]=-45.237257246490813; - lats[1924]=-45.30755601355596; - lats[1925]=-45.377854780614399; - lats[1926]=-45.448153547666081; - lats[1927]=-45.51845231471097; - lats[1928]=-45.588751081749038; - lats[1929]=-45.659049848780263; - lats[1930]=-45.729348615804589; - lats[1931]=-45.799647382821995; - lats[1932]=-45.869946149832437; - lats[1933]=-45.94024491683588; - lats[1934]=-46.01054368383231; - lats[1935]=-46.080842450821663; - lats[1936]=-46.151141217803925; - lats[1937]=-46.221439984779053; - lats[1938]=-46.291738751747012; - lats[1939]=-46.362037518707766; - lats[1940]=-46.432336285661272; - lats[1941]=-46.502635052607502; - lats[1942]=-46.572933819546414; - lats[1943]=-46.643232586477971; - lats[1944]=-46.713531353402139; - lats[1945]=-46.783830120318882; - lats[1946]=-46.85412888722815; - lats[1947]=-46.924427654129929; - lats[1948]=-46.994726421024154; - lats[1949]=-47.065025187910805; - lats[1950]=-47.13532395478984; - lats[1951]=-47.205622721661214; - lats[1952]=-47.275921488524894; - lats[1953]=-47.346220255380835; - lats[1954]=-47.416519022228997; - lats[1955]=-47.486817789069342; - lats[1956]=-47.557116555901828; - lats[1957]=-47.627415322726435; - lats[1958]=-47.697714089543084; - lats[1959]=-47.76801285635176; - lats[1960]=-47.838311623152421; - lats[1961]=-47.908610389945018; - lats[1962]=-47.978909156729507; - lats[1963]=-48.049207923505868; - lats[1964]=-48.119506690274015; - lats[1965]=-48.189805457033941; - lats[1966]=-48.260104223785596; - lats[1967]=-48.330402990528938; - lats[1968]=-48.400701757263917; - lats[1969]=-48.47100052399049; - lats[1970]=-48.541299290708608; - lats[1971]=-48.611598057418242; - lats[1972]=-48.681896824119335; - lats[1973]=-48.752195590811837; - lats[1974]=-48.822494357495721; - lats[1975]=-48.892793124170929; - lats[1976]=-48.963091890837418; - lats[1977]=-49.03339065749514; - lats[1978]=-49.103689424144044; - lats[1979]=-49.173988190784094; - lats[1980]=-49.244286957415234; - lats[1981]=-49.314585724037435; - lats[1982]=-49.384884490650613; - lats[1983]=-49.455183257254745; - lats[1984]=-49.525482023849783; - lats[1985]=-49.595780790435676; - lats[1986]=-49.66607955701236; - lats[1987]=-49.736378323579807; - lats[1988]=-49.80667709013796; - lats[1989]=-49.876975856686762; - lats[1990]=-49.947274623226157; - lats[1991]=-50.017573389756123; - lats[1992]=-50.087872156276575; - lats[1993]=-50.158170922787484; - lats[1994]=-50.228469689288779; - lats[1995]=-50.298768455780426; - lats[1996]=-50.369067222262359; - lats[1997]=-50.439365988734544; - lats[1998]=-50.509664755196901; - lats[1999]=-50.579963521649397; - lats[2000]=-50.650262288091959; - lats[2001]=-50.720561054524559; - lats[2002]=-50.790859820947119; - lats[2003]=-50.86115858735959; - lats[2004]=-50.931457353761914; - lats[2005]=-51.001756120154049; - lats[2006]=-51.072054886535909; - lats[2007]=-51.14235365290746; - lats[2008]=-51.21265241926865; - lats[2009]=-51.282951185619417; - lats[2010]=-51.353249951959683; - lats[2011]=-51.423548718289396; - lats[2012]=-51.493847484608516; - lats[2013]=-51.56414625091697; - lats[2014]=-51.634445017214695; - lats[2015]=-51.704743783501634; - lats[2016]=-51.775042549777737; - lats[2017]=-51.845341316042933; - lats[2018]=-51.915640082297152; - lats[2019]=-51.985938848540336; - lats[2020]=-52.056237614772435; - lats[2021]=-52.126536380993372; - lats[2022]=-52.196835147203096; - lats[2023]=-52.26713391340153; - lats[2024]=-52.337432679588609; - lats[2025]=-52.407731445764284; - lats[2026]=-52.478030211928477; - lats[2027]=-52.548328978081123; - lats[2028]=-52.618627744222159; - lats[2029]=-52.688926510351514; - lats[2030]=-52.759225276469131; - lats[2031]=-52.829524042574917; - lats[2032]=-52.899822808668837; - lats[2033]=-52.970121574750792; - lats[2034]=-53.040420340820731; - lats[2035]=-53.110719106878584; - lats[2036]=-53.181017872924265; - lats[2037]=-53.251316638957725; - lats[2038]=-53.321615404978871; - lats[2039]=-53.391914170987633; - lats[2040]=-53.462212936983953; - lats[2041]=-53.53251170296776; - lats[2042]=-53.602810468938962; - lats[2043]=-53.673109234897495; - lats[2044]=-53.743408000843282; - lats[2045]=-53.813706766776235; - lats[2046]=-53.884005532696307; - lats[2047]=-53.954304298603383; - lats[2048]=-54.024603064497434; - lats[2049]=-54.094901830378333; - lats[2050]=-54.165200596246031; - lats[2051]=-54.235499362100448; - lats[2052]=-54.305798127941479; - lats[2053]=-54.376096893769081; - lats[2054]=-54.446395659583146; - lats[2055]=-54.516694425383605; - lats[2056]=-54.586993191170357; - lats[2057]=-54.657291956943347; - lats[2058]=-54.727590722702473; - lats[2059]=-54.797889488447652; - lats[2060]=-54.868188254178797; - lats[2061]=-54.938487019895831; - lats[2062]=-55.008785785598668; - lats[2063]=-55.07908455128721; - lats[2064]=-55.149383316961377; - lats[2065]=-55.219682082621084; - lats[2066]=-55.289980848266232; - lats[2067]=-55.360279613896743; - lats[2068]=-55.430578379512511; - lats[2069]=-55.500877145113449; - lats[2070]=-55.571175910699488; - lats[2071]=-55.641474676270505; - lats[2072]=-55.711773441826416; - lats[2073]=-55.782072207367136; - lats[2074]=-55.852370972892551; - lats[2075]=-55.922669738402583; - lats[2076]=-55.992968503897131; - lats[2077]=-56.063267269376091; - lats[2078]=-56.133566034839362; - lats[2079]=-56.203864800286865; - lats[2080]=-56.274163565718467; - lats[2081]=-56.34446233113411; - lats[2082]=-56.41476109653366; - lats[2083]=-56.485059861917016; - lats[2084]=-56.555358627284086; - lats[2085]=-56.625657392634771; - lats[2086]=-56.695956157968951; - lats[2087]=-56.766254923286517; - lats[2088]=-56.836553688587379; - lats[2089]=-56.90685245387143; - lats[2090]=-56.977151219138541; - lats[2091]=-57.047449984388614; - lats[2092]=-57.117748749621541; - lats[2093]=-57.188047514837208; - lats[2094]=-57.258346280035504; - lats[2095]=-57.328645045216312; - lats[2096]=-57.398943810379521; - lats[2097]=-57.469242575525016; - lats[2098]=-57.539541340652676; - lats[2099]=-57.60984010576238; - lats[2100]=-57.680138870854037; - lats[2101]=-57.75043763592749; - lats[2102]=-57.820736400982646; - lats[2103]=-57.891035166019364; - lats[2104]=-57.961333931037537; - lats[2105]=-58.031632696037022; - lats[2106]=-58.101931461017728; - lats[2107]=-58.172230225979497; - lats[2108]=-58.242528990922203; - lats[2109]=-58.312827755845746; - lats[2110]=-58.383126520749968; - lats[2111]=-58.453425285634758; - lats[2112]=-58.523724050499972; - lats[2113]=-58.594022815345468; - lats[2114]=-58.664321580171141; - lats[2115]=-58.73462034497684; - lats[2116]=-58.804919109762423; - lats[2117]=-58.875217874527763; - lats[2118]=-58.945516639272725; - lats[2119]=-59.015815403997145; - lats[2120]=-59.086114168700909; - lats[2121]=-59.156412933383855; - lats[2122]=-59.226711698045854; - lats[2123]=-59.29701046268675; - lats[2124]=-59.3673092273064; - lats[2125]=-59.43760799190467; - lats[2126]=-59.507906756481383; - lats[2127]=-59.578205521036402; - lats[2128]=-59.64850428556958; - lats[2129]=-59.718803050080759; - lats[2130]=-59.78910181456979; - lats[2131]=-59.859400579036503; - lats[2132]=-59.929699343480763; - lats[2133]=-59.999998107902378; - lats[2134]=-60.070296872301235; - lats[2135]=-60.140595636677112; - lats[2136]=-60.21089440102989; - lats[2137]=-60.28119316535939; - lats[2138]=-60.35149192966545; - lats[2139]=-60.421790693947884; - lats[2140]=-60.492089458206543; - lats[2141]=-60.562388222441243; - lats[2142]=-60.632686986651805; - lats[2143]=-60.702985750838074; - lats[2144]=-60.773284514999872; - lats[2145]=-60.843583279137007; - lats[2146]=-60.913882043249295; - lats[2147]=-60.984180807336578; - lats[2148]=-61.054479571398652; - lats[2149]=-61.124778335435344; - lats[2150]=-61.195077099446451; - lats[2151]=-61.265375863431785; - lats[2152]=-61.335674627391185; - lats[2153]=-61.405973391324409; - lats[2154]=-61.476272155231321; - lats[2155]=-61.546570919111666; - lats[2156]=-61.616869682965287; - lats[2157]=-61.687168446791986; - lats[2158]=-61.757467210591535; - lats[2159]=-61.827765974363729; - lats[2160]=-61.898064738108381; - lats[2161]=-61.968363501825259; - lats[2162]=-62.038662265514176; - lats[2163]=-62.108961029174914; - lats[2164]=-62.179259792807258; - lats[2165]=-62.249558556410982; - lats[2166]=-62.319857319985871; - lats[2167]=-62.3901560835317; - lats[2168]=-62.460454847048261; - lats[2169]=-62.530753610535321; - lats[2170]=-62.60105237399263; - lats[2171]=-62.67135113741999; - lats[2172]=-62.741649900817137; - lats[2173]=-62.811948664183866; - lats[2174]=-62.882247427519928; - lats[2175]=-62.952546190825068; - lats[2176]=-63.022844954099064; - lats[2177]=-63.093143717341647; - lats[2178]=-63.163442480552604; - lats[2179]=-63.23374124373165; - lats[2180]=-63.304040006878537; - lats[2181]=-63.374338769993031; - lats[2182]=-63.444637533074854; - lats[2183]=-63.514936296123757; - lats[2184]=-63.585235059139464; - lats[2185]=-63.655533822121711; - lats[2186]=-63.725832585070251; - lats[2187]=-63.796131347984762; - lats[2188]=-63.866430110865004; - lats[2189]=-63.93672887371072; - lats[2190]=-64.00702763652157; - lats[2191]=-64.07732639929732; - lats[2192]=-64.147625162037642; - lats[2193]=-64.21792392474228; - lats[2194]=-64.288222687410922; - lats[2195]=-64.358521450043284; - lats[2196]=-64.428820212639039; - lats[2197]=-64.499118975197902; - lats[2198]=-64.569417737719576; - lats[2199]=-64.639716500203733; - lats[2200]=-64.710015262650074; - lats[2201]=-64.780314025058246; - lats[2202]=-64.850612787427963; - lats[2203]=-64.920911549758912; - lats[2204]=-64.991210312050711; - lats[2205]=-65.061509074303089; - lats[2206]=-65.131807836515677; - lats[2207]=-65.202106598688133; - lats[2208]=-65.272405360820116; - lats[2209]=-65.342704122911286; - lats[2210]=-65.413002884961315; - lats[2211]=-65.483301646969792; - lats[2212]=-65.553600408936404; - lats[2213]=-65.623899170860767; - lats[2214]=-65.694197932742526; - lats[2215]=-65.764496694581283; - lats[2216]=-65.834795456376696; - lats[2217]=-65.905094218128355; - lats[2218]=-65.975392979835888; - lats[2219]=-66.045691741498899; - lats[2220]=-66.115990503117033; - lats[2221]=-66.186289264689833; - lats[2222]=-66.256588026216932; - lats[2223]=-66.326886787697887; - lats[2224]=-66.397185549132331; - lats[2225]=-66.467484310519808; - lats[2226]=-66.537783071859891; - lats[2227]=-66.608081833152212; - lats[2228]=-66.678380594396273; - lats[2229]=-66.748679355591662; - lats[2230]=-66.818978116737924; - lats[2231]=-66.889276877834618; - lats[2232]=-66.95957563888129; - lats[2233]=-67.029874399877471; - lats[2234]=-67.100173160822706; - lats[2235]=-67.170471921716526; - lats[2236]=-67.240770682558434; - lats[2237]=-67.311069443347961; - lats[2238]=-67.381368204084609; - lats[2239]=-67.451666964767895; - lats[2240]=-67.521965725397308; - lats[2241]=-67.592264485972336; - lats[2242]=-67.662563246492482; - lats[2243]=-67.732862006957205; - lats[2244]=-67.803160767365966; - lats[2245]=-67.873459527718282; - lats[2246]=-67.943758288013555; - lats[2247]=-68.014057048251274; - lats[2248]=-68.084355808430871; - lats[2249]=-68.154654568551791; - lats[2250]=-68.224953328613438; - lats[2251]=-68.295252088615257; - lats[2252]=-68.365550848556666; - lats[2253]=-68.435849608437067; - lats[2254]=-68.506148368255865; - lats[2255]=-68.576447128012447; - lats[2256]=-68.646745887706189; - lats[2257]=-68.717044647336493; - lats[2258]=-68.787343406902693; - lats[2259]=-68.85764216640419; - lats[2260]=-68.927940925840304; - lats[2261]=-68.998239685210365; - lats[2262]=-69.068538444513763; - lats[2263]=-69.138837203749759; - lats[2264]=-69.209135962917699; - lats[2265]=-69.279434722016902; - lats[2266]=-69.349733481046613; - lats[2267]=-69.420032240006194; - lats[2268]=-69.490330998894862; - lats[2269]=-69.560629757711908; - lats[2270]=-69.630928516456592; - lats[2271]=-69.701227275128161; - lats[2272]=-69.771526033725834; - lats[2273]=-69.841824792248843; - lats[2274]=-69.912123550696421; - lats[2275]=-69.982422309067744; - lats[2276]=-70.052721067362043; - lats[2277]=-70.123019825578467; - lats[2278]=-70.193318583716191; - lats[2279]=-70.263617341774406; - lats[2280]=-70.333916099752187; - lats[2281]=-70.404214857648739; - lats[2282]=-70.474513615463138; - lats[2283]=-70.544812373194532; - lats[2284]=-70.615111130841967; - lats[2285]=-70.685409888404578; - lats[2286]=-70.755708645881384; - lats[2287]=-70.826007403271475; - lats[2288]=-70.896306160573886; - lats[2289]=-70.966604917787635; - lats[2290]=-71.036903674911756; - lats[2291]=-71.107202431945211; - lats[2292]=-71.177501188887007; - lats[2293]=-71.247799945736105; - lats[2294]=-71.318098702491469; - lats[2295]=-71.388397459152031; - lats[2296]=-71.458696215716685; - lats[2297]=-71.528994972184378; - lats[2298]=-71.599293728553988; - lats[2299]=-71.669592484824364; - lats[2300]=-71.739891240994368; - lats[2301]=-71.810189997062835; - lats[2302]=-71.880488753028587; - lats[2303]=-71.950787508890414; - lats[2304]=-72.02108626464711; - lats[2305]=-72.091385020297409; - lats[2306]=-72.161683775840089; - lats[2307]=-72.231982531273843; - lats[2308]=-72.302281286597392; - lats[2309]=-72.3725800418094; - lats[2310]=-72.442878796908545; - lats[2311]=-72.513177551893421; - lats[2312]=-72.583476306762691; - lats[2313]=-72.653775061514935; - lats[2314]=-72.724073816148703; - lats[2315]=-72.794372570662574; - lats[2316]=-72.864671325055056; - lats[2317]=-72.934970079324657; - lats[2318]=-73.005268833469799; - lats[2319]=-73.075567587489019; - lats[2320]=-73.145866341380668; - lats[2321]=-73.216165095143182; - lats[2322]=-73.2864638487749; - lats[2323]=-73.356762602274188; - lats[2324]=-73.427061355639339; - lats[2325]=-73.497360108868662; - lats[2326]=-73.567658861960396; - lats[2327]=-73.637957614912779; - lats[2328]=-73.70825636772399; - lats[2329]=-73.778555120392184; - lats[2330]=-73.848853872915541; - lats[2331]=-73.919152625292114; - lats[2332]=-73.98945137751997; - lats[2333]=-74.059750129597163; - lats[2334]=-74.13004888152166; - lats[2335]=-74.200347633291472; - lats[2336]=-74.270646384904481; - lats[2337]=-74.340945136358584; - lats[2338]=-74.411243887651622; - lats[2339]=-74.481542638781434; - lats[2340]=-74.551841389745761; - lats[2341]=-74.622140140542356; - lats[2342]=-74.692438891168877; - lats[2343]=-74.762737641622991; - lats[2344]=-74.833036391902269; - lats[2345]=-74.903335142004323; - lats[2346]=-74.973633891926625; - lats[2347]=-75.043932641666672; - lats[2348]=-75.114231391221821; - lats[2349]=-75.184530140589501; - lats[2350]=-75.254828889766983; - lats[2351]=-75.325127638751567; - lats[2352]=-75.395426387540439; - lats[2353]=-75.465725136130786; - lats[2354]=-75.536023884519707; - lats[2355]=-75.60632263270422; - lats[2356]=-75.67662138068134; - lats[2357]=-75.746920128447996; - lats[2358]=-75.81721887600105; - lats[2359]=-75.887517623337317; - lats[2360]=-75.957816370453543; - lats[2361]=-76.028115117346374; - lats[2362]=-76.098413864012443; - lats[2363]=-76.16871261044831; - lats[2364]=-76.239011356650423; - lats[2365]=-76.3093101026152; - lats[2366]=-76.379608848338933; - lats[2367]=-76.449907593817869; - lats[2368]=-76.520206339048215; - lats[2369]=-76.59050508402602; - lats[2370]=-76.660803828747362; - lats[2371]=-76.731102573208048; - lats[2372]=-76.801401317404; - lats[2373]=-76.871700061330955; - lats[2374]=-76.941998804984564; - lats[2375]=-77.012297548360323; - lats[2376]=-77.082596291453768; - lats[2377]=-77.15289503426024; - lats[2378]=-77.22319377677502; - lats[2379]=-77.293492518993247; - lats[2380]=-77.363791260909963; - lats[2381]=-77.434090002520122; - lats[2382]=-77.504388743818524; - lats[2383]=-77.574687484799924; - lats[2384]=-77.644986225458879; - lats[2385]=-77.71528496578982; - lats[2386]=-77.785583705787161; - lats[2387]=-77.855882445445019; - lats[2388]=-77.926181184757539; - lats[2389]=-77.996479923718596; - lats[2390]=-78.066778662322022; - lats[2391]=-78.137077400561424; - lats[2392]=-78.207376138430348; - lats[2393]=-78.277674875922045; - lats[2394]=-78.347973613029708; - lats[2395]=-78.418272349746417; - lats[2396]=-78.488571086064923; - lats[2397]=-78.558869821977908; - lats[2398]=-78.629168557477882; - lats[2399]=-78.699467292557102; - lats[2400]=-78.769766027207638; - lats[2401]=-78.840064761421445; - lats[2402]=-78.910363495190211; - lats[2403]=-78.980662228505423; - lats[2404]=-79.050960961358285; - lats[2405]=-79.121259693739859; - lats[2406]=-79.191558425640977; - lats[2407]=-79.261857157052191; - lats[2408]=-79.332155887963822; - lats[2409]=-79.402454618365894; - lats[2410]=-79.472753348248219; - lats[2411]=-79.543052077600308; - lats[2412]=-79.61335080641139; - lats[2413]=-79.683649534670437; - lats[2414]=-79.753948262366038; - lats[2415]=-79.824246989486554; - lats[2416]=-79.894545716019948; - lats[2417]=-79.9648444419539; - lats[2418]=-80.035143167275749; - lats[2419]=-80.105441891972376; - lats[2420]=-80.175740616030438; - lats[2421]=-80.246039339436052; - lats[2422]=-80.316338062175078; - lats[2423]=-80.386636784232863; - lats[2424]=-80.456935505594302; - lats[2425]=-80.527234226243991; - lats[2426]=-80.59753294616587; - lats[2427]=-80.667831665343556; - lats[2428]=-80.73813038376008; - lats[2429]=-80.808429101397948; - lats[2430]=-80.878727818239184; - lats[2431]=-80.949026534265244; - lats[2432]=-81.019325249456955; - lats[2433]=-81.089623963794551; - lats[2434]=-81.159922677257711; - lats[2435]=-81.230221389825374; - lats[2436]=-81.300520101475826; - lats[2437]=-81.370818812186627; - lats[2438]=-81.441117521934686; - lats[2439]=-81.511416230696042; - lats[2440]=-81.581714938445955; - lats[2441]=-81.652013645158945; - lats[2442]=-81.722312350808508; - lats[2443]=-81.792611055367345; - lats[2444]=-81.862909758807191; - lats[2445]=-81.933208461098829; - lats[2446]=-82.003507162211946; - lats[2447]=-82.073805862115165; - lats[2448]=-82.144104560776; - lats[2449]=-82.214403258160871; - lats[2450]=-82.284701954234833; - lats[2451]=-82.355000648961692; - lats[2452]=-82.425299342304029; - lats[2453]=-82.495598034222837; - lats[2454]=-82.56589672467787; - lats[2455]=-82.63619541362705; - lats[2456]=-82.706494101026948; - lats[2457]=-82.77679278683226; - lats[2458]=-82.84709147099602; - lats[2459]=-82.917390153469313; - lats[2460]=-82.987688834201322; - lats[2461]=-83.057987513139125; - lats[2462]=-83.128286190227698; - lats[2463]=-83.198584865409657; - lats[2464]=-83.268883538625232; - lats[2465]=-83.339182209812321; - lats[2466]=-83.409480878905782; - lats[2467]=-83.479779545838113; - lats[2468]=-83.550078210538487; - lats[2469]=-83.620376872933264; - lats[2470]=-83.690675532945292; - lats[2471]=-83.760974190494011; - lats[2472]=-83.831272845495249; - lats[2473]=-83.901571497860914; - lats[2474]=-83.971870147498763; - lats[2475]=-84.042168794312317; - lats[2476]=-84.112467438200326; - lats[2477]=-84.18276607905679; - lats[2478]=-84.253064716770425; - lats[2479]=-84.323363351224444; - lats[2480]=-84.393661982296322; - lats[2481]=-84.463960609857125; - lats[2482]=-84.534259233771479; - lats[2483]=-84.604557853896708; - lats[2484]=-84.674856470082915; - lats[2485]=-84.745155082171991; - lats[2486]=-84.81545368999717; - lats[2487]=-84.885752293382765; - lats[2488]=-84.95605089214304; - lats[2489]=-85.026349486081983; - lats[2490]=-85.09664807499216; - lats[2491]=-85.16694665865414; - lats[2492]=-85.237245236835548; - lats[2493]=-85.307543809290152; - lats[2494]=-85.377842375756586; - lats[2495]=-85.448140935957483; - lats[2496]=-85.518439489597966; - lats[2497]=-85.588738036364362; - lats[2498]=-85.659036575922883; - lats[2499]=-85.729335107917464; - lats[2500]=-85.799633631968391; - lats[2501]=-85.869932147670127; - lats[2502]=-85.940230654588888; - lats[2503]=-86.010529152260403; - lats[2504]=-86.080827640187209; - lats[2505]=-86.151126117835304; - lats[2506]=-86.221424584631109; - lats[2507]=-86.291723039957418; - lats[2508]=-86.362021483149363; - lats[2509]=-86.432319913489792; - lats[2510]=-86.502618330203831; - lats[2511]=-86.572916732453024; - lats[2512]=-86.643215119328573; - lats[2513]=-86.713513489844246; - lats[2514]=-86.783811842927179; - lats[2515]=-86.854110177408927; - lats[2516]=-86.924408492014166; - lats[2517]=-86.994706785348129; - lats[2518]=-87.065005055882821; - lats[2519]=-87.135303301939786; - lats[2520]=-87.205601521672108; - lats[2521]=-87.275899713041966; - lats[2522]=-87.346197873795816; - lats[2523]=-87.416496001434894; - lats[2524]=-87.486794093180748; - lats[2525]=-87.557092145935584; - lats[2526]=-87.627390156234085; - lats[2527]=-87.697688120188062; - lats[2528]=-87.767986033419561; - lats[2529]=-87.838283890981543; - lats[2530]=-87.908581687261687; - lats[2531]=-87.978879415867283; - lats[2532]=-88.049177069484486; - lats[2533]=-88.119474639706425; - lats[2534]=-88.189772116820762; - lats[2535]=-88.26006948954614; - lats[2536]=-88.330366744702559; - lats[2537]=-88.40066386679355; - lats[2538]=-88.470960837474877; - lats[2539]=-88.541257634868515; - lats[2540]=-88.611554232668382; - lats[2541]=-88.681850598961759; - lats[2542]=-88.752146694650691; - lats[2543]=-88.822442471310097; - lats[2544]=-88.892737868230952; - lats[2545]=-88.96303280826325; - lats[2546]=-89.033327191845927; - lats[2547]=-89.103620888238879; - lats[2548]=-89.173913722284126; - lats[2549]=-89.24420545380525; - lats[2550]=-89.314495744374256; - lats[2551]=-89.3847841013921; - lats[2552]=-89.45506977912261; - lats[2553]=-89.525351592371393; - lats[2554]=-89.595627537554492; - lats[2555]=-89.6658939412157; - lats[2556]=-89.736143271609578; - lats[2557]=-89.806357319542244; - lats[2558]=-89.876478353332288; - lats[2559]=-89.946187715665616; + + const size_t ilast = 2559; + for(size_t i=ilast; i>ilast/2; --i) { + lats[i] = -lats[ilast-i]; + } + return GRIB_SUCCESS; } /* Performance: return the precomputed latitudes for N=640 */ +/* The provided 'lats' array should have allocated 2*N elements */ static int get_precomputed_latitudes_N640(double* lats) { lats[0] = 89.892396445590066; @@ -3300,646 +2028,11 @@ static int get_precomputed_latitudes_N640(double* lats) lats[637] = 0.351425197730664; lats[638] = 0.21085511863852741; lats[639] = 0.070285039546197275; - lats[640] = -0.070285039546197275; - lats[641] = -0.21085511863852741; - lats[642] = -0.351425197730664; - lats[643] = -0.49199527682247807; - lats[644] = -0.63256535591384055; - lats[645] = -0.77313543500462234; - lats[646] = -0.91370551409469447; - lats[647] = -1.0542755931839276; - lats[648] = -1.194845672272193; - lats[649] = -1.3354157513593612; - lats[650] = -1.4759858304453026; - lats[651] = -1.6165559095298885; - lats[652] = -1.7571259886129893; - lats[653] = -1.8976960676944756; - lats[654] = -2.0382661467742174; - lats[655] = -2.1788362258520855; - lats[656] = -2.3194063049279499; - lats[657] = -2.4599763840016813; - lats[658] = -2.6005464630731496; - lats[659] = -2.7411165421422243; - lats[660] = -2.8816866212087762; - lats[661] = -3.0222567002726746; - lats[662] = -3.1628267793337885; - lats[663] = -3.3033968583919884; - lats[664] = -3.4439669374471427; - lats[665] = -3.5845370164991213; - lats[666] = -3.7251070955477918; - lats[667] = -3.8656771745930261; - lats[668] = -4.0062472536346903; - lats[669] = -4.1468173326726534; - lats[670] = -4.2873874117067841; - lats[671] = -4.4279574907369508; - lats[672] = -4.5685275697630221; - lats[673] = -4.7090976487848639; - lats[674] = -4.8496677278023448; - lats[675] = -4.9902378068153324; - lats[676] = -5.1308078858236934; - lats[677] = -5.2713779648272956; - lats[678] = -5.4119480438260039; - lats[679] = -5.5525181228196869; - lats[680] = -5.6930882018082087; - lats[681] = -5.833658280791437; - lats[682] = -5.9742283597692367; - lats[683] = -6.1147984387414738; - lats[684] = -6.2553685177080123; - lats[685] = -6.3959385966687181; - lats[686] = -6.5365086756234554; - lats[687] = -6.6770787545720891; - lats[688] = -6.8176488335144816; - lats[689] = -6.9582189124504987; - lats[690] = -7.098788991380002; - lats[691] = -7.2393590703028563; - lats[692] = -7.3799291492189223; - lats[693] = -7.5204992281280649; - lats[694] = -7.661069307030143; - lats[695] = -7.8016393859250206; - lats[696] = -7.9422094648125583; - lats[697] = -8.0827795436926184; - lats[698] = -8.223349622565058; - lats[699] = -8.3639197014297419; - lats[700] = -8.5044897802865282; - lats[701] = -8.645059859135273; - lats[702] = -8.7856299379758411; - lats[703] = -8.9262000168080871; - lats[704] = -9.0667700956318686; - lats[705] = -9.2073401744470491; - lats[706] = -9.3479102532534792; - lats[707] = -9.4884803320510205; - lats[708] = -9.6290504108395272; - lats[709] = -9.7696204896188554; - lats[710] = -9.9101905683888614; - lats[711] = -10.050760647149401; - lats[712] = -10.191330725900327; - lats[713] = -10.331900804641496; - lats[714] = -10.472470883372759; - lats[715] = -10.613040962093971; - lats[716] = -10.753611040804984; - lats[717] = -10.894181119505649; - lats[718] = -11.034751198195819; - lats[719] = -11.175321276875344; - lats[720] = -11.315891355544077; - lats[721] = -11.456461434201868; - lats[722] = -11.597031512848561; - lats[723] = -11.73760159148401; - lats[724] = -11.878171670108063; - lats[725] = -12.018741748720567; - lats[726] = -12.159311827321366; - lats[727] = -12.299881905910311; - lats[728] = -12.440451984487247; - lats[729] = -12.58102206305202; - lats[730] = -12.72159214160447; - lats[731] = -12.862162220144443; - lats[732] = -13.002732298671786; - lats[733] = -13.143302377186339; - lats[734] = -13.283872455687943; - lats[735] = -13.424442534176441; - lats[736] = -13.565012612651675; - lats[737] = -13.705582691113481; - lats[738] = -13.8461527695617; - lats[739] = -13.986722847996173; - lats[740] = -14.127292926416734; - lats[741] = -14.267863004823225; - lats[742] = -14.408433083215476; - lats[743] = -14.549003161593328; - lats[744] = -14.689573239956617; - lats[745] = -14.830143318305167; - lats[746] = -14.970713396638821; - lats[747] = -15.111283474957411; - lats[748] = -15.251853553260768; - lats[749] = -15.392423631548718; - lats[750] = -15.532993709821094; - lats[751] = -15.673563788077727; - lats[752] = -15.814133866318445; - lats[753] = -15.954703944543072; - lats[754] = -16.09527402275144; - lats[755] = -16.235844100943371; - lats[756] = -16.376414179118694; - lats[757] = -16.516984257277226; - lats[758] = -16.657554335418794; - lats[759] = -16.798124413543224; - lats[760] = -16.938694491650331; - lats[761] = -17.079264569739937; - lats[762] = -17.219834647811862; - lats[763] = -17.360404725865926; - lats[764] = -17.500974803901951; - lats[765] = -17.641544881919739; - lats[766] = -17.782114959919113; - lats[767] = -17.922685037899889; - lats[768] = -18.063255115861882; - lats[769] = -18.203825193804899; - lats[770] = -18.344395271728757; - lats[771] = -18.484965349633256; - lats[772] = -18.625535427518219; - lats[773] = -18.766105505383443; - lats[774] = -18.906675583228736; - lats[775] = -19.04724566105391; - lats[776] = -19.187815738858767; - lats[777] = -19.328385816643106; - lats[778] = -19.468955894406733; - lats[779] = -19.609525972149449; - lats[780] = -19.750096049871054; - lats[781] = -19.890666127571347; - lats[782] = -20.031236205250121; - lats[783] = -20.171806282907177; - lats[784] = -20.312376360542309; - lats[785] = -20.452946438155308; - lats[786] = -20.593516515745968; - lats[787] = -20.734086593314085; - lats[788] = -20.874656670859444; - lats[789] = -21.015226748381831; - lats[790] = -21.155796825881037; - lats[791] = -21.296366903356844; - lats[792] = -21.436936980809044; - lats[793] = -21.577507058237412; - lats[794] = -21.718077135641735; - lats[795] = -21.858647213021786; - lats[796] = -21.999217290377352; - lats[797] = -22.139787367708202; - lats[798] = -22.280357445014126; - lats[799] = -22.420927522294875; - lats[800] = -22.561497599550243; - lats[801] = -22.70206767677999; - lats[802] = -22.84263775398389; - lats[803] = -22.98320783116171; - lats[804] = -23.123777908313219; - lats[805] = -23.264347985438178; - lats[806] = -23.404918062536346; - lats[807] = -23.545488139607492; - lats[808] = -23.686058216651375; - lats[809] = -23.826628293667756; - lats[810] = -23.96719837065638; - lats[811] = -24.107768447617016; - lats[812] = -24.248338524549407; - lats[813] = -24.388908601453309; - lats[814] = -24.529478678328466; - lats[815] = -24.670048755174633; - lats[816] = -24.810618831991551; - lats[817] = -24.951188908778963; - lats[818] = -25.091758985536615; - lats[819] = -25.232329062264245; - lats[820] = -25.3728991389616; - lats[821] = -25.513469215628398; - lats[822] = -25.654039292264386; - lats[823] = -25.794609368869299; - lats[824] = -25.935179445442859; - lats[825] = -26.075749521984797; - lats[826] = -26.216319598494842; - lats[827] = -26.356889674972713; - lats[828] = -26.497459751418134; - lats[829] = -26.638029827830831; - lats[830] = -26.778599904210516; - lats[831] = -26.919169980556905; - lats[832] = -27.05974005686971; - lats[833] = -27.200310133148644; - lats[834] = -27.340880209393415; - lats[835] = -27.481450285603731; - lats[836] = -27.622020361779295; - lats[837] = -27.762590437919812; - lats[838] = -27.903160514024975; - lats[839] = -28.043730590094491; - lats[840] = -28.184300666128038; - lats[841] = -28.324870742125327; - lats[842] = -28.465440818086037; - lats[843] = -28.606010894009859; - lats[844] = -28.746580969896474; - lats[845] = -28.887151045745565; - lats[846] = -29.027721121556816; - lats[847] = -29.168291197329893; - lats[848] = -29.308861273064483; - lats[849] = -29.449431348760253; - lats[850] = -29.590001424416862; - lats[851] = -29.730571500033992; - lats[852] = -29.87114157561129; - lats[853] = -30.011711651148435; - lats[854] = -30.152281726645064; - lats[855] = -30.292851802100841; - lats[856] = -30.433421877515418; - lats[857] = -30.573991952888438; - lats[858] = -30.71456202821955; - lats[859] = -30.855132103508407; - lats[860] = -30.99570217875463; - lats[861] = -31.136272253957859; - lats[862] = -31.276842329117731; - lats[863] = -31.417412404233875; - lats[864] = -31.55798247930592; - lats[865] = -31.698552554333489; - lats[866] = -31.839122629316183; - lats[867] = -31.979692704253651; - lats[868] = -32.120262779145477; - lats[869] = -32.260832853991289; - lats[870] = -32.401402928790681; - lats[871] = -32.541973003543255; - lats[872] = -32.682543078248621; - lats[873] = -32.823113152906366; - lats[874] = -32.963683227516071; - lats[875] = -33.104253302077339; - lats[876] = -33.244823376589757; - lats[877] = -33.385393451052892; - lats[878] = -33.525963525466317; - lats[879] = -33.66653359982962; - lats[880] = -33.807103674142361; - lats[881] = -33.9476737484041; - lats[882] = -34.088243822614395; - lats[883] = -34.228813896772813; - lats[884] = -34.369383970878907; - lats[885] = -34.509954044932208; - lats[886] = -34.650524118932253; - lats[887] = -34.79109419287861; - lats[888] = -34.931664266770788; - lats[889] = -35.072234340608333; - lats[890] = -35.21280441439076; - lats[891] = -35.353374488117588; - lats[892] = -35.493944561788332; - lats[893] = -35.634514635402525; - lats[894] = -35.775084708959632; - lats[895] = -35.9156547824592; - lats[896] = -36.056224855900687; - lats[897] = -36.196794929283605; - lats[898] = -36.33736500260742; - lats[899] = -36.477935075871656; - lats[900] = -36.618505149075737; - lats[901] = -36.759075222219167; - lats[902] = -36.899645295301404; - lats[903] = -37.040215368321896; - lats[904] = -37.180785441280122; - lats[905] = -37.321355514175501; - lats[906] = -37.461925587007492; - lats[907] = -37.602495659775542; - lats[908] = -37.743065732479067; - lats[909] = -37.883635805117493; - lats[910] = -38.02420587769025; - lats[911] = -38.164775950196741; - lats[912] = -38.305346022636385; - lats[913] = -38.44591609500857; - lats[914] = -38.5864861673127; - lats[915] = -38.727056239548169; - lats[916] = -38.867626311714339; - lats[917] = -39.008196383810613; - lats[918] = -39.148766455836338; - lats[919] = -39.289336527790894; - lats[920] = -39.429906599673615; - lats[921] = -39.570476671483874; - lats[922] = -39.711046743220997; - lats[923] = -39.851616814884331; - lats[924] = -39.992186886473185; - lats[925] = -40.132756957986885; - lats[926] = -40.273327029424742; - lats[927] = -40.41389710078608; - lats[928] = -40.554467172070169; - lats[929] = -40.695037243276325; - lats[930] = -40.835607314403816; - lats[931] = -40.976177385451912; - lats[932] = -41.116747456419873; - lats[933] = -41.257317527306981; - lats[934] = -41.397887598112455; - lats[935] = -41.538457668835562; - lats[936] = -41.679027739475522; - lats[937] = -41.819597810031553; - lats[938] = -41.960167880502873; - lats[939] = -42.100737950888686; - lats[940] = -42.241308021188203; - lats[941] = -42.381878091400594; - lats[942] = -42.522448161525034; - lats[943] = -42.663018231560706; - lats[944] = -42.803588301506764; - lats[945] = -42.944158371362349; - lats[946] = -43.0847284411266; - lats[947] = -43.225298510798666; - lats[948] = -43.365868580377636; - lats[949] = -43.506438649862638; - lats[950] = -43.64700871925276; - lats[951] = -43.787578788547094; - lats[952] = -43.928148857744716; - lats[953] = -44.068718926844674; - lats[954] = -44.209288995846045; - lats[955] = -44.349859064747854; - lats[956] = -44.490429133549149; - lats[957] = -44.630999202248923; - lats[958] = -44.771569270846214; - lats[959] = -44.912139339339987; - lats[960] = -45.052709407729239; - lats[961] = -45.193279476012933; - lats[962] = -45.333849544190024; - lats[963] = -45.474419612259481; - lats[964] = -45.614989680220205; - lats[965] = -45.755559748071114; - lats[966] = -45.896129815811136; - lats[967] = -46.036699883439134; - lats[968] = -46.177269950954006; - lats[969] = -46.317840018354602; - lats[970] = -46.458410085639763; - lats[971] = -46.598980152808338; - lats[972] = -46.73955021985914; - lats[973] = -46.880120286790955; - lats[974] = -47.020690353602596; - lats[975] = -47.161260420292813; - lats[976] = -47.301830486860368; - lats[977] = -47.442400553303997; - lats[978] = -47.582970619622444; - lats[979] = -47.723540685814392; - lats[980] = -47.864110751878535; - lats[981] = -48.004680817813544; - lats[982] = -48.145250883618075; - lats[983] = -48.285820949290759; - lats[984] = -48.42639101483023; - lats[985] = -48.56696108023506; - lats[986] = -48.707531145503857; - lats[987] = -48.848101210635171; - lats[988] = -48.988671275627539; - lats[989] = -49.129241340479489; - lats[990] = -49.269811405189529; - lats[991] = -49.410381469756118; - lats[992] = -49.550951534177734; - lats[993] = -49.691521598452823; - lats[994] = -49.832091662579785; - lats[995] = -49.972661726557028; - lats[996] = -50.113231790382912; - lats[997] = -50.253801854055808; - lats[998] = -50.39437191757402; - lats[999] = -50.534941980935862; - lats[1000] = -50.675512044139623; - lats[1001] = -50.81608210718354; - lats[1002] = -50.956652170065858; - lats[1003] = -51.097222232784773; - lats[1004] = -51.237792295338465; - lats[1005] = -51.378362357725095; - lats[1006] = -51.518932419942786; - lats[1007] = -51.659502481989627; - lats[1008] = -51.800072543863692; - lats[1009] = -51.940642605563028; - lats[1010] = -52.081212667085637; - lats[1011] = -52.221782728429538; - lats[1012] = -52.362352789592649; - lats[1013] = -52.502922850572908; - lats[1014] = -52.643492911368206; - lats[1015] = -52.784062971976404; - lats[1016] = -52.924633032395342; - lats[1017] = -53.065203092622802; - lats[1018] = -53.205773152656562; - lats[1019] = -53.346343212494332; - lats[1020] = -53.486913272133812; - lats[1021] = -53.627483331572677; - lats[1022] = -53.768053390808532; - lats[1023] = -53.90862344983897; - lats[1024] = -54.049193508661538; - lats[1025] = -54.189763567273758; - lats[1026] = -54.330333625673063; - lats[1027] = -54.470903683856939; - lats[1028] = -54.611473741822735; - lats[1029] = -54.752043799567822; - lats[1030] = -54.892613857089486; - lats[1031] = -55.033183914385013; - lats[1032] = -55.173753971451625; - lats[1033] = -55.314324028286471; - lats[1034] = -55.45489408488671; - lats[1035] = -55.595464141249401; - lats[1036] = -55.736034197371588; - lats[1037] = -55.876604253250278; - lats[1038] = -56.017174308882367; - lats[1039] = -56.157744364264779; - lats[1040] = -56.29831441939433; - lats[1041] = -56.438884474267795; - lats[1042] = -56.579454528881925; - lats[1043] = -56.720024583233375; - lats[1044] = -56.860594637318769; - lats[1045] = -57.001164691134662; - lats[1046] = -57.141734744677549; - lats[1047] = -57.282304797943887; - lats[1048] = -57.422874850930043; - lats[1049] = -57.563444903632337; - lats[1050] = -57.704014956047033; - lats[1051] = -57.844585008170284; - lats[1052] = -57.985155059998249; - lats[1053] = -58.125725111526968; - lats[1054] = -58.266295162752428; - lats[1055] = -58.406865213670514; - lats[1056] = -58.547435264277105; - lats[1057] = -58.688005314567938; - lats[1058] = -58.828575364538722; - lats[1059] = -58.96914541418505; - lats[1060] = -59.10971546350244; - lats[1061] = -59.250285512486386; - lats[1062] = -59.390855561132213; - lats[1063] = -59.531425609435225; - lats[1064] = -59.671995657390596; - lats[1065] = -59.812565704993467; - lats[1066] = -59.953135752238794; - lats[1067] = -60.093705799121537; - lats[1068] = -60.234275845636503; - lats[1069] = -60.374845891778421; - lats[1070] = -60.515415937541938; - lats[1071] = -60.655985982921543; - lats[1072] = -60.796556027911663; - lats[1073] = -60.937126072506608; - lats[1074] = -61.077696116700601; - lats[1075] = -61.21826616048768; - lats[1076] = -61.358836203861841; - lats[1077] = -61.499406246816953; - lats[1078] = -61.639976289346727; - lats[1079] = -61.780546331444761; - lats[1080] = -61.921116373104539; - lats[1081] = -62.061686414319418; - lats[1082] = -62.202256455082583; - lats[1083] = -62.342826495387122; - lats[1084] = -62.483396535225978; - lats[1085] = -62.62396657459194; - lats[1086] = -62.764536613477638; - lats[1087] = -62.905106651875542; - lats[1088] = -63.045676689778013; - lats[1089] = -63.186246727177178; - lats[1090] = -63.326816764065093; - lats[1091] = -63.467386800433559; - lats[1092] = -63.607956836274255; - lats[1093] = -63.748526871578648; - lats[1094] = -63.889096906338061; - lats[1095] = -64.029666940543564; - lats[1096] = -64.170236974186125; - lats[1097] = -64.310807007256443; - lats[1098] = -64.451377039745026; - lats[1099] = -64.591947071642196; - lats[1100] = -64.732517102938033; - lats[1101] = -64.873087133622406; - lats[1102] = -65.013657163684968; - lats[1103] = -65.154227193115119; - lats[1104] = -65.294797221902016; - lats[1105] = -65.435367250034616; - lats[1106] = -65.575937277501538; - lats[1107] = -65.716507304291198; - lats[1108] = -65.85707733039176; - lats[1109] = -65.997647355791017; - lats[1110] = -66.138217380476604; - lats[1111] = -66.278787404435761; - lats[1112] = -66.41935742765547; - lats[1113] = -66.559927450122359; - lats[1114] = -66.700497471822814; - lats[1115] = -66.841067492742795; - lats[1116] = -66.981637512867991; - lats[1117] = -67.122207532183722; - lats[1118] = -67.262777550674912; - lats[1119] = -67.403347568326168; - lats[1120] = -67.543917585121662; - lats[1121] = -67.684487601045149; - lats[1122] = -67.825057616080073; - lats[1123] = -67.965627630209354; - lats[1124] = -68.106197643415527; - lats[1125] = -68.246767655680657; - lats[1126] = -68.387337666986312; - lats[1127] = -68.52790767731365; - lats[1128] = -68.668477686643286; - lats[1129] = -68.809047694955296; - lats[1130] = -68.949617702229318; - lats[1131] = -69.090187708444333; - lats[1132] = -69.230757713578825; - lats[1133] = -69.37132771761064; - lats[1134] = -69.511897720517084; - lats[1135] = -69.65246772227475; - lats[1136] = -69.793037722859665; - lats[1137] = -69.933607722247146; - lats[1138] = -70.074177720411782; - lats[1139] = -70.214747717327526; - lats[1140] = -70.355317712967462; - lats[1141] = -70.495887707304007; - lats[1142] = -70.636457700308753; - lats[1143] = -70.777027691952398; - lats[1144] = -70.917597682204899; - lats[1145] = -71.058167671035164; - lats[1146] = -71.198737658411332; - lats[1147] = -71.339307644300462; - lats[1148] = -71.47987762866866; - lats[1149] = -71.620447611481026; - lats[1150] = -71.761017592701492; - lats[1151] = -71.901587572292982; - lats[1152] = -72.042157550217183; - lats[1153] = -72.182727526434604; - lats[1154] = -72.323297500904502; - lats[1155] = -72.463867473584784; - lats[1156] = -72.604437444432065; - lats[1157] = -72.745007413401481; - lats[1158] = -72.885577380446747; - lats[1159] = -73.026147345520002; - lats[1160] = -73.166717308571819; - lats[1161] = -73.307287269551111; - lats[1162] = -73.447857228405013; - lats[1163] = -73.588427185078871; - lats[1164] = -73.728997139516167; - lats[1165] = -73.869567091658411; - lats[1166] = -74.010137041445006; - lats[1167] = -74.150706988813226; - lats[1168] = -74.291276933698185; - lats[1169] = -74.431846876032495; - lats[1170] = -74.57241681574645; - lats[1171] = -74.712986752767719; - lats[1172] = -74.853556687021296; - lats[1173] = -74.994126618429377; - lats[1174] = -75.134696546911186; - lats[1175] = -75.275266472382896; - lats[1176] = -75.41583639475742; - lats[1177] = -75.556406313944308; - lats[1178] = -75.69697622984954; - lats[1179] = -75.837546142375359; - lats[1180] = -75.978116051420102; - lats[1181] = -76.118685956877997; - lats[1182] = -76.259255858638895; - lats[1183] = -76.399825756588143; - lats[1184] = -76.540395650606285; - lats[1185] = -76.680965540568806; - lats[1186] = -76.821535426345932; - lats[1187] = -76.962105307802219; - lats[1188] = -77.102675184796354; - lats[1189] = -77.243245057180829; - lats[1190] = -77.383814924801513; - lats[1191] = -77.524384787497311; - lats[1192] = -77.664954645099883; - lats[1193] = -77.805524497433041; - lats[1194] = -77.946094344312371; - lats[1195] = -78.086664185544819; - lats[1196] = -78.227234020928066; - lats[1197] = -78.367803850250056; - lats[1198] = -78.508373673288318; - lats[1199] = -78.648943489809355; - lats[1200] = -78.789513299567957; - lats[1201] = -78.930083102306568; - lats[1202] = -79.070652897754229; - lats[1203] = -79.211222685625927; - lats[1204] = -79.351792465621628; - lats[1205] = -79.492362237425226; - lats[1206] = -79.632932000703448; - lats[1207] = -79.773501755104689; - lats[1208] = -79.914071500257819; - lats[1209] = -80.054641235770603; - lats[1210] = -80.195210961228469; - lats[1211] = -80.335780676192584; - lats[1212] = -80.47635038019834; - lats[1213] = -80.616920072753146; - lats[1214] = -80.757489753334553; - lats[1215] = -80.898059421387785; - lats[1216] = -81.038629076323318; - lats[1217] = -81.179198717514012; - lats[1218] = -81.319768344292086; - lats[1219] = -81.460337955945846; - lats[1220] = -81.600907551715878; - lats[1221] = -81.741477130791196; - lats[1222] = -81.882046692304485; - lats[1223] = -82.022616235327504; - lats[1224] = -82.163185758865239; - lats[1225] = -82.303755261850071; - lats[1226] = -82.444324743134914; - lats[1227] = -82.584894201485696; - lats[1228] = -82.725463635573107; - lats[1229] = -82.866033043962815; - lats[1230] = -83.006602425105484; - lats[1231] = -83.147171777324388; - lats[1232] = -83.287741098802584; - lats[1233] = -83.428310387567549; - lats[1234] = -83.568879641474325; - lats[1235] = -83.709448858186462; - lats[1236] = -83.850018035153667; - lats[1237] = -83.990587169587158; - lats[1238] = -84.131156258431133; - lats[1239] = -84.271725298329656; - lats[1240] = -84.412294285589354; - lats[1241] = -84.552863216135577; - lats[1242] = -84.693432085462035; - lats[1243] = -84.834000888572191; - lats[1244] = -84.974569619910426; - lats[1245] = -85.115138273281829; - lats[1246] = -85.255706841757572; - lats[1247] = -85.396275317562669; - lats[1248] = -85.536843691942948; - lats[1249] = -85.677411955006008; - lats[1250] = -85.817980095529578; - lats[1251] = -85.958548100730781; - lats[1252] = -86.0991159559849; - lats[1253] = -86.239683644481104; - lats[1254] = -86.380251146798656; - lats[1255] = -86.520818440379529; - lats[1256] = -86.661385498868242; - lats[1257] = -86.801952291278369; - lats[1258] = -86.942518780928566; - lats[1259] = -87.083084924070917; - lats[1260] = -87.223650668104085; - lats[1261] = -87.364215949214667; - lats[1262] = -87.504780689222315; - lats[1263] = -87.645344791295628; - lats[1264] = -87.785908134040668; - lats[1265] = -87.926470563186442; - lats[1266] = -88.067031879650926; - lats[1267] = -88.207591822004105; - lats[1268] = -88.348150039999084; - lats[1269] = -88.488706053376362; - lats[1270] = -88.629259185411627; - lats[1271] = -88.76980845110036; - lats[1272] = -88.91035235926023; - lats[1273] = -89.050888539966436; - lats[1274] = -89.191412986832432; - lats[1275] = -89.331918354381827; - lats[1276] = -89.472389582061126; - lats[1277] = -89.612790258599077; - lats[1278] = -89.753004943174034; - lats[1279] = -89.892396445590066; + const size_t ilast = 1279; + for(size_t i=ilast; i>ilast/2; --i) { + lats[i] = -lats[ilast-i]; + } + return GRIB_SUCCESS; } @@ -4003,7 +2096,7 @@ static int ecc_grib_get_gaussian_latitudes(long trunc, double* lats) int grib_get_gaussian_latitudes(long trunc, double* lats) { - if (trunc == 0) + if (trunc <= 0) return GRIB_GEOCALCULUS_PROBLEM; if (trunc == 1280) return get_precomputed_latitudes_N1280(lats); @@ -4164,45 +2257,45 @@ double geographic_distance_spherical(double radius, double lon1, double lat1, do return radius * acos(a); } -/* major and minor axes in km, angles in degrees */ -double geographic_distance_ellipsoid(double major, double minor, double lon1, double lat1, double lon2, double lat2) -{ - /* Lambert's formula */ - double rlat1 = RADIAN(lat1); - double rlat2 = RADIAN(lat2); - double rlon1 = RADIAN(lon1); - double rlon2 = RADIAN(lon2); - double deltaLat = rlat2 - rlat1; - double deltaLon = rlon2 - rlon1; - double sinDlat = sin(deltaLat/2.0); - double sinDlon = sin(deltaLon/2.0); - double sin2Dlat = sinDlat*sinDlat; - double sin2Dlon = sinDlon*sinDlon; +// major and minor axes in km, angles in degrees +// double geographic_distance_ellipsoid(double major, double minor, double lon1, double lat1, double lon2, double lat2) +// { +// /* Lambert's formula */ +// double rlat1 = RADIAN(lat1); +// double rlat2 = RADIAN(lat2); +// double rlon1 = RADIAN(lon1); +// double rlon2 = RADIAN(lon2); +// double deltaLat = rlat2 - rlat1; +// double deltaLon = rlon2 - rlon1; +// double sinDlat = sin(deltaLat/2.0); +// double sinDlon = sin(deltaLon/2.0); +// double sin2Dlat = sinDlat*sinDlat; +// double sin2Dlon = sinDlon*sinDlon; - double a = sin2Dlat + cos(rlat1) * cos(rlat2) * sin2Dlon; - double c = 2 * atan2(sqrt(a), sqrt(1.0-a)); - double f = (major - minor)/major; /*flattening*/ +// double a = sin2Dlat + cos(rlat1) * cos(rlat2) * sin2Dlon; +// double c = 2 * atan2(sqrt(a), sqrt(1.0-a)); +// double f = (major - minor)/major; /*flattening*/ - double latr1 = atan( (1.0-f)*tan(rlat1) ); /*Reduced latitude1*/ - double latr2 = atan( (1.0-f)*tan(rlat2) ); /*Reduced latitude2*/ - double P = (latr1+latr2)/2; - double Q = (latr2-latr1)/2; - double sinP = sin(P); - double sin2P = sinP*sinP; - double cosQ = cos(Q); - double cos2Q = cosQ*cosQ; - double cosc2 = cos(c/2); - double cos2c2 = cosc2*cosc2; +// double latr1 = atan( (1.0-f)*tan(rlat1) ); /*Reduced latitude1*/ +// double latr2 = atan( (1.0-f)*tan(rlat2) ); /*Reduced latitude2*/ +// double P = (latr1+latr2)/2; +// double Q = (latr2-latr1)/2; +// double sinP = sin(P); +// double sin2P = sinP*sinP; +// double cosQ = cos(Q); +// double cos2Q = cosQ*cosQ; +// double cosc2 = cos(c/2); +// double cos2c2 = cosc2*cosc2; - double sinQ = sin(Q); - double sin2Q = sinQ*sinQ; - double cosP = cos(P); - double cos2P = cosP*cosP; - double sinc2 = sin(c/2); - double sin2c2 = sinc2*sinc2; +// double sinQ = sin(Q); +// double sin2Q = sinQ*sinQ; +// double cosP = cos(P); +// double cos2P = cosP*cosP; +// double sinc2 = sin(c/2); +// double sin2c2 = sinc2*sinc2; - double X = (c - sin(c))* sin2P * cos2Q / cos2c2; - double Y = (c + sin(c))*sin2Q*cos2P/sin2c2; - double dist = major * (c - f*(X+Y)/2); - return dist; -} +// double X = (c - sin(c))* sin2P * cos2Q / cos2c2; +// double Y = (c + sin(c))*sin2Q*cos2P/sin2c2; +// double dist = major * (c - f*(X+Y)/2); +// return dist; +// } From 14eb16e1a66c050451ba9847cc700ad6f39ad2d6 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 14 Aug 2023 09:32:38 +0100 Subject: [PATCH 151/372] Dead code removal --- src/eccodes_prototypes.h | 2 - src/grib_handle.cc | 84 +++++++++++++++++++--------------------- 2 files changed, 39 insertions(+), 47 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index b9a374b86..8b39e8cc8 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -1041,10 +1041,8 @@ int codes_check_message_footer(const void* bytes, size_t length, ProductKind pro int grib_get_message_size(const grib_handle* h, size_t* size); int grib_get_message(const grib_handle* h, const void** msg, size_t* size); int grib_get_message_headers(grib_handle* h, const void** msg, size_t* size); -grib_handle* grib_handle_new(grib_context* c); grib_action* grib_action_from_filter(const char* filter); int grib_handle_apply_action(grib_handle* h, grib_action* a); -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); diff --git a/src/grib_handle.cc b/src/grib_handle.cc index 18597a402..34708513e 100644 --- a/src/grib_handle.cc +++ b/src/grib_handle.cc @@ -1393,38 +1393,32 @@ int grib_get_message_headers(grib_handle* h, const void** msg, size_t* size) return err; } -grib_handle* grib_handle_new(grib_context* c) -{ - grib_handle* h; - - if (!c) - c = grib_context_get_default(); - h = grib_new_handle(c); - h->buffer = grib_create_growable_buffer(c); - if (h->buffer == NULL) { - grib_handle_delete(h); - return NULL; - } - h->root = grib_create_root_section(h->context, h); - - if (!h->root) { - grib_context_log(c, GRIB_LOG_ERROR, "grib_handle_new: cannot create root section"); - grib_handle_delete(h); - return NULL; - } - - if (!h->context->grib_reader || !h->context->grib_reader->first) { - grib_context_log(c, GRIB_LOG_ERROR, "grib_handle_new: cannot create handle, no definitions found"); - grib_handle_delete(h); - return NULL; - } - - h->buffer->property = GRIB_USER_BUFFER; - - h->header_mode = 1; - - return h; -} +// grib_handle* grib_handle_new(grib_context* c) +// { +// grib_handle* h; +// if (!c) +// c = grib_context_get_default(); +// h = grib_new_handle(c); +// h->buffer = grib_create_growable_buffer(c); +// if (h->buffer == NULL) { +// grib_handle_delete(h); +// return NULL; +// } +// h->root = grib_create_root_section(h->context, h); +// if (!h->root) { +// grib_context_log(c, GRIB_LOG_ERROR, "grib_handle_new: cannot create root section"); +// grib_handle_delete(h); +// return NULL; +// } +// if (!h->context->grib_reader || !h->context->grib_reader->first) { +// grib_context_log(c, GRIB_LOG_ERROR, "grib_handle_new: cannot create handle, no definitions found"); +// grib_handle_delete(h); +// return NULL; +// } +// h->buffer->property = GRIB_USER_BUFFER; +// h->header_mode = 1; +// return h; +// } grib_action* grib_action_from_filter(const char* filter) { @@ -1459,22 +1453,22 @@ int grib_handle_apply_action(grib_handle* h, grib_action* a) return GRIB_SUCCESS; } -int grib_handle_prepare_action(grib_handle* h, grib_action* a) -{ - int err; +// int grib_handle_prepare_action(grib_handle* h, grib_action* a) +// { +// int err; - if (!a) - return GRIB_SUCCESS; /* TODO: return error */ +// if (!a) +// return GRIB_SUCCESS; /* TODO: return error */ - while (a) { - err = grib_action_execute(a, h); - if (err != GRIB_SUCCESS) - return err; - a = a->next; - } +// while (a) { +// err = grib_action_execute(a, h); +// if (err != GRIB_SUCCESS) +// return err; +// a = a->next; +// } - return GRIB_SUCCESS; -} +// return GRIB_SUCCESS; +// } static int grib2_get_next_section(unsigned char* msgbegin, size_t msglen, unsigned char** secbegin, size_t* seclen, int* secnum, int* err) { From a4e1f27c999345f7236463f379d56ae96d0dbe7c Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 14 Aug 2023 10:48:27 +0100 Subject: [PATCH 152/372] ECC-1666: GRIB2: Add new MARS class O6 for ORAS6 --- definitions/mars/class.table | 1 + 1 file changed, 1 insertion(+) diff --git a/definitions/mars/class.table b/definitions/mars/class.table index 6e8a0aa27..b1c171c65 100644 --- a/definitions/mars/class.table +++ b/definitions/mars/class.table @@ -45,6 +45,7 @@ 44 gg Greenhouse Gases 45 ml Machine learning 46 d1 Destination Earth +47 o6 Ocean ReAnalysis 6 99 te Test 100 at Austria 101 be Belgium From 81918c5d69e3453e54f0d73924c9cae77d09c1f5 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 14 Aug 2023 10:27:47 +0000 Subject: [PATCH 153/372] ECC-1665: GRIB2: move parameters to pseudo-centre uerra --- definitions/grib2/cfVarName.def | 36 ------------------- .../grib2/localConcepts/uerra/cfVarName.def | 36 +++++++++++++++++++ .../grib2/localConcepts/uerra/name.def | 36 +++++++++++++++++++ .../grib2/localConcepts/uerra/paramId.def | 36 +++++++++++++++++++ .../grib2/localConcepts/uerra/shortName.def | 36 +++++++++++++++++++ .../grib2/localConcepts/uerra/units.def | 36 +++++++++++++++++++ definitions/grib2/name.def | 36 ------------------- definitions/grib2/paramId.def | 36 ------------------- definitions/grib2/shortName.def | 36 ------------------- definitions/grib2/units.def | 36 ------------------- 10 files changed, 180 insertions(+), 180 deletions(-) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index 11a166b74..a971d120c 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -4112,14 +4112,6 @@ parameterCategory = 4 ; parameterNumber = 14 ; } -#Time-integrated surface direct short wave radiation flux -'tidirswrf' = { - discipline = 0 ; - parameterCategory = 4 ; - parameterNumber = 13 ; - typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 1 ; - } #Evaporation in the last 6 hours 'eva06' = { discipline = 0 ; @@ -4278,14 +4270,6 @@ parameterCategory = 3 ; parameterNumber = 19 ; } -#Accumulated surface downward short-wave radiation flux, clear sky -'adswrf_cs' = { - discipline = 0 ; - parameterCategory = 4 ; - parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 1 ; - } #Accumulated surface upward short-wave radiation flux, clear sky 'auswrf_cs' = { discipline = 0 ; @@ -4294,14 +4278,6 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Accumulated surface downward long-wave radiation flux, clear sky -'adlwrf_cs' = { - discipline = 0 ; - parameterCategory = 5 ; - parameterNumber = 8 ; - typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 1 ; - } #Percolation 'perc' = { discipline = 1 ; @@ -8715,12 +8691,6 @@ parameterCategory = 3 ; parameterNumber = 19 ; } -#Standard deviation of sub-grid scale orography -'sdsgso' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 20 ; - } #Net short-wave radiation flux (top of atmosphere) 'nswrt' = { discipline = 0 ; @@ -8847,12 +8817,6 @@ parameterCategory = 6 ; parameterNumber = 10 ; } -#Cloud base -'cdcb' = { - discipline = 0 ; - parameterCategory = 6 ; - parameterNumber = 11 ; - } #Cloud top 'cdct' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/uerra/cfVarName.def b/definitions/grib2/localConcepts/uerra/cfVarName.def index d18461817..20387cdfc 100644 --- a/definitions/grib2/localConcepts/uerra/cfVarName.def +++ b/definitions/grib2/localConcepts/uerra/cfVarName.def @@ -148,6 +148,18 @@ typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 8 ; } +#Standard deviation of sub-grid scale orography +'sdsgso' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + } +#Cloud base +'cdcb' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + } #2 metre relative humidity 'r2' = { discipline = 0 ; @@ -177,6 +189,30 @@ typeOfStatisticalProcessing = 1 ; lengthOfTimeRange = 24 ; } +#Time-integrated surface direct short wave radiation flux +'tidirswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated surface downward short-wave radiation flux, clear sky +'adswrf_cs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated surface downward long-wave radiation flux, clear sky +'adlwrf_cs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Sea ice surface temperature 'sist' = { discipline = 10 ; diff --git a/definitions/grib2/localConcepts/uerra/name.def b/definitions/grib2/localConcepts/uerra/name.def index 330d3e841..644409a2c 100644 --- a/definitions/grib2/localConcepts/uerra/name.def +++ b/definitions/grib2/localConcepts/uerra/name.def @@ -148,6 +148,18 @@ typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 8 ; } +#Standard deviation of sub-grid scale orography +'Standard deviation of sub-grid scale orography' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + } +#Cloud base +'Cloud base' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + } #2 metre relative humidity '2 metre relative humidity' = { discipline = 0 ; @@ -177,6 +189,30 @@ typeOfStatisticalProcessing = 1 ; lengthOfTimeRange = 24 ; } +#Time-integrated surface direct short wave radiation flux +'Time-integrated surface direct short wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated surface downward short-wave radiation flux, clear sky +'Accumulated surface downward short-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated surface downward long-wave radiation flux, clear sky +'Accumulated surface downward long-wave radiation flux, clear sky' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Sea ice surface temperature 'Sea ice surface temperature' = { discipline = 10 ; diff --git a/definitions/grib2/localConcepts/uerra/paramId.def b/definitions/grib2/localConcepts/uerra/paramId.def index 7e4f5941e..db4f09f5d 100644 --- a/definitions/grib2/localConcepts/uerra/paramId.def +++ b/definitions/grib2/localConcepts/uerra/paramId.def @@ -148,6 +148,18 @@ typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 8 ; } +#Standard deviation of sub-grid scale orography +'260085' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + } +#Cloud base +'260107' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + } #2 metre relative humidity '260242' = { discipline = 0 ; @@ -177,6 +189,30 @@ typeOfStatisticalProcessing = 1 ; lengthOfTimeRange = 24 ; } +#Time-integrated surface direct short wave radiation flux +'260264' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated surface downward short-wave radiation flux, clear sky +'260423' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated surface downward long-wave radiation flux, clear sky +'260428' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Sea ice surface temperature '260649' = { discipline = 10 ; diff --git a/definitions/grib2/localConcepts/uerra/shortName.def b/definitions/grib2/localConcepts/uerra/shortName.def index 95eed7a09..839d6dc5d 100644 --- a/definitions/grib2/localConcepts/uerra/shortName.def +++ b/definitions/grib2/localConcepts/uerra/shortName.def @@ -148,6 +148,18 @@ typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 8 ; } +#Standard deviation of sub-grid scale orography +'sdsgso' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + } +#Cloud base +'cdcb' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + } #2 metre relative humidity '2r' = { discipline = 0 ; @@ -177,6 +189,30 @@ typeOfStatisticalProcessing = 1 ; lengthOfTimeRange = 24 ; } +#Time-integrated surface direct short wave radiation flux +'tidirswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated surface downward short-wave radiation flux, clear sky +'adswrf_cs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated surface downward long-wave radiation flux, clear sky +'adlwrf_cs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Sea ice surface temperature 'sist' = { discipline = 10 ; diff --git a/definitions/grib2/localConcepts/uerra/units.def b/definitions/grib2/localConcepts/uerra/units.def index 2766aadab..87cb31619 100644 --- a/definitions/grib2/localConcepts/uerra/units.def +++ b/definitions/grib2/localConcepts/uerra/units.def @@ -148,6 +148,18 @@ typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 8 ; } +#Standard deviation of sub-grid scale orography +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + } +#Cloud base +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + } #2 metre relative humidity '%' = { discipline = 0 ; @@ -177,6 +189,30 @@ typeOfStatisticalProcessing = 1 ; lengthOfTimeRange = 24 ; } +#Time-integrated surface direct short wave radiation flux +'J m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated surface downward short-wave radiation flux, clear sky +'J m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Accumulated surface downward long-wave radiation flux, clear sky +'J m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Sea ice surface temperature 'K' = { discipline = 10 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index 4960cdbd3..e3d67ea58 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -4112,14 +4112,6 @@ parameterCategory = 4 ; parameterNumber = 14 ; } -#Time-integrated surface direct short wave radiation flux -'Time-integrated surface direct short wave radiation flux' = { - discipline = 0 ; - parameterCategory = 4 ; - parameterNumber = 13 ; - typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 1 ; - } #Evaporation in the last 6 hours 'Evaporation in the last 6 hours' = { discipline = 0 ; @@ -4278,14 +4270,6 @@ parameterCategory = 3 ; parameterNumber = 19 ; } -#Accumulated surface downward short-wave radiation flux, clear sky -'Accumulated surface downward short-wave radiation flux, clear sky' = { - discipline = 0 ; - parameterCategory = 4 ; - parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 1 ; - } #Accumulated surface upward short-wave radiation flux, clear sky 'Accumulated surface upward short-wave radiation flux, clear sky' = { discipline = 0 ; @@ -4294,14 +4278,6 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Accumulated surface downward long-wave radiation flux, clear sky -'Accumulated surface downward long-wave radiation flux, clear sky' = { - discipline = 0 ; - parameterCategory = 5 ; - parameterNumber = 8 ; - typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 1 ; - } #Percolation 'Percolation' = { discipline = 1 ; @@ -8715,12 +8691,6 @@ parameterCategory = 3 ; parameterNumber = 19 ; } -#Standard deviation of sub-grid scale orography -'Standard deviation of sub-grid scale orography' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 20 ; - } #Net short-wave radiation flux (top of atmosphere) 'Net short-wave radiation flux (top of atmosphere)' = { discipline = 0 ; @@ -8847,12 +8817,6 @@ parameterCategory = 6 ; parameterNumber = 10 ; } -#Cloud base -'Cloud base' = { - discipline = 0 ; - parameterCategory = 6 ; - parameterNumber = 11 ; - } #Cloud top 'Cloud top' = { discipline = 0 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index f1cdd37ce..460a72267 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -4112,14 +4112,6 @@ parameterCategory = 4 ; parameterNumber = 14 ; } -#Time-integrated surface direct short wave radiation flux -'260264' = { - discipline = 0 ; - parameterCategory = 4 ; - parameterNumber = 13 ; - typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 1 ; - } #Evaporation in the last 6 hours '260265' = { discipline = 0 ; @@ -4278,14 +4270,6 @@ parameterCategory = 3 ; parameterNumber = 19 ; } -#Accumulated surface downward short-wave radiation flux, clear sky -'260423' = { - discipline = 0 ; - parameterCategory = 4 ; - parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 1 ; - } #Accumulated surface upward short-wave radiation flux, clear sky '260427' = { discipline = 0 ; @@ -4294,14 +4278,6 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Accumulated surface downward long-wave radiation flux, clear sky -'260428' = { - discipline = 0 ; - parameterCategory = 5 ; - parameterNumber = 8 ; - typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 1 ; - } #Percolation '260430' = { discipline = 1 ; @@ -8715,12 +8691,6 @@ parameterCategory = 3 ; parameterNumber = 19 ; } -#Standard deviation of sub-grid scale orography -'260085' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 20 ; - } #Net short-wave radiation flux (top of atmosphere) '260086' = { discipline = 0 ; @@ -8847,12 +8817,6 @@ parameterCategory = 6 ; parameterNumber = 10 ; } -#Cloud base -'260107' = { - discipline = 0 ; - parameterCategory = 6 ; - parameterNumber = 11 ; - } #Cloud top '260108' = { discipline = 0 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 2081a7de9..59b894090 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -4112,14 +4112,6 @@ parameterCategory = 4 ; parameterNumber = 14 ; } -#Time-integrated surface direct short wave radiation flux -'tidirswrf' = { - discipline = 0 ; - parameterCategory = 4 ; - parameterNumber = 13 ; - typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 1 ; - } #Evaporation in the last 6 hours 'eva06' = { discipline = 0 ; @@ -4278,14 +4270,6 @@ parameterCategory = 3 ; parameterNumber = 19 ; } -#Accumulated surface downward short-wave radiation flux, clear sky -'adswrf_cs' = { - discipline = 0 ; - parameterCategory = 4 ; - parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 1 ; - } #Accumulated surface upward short-wave radiation flux, clear sky 'auswrf_cs' = { discipline = 0 ; @@ -4294,14 +4278,6 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Accumulated surface downward long-wave radiation flux, clear sky -'adlwrf_cs' = { - discipline = 0 ; - parameterCategory = 5 ; - parameterNumber = 8 ; - typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 1 ; - } #Percolation 'perc' = { discipline = 1 ; @@ -8715,12 +8691,6 @@ parameterCategory = 3 ; parameterNumber = 19 ; } -#Standard deviation of sub-grid scale orography -'sdsgso' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 20 ; - } #Net short-wave radiation flux (top of atmosphere) 'nswrt' = { discipline = 0 ; @@ -8847,12 +8817,6 @@ parameterCategory = 6 ; parameterNumber = 10 ; } -#Cloud base -'cdcb' = { - discipline = 0 ; - parameterCategory = 6 ; - parameterNumber = 11 ; - } #Cloud top 'cdct' = { discipline = 0 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index ba4fc8fd6..8888c66ed 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -4112,14 +4112,6 @@ parameterCategory = 4 ; parameterNumber = 14 ; } -#Time-integrated surface direct short wave radiation flux -'J m**-2' = { - discipline = 0 ; - parameterCategory = 4 ; - parameterNumber = 13 ; - typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 1 ; - } #Evaporation in the last 6 hours 'kg m**-2' = { discipline = 0 ; @@ -4278,14 +4270,6 @@ parameterCategory = 3 ; parameterNumber = 19 ; } -#Accumulated surface downward short-wave radiation flux, clear sky -'J m**-2' = { - discipline = 0 ; - parameterCategory = 4 ; - parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 1 ; - } #Accumulated surface upward short-wave radiation flux, clear sky 'J m**-2' = { discipline = 0 ; @@ -4294,14 +4278,6 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Accumulated surface downward long-wave radiation flux, clear sky -'J m**-2' = { - discipline = 0 ; - parameterCategory = 5 ; - parameterNumber = 8 ; - typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 1 ; - } #Percolation 'kg m**-2' = { discipline = 1 ; @@ -8715,12 +8691,6 @@ parameterCategory = 3 ; parameterNumber = 19 ; } -#Standard deviation of sub-grid scale orography -'m' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 20 ; - } #Net short-wave radiation flux (top of atmosphere) 'W m**-2' = { discipline = 0 ; @@ -8847,12 +8817,6 @@ parameterCategory = 6 ; parameterNumber = 10 ; } -#Cloud base -'m' = { - discipline = 0 ; - parameterCategory = 6 ; - parameterNumber = 11 ; - } #Cloud top 'm' = { discipline = 0 ; From d92c9c099236130044758d32c432fd70d9ed901c Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 14 Aug 2023 10:52:17 +0000 Subject: [PATCH 154/372] Testing: accessor to_double --- tests/CMakeLists.txt | 1 + tests/codes_to_double.sh | 44 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100755 tests/codes_to_double.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9b7110b9c..6e318c03d 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -292,6 +292,7 @@ if( HAVE_BUILD_TOOLS ) codes_set_samples_path codes_compare_keys codes_dump_content + codes_to_double grib_dump grib_dump_debug grib_dump_json diff --git a/tests/codes_to_double.sh b/tests/codes_to_double.sh new file mode 100755 index 000000000..ceb7c21c5 --- /dev/null +++ b/tests/codes_to_double.sh @@ -0,0 +1,44 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +label="codes_to_double_test" +tempFilt=temp.$label.filt +tempLog=temp.$label.log +tempRef=temp.$label.ref + +sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + +cat >$tempFilt< $tempLog + +cat >$tempRef< Date: Mon, 14 Aug 2023 12:33:31 +0100 Subject: [PATCH 155/372] Remove pack_ methods on read-only accessors --- src/grib_accessor_class_sprintf.cc | 10 ++------ src/grib_accessor_class_suppressed.cc | 33 +++++-------------------- src/grib_accessor_class_to_double.cc | 35 +++++---------------------- 3 files changed, 14 insertions(+), 64 deletions(-) diff --git a/src/grib_accessor_class_sprintf.cc b/src/grib_accessor_class_sprintf.cc index fe4a6ccd4..106ce1e4d 100644 --- a/src/grib_accessor_class_sprintf.cc +++ b/src/grib_accessor_class_sprintf.cc @@ -15,7 +15,7 @@ START_CLASS_DEF CLASS = accessor SUPER = grib_accessor_class_ascii - IMPLEMENTS = pack_string;unpack_string;value_count + IMPLEMENTS = unpack_string;value_count IMPLEMENTS = init;string_length MEMBERS= grib_arguments* args END_CLASS_DEF @@ -32,7 +32,6 @@ or edit "accessor.class" and rerun ./make_class.pl */ -static int pack_string(grib_accessor*, const char*, size_t* len); static int unpack_string(grib_accessor*, char*, size_t* len); static size_t string_length(grib_accessor*); static int value_count(grib_accessor*, long*); @@ -74,7 +73,7 @@ static grib_accessor_class _grib_accessor_class_sprintf = { 0, /* pack_float */ 0, /* unpack_double */ 0, /* unpack_float */ - &pack_string, /* pack_string */ + 0, /* pack_string */ &unpack_string, /* unpack_string */ 0, /* pack_string_array */ 0, /* unpack_string_array */ @@ -109,11 +108,6 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -static int pack_string(grib_accessor* a, const char* val, size_t* len) -{ - return GRIB_NOT_IMPLEMENTED; -} - static int unpack_string(grib_accessor* a, char* val, size_t* len) { grib_accessor_sprintf* self = (grib_accessor_sprintf*)a; diff --git a/src/grib_accessor_class_suppressed.cc b/src/grib_accessor_class_suppressed.cc index 13a173f40..a95269c5d 100644 --- a/src/grib_accessor_class_suppressed.cc +++ b/src/grib_accessor_class_suppressed.cc @@ -16,9 +16,9 @@ CLASS = accessor SUPER = grib_accessor_class_long IMPLEMENTS = value_count;get_native_type - IMPLEMENTS = pack_string;unpack_string - IMPLEMENTS = pack_long;unpack_long - IMPLEMENTS = pack_double;unpack_double + IMPLEMENTS = unpack_string + IMPLEMENTS = unpack_long + IMPLEMENTS = unpack_double IMPLEMENTS = init MEMBERS= grib_arguments* args END_CLASS_DEF @@ -36,9 +36,6 @@ or edit "accessor.class" and rerun ./make_class.pl */ static int get_native_type(grib_accessor*); -static int pack_double(grib_accessor*, const double* val, size_t* len); -static int pack_long(grib_accessor*, const long* val, size_t* len); -static int pack_string(grib_accessor*, const char*, size_t* len); static int unpack_double(grib_accessor*, double* val, size_t* len); static int unpack_long(grib_accessor*, long* val, size_t* len); static int unpack_string(grib_accessor*, char*, size_t* len); @@ -75,13 +72,13 @@ static grib_accessor_class _grib_accessor_class_suppressed = { 0, /* get sub_section */ 0, /* pack_missing */ 0, /* is_missing */ - &pack_long, /* pack_long */ + 0, /* pack_long */ &unpack_long, /* unpack_long */ - &pack_double, /* pack_double */ + 0, /* pack_double */ 0, /* pack_float */ &unpack_double, /* unpack_double */ 0, /* unpack_float */ - &pack_string, /* pack_string */ + 0, /* pack_string */ &unpack_string, /* unpack_string */ 0, /* pack_string_array */ 0, /* unpack_string_array */ @@ -135,24 +132,6 @@ static void log_message(grib_accessor* a) } } -static int pack_string(grib_accessor* a, const char* val, size_t* len) -{ - log_message(a); - return GRIB_NOT_FOUND; -} - -static int pack_long(grib_accessor* a, const long* val, size_t* len) -{ - log_message(a); - return GRIB_NOT_FOUND; -} - -static int pack_double(grib_accessor* a, const double* val, size_t* len) -{ - log_message(a); - return GRIB_NOT_FOUND; -} - static int unpack_string(grib_accessor* a, char* val, size_t* len) { log_message(a); diff --git a/src/grib_accessor_class_to_double.cc b/src/grib_accessor_class_to_double.cc index 3afbf5955..d0d4351c5 100644 --- a/src/grib_accessor_class_to_double.cc +++ b/src/grib_accessor_class_to_double.cc @@ -7,9 +7,6 @@ * 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. */ -/*********************************************************** - * Enrico Fucile - ***********************************************************/ #include "grib_api_internal.h" /* @@ -18,9 +15,9 @@ START_CLASS_DEF CLASS = accessor SUPER = grib_accessor_class_gen - IMPLEMENTS = unpack_string;pack_string - IMPLEMENTS = unpack_long;pack_long - IMPLEMENTS = unpack_double;pack_double + IMPLEMENTS = unpack_string + IMPLEMENTS = unpack_long + IMPLEMENTS = unpack_double IMPLEMENTS = init;dump;string_length IMPLEMENTS = value_count IMPLEMENTS = next_offset @@ -45,9 +42,6 @@ or edit "accessor.class" and rerun ./make_class.pl */ static int get_native_type(grib_accessor*); -static int pack_double(grib_accessor*, const double* val, size_t* len); -static int pack_long(grib_accessor*, const long* val, size_t* len); -static int pack_string(grib_accessor*, const char*, size_t* len); static int unpack_double(grib_accessor*, double* val, size_t* len); static int unpack_long(grib_accessor*, long* val, size_t* len); static int unpack_string(grib_accessor*, char*, size_t* len); @@ -90,13 +84,13 @@ static grib_accessor_class _grib_accessor_class_to_double = { 0, /* get sub_section */ 0, /* pack_missing */ 0, /* is_missing */ - &pack_long, /* pack_long */ + 0, /* pack_long */ &unpack_long, /* unpack_long */ - &pack_double, /* pack_double */ + 0, /* pack_double */ 0, /* pack_float */ &unpack_double, /* unpack_double */ 0, /* unpack_float */ - &pack_string, /* pack_string */ + 0, /* pack_string */ &unpack_string, /* unpack_string */ 0, /* pack_string_array */ 0, /* unpack_string_array */ @@ -204,23 +198,6 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) return err; } -static int pack_string(grib_accessor* a, const char* val, size_t* len) -{ - return GRIB_NOT_IMPLEMENTED; -} - -static int pack_long(grib_accessor* a, const long* v, size_t* len) -{ - grib_context_log(a->context, GRIB_LOG_ERROR, " Should not pack %s as long", a->name); - return GRIB_NOT_IMPLEMENTED; -} - -static int pack_double(grib_accessor* a, const double* v, size_t* len) -{ - grib_context_log(a->context, GRIB_LOG_ERROR, " Should not pack %s as double", a->name); - return GRIB_NOT_IMPLEMENTED; -} - static int unpack_long(grib_accessor* a, long* v, size_t* len) { grib_accessor_to_double* self = (grib_accessor_to_double*)a; From 8509443968d8d6f5d7919b562a58333446c3878f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 14 Aug 2023 12:45:52 +0100 Subject: [PATCH 156/372] Testing: Run bufr_dump -Epython --- tests/CMakeLists.txt | 2 ++ tests/bufr_dump_decode_python.sh | 8 +++----- tests/bufr_dump_encode_python.sh | 25 ++++++++++++------------- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 6e318c03d..fa4cb5545 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -318,6 +318,8 @@ if( HAVE_BUILD_TOOLS ) list(APPEND tests_extra grib_tigge_conversions2) list(APPEND tests_extra bufr_dump_encode_C) list(APPEND tests_extra bufr_dump_decode_C) + list(APPEND tests_extra bufr_dump_encode_python) + list(APPEND tests_extra bufr_dump_decode_python) list(APPEND tests_extra list_codetable_flagtable_keys) endif() diff --git a/tests/bufr_dump_decode_python.sh b/tests/bufr_dump_decode_python.sh index c7258e641..40678ff47 100755 --- a/tests/bufr_dump_decode_python.sh +++ b/tests/bufr_dump_decode_python.sh @@ -21,8 +21,6 @@ tempDir=temp.${label}.dir mkdir -p $tempDir cd $tempDir -echo "PYTHONPATH set to $PYTHONPATH" - bufr_files=`cat ${data_dir}/bufr/bufr_data_files.txt` for file in ${bufr_files} @@ -38,9 +36,9 @@ do # Generate Python code from BUFR file ${tools_dir}/bufr_dump -Dpython $inputBufr > $tempSrc - if test "x$PYTHON" != "x"; then - $PYTHON $tempSrc $inputBufr - fi + # if test "x$PYTHON" != "x"; then + # $PYTHON $tempSrc $inputBufr + # fi rm -f $tempSrc done diff --git a/tests/bufr_dump_encode_python.sh b/tests/bufr_dump_encode_python.sh index da787606a..4a1ceed7a 100755 --- a/tests/bufr_dump_encode_python.sh +++ b/tests/bufr_dump_encode_python.sh @@ -39,21 +39,20 @@ do #pylint --disable=E0602,R,C,W $tempSrc + # if test "x$PYTHON" != "x"; then + # # The python code always creates an output file called outfile.bufr + # $PYTHON $tempSrc - if test "x$PYTHON" != "x"; then - # The python code always creates an output file called outfile.bufr - $PYTHON $tempSrc + # # Check original BUFR file against one we generated from sample + # ${tools_dir}/bufr_compare $inputBufr $tempBufr - # Check original BUFR file against one we generated from sample - ${tools_dir}/bufr_compare $inputBufr $tempBufr - - TEMP_OUT1=${label}.$file.dump.out - TEMP_OUT2=${label}.$tempBufr.dump.out - ${tools_dir}/bufr_dump -p $inputBufr > $TEMP_OUT1 - ${tools_dir}/bufr_dump -p $tempBufr > $TEMP_OUT2 - diff $TEMP_OUT1 $TEMP_OUT2 - rm -f $TEMP_OUT1 $TEMP_OUT2 - fi + # TEMP_OUT1=${label}.$file.dump.out + # TEMP_OUT2=${label}.$tempBufr.dump.out + # ${tools_dir}/bufr_dump -p $inputBufr > $TEMP_OUT1 + # ${tools_dir}/bufr_dump -p $tempBufr > $TEMP_OUT2 + # diff $TEMP_OUT1 $TEMP_OUT2 + # rm -f $TEMP_OUT1 $TEMP_OUT2 + # fi rm -f $tempSrc $tempBufr done From 5b2d905249895ac96574c03309a2837056fb9ff3 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 14 Aug 2023 12:58:22 +0100 Subject: [PATCH 157/372] Dead code removal --- src/eccodes_prototypes.h | 2 -- src/grib_accessor_class_g2level.cc | 4 +-- src/grib_value.cc | 40 ------------------------------ 3 files changed, 2 insertions(+), 44 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 8b39e8cc8..25cb0636a 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -1179,7 +1179,6 @@ void grib_dependency_observe_arguments(grib_accessor* observer, grib_arguments* /* grib_value.cc*/ int grib_set_expression(grib_handle* h, const char* name, grib_expression* e); -int grib_set_expression_internal(grib_handle* h, const char* name, grib_expression* e); int grib_set_long_internal(grib_handle* h, const char* name, long val); int grib_set_long(grib_handle* h, const char* name, long val); int grib_set_double_internal(grib_handle* h, const char* name, double val); @@ -1191,7 +1190,6 @@ int grib_set_string_array(grib_handle* h, const char* name, const char** val, si int grib_set_bytes_internal(grib_handle* h, const char* name, const unsigned char* val, size_t* length); int grib_set_bytes(grib_handle* h, const char* name, const unsigned char* val, size_t* length); int grib_clear(grib_handle* h, const char* name); -int grib_set_missing_internal(grib_handle* h, const char* name); int grib_set_missing(grib_handle* h, const char* name); int grib_is_missing_long(grib_accessor* a, long x); int grib_is_missing_double(grib_accessor* a, double x); diff --git a/src/grib_accessor_class_g2level.cc b/src/grib_accessor_class_g2level.cc index dc2597026..e1d8aaa38 100644 --- a/src/grib_accessor_class_g2level.cc +++ b/src/grib_accessor_class_g2level.cc @@ -309,9 +309,9 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) // Not sure if this is necessary // if (value_first == GRIB_MISSING_LONG) { - // if ((ret=grib_set_missing_internal(hand, self->scale_first)) != GRIB_SUCCESS) + // if ((ret=grib_set_missing(hand, self->scale_first)) != GRIB_SUCCESS) // return ret; - // if ((ret=grib_set_missing_internal(hand, self->value_first)) != GRIB_SUCCESS) + // if ((ret=grib_set_missing(hand, self->value_first)) != GRIB_SUCCESS) // return ret; // return GRIB_SUCCESS; // } diff --git a/src/grib_value.cc b/src/grib_value.cc index d9ef8bcd3..10ab49aef 100644 --- a/src/grib_value.cc +++ b/src/grib_value.cc @@ -73,21 +73,6 @@ int grib_set_expression(grib_handle* h, const char* name, grib_expression* e) return GRIB_NOT_FOUND; } -int grib_set_expression_internal(grib_handle* h, const char* name, grib_expression* e) -{ - grib_accessor* a = grib_find_accessor(h, name); - - int ret = GRIB_SUCCESS; - if (a) { - ret = grib_pack_expression(a, e); - if (ret == GRIB_SUCCESS) { - return grib_dependency_notify_change(a); - } - return ret; - } - return GRIB_NOT_FOUND; -} - int grib_set_long_internal(grib_handle* h, const char* name, long val) { grib_context* c = h->context; @@ -572,31 +557,6 @@ int grib_clear(grib_handle* h, const char* name) return GRIB_NOT_FOUND; } -int grib_set_missing_internal(grib_handle* h, const char* name) -{ - int ret = 0; - grib_accessor* a = NULL; - - a = grib_find_accessor(h, name); - - if (a) { - if (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) { - ret = grib_pack_missing(a); - if (ret == GRIB_SUCCESS) - return grib_dependency_notify_change(a); - } - else - ret = GRIB_VALUE_CANNOT_BE_MISSING; - - grib_context_log(h->context, GRIB_LOG_ERROR, "unable to set %s=missing (%s)", - name, grib_get_error_message(ret)); - return ret; - } - - grib_context_log(h->context, GRIB_LOG_ERROR, "unable to find accessor %s", name); - return GRIB_NOT_FOUND; -} - int grib_set_missing(grib_handle* h, const char* name) { int ret = 0; From 20e3b5f112e1b0bfb0d2f1316b4914f0245896e0 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 14 Aug 2023 13:17:37 +0100 Subject: [PATCH 158/372] Testing: Convert edition with ECCODES_DEBUG set --- tests/grib1to2.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/grib1to2.sh b/tests/grib1to2.sh index 4300e21a9..d050c32ff 100755 --- a/tests/grib1to2.sh +++ b/tests/grib1to2.sh @@ -111,6 +111,12 @@ for sn in e lsp pev sro uvb; do ${tools_dir}/grib_compare -e -b param $temp1 $temp2 done +# Turn on (brief) DEBUGGING messages +sample_g1=$ECCODES_SAMPLES_PATH/GRIB1.tmpl +output=temp.grib1to2.grib +ECCODES_DEBUG=-1 ${tools_dir}/grib_set -s edition=2 $sample_g1 $output + # Clean up rm -f $output +rm -f $temp1 $temp2 From c903eef97a22059a7ebf59f3308db7e323b9bd7f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 14 Aug 2023 13:35:30 +0100 Subject: [PATCH 159/372] Dead code removal --- src/eccodes_prototypes.h | 2 -- src/grib_value.cc | 35 +++++++++++++++++------------------ 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 25cb0636a..74a3838d2 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -1228,7 +1228,6 @@ int grib_get_string(const grib_handle* h, const char* name, char* val, size_t* l int grib_get_bytes_internal(const grib_handle* h, const char* name, unsigned char* val, size_t* length); int grib_get_bytes(const grib_handle* h, const char* name, unsigned char* val, size_t* length); int grib_get_native_type(const grib_handle* h, const char* name, int* type); -const char* grib_get_accessor_class_name(grib_handle* h, const char* name); int ecc__grib_get_double_array_internal(const grib_handle* h, grib_accessor* a, double* val, size_t buffer_len, size_t* decoded_length); int grib_get_double_array_internal(const grib_handle* h, const char* name, double* val, size_t* length); @@ -1241,7 +1240,6 @@ int grib_get_string_length(const grib_handle* h, const char* name, size_t* size) int ecc__grib_get_size(const grib_handle* h, grib_accessor* a, size_t* size); int grib_get_size(const grib_handle* h, const char* name, size_t* size); int grib_get_length(const grib_handle* h, const char* name, size_t* length); -int grib_get_count(grib_handle* h, const char* name, size_t* size); int grib_get_offset(const grib_handle* h, const char* key, size_t* val); int ecc__grib_get_string_array_internal(const grib_handle* h, grib_accessor* a, char** val, size_t buffer_len, size_t* decoded_length); int grib_get_string_array(const grib_handle* h, const char* name, char** val, size_t* length); diff --git a/src/grib_value.cc b/src/grib_value.cc index 10ab49aef..0626b029a 100644 --- a/src/grib_value.cc +++ b/src/grib_value.cc @@ -1245,11 +1245,11 @@ int grib_get_native_type(const grib_handle* h, const char* name, int* type) return GRIB_SUCCESS; } -const char* grib_get_accessor_class_name(grib_handle* h, const char* name) -{ - grib_accessor* act = grib_find_accessor(h, name); - return act ? act->cclass->name : NULL; -} +// const char* grib_get_accessor_class_name(grib_handle* h, const char* name) +// { +// grib_accessor* act = grib_find_accessor(h, name); +// return act ? act->cclass->name : NULL; +// } template static int _grib_get_array_internal(const grib_handle* h, grib_accessor* a, T* val, size_t buffer_len, size_t* decoded_length) @@ -1434,19 +1434,18 @@ int grib_get_length(const grib_handle* h, const char* name, size_t* length) return grib_get_string_length(h, name, length); } -int grib_get_count(grib_handle* h, const char* name, size_t* size) -{ - grib_accessor* a = grib_find_accessor(h, name); - if (!a) - return GRIB_NOT_FOUND; - - *size = 0; - while (a) { - (*size)++; - a = a->same; - } - return GRIB_SUCCESS; -} +// int grib_get_count(grib_handle* h, const char* name, size_t* size) +// { +// grib_accessor* a = grib_find_accessor(h, name); +// if (!a) +// return GRIB_NOT_FOUND; +// *size = 0; +// while (a) { +// (*size)++; +// a = a->same; +// } +// return GRIB_SUCCESS; +// } int grib_get_offset(const grib_handle* ch, const char* key, size_t* val) { From c1c9f5bb12685b0d4f95fd90f818e221deb16ac0 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 14 Aug 2023 13:35:55 +0100 Subject: [PATCH 160/372] Testing: grib_print_values --- tests/unit_tests.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/unit_tests.cc b/tests/unit_tests.cc index 02a77a92b..5abd7abb5 100644 --- a/tests/unit_tests.cc +++ b/tests/unit_tests.cc @@ -428,6 +428,8 @@ static void test_parse_keyval_string() values_required, GRIB_TYPE_UNDEFINED, values1, &count); Assert( !err ); Assert( count == 2 ); + grib_print_values("print values test: values1", values1); + Assert( strcmp(values1[0].name, "key1")==0 ); Assert( strcmp(values1[0].string_value, "value1")==0 ); Assert( values1[0].equal == 1 ); @@ -446,6 +448,7 @@ static void test_parse_keyval_string() values_required, GRIB_TYPE_LONG, values2, &count); Assert( !err ); Assert( count == 1 ); + grib_print_values("print values test: values2", values2); Assert( strcmp(values2[0].name, "x")==0 ); Assert( values2[0].long_value == 14 ); Assert( values2[0].equal == 1 ); @@ -456,6 +459,7 @@ static void test_parse_keyval_string() values_required, GRIB_TYPE_DOUBLE, values3, &count); Assert( !err ); Assert( count == 1 ); + grib_print_values("print values test: values3", values3); Assert( strcmp(values3[0].name, "mars.level")==0 ); free( (void*)values3[0].name ); } From bd82bc099ab5ea44c0c308e71f5497c799708f40 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 14 Aug 2023 13:45:53 +0100 Subject: [PATCH 161/372] Testing: codes_info --- tests/codes_info.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/codes_info.sh b/tests/codes_info.sh index 2c89ae6bc..189dfd20a 100755 --- a/tests/codes_info.sh +++ b/tests/codes_info.sh @@ -29,6 +29,16 @@ status=$? set -e [ $status -eq 1 ] +# Verbose debug output +ECCODES_DEBUG=1 ${tools_dir}/codes_info + +# Test legacy environment variables +unset ECCODES_DEFINITION_PATH +unset ECCODES_SAMPLES_PATH +export GRIB_DEFINITION_PATH=/tmp/dtest +export GRIB_SAMPLES_PATH=/tmp/stest +${tools_dir}/codes_info > $tempLog +grep -q "This is for backward compatibility" $tempLog # Clean up rm -f $tempLog From ff017ff2bcca72515493f18e55aa51fd4cf0916b Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 14 Aug 2023 14:04:21 +0000 Subject: [PATCH 162/372] ECC-1658: Revert name change --- definitions/grib1/localConcepts/ecmf/cfVarName.def | 4 ++-- definitions/grib1/localConcepts/ecmf/name.def | 8 ++++---- definitions/grib1/localConcepts/ecmf/paramId.def | 4 ++-- definitions/grib1/localConcepts/ecmf/shortName.def | 4 ++-- definitions/grib1/localConcepts/ecmf/units.def | 4 ++-- definitions/grib2/cfVarName.def | 4 ++-- definitions/grib2/name.def | 8 ++++---- definitions/grib2/paramId.def | 4 ++-- definitions/grib2/shortName.def | 4 ++-- definitions/grib2/units.def | 4 ++-- 10 files changed, 24 insertions(+), 24 deletions(-) diff --git a/definitions/grib1/localConcepts/ecmf/cfVarName.def b/definitions/grib1/localConcepts/ecmf/cfVarName.def index b200c239a..21f25c311 100644 --- a/definitions/grib1/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib1/localConcepts/ecmf/cfVarName.def @@ -10149,12 +10149,12 @@ table2Version = 228 ; indicatorOfParameter = 225 ; } -#Maximum total precipitation rate +#Maximum total precipitation rate since previous post-processing 'mxtpr' = { table2Version = 228 ; indicatorOfParameter = 226 ; } -#Minimum total precipitation rate +#Minimum total precipitation rate since previous post-processing 'mntpr' = { table2Version = 228 ; indicatorOfParameter = 227 ; diff --git a/definitions/grib1/localConcepts/ecmf/name.def b/definitions/grib1/localConcepts/ecmf/name.def index 47c3ae001..fd2b9af79 100644 --- a/definitions/grib1/localConcepts/ecmf/name.def +++ b/definitions/grib1/localConcepts/ecmf/name.def @@ -10149,13 +10149,13 @@ table2Version = 228 ; indicatorOfParameter = 225 ; } -#Maximum total precipitation rate -'Maximum total precipitation rate' = { +#Maximum total precipitation rate since previous post-processing +'Maximum total precipitation rate since previous post-processing' = { table2Version = 228 ; indicatorOfParameter = 226 ; } -#Minimum total precipitation rate -'Minimum total precipitation rate' = { +#Minimum total precipitation rate since previous post-processing +'Minimum total precipitation rate since previous post-processing' = { table2Version = 228 ; indicatorOfParameter = 227 ; } diff --git a/definitions/grib1/localConcepts/ecmf/paramId.def b/definitions/grib1/localConcepts/ecmf/paramId.def index 5e6f07eb5..46ed99774 100644 --- a/definitions/grib1/localConcepts/ecmf/paramId.def +++ b/definitions/grib1/localConcepts/ecmf/paramId.def @@ -10149,12 +10149,12 @@ table2Version = 228 ; indicatorOfParameter = 225 ; } -#Maximum total precipitation rate +#Maximum total precipitation rate since previous post-processing '228226' = { table2Version = 228 ; indicatorOfParameter = 226 ; } -#Minimum total precipitation rate +#Minimum total precipitation rate since previous post-processing '228227' = { table2Version = 228 ; indicatorOfParameter = 227 ; diff --git a/definitions/grib1/localConcepts/ecmf/shortName.def b/definitions/grib1/localConcepts/ecmf/shortName.def index 97f8c180f..159ebb628 100644 --- a/definitions/grib1/localConcepts/ecmf/shortName.def +++ b/definitions/grib1/localConcepts/ecmf/shortName.def @@ -10149,12 +10149,12 @@ table2Version = 228 ; indicatorOfParameter = 225 ; } -#Maximum total precipitation rate +#Maximum total precipitation rate since previous post-processing 'mxtpr' = { table2Version = 228 ; indicatorOfParameter = 226 ; } -#Minimum total precipitation rate +#Minimum total precipitation rate since previous post-processing 'mntpr' = { table2Version = 228 ; indicatorOfParameter = 227 ; diff --git a/definitions/grib1/localConcepts/ecmf/units.def b/definitions/grib1/localConcepts/ecmf/units.def index e2d814c8c..f34142102 100644 --- a/definitions/grib1/localConcepts/ecmf/units.def +++ b/definitions/grib1/localConcepts/ecmf/units.def @@ -10149,12 +10149,12 @@ table2Version = 228 ; indicatorOfParameter = 225 ; } -#Maximum total precipitation rate +#Maximum total precipitation rate since previous post-processing 'kg m**-2 s**-1' = { table2Version = 228 ; indicatorOfParameter = 226 ; } -#Minimum total precipitation rate +#Minimum total precipitation rate since previous post-processing 'kg m**-2 s**-1' = { table2Version = 228 ; indicatorOfParameter = 227 ; diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index a971d120c..54b0d6386 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -2765,7 +2765,7 @@ parameterNumber = 56 ; typeOfFirstFixedSurface = 1 ; } -#Maximum total precipitation rate +#Maximum total precipitation rate since previous post-processing 'mxtpr' = { discipline = 0 ; parameterCategory = 1 ; @@ -2773,7 +2773,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 2 ; } -#Minimum total precipitation rate +#Minimum total precipitation rate since previous post-processing 'mntpr' = { discipline = 0 ; parameterCategory = 1 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index e3d67ea58..fbfb9d87d 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -2765,16 +2765,16 @@ parameterNumber = 56 ; typeOfFirstFixedSurface = 1 ; } -#Maximum total precipitation rate -'Maximum total precipitation rate' = { +#Maximum total precipitation rate since previous post-processing +'Maximum total precipitation rate since previous post-processing' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 2 ; } -#Minimum total precipitation rate -'Minimum total precipitation rate' = { +#Minimum total precipitation rate since previous post-processing +'Minimum total precipitation rate since previous post-processing' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 460a72267..4bd51f6f4 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -2765,7 +2765,7 @@ parameterNumber = 56 ; typeOfFirstFixedSurface = 1 ; } -#Maximum total precipitation rate +#Maximum total precipitation rate since previous post-processing '228226' = { discipline = 0 ; parameterCategory = 1 ; @@ -2773,7 +2773,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 2 ; } -#Minimum total precipitation rate +#Minimum total precipitation rate since previous post-processing '228227' = { discipline = 0 ; parameterCategory = 1 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 59b894090..6c0bcda15 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -2765,7 +2765,7 @@ parameterNumber = 56 ; typeOfFirstFixedSurface = 1 ; } -#Maximum total precipitation rate +#Maximum total precipitation rate since previous post-processing 'mxtpr' = { discipline = 0 ; parameterCategory = 1 ; @@ -2773,7 +2773,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 2 ; } -#Minimum total precipitation rate +#Minimum total precipitation rate since previous post-processing 'mntpr' = { discipline = 0 ; parameterCategory = 1 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 8888c66ed..5d7dd61bd 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -2765,7 +2765,7 @@ parameterNumber = 56 ; typeOfFirstFixedSurface = 1 ; } -#Maximum total precipitation rate +#Maximum total precipitation rate since previous post-processing 'kg m**-2 s**-1' = { discipline = 0 ; parameterCategory = 1 ; @@ -2773,7 +2773,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 2 ; } -#Minimum total precipitation rate +#Minimum total precipitation rate since previous post-processing 'kg m**-2 s**-1' = { discipline = 0 ; parameterCategory = 1 ; From e5ed4533958d4bf1739d89073bc11534a4163a8d Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 14 Aug 2023 16:52:22 +0100 Subject: [PATCH 163/372] Logging: use __func__ --- src/grib_util.cc | 50 ++++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/grib_util.cc b/src/grib_util.cc index 59aa54b1c..dcebec9af 100644 --- a/src/grib_util.cc +++ b/src/grib_util.cc @@ -625,8 +625,8 @@ static int check_geometry(grib_handle* handle, const grib_util_grid_spec* spec, strcpy(msg, "Specified to be global (in spec)"); sum = sum_of_pl_array(spec->pl, spec->pl_size); if (sum != data_values_count) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: Invalid reduced gaussian grid: %s but data_values_count != sum_of_pl_array (%zu!=%zu)\n", - msg, data_values_count, sum); + fprintf(stderr, "%s: Invalid reduced gaussian grid: %s but data_values_count != sum_of_pl_array (%zu!=%zu)\n", + __func__, msg, data_values_count, sum); return GRIB_WRONG_GRID; } } @@ -874,7 +874,7 @@ static int get_grib_sample_name(grib_handle* h, long editionNumber, if (spec->pl && spec->grid_name) { /* Cannot have BOTH pl and grid name specified */ - fprintf(stderr, "GRIB_UTIL_SET_SPEC: Cannot set BOTH spec.pl and spec.grid_name!\n"); + fprintf(stderr, "%s: Cannot set BOTH spec.pl and spec.grid_name!\n", __func__); return GRIB_INTERNAL_ERROR; } if (spec->grid_name) { @@ -1005,7 +1005,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, grid_type = get_grid_type_name(spec->grid_type); if (!grid_type) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: Unknown spec.grid_type (%d)\n", spec->grid_type); + fprintf(stderr, "%s: Unknown spec.grid_type (%d)\n", __func__, spec->grid_type); *err = GRIB_NOT_IMPLEMENTED; return NULL; } @@ -1279,7 +1279,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, setSecondOrder = 1; break; default: - fprintf(stderr, "GRIB_UTIL_SET_SPEC: invalid packing_spec.packing_type (%ld)\n", packing_spec->packing_type); + fprintf(stderr, "%s: invalid packing_spec.packing_type (%ld)\n", __func__, packing_spec->packing_type); *err = GRIB_INTERNAL_ERROR; goto cleanup; break; @@ -1342,7 +1342,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, break; default: - fprintf(stderr, "GRIB_UTIL_SET_SPEC: invalid packing_spec.accuracy (%ld)\n", packing_spec->accuracy); + fprintf(stderr, "%s: invalid packing_spec.accuracy (%ld)\n", __func__, packing_spec->accuracy); grib_handle_delete(h_sample); *err = GRIB_INTERNAL_ERROR; goto cleanup; @@ -1383,26 +1383,26 @@ grib_handle* grib_util_set_spec(grib_handle* h, /* GRIB-857: Set "pl" array if provided (For reduced Gaussian grids) */ Assert(spec->pl_size >= 0); if (spec->pl && spec->pl_size == 0) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: pl array not NULL but pl_size == 0!\n"); + fprintf(stderr, "%s: pl array not NULL but pl_size == 0!\n", __func__); goto cleanup; } if (spec->pl_size > 0 && spec->pl == NULL) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: pl_size not zero but pl array == NULL!\n"); + fprintf(stderr, "%s: pl_size not zero but pl array == NULL!\n", __func__); goto cleanup; } if (spec->pl_size != 0 && (spec->grid_type == GRIB_UTIL_GRID_SPEC_REDUCED_GG || spec->grid_type == GRIB_UTIL_GRID_SPEC_REDUCED_ROTATED_GG)) { *err = grib_set_long_array(h_out, "pl", spec->pl, spec->pl_size); if (*err) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: Cannot set pl: %s\n", grib_get_error_message(*err)); + fprintf(stderr, "%s: Cannot set pl: %s\n", __func__, grib_get_error_message(*err)); goto cleanup; } if (global_grid) { size_t sum = sum_of_pl_array(spec->pl, spec->pl_size); if (data_values_count != sum) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: invalid reduced gaussian grid: " + fprintf(stderr, "%s: invalid reduced gaussian grid: " "specified as global, data_values_count=%zu but sum of pl array=%zu\n", - data_values_count, sum); + __func__, data_values_count, sum); *err = GRIB_WRONG_GRID; goto cleanup; } @@ -1418,7 +1418,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, /* Apply adjustments to bounding box if needed */ if (expandBoundingBox) { if ((*err = expand_bounding_box(h_out, values, count)) != 0) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: Cannot expand bounding box: %s\n", grib_get_error_message(*err)); + fprintf(stderr, "%s: Cannot expand bounding box: %s\n", __func__, grib_get_error_message(*err)); if (h->context->write_on_fail) grib_write_message(h_out, "error.grib", "w"); goto cleanup; @@ -1428,13 +1428,13 @@ grib_handle* grib_util_set_spec(grib_handle* h, if (convertEditionEarlier && packing_spec->editionNumber > 1) { *err = grib_set_long(h_out, "edition", packing_spec->editionNumber); if (*err) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: Cannot convert to edition %ld.\n", packing_spec->editionNumber); + fprintf(stderr, "%s: Cannot convert to edition %ld.\n", __func__, packing_spec->editionNumber); goto cleanup; } } if ((*err = grib_set_values(h_out, values, count)) != 0) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: Cannot set key values: %s\n", grib_get_error_message(*err)); + fprintf(stderr, "%s: Cannot set key values: %s\n", __func__, grib_get_error_message(*err)); for (i = 0; i < count; i++) if (values[i].error) fprintf(stderr, " %s %s\n", values[i].name, grib_get_error_message(values[i].error)); goto cleanup; @@ -1461,11 +1461,11 @@ grib_handle* grib_util_set_spec(grib_handle* h, /* GRIB-863: must set increments to MISSING */ /* increments are not coded in message but computed */ if ((*err = grib_set_missing(h_out, "iDirectionIncrement")) != 0) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: Cannot set Di to missing: %s\n", grib_get_error_message(*err)); + fprintf(stderr, "%s: Cannot set Di to missing: %s\n", __func__, grib_get_error_message(*err)); goto cleanup; } if ((*err = grib_set_missing(h_out, "jDirectionIncrement")) != 0) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: Cannot set Dj to missing: %s\n", grib_get_error_message(*err)); + fprintf(stderr, "%s: Cannot set Dj to missing: %s\n", __func__, grib_get_error_message(*err)); goto cleanup; } } @@ -1502,7 +1502,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, grib_set_string(h_out, "packingType", "grid_second_order", &slen); *err = grib_set_double_array(h_out, "values", data_values, data_values_count); if (*err != GRIB_SUCCESS) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: setting data values failed: %s\n", grib_get_error_message(*err)); + fprintf(stderr, "%s: setting data values failed: %s\n", __func__, grib_get_error_message(*err)); goto cleanup; } } @@ -1519,8 +1519,8 @@ grib_handle* grib_util_set_spec(grib_handle* h, if (packing_spec->editionNumber && packing_spec->editionNumber != editionNumber) { *err = grib_set_long(h_out, "edition", packing_spec->editionNumber); if (*err != GRIB_SUCCESS) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: Failed to change edition to %ld: %s\n", - packing_spec->editionNumber, grib_get_error_message(*err)); + fprintf(stderr, "%s: Failed to change edition to %ld: %s\n", + __func__, packing_spec->editionNumber, grib_get_error_message(*err)); if (h->context->write_on_fail) grib_write_message(h_out, "error.grib", "w"); goto cleanup; @@ -1532,16 +1532,16 @@ grib_handle* grib_util_set_spec(grib_handle* h, if (setJpegPacking == 1) { *err = grib_set_string(h_out, "packingType", "grid_jpeg", &slen); if (*err != GRIB_SUCCESS) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: Failed to change packingType to JPEG: %s\n", - grib_get_error_message(*err)); + fprintf(stderr, "%s: Failed to change packingType to JPEG: %s\n", + __func__, grib_get_error_message(*err)); goto cleanup; } } if (setCcsdsPacking == 1) { *err = grib_set_string(h_out, "packingType", "grid_ccsds", &slen); if (*err != GRIB_SUCCESS) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: Failed to change packingType to CCSDS: %s\n", - grib_get_error_message(*err)); + fprintf(stderr, "%s: Failed to change packingType to CCSDS: %s\n", + __func__, grib_get_error_message(*err)); goto cleanup; } } @@ -1557,7 +1557,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, } if ((*err = check_geometry(h_out, spec, data_values_count, global_grid)) != GRIB_SUCCESS) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: Geometry check failed: %s\n", grib_get_error_message(*err)); + fprintf(stderr, "%s: Geometry check failed: %s\n", __func__, grib_get_error_message(*err)); if (h->context->write_on_fail) grib_write_message(h_out, "error.grib", "w"); goto cleanup; @@ -1573,7 +1573,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, // goto cleanup; // } - if (h->context->debug == -1) fprintf(stderr, "ECCODES DEBUG grib_util: grib_util_set_spec end\n"); + if (h->context->debug == -1) fprintf(stderr, "ECCODES DEBUG grib_util: %s end\n",__func__); return h_out; From f67b14a2f9dbb6b5e6b6b61564e09d8526dbadd6 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 14 Aug 2023 15:53:21 +0000 Subject: [PATCH 164/372] ECC-1661: GRIB2: Add encoding for parameters with only uerra --- definitions/grib2/cfVarName.def | 30 ++++++++++++++++++++++++++++++ definitions/grib2/name.def | 30 ++++++++++++++++++++++++++++++ definitions/grib2/paramId.def | 30 ++++++++++++++++++++++++++++++ definitions/grib2/shortName.def | 30 ++++++++++++++++++++++++++++++ definitions/grib2/units.def | 30 ++++++++++++++++++++++++++++++ 5 files changed, 150 insertions(+) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index 54b0d6386..a596af2a0 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -206,6 +206,16 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#10 metre wind gust since previous post-processing +'fg10' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } #Large-scale precipitation fraction 'lspf' = { discipline = 0 ; @@ -405,6 +415,26 @@ parameterNumber = 23 ; typeOfStatisticalProcessing = 1 ; } +#Maximum temperature at 2 metres since previous post-processing +'mx2t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Minimum temperature at 2 metres since previous post-processing +'mn2t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } #Ozone mass mixing ratio 'o3' = { discipline = 0 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index fbfb9d87d..bf69dd7b6 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -206,6 +206,16 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#10 metre wind gust since previous post-processing +'10 metre wind gust since previous post-processing' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } #Large-scale precipitation fraction 'Large-scale precipitation fraction' = { discipline = 0 ; @@ -405,6 +415,26 @@ parameterNumber = 23 ; typeOfStatisticalProcessing = 1 ; } +#Maximum temperature at 2 metres since previous post-processing +'Maximum temperature at 2 metres since previous post-processing' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Minimum temperature at 2 metres since previous post-processing +'Minimum temperature at 2 metres since previous post-processing' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } #Ozone mass mixing ratio 'Ozone mass mixing ratio' = { discipline = 0 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 4bd51f6f4..edc5ce043 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -206,6 +206,16 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#10 metre wind gust since previous post-processing +'49' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } #Large-scale precipitation fraction '50' = { discipline = 0 ; @@ -405,6 +415,26 @@ parameterNumber = 23 ; typeOfStatisticalProcessing = 1 ; } +#Maximum temperature at 2 metres since previous post-processing +'201' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Minimum temperature at 2 metres since previous post-processing +'202' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } #Ozone mass mixing ratio '203' = { discipline = 0 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 6c0bcda15..cacb09809 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -206,6 +206,16 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#10 metre wind gust since previous post-processing +'10fg' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } #Large-scale precipitation fraction 'lspf' = { discipline = 0 ; @@ -405,6 +415,26 @@ parameterNumber = 23 ; typeOfStatisticalProcessing = 1 ; } +#Maximum temperature at 2 metres since previous post-processing +'mx2t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Minimum temperature at 2 metres since previous post-processing +'mn2t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } #Ozone mass mixing ratio 'o3' = { discipline = 0 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 5d7dd61bd..3ed4f8a6a 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -206,6 +206,16 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#10 metre wind gust since previous post-processing +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } #Large-scale precipitation fraction 's' = { discipline = 0 ; @@ -405,6 +415,26 @@ parameterNumber = 23 ; typeOfStatisticalProcessing = 1 ; } +#Maximum temperature at 2 metres since previous post-processing +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Minimum temperature at 2 metres since previous post-processing +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } #Ozone mass mixing ratio 'kg kg**-1' = { discipline = 0 ; From 178a4a442c0fe80d44514481c0d7f33df4e8f13f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 15 Aug 2023 17:24:40 +0100 Subject: [PATCH 165/372] ECC-1666: Update description --- definitions/mars/class.table | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/definitions/mars/class.table b/definitions/mars/class.table index b1c171c65..55b321573 100644 --- a/definitions/mars/class.table +++ b/definitions/mars/class.table @@ -45,7 +45,7 @@ 44 gg Greenhouse Gases 45 ml Machine learning 46 d1 Destination Earth -47 o6 Ocean ReAnalysis 6 +47 o6 ECMWF Ocean ReAnalysis version 6 (EORA6) 99 te Test 100 at Austria 101 be Belgium From ccf772d58268910dce76037061c4b4fb0ddd2488 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 15 Aug 2023 17:40:52 +0100 Subject: [PATCH 166/372] ECC-1671: GRIB: Issue in reading glofas data --- src/grib_iterator_class_regular.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/grib_iterator_class_regular.cc b/src/grib_iterator_class_regular.cc index 3a614a85b..81fcfd548 100644 --- a/src/grib_iterator_class_regular.cc +++ b/src/grib_iterator_class_regular.cc @@ -230,7 +230,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) /* ECC-1406: Due to rounding, errors can accumulate. * So we ensure the last longitude is longitudeOfLastGridPointInDegrees */ - self->los[Ni-1] = lon2; + self->los[Ni-1] = normalise_longitude_in_degrees(lon2); // Also see ECC-1671 return ret; } From 6422cf12e074c98b2c4d20f7c4ef03b4241304b0 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 16 Aug 2023 11:34:37 +0100 Subject: [PATCH 167/372] Definitions: Ensure all supported grid types define Ni,Nx,Nj,Ny --- definitions/grib1/grid_definition_1.def | 2 +- definitions/grib2/template.3.10.def | 4 ++-- definitions/grib2/template.3.110.def | 12 ++++++++---- definitions/grib2/template.3.12.def | 5 +++-- definitions/grib2/template.3.140.def | 13 +++++++------ definitions/grib2/template.3.20.def | 11 ++++++----- definitions/grib2/template.3.30.def | 9 +++++---- definitions/grib2/template.3.90.def | 21 +++++++++++---------- 8 files changed, 43 insertions(+), 34 deletions(-) diff --git a/definitions/grib1/grid_definition_1.def b/definitions/grib1/grid_definition_1.def index 14caa71a8..949da5f59 100644 --- a/definitions/grib1/grid_definition_1.def +++ b/definitions/grib1/grid_definition_1.def @@ -12,7 +12,7 @@ alias numberOfPointsAlongXAxis=Ni; signed[2] Nj : dump; alias numberOfPointsAlongAMeridian=Nj; -alias Nx=Nj; +alias Ny=Nj; alias geography.Nj=Nj; alias numberOfPointsAlongYAxis=Nj; diff --git a/definitions/grib2/template.3.10.def b/definitions/grib2/template.3.10.def index 9c1c30bf0..fefc41ba4 100644 --- a/definitions/grib2/template.3.10.def +++ b/definitions/grib2/template.3.10.def @@ -6,13 +6,13 @@ include "grib2/template.3.shape_of_the_earth.def"; constant isGridded = one; unsigned[4] Ni : dump; -alias numberOfPointsAlongAParallel=Ni; +alias numberOfPointsAlongAParallel = Ni; alias Nx = Ni; alias numberOfPointsAlongXAxis = Ni; alias geography.Ni=Ni; unsigned[4] Nj : dump; -alias numberOfPointsAlongAMeridian=Nj; +alias numberOfPointsAlongAMeridian = Nj; alias Ny = Nj; alias numberOfPointsAlongYAxis = Nj; alias geography.Nj=Nj; diff --git a/definitions/grib2/template.3.110.def b/definitions/grib2/template.3.110.def index 8a1f50e8e..dae4a9263 100644 --- a/definitions/grib2/template.3.110.def +++ b/definitions/grib2/template.3.110.def @@ -7,14 +7,17 @@ constant isGridded = one; # Nx - number of points along X-axis unsigned[4] numberOfPointsAlongXAxis : dump; - alias Nx = numberOfPointsAlongXAxis; +alias numberOfPointsAlongAParallel = Nx; +alias Ni = Nx; + # Ny - number of points along Y-axis unsigned[4] numberOfPointsAlongYAxis : dump; - alias Ny = numberOfPointsAlongYAxis; -# La1 - latitude of tangency point -# (centre of grid) +alias numberOfPointsAlongAMeridian = Ny; +alias Nj = Ny; + +# La1 - latitude of tangency point (centre of grid) signed[4] latitudeOfTangencyPoint : dump; alias La1 = latitudeOfTangencyPoint; @@ -22,6 +25,7 @@ alias La1 = latitudeOfTangencyPoint; unsigned[4] longitudeOfTangencyPoint : dump; alias Lo1 = longitudeOfTangencyPoint; + # Resolution and component flag flags[1] resolutionAndComponentFlags 'grib2/tables/[tablesVersion]/3.3.table' : dump; diff --git a/definitions/grib2/template.3.12.def b/definitions/grib2/template.3.12.def index b45a065d4..a85792264 100644 --- a/definitions/grib2/template.3.12.def +++ b/definitions/grib2/template.3.12.def @@ -11,8 +11,9 @@ alias Nx = Ni; alias geography.Ni=Ni; unsigned[4] Nj : dump; -alias numberOfPointsAlongAMeridian=Nj; -alias Ny = Nj ; +alias numberOfPointsAlongAMeridian = Nj; +alias numberOfPointsAlongYAxis = Nj; +alias Ny = Nj; alias geography.Nj=Nj; # LaR - geographic latitude of reference point diff --git a/definitions/grib2/template.3.140.def b/definitions/grib2/template.3.140.def index 1ec12cadd..83ece859c 100644 --- a/definitions/grib2/template.3.140.def +++ b/definitions/grib2/template.3.140.def @@ -7,24 +7,25 @@ constant isGridded = one; # Nx - number of points along X-axis unsigned[4] numberOfPointsAlongXAxis : dump; -alias Nx = numberOfPointsAlongXAxis; -alias Ni = Nx; +alias Nx = numberOfPointsAlongXAxis; +alias Ni = Nx; # Ny - number of points along Y-axis unsigned[4] numberOfPointsAlongYAxis : dump; -alias Ny = numberOfPointsAlongYAxis; -alias Nj = Ny; +alias Ny = numberOfPointsAlongYAxis; +alias numberOfPointsAlongAMeridian = Ny; +alias Nj = Ny; # La1 - latitude of first grid point signed[4] latitudeOfFirstGridPoint: edition_specific; -alias La1 = latitudeOfFirstGridPoint; +alias La1 = latitudeOfFirstGridPoint; meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint, one,grib2divider,truncateDegrees) : dump; #meta latitudeOfFirstGridPointInMicrodegrees times(latitudeOfFirstGridPoint,mAngleMultiplier,angleDivisor): no_copy; # Lo1 - longitude of first grid point signed[4] longitudeOfFirstGridPoint: edition_specific ; -alias La1 = longitudeOfFirstGridPoint; +alias La1 = longitudeOfFirstGridPoint; meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint, one,grib2divider,truncateDegrees) : dump; #meta longitudeOfFirstGridPointInMicrodegrees times(longitudeOfFirstGridPoint,mAngleMultiplier,angleDivisor) : no_copy; diff --git a/definitions/grib2/template.3.20.def b/definitions/grib2/template.3.20.def index 1e15ab98e..fd1e33b7a 100644 --- a/definitions/grib2/template.3.20.def +++ b/definitions/grib2/template.3.20.def @@ -6,15 +6,16 @@ include "grib2/template.3.shape_of_the_earth.def"; constant isGridded = one; # Nx - number of points along X-axis -unsigned[4] Nx : dump; -alias Ni = Nx; -alias numberOfPointsAlongXAxis = Nx; +unsigned[4] Nx : dump; +alias Ni = Nx; +alias numberOfPointsAlongXAxis = Nx; alias geography.Nx=Nx; # Ny - number of points along Y-axis unsigned[4] Ny : dump; -alias Nj = Ny; -alias numberOfPointsAlongYAxis = Ny; +alias Nj = Ny; +alias numberOfPointsAlongYAxis = Ny; +alias numberOfPointsAlongAMeridian = Nj; alias geography.Ny=Ny; # La1 - latitude of first grid point diff --git a/definitions/grib2/template.3.30.def b/definitions/grib2/template.3.30.def index cdf13a337..6e9466426 100644 --- a/definitions/grib2/template.3.30.def +++ b/definitions/grib2/template.3.30.def @@ -6,13 +6,14 @@ include "grib2/template.3.shape_of_the_earth.def"; constant isGridded = one; unsigned[4] Nx : dump; -alias Ni = Nx; +alias Ni = Nx; alias numberOfPointsAlongXAxis = Nx; alias geography.Nx=Nx; -unsigned[4] Ny : dump; -alias Nj = Ny; -alias numberOfPointsAlongYAxis = Ny; +unsigned[4] Ny : dump; +alias Nj = Ny; +alias numberOfPointsAlongYAxis = Nj; +alias numberOfPointsAlongAMeridian = Nj; alias geography.Ny=Ny; # La1 - latitude of first grid point diff --git a/definitions/grib2/template.3.90.def b/definitions/grib2/template.3.90.def index 4f8813f25..00f359383 100644 --- a/definitions/grib2/template.3.90.def +++ b/definitions/grib2/template.3.90.def @@ -5,14 +5,15 @@ include "grib2/template.3.shape_of_the_earth.def"; constant isGridded = one; -unsigned[4] Nx : dump; -alias Ni = Nx; -alias numberOfPointsAlongXAxis = Nx; +unsigned[4] Nx : dump; +alias Ni = Nx; +alias numberOfPointsAlongXAxis = Nx; alias geography.Nx=Nx; -unsigned[4] Ny : dump; -alias Nj = Ny; -alias numberOfPointsAlongYAxis = Ny; +unsigned[4] Ny : dump; +alias Nj = Ny; +alias numberOfPointsAlongYAxis = Nj; +alias numberOfPointsAlongAMeridian = Nj; alias geography.Ny=Ny; # Lap - latitude of sub-satellite point @@ -27,22 +28,22 @@ meta geography.longitudeOfSubSatellitePointInDegrees scale(longitudeOfSubSatel include "grib2/template.3.resolution_flags.def"; # dx - apparent diameter of Earth in grid lengths, in X-direction -unsigned[4] dx : dump; +unsigned[4] dx : dump; alias geography.dx=dx; # dy - apparent diameter of Earth in grid lengths, in Y-direction -unsigned[4] dy : dump; +unsigned[4] dy : dump; alias geography.dy=dy; # Xp - X-coordinate of sub-satellite point # (in units of 10^-3 grid length expressed as an integer) -unsigned[4] Xp : no_copy; +unsigned[4] Xp : no_copy; meta geography.XpInGridLengths scale(Xp,one,thousand) : dump; alias xCoordinateOfSubSatellitePoint=XpInGridLengths; # Yp - Y-coordinate of sub-satellite point # (in units of 10^-3 grid length expressed as an integer) -unsigned[4] Yp : no_copy; +unsigned[4] Yp : no_copy; meta geography.YpInGridLengths scale(Yp,one,thousand) : dump; alias yCoordinateOfSubSatellitePoint=YpInGridLengths; From 4740cac86f413842e9df298b5de67d1832f59ec0 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 16 Aug 2023 12:48:40 +0100 Subject: [PATCH 168/372] Definitions: Ensure all supported grid types define Ni,Nx,Nj,Ny --- definitions/grib1/grid_definition_latlon.def | 4 ++- definitions/grib2/template.3.12.def | 5 +-- definitions/grib2/template.3.grid.def | 32 +++++++++----------- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/definitions/grib1/grid_definition_latlon.def b/definitions/grib1/grid_definition_latlon.def index 552836fcf..c96c93506 100644 --- a/definitions/grib1/grid_definition_latlon.def +++ b/definitions/grib1/grid_definition_latlon.def @@ -1,9 +1,11 @@ -unsigned[2] Ni : can_be_missing,dump; +unsigned[2] Ni : can_be_missing,dump; alias numberOfPointsAlongAParallel=Ni; +alias numberOfPointsAlongXAxis=Ni; alias Nx = Ni; unsigned[2] Nj : can_be_missing,dump; alias numberOfPointsAlongAMeridian=Nj; +alias numberOfPointsAlongYAxis= Nj; alias Ny = Nj; # Latitudes and Longitudes of the first and the last points diff --git a/definitions/grib2/template.3.12.def b/definitions/grib2/template.3.12.def index a85792264..d317d6ca8 100644 --- a/definitions/grib2/template.3.12.def +++ b/definitions/grib2/template.3.12.def @@ -6,14 +6,15 @@ include "grib2/template.3.shape_of_the_earth.def"; constant isGridded = one; unsigned[4] Ni : dump; -alias numberOfPointsAlongAParallel=Ni; +alias numberOfPointsAlongAParallel = Ni; alias Nx = Ni; +alias numberOfPointsAlongXAxis = Ni; alias geography.Ni=Ni; unsigned[4] Nj : dump; alias numberOfPointsAlongAMeridian = Nj; -alias numberOfPointsAlongYAxis = Nj; alias Ny = Nj; +alias numberOfPointsAlongYAxis = Nj; alias geography.Nj=Nj; # LaR - geographic latitude of reference point diff --git a/definitions/grib2/template.3.grid.def b/definitions/grib2/template.3.grid.def index c23cddf52..28070d542 100644 --- a/definitions/grib2/template.3.grid.def +++ b/definitions/grib2/template.3.grid.def @@ -4,16 +4,18 @@ constant isGridded = one; unsigned[4] Ni : can_be_missing,dump; alias numberOfPointsAlongAParallel=Ni; +alias numberOfPointsAlongXAxis=Ni; alias Nx = Ni; unsigned[4] Nj : dump; alias numberOfPointsAlongAMeridian=Nj; +alias numberOfPointsAlongYAxis= Nj; alias Ny = Nj; alias geography.Ni=Ni; alias geography.Nj=Nj; -# Basic angle of the initial production domain +# Basic angle of the initial production domain unsigned[4] basicAngleOfTheInitialProductionDomain = 0; transient mBasicAngle=basicAngleOfTheInitialProductionDomain*oneMillionConstant; transient angleMultiplier = 1; @@ -26,35 +28,31 @@ when (basicAngleOfTheInitialProductionDomain == 0) { set mAngleMultiplier = mBasicAngle; } -# Subdivisions of basic angle used to define extreme longitudes and latitudes, and direction increments +# Subdivisions of basic angle used to define extreme longitudes and latitudes, and direction increments unsigned[4] subdivisionsOfBasicAngle = missing() : can_be_missing; transient angleDivisor = 1000000; when (missing(subdivisionsOfBasicAngle) || subdivisionsOfBasicAngle == 0) { - set angleDivisor = 1000000; + set angleDivisor = 1000000; } else { - set angleDivisor = subdivisionsOfBasicAngle; + set angleDivisor = subdivisionsOfBasicAngle; } # La1 - latitude of first grid point signed[4] latitudeOfFirstGridPoint : edition_specific ; -alias La1 = latitudeOfFirstGridPoint; +alias La1 = latitudeOfFirstGridPoint; #meta latitudeOfFirstGridPointInMicrodegrees times(latitudeOfFirstGridPoint,mAngleMultiplier,angleDivisor) : no_copy; -# Lo1 - longitude of first grid point - +# Lo1 - longitude of first grid point signed[4] longitudeOfFirstGridPoint ; -alias Lo1 = longitudeOfFirstGridPoint; -#meta longitudeOfFirstGridPointInMicrodegrees times(longitudeOfFirstGridPoint,mAngleMultiplier,angleDivisor) : no_copy; +alias Lo1 = longitudeOfFirstGridPoint; include "grib2/template.3.resolution_flags.def" -# La2 - latitude of last grid point -signed[4] latitudeOfLastGridPoint : edition_specific; -alias La2 = latitudeOfLastGridPoint; -#meta latitudeOfLastGridPointInMicrodegrees times(latitudeOfLastGridPoint,mAngleMultiplier,angleDivisor) : no_copy; +# La2 - latitude of last grid point +signed[4] latitudeOfLastGridPoint : edition_specific; +alias La2 = latitudeOfLastGridPoint; -# Lo2 - longitude of last grid point -signed[4] longitudeOfLastGridPoint : edition_specific ; -alias Lo2 = longitudeOfLastGridPoint; -#meta longitudeOfLastGridPointInMicrodegrees times(longitudeOfLastGridPoint,mAngleMultiplier,angleDivisor) : no_copy; +# Lo2 - longitude of last grid point +signed[4] longitudeOfLastGridPoint : edition_specific ; +alias Lo2 = longitudeOfLastGridPoint; From 418657111176d0ef7540111fce3ede6d93749244 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 16 Aug 2023 12:59:02 +0100 Subject: [PATCH 169/372] Definitions: Cleanup --- definitions/grib1/gds_not_present_bitmap.def | 3 --- definitions/grib1/grid_definition_5.def | 15 +++++++-------- definitions/grib1/grid_definition_gaussian.def | 4 ++-- definitions/grib1/grid_definition_lambert.def | 16 ++++++++-------- .../grid_definition_spherical_harmonics.def | 13 ++++++------- definitions/grib1/resolution_flags.def | 3 +-- definitions/grib1/scanning_mode.def | 2 +- 7 files changed, 25 insertions(+), 31 deletions(-) diff --git a/definitions/grib1/gds_not_present_bitmap.def b/definitions/grib1/gds_not_present_bitmap.def index 735087dc8..c654b3cbc 100644 --- a/definitions/grib1/gds_not_present_bitmap.def +++ b/definitions/grib1/gds_not_present_bitmap.def @@ -5,10 +5,8 @@ position offsetSection3; transient section3Length=1; meta section3Pointer section_pointer(offsetSection3,section3Length,3); -# Number of unused bits at end of Section 3 transient numberOfUnusedBitsAtEndOfSection3 = 0 : read_only; -# Table reference: transient tableReference = 0; #position offsetBeforeBitmap; @@ -18,6 +16,5 @@ meta bitmap gds_not_present_bitmap( missingValue,numberOfValues, Ni,numberOfUnusedBitsAtEndOfSection3) : read_only; #position offsetAfterBitmap; - #padtoeven padding_sec3_1(offsetSection3,section3Length); #section_padding section3Padding; diff --git a/definitions/grib1/grid_definition_5.def b/definitions/grib1/grid_definition_5.def index 43781136e..cca099bf8 100644 --- a/definitions/grib1/grid_definition_5.def +++ b/definitions/grib1/grid_definition_5.def @@ -1,15 +1,15 @@ # GRID DEFINITION Polar stereographic # grib 1 -> 2 -constant gridDefinitionTemplateNumber = 20; +constant gridDefinitionTemplateNumber = 20; unsigned[2] Nx : dump; alias Ni = Nx; -alias numberOfPointsAlongXAxis = Nx; +alias numberOfPointsAlongXAxis = Nx; alias geography.Nx=Nx; unsigned[2] Ny : dump; alias Nj = Ny; -alias numberOfPointsAlongYAxis = Ny; +alias numberOfPointsAlongYAxis = Ny; alias geography.Ny=Ny; signed[3] latitudeOfFirstGridPoint : edition_specific ; @@ -22,19 +22,19 @@ alias Lo1 = longitudeOfFirstGridPoint; include "grib1/resolution_flags.def"; -# LoV - orientation of the grid; i.e. the longitude value of the meridian which is parallel to the Y-axis +# LoV - orientation of the grid; i.e. the longitude value of the meridian which is parallel to the Y-axis signed[3] orientationOfTheGrid : edition_specific, no_copy ; meta geography.orientationOfTheGridInDegrees scale(orientationOfTheGrid,oneConstant,grib1divider,truncateDegrees) : dump; alias LoV = orientationOfTheGrid ; -# Dx - X-direction grid length +# Dx - X-direction grid length unsigned[3] DxInMetres : dump; alias xDirectionGridLengthInMetres=DxInMetres; alias Dx=DxInMetres; alias geography.DxInMetres=DxInMetres; alias Di = DxInMetres; -# Dy - Y-direction grid length +# Dy - Y-direction grid length unsigned[3] DyInMetres : dump; alias yDirectionGridLengthInMetres=DyInMetres; alias Dy = DyInMetres; @@ -45,7 +45,7 @@ constant latitudeWhereDxAndDyAreSpecifiedInDegrees=60; constant LaDInDegrees=60; alias geography.LaDInDegrees=LaDInDegrees; -# Projection centre flag +# Projection centre flag unsigned[1] projectionCentreFlag : dump ; alias projectionCenterFlag=projectionCentreFlag; # Note our flagbit numbers go from 7 to 0, while WMO convention is from 1 to 8 @@ -53,7 +53,6 @@ alias projectionCenterFlag=projectionCentreFlag; # If bit 1 is 1, then the South Pole is on the projection plane flagbit southPoleOnProjectionPlane(projectionCentreFlag,7) : dump; # WMO bit 1 - # for change_scanning_direction alias yFirst=latitudeOfFirstGridPointInDegrees; alias xFirst=longitudeOfFirstGridPointInDegrees; diff --git a/definitions/grib1/grid_definition_gaussian.def b/definitions/grib1/grid_definition_gaussian.def index 377a0822f..26c855900 100644 --- a/definitions/grib1/grid_definition_gaussian.def +++ b/definitions/grib1/grid_definition_gaussian.def @@ -10,12 +10,12 @@ alias Ny=Nj; # Resolution and component flags include "grib1/grid_first_last_resandcomp.def"; -# Di - i direction increment +# Di - i direction increment unsigned[2] iDirectionIncrement : can_be_missing,dump,edition_specific; meta geography.iDirectionIncrementInDegrees scale(iDirectionIncrement,oneConstant,grib1divider,truncateDegrees) : can_be_missing,dump; alias Di = iDirectionIncrement; -# N - number of parallels between a pole and the equator +# N - number of parallels between a pole and the equator unsigned[2] N : dump ; alias numberOfParallelsBetweenAPoleAndTheEquator=N; alias geography.N=N; diff --git a/definitions/grib1/grid_definition_lambert.def b/definitions/grib1/grid_definition_lambert.def index 5556c16ac..45404d420 100644 --- a/definitions/grib1/grid_definition_lambert.def +++ b/definitions/grib1/grid_definition_lambert.def @@ -8,7 +8,7 @@ alias Nj = Ny; alias numberOfPointsAlongYAxis = Ny; alias geography.Ny=Ny; -# La1 - latitude of first grid point +# La1 - latitude of first grid point signed[3] latitudeOfFirstGridPoint : edition_specific; meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint,oneConstant,grib1divider,truncateDegrees) : dump; @@ -17,7 +17,7 @@ alias La1InDegrees=latitudeOfFirstGridPointInDegrees; #meta latitudeOfFirstGridPointInMicrodegrees times(latitudeOfFirstGridPoint,thousand); -# Lo1 - longitude of first grid point +# Lo1 - longitude of first grid point signed[3] longitudeOfFirstGridPoint : edition_specific; meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint,oneConstant,grib1divider,truncateDegrees) : dump; @@ -25,24 +25,24 @@ alias Lo1 = longitudeOfFirstGridPoint; alias Lo1InDegrees = longitudeOfFirstGridPointInDegrees; #meta longitudeOfFirstGridPointInMicrodegrees times(longitudeOfFirstGridPoint,thousand); -# Resolution and component flags +# Resolution and component flags include "grib1/resolution_flags.def"; -# LoV - orientation of the grid; i.e. the east longitude value of the meridian which is parallel to the Y-axis +# LoV - orientation of the grid; i.e. the east longitude value of the meridian which is parallel to the Y-axis signed[3] LoV : edition_specific ; meta geography.LoVInDegrees scale(LoV,oneConstant,grib1divider,truncateDegrees) : dump; alias orientationOfTheGrid = LoV; alias orientationOfTheGridInDegrees = LoVInDegrees; -# Dx - X-direction grid length (in units of metres) +# Dx - X-direction grid length (in units of metres) unsigned[3] DxInMetres : dump; alias xDirectionGridLength=DxInMetres; alias geography.DxInMetres=DxInMetres ; alias Dx = DxInMetres; alias Di = DxInMetres; -# Dy - Y-direction grid length (in units of metres) +# Dy - Y-direction grid length (in units of metres) unsigned[3] DyInMetres : dump; alias yDirectionGridLength=DyInMetres; alias geography.DyInMetres=DyInMetres; @@ -59,7 +59,7 @@ alias xFirst=longitudeOfFirstGridPointInDegrees; include "grib1/scanning_mode.def"; -# Latin 1 - first latitude from the pole at which the secant cone cuts the sphere +# Latin 1 - first latitude from the pole at which the secant cone cuts the sphere signed[3] Latin1 : edition_specific, no_copy; meta geography.Latin1InDegrees scale(Latin1,oneConstant,grib1divider,truncateDegrees) : dump; alias firstLatitude=Latin1; @@ -69,7 +69,7 @@ alias firstLatitudeInDegrees=Latin1InDegrees; constant LaDInDegrees = Latin1InDegrees : dump; alias geography.LaDInDegrees=LaDInDegrees; -# Latin 2 - second latitude from the pole at which the secant cone cuts the sphere +# Latin 2 - second latitude from the pole at which the secant cone cuts the sphere signed[3] Latin2 :edition_specific,no_copy; alias secondLatitude=Latin2; meta geography.Latin2InDegrees scale(Latin2,oneConstant,grib1divider,truncateDegrees) : dump; diff --git a/definitions/grib1/grid_definition_spherical_harmonics.def b/definitions/grib1/grid_definition_spherical_harmonics.def index f79e45157..f82b5c7f3 100644 --- a/definitions/grib1/grid_definition_spherical_harmonics.def +++ b/definitions/grib1/grid_definition_spherical_harmonics.def @@ -1,17 +1,17 @@ # GRID DEFINITION spherical harmonic coefficients (including rotated, stretched, or stretched and rotated) constant isGridded = zero; -# J - pentagonal resolution parameter +# J - pentagonal resolution parameter unsigned[2] J : dump ; alias pentagonalResolutionParameterJ= J; alias geography.J=J; -# K - pentagonal resolution parameter +# K - pentagonal resolution parameter unsigned[2] K : dump; alias pentagonalResolutionParameterK=K; alias geography.K=K; -# M - pentagonal resolution parameter +# M - pentagonal resolution parameter unsigned[2] M : dump ; alias pentagonalResolutionParameterM=M; alias geography.M=M; @@ -22,14 +22,13 @@ alias numberOfPoints=numberOfValues; alias numberOfDataPoints=numberOfValues; #alias ls.valuesCount=numberOfValues; -# Representation type +# Representation type codetable[1] representationType 'grib1/9.table' = 1 : no_copy; -# Representation mode +# Representation mode codetable[1] representationMode 'grib1/10.table' = 2 : no_copy; -# Set to zero -# (reserved) +# Set to zero (reserved) pad padding_grid50_1(18); # For now, to make section2 happy diff --git a/definitions/grib1/resolution_flags.def b/definitions/grib1/resolution_flags.def index 6c56f24b9..eb096e61e 100644 --- a/definitions/grib1/resolution_flags.def +++ b/definitions/grib1/resolution_flags.def @@ -1,4 +1,4 @@ -# Resolution and component flags +# Resolution and component flags flags[1] resolutionAndComponentFlags 'grib1/7.table' : edition_specific,no_copy ; # Note our flagbit numbers run from 7 to 0, while WMO convention uses 1 to 8 @@ -21,7 +21,6 @@ if (earthIsOblate) { alias earthMinorAxisInMetres=earthMinorAxis; } - flagbit resolutionAndComponentFlags3(resolutionAndComponentFlags,5) = 0: read_only; flagbit resolutionAndComponentFlags4(resolutionAndComponentFlags,4) = 0: read_only; diff --git a/definitions/grib1/scanning_mode.def b/definitions/grib1/scanning_mode.def index fadd9509f..477e63562 100644 --- a/definitions/grib1/scanning_mode.def +++ b/definitions/grib1/scanning_mode.def @@ -1,6 +1,6 @@ constant isGridded = one; -# Scanning mode +# Scanning mode flags[1] scanningMode 'grib1/8.table' : edition_specific,no_copy; # Not flagbit numbers 7 to 0, while wmo is 1 to 8 From 70505e445864bcc2fc77f5ad74b6a95f5e9b7c34 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 16 Aug 2023 15:03:40 +0100 Subject: [PATCH 170/372] Definitions: Cleanup --- definitions/grib2/mars_labeling.82.def | 21 +++------- definitions/grib2/template.3.latlon.def | 14 +++---- definitions/grib2/template.3.rotation.def | 10 ++--- .../grib2/template.3.shape_of_the_earth.def | 12 +++--- .../grib2/template.3.spherical_harmonics.def | 11 +++--- definitions/grib2/template.4.20.def | 38 +++++++++---------- definitions/grib2/template.4.categorical.def | 13 ++----- .../grib2/template.4.circular_cluster.def | 28 +++++++------- definitions/grib2/template.4.eps.def | 8 ++-- definitions/grib2/template.4.horizontal.def | 12 +++--- .../grib2/template.4.rectangular_cluster.def | 28 +++++++------- definitions/grib2/template.4.statistical.def | 29 +++++++------- definitions/grib2/template.5.2.def | 22 +++++------ 13 files changed, 112 insertions(+), 134 deletions(-) diff --git a/definitions/grib2/mars_labeling.82.def b/definitions/grib2/mars_labeling.82.def index 88328c1a2..7d881ced7 100644 --- a/definitions/grib2/mars_labeling.82.def +++ b/definitions/grib2/mars_labeling.82.def @@ -1,15 +1,11 @@ # author: Sebastien Villaume # created: 14 Feb 2014 -# ######################### - constant conceptsMasterMarsDir="mars" : hidden; constant conceptsLocalMarsDirAll="mars/[centre:s]" : hidden; ########################## -# # # Base MARS keywors # -# # ########################## alias mars.class = marsClass; @@ -20,28 +16,21 @@ alias mars.expver = experimentVersionNumber; alias mars.domain = globalDomain; ######################### -# # # local section 82 # -# # ######################### ### nothing needed here... ######################### -# # # local section 83 # -# # ######################### - if ( localDefinitionNumber == 83 ) { - - alias mars.sort = matchSort; - alias mars.timerepres = matchTimeRepres; - alias mars.landtype = matchLandType; - alias mars.aerosolbinnumber = matchAerosolBinNumber; + alias mars.sort = matchSort; + alias mars.timerepres = matchTimeRepres; + alias mars.landtype = matchLandType; + alias mars.aerosolbinnumber = matchAerosolBinNumber; concept_nofail matchAerosolPacking (unknown,"aerosolPackingConcept.def",conceptsLocalMarsDirAll,conceptsMasterMarsDir); - alias mars.aerosolpacking = matchAerosolPacking; - + alias mars.aerosolpacking = matchAerosolPacking; } diff --git a/definitions/grib2/template.3.latlon.def b/definitions/grib2/template.3.latlon.def index cc3b8cc5f..aa2c945d7 100644 --- a/definitions/grib2/template.3.latlon.def +++ b/definitions/grib2/template.3.latlon.def @@ -2,17 +2,15 @@ include "grib2/template.3.grid.def"; -# Di - i direction increment - +# Di - i direction increment unsigned[4] iDirectionIncrement : can_be_missing,edition_specific; -alias Di = iDirectionIncrement; -alias Dx = iDirectionIncrement; - -# Dj - j direction increment +alias Di = iDirectionIncrement; +alias Dx = iDirectionIncrement; +# Dj - j direction increment unsigned[4] jDirectionIncrement : can_be_missing,edition_specific; -alias Dj = jDirectionIncrement; -alias Dy = jDirectionIncrement; +alias Dj = jDirectionIncrement; +alias Dy = jDirectionIncrement; include "grib2/template.3.scanning_mode.def"; diff --git a/definitions/grib2/template.3.rotation.def b/definitions/grib2/template.3.rotation.def index f797170a5..33c319735 100644 --- a/definitions/grib2/template.3.rotation.def +++ b/definitions/grib2/template.3.rotation.def @@ -1,18 +1,18 @@ # (C) Copyright 2005- ECMWF. -# Latitude of the southern pole of projection +# Latitude of the southern pole of projection signed[4] latitudeOfSouthernPole : no_copy; alias latitudeOfTheSouthernPoleOfProjection=latitudeOfSouthernPole; -# Longitude of the southern pole of projection +# Longitude of the southern pole of projection unsigned[4] longitudeOfSouthernPole : no_copy; alias longitudeOfTheSouthernPoleOfProjection=longitudeOfSouthernPole; -meta geography.latitudeOfSouthernPoleInDegrees scale(latitudeOfSouthernPole +meta geography.latitudeOfSouthernPoleInDegrees scale(latitudeOfSouthernPole ,one,grib2divider,truncateDegrees) : dump; -meta geography.longitudeOfSouthernPoleInDegrees g2lon(longitudeOfSouthernPole) : dump; +meta geography.longitudeOfSouthernPoleInDegrees g2lon(longitudeOfSouthernPole) : dump; -# Angle of rotation of projection +# Angle of rotation of projection ieeefloat angleOfRotation : dump,edition_specific ; alias geography.angleOfRotationInDegrees=angleOfRotation; diff --git a/definitions/grib2/template.3.shape_of_the_earth.def b/definitions/grib2/template.3.shape_of_the_earth.def index 2ff2dcdf0..6bd4deceb 100644 --- a/definitions/grib2/template.3.shape_of_the_earth.def +++ b/definitions/grib2/template.3.shape_of_the_earth.def @@ -2,25 +2,25 @@ codetable[1] shapeOfTheEarth ('3.2.table',masterDir,localDir) : dump; -# Scale factor of radius of spherical earth +# Scale factor of radius of spherical earth unsigned[1] scaleFactorOfRadiusOfSphericalEarth = missing() : can_be_missing, edition_specific; -# Scaled value of radius of spherical earth (in metres) +# Scaled value of radius of spherical earth (in metres) unsigned[4] scaledValueOfRadiusOfSphericalEarth = missing(): can_be_missing, edition_specific; -# Scale factor of major axis of oblate spheroid earth +# Scale factor of major axis of oblate spheroid earth unsigned[1] scaleFactorOfEarthMajorAxis = missing(): can_be_missing, edition_specific; alias scaleFactorOfMajorAxisOfOblateSpheroidEarth=scaleFactorOfEarthMajorAxis; -# Scaled value of major axis of oblate spheroid earth +# Scaled value of major axis of oblate spheroid earth unsigned[4] scaledValueOfEarthMajorAxis = missing(): can_be_missing, edition_specific; alias scaledValueOfMajorAxisOfOblateSpheroidEarth=scaledValueOfEarthMajorAxis; -# Scale factor of minor axis of oblate spheroid earth +# Scale factor of minor axis of oblate spheroid earth unsigned[1] scaleFactorOfEarthMinorAxis = missing(): can_be_missing, edition_specific; alias scaleFactorOfMinorAxisOfOblateSpheroidEarth=scaleFactorOfEarthMinorAxis ; -# Scaled value of minor axis of oblate spheroid earth +# Scaled value of minor axis of oblate spheroid earth unsigned[4] scaledValueOfEarthMinorAxis = missing(): can_be_missing, edition_specific; alias scaledValueOfMinorAxisOfOblateSpheroidEarth=scaledValueOfEarthMinorAxis; diff --git a/definitions/grib2/template.3.spherical_harmonics.def b/definitions/grib2/template.3.spherical_harmonics.def index 3e58d278c..2adbe405b 100644 --- a/definitions/grib2/template.3.spherical_harmonics.def +++ b/definitions/grib2/template.3.spherical_harmonics.def @@ -1,29 +1,28 @@ # (C) Copyright 2005- ECMWF. constant sphericalHarmonics=1; - # constant dataRepresentationType = 50; -# J - pentagonal resolution parameter +# J - pentagonal resolution parameter unsigned[4] J : dump; alias pentagonalResolutionParameterJ=J ; alias geography.J=J; -# K - pentagonal resolution parameter +# K - pentagonal resolution parameter unsigned[4] K : dump; alias pentagonalResolutionParameterK=K; alias geography.K=K; -# M - pentagonal resolution parameter +# M - pentagonal resolution parameter unsigned[4] M : dump; alias pentagonalResolutionParameterM = M ; alias geography.M=M; -# Representation type indicating the method used to define the norm +# Representation type indicating the method used to define the norm codetable[1] spectralType ('3.6.table',masterDir,localDir) = 1 : no_copy; alias spectralDataRepresentationType=spectralType; -# Representation mode indicating the order of the coefficients +# Representation mode indicating the order of the coefficients codetable[1] spectralMode ('3.7.table',masterDir,localDir) = 1 : no_copy; alias spectralDataRepresentationMode=spectralMode; diff --git a/definitions/grib2/template.4.20.def b/definitions/grib2/template.4.20.def index 86cc2e8e7..9ba5668eb 100644 --- a/definitions/grib2/template.4.20.def +++ b/definitions/grib2/template.4.20.def @@ -1,64 +1,64 @@ # (C) Copyright 2005- ECMWF. # TEMPLATE 4.20, Radar product -# Parameter category +# Parameter category codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir) : dump; -# Parameter number +# Parameter number codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir) : dump; meta parameterUnits codetable_units(parameterNumber) : dump; meta parameterName codetable_title(parameterNumber) : dump; -# Type of generating process +# Type of generating process codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir) : dump; -# Number of radar sites used +# Number of radar sites used unsigned[1] numberOfRadarSitesUsed : dump; -# Indicator of unit of time range +# Indicator of unit of time range codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir) : dump; alias defaultStepUnits = one; # 1 means Hour. See code table 4.4 template_nofail default_step_units "grib2/localConcepts/[centre:s]/default_step_units.def"; codetable[1] stepUnits 'stepUnits.table' = defaultStepUnits : transient,dump,no_copy; -# Site latitude (in 10-6 degree) +# Site latitude (in 10-6 degree) unsigned[4] siteLatitude : dump; -# Site longitude (in 10-6 degree) +# Site longitude (in 10-6 degree) unsigned[4] siteLongitude : dump; -# Site elevation (meters) +# Site elevation (meters) unsigned[2] siteElevation : dump; -# Site ID (alphanumeric) +# Site ID (alphanumeric) unsigned[4] siteId : dump; -# Site ID (numeric) +# Site ID (numeric) unsigned[2] siteId : dump; -# Operating mode +# Operating mode codetable[1] operatingMode ('4.12.table',masterDir,localDir) : dump; -# Reflectivity calibration constant (tenths of dB) +# Reflectivity calibration constant (tenths of dB) unsigned[1] reflectivityCalibrationConstant : dump; -# Quality control indicator +# Quality control indicator codetable[1] qualityControlIndicator ('4.13.table',masterDir,localDir) : dump; -# Clutter filter indicator +# Clutter filter indicator codetable[1] clutterFilterIndicator ('4.14.table',masterDir,localDir) : dump; -# Constant antenna elevation angle (tenths of degree true) +# Constant antenna elevation angle (tenths of degree true) unsigned[1] constantAntennaElevationAngle : dump; -# Accumulation interval (minutes) +# Accumulation interval (minutes) unsigned[2] accumulationInterval : dump; -# Reference reflectivity for echo top (dB) +# Reference reflectivity for echo top (dB) unsigned[1] referenceReflectivityForEchoTop : dump; -# Range bin spacing (meters) +# Range bin spacing (meters) unsigned[3] rangeBinSpacing : dump; -# Radial angular spacing (tenths of degree true) +# Radial angular spacing (tenths of degree true) unsigned[2] radialAngularSpacing : dump; diff --git a/definitions/grib2/template.4.categorical.def b/definitions/grib2/template.4.categorical.def index 561f28b18..102d50e51 100644 --- a/definitions/grib2/template.4.categorical.def +++ b/definitions/grib2/template.4.categorical.def @@ -1,21 +1,14 @@ # (C) Copyright 2005- ECMWF. -# Total number of forecast probabilities -unsigned[1] numberOfCategories : dump; +# Total number of forecast probabilities +unsigned[1] numberOfCategories : dump; -# categories +# Categories categories list(numberOfCategories) { codetable[1] categoryType ('4.91.table',masterDir,localDir): dump; unsigned[1] codeFigure : dump; - # Scale factor of lower limit unsigned[1] scaleFactorOfLowerLimit : can_be_missing,dump ; - - # Scaled value of lower limit unsigned[4] scaledValueOfLowerLimit : can_be_missing,dump ; - - # Scale factor of upper limit unsigned[1] scaleFactorOfUpperLimit : can_be_missing,dump; - - # Scaled value of upper limit unsigned[4] scaledValueOfUpperLimit : can_be_missing,dump; } diff --git a/definitions/grib2/template.4.circular_cluster.def b/definitions/grib2/template.4.circular_cluster.def index f6e2cade4..31c85bb78 100644 --- a/definitions/grib2/template.4.circular_cluster.def +++ b/definitions/grib2/template.4.circular_cluster.def @@ -1,45 +1,45 @@ # (C) Copyright 2005- ECMWF. -# Cluster identifier +# Cluster identifier unsigned[1] clusterIdentifier : dump; alias number=clusterIdentifier; -# Number of cluster to which the high resolution control belongs +# Number of cluster to which the high resolution control belongs unsigned[1] numberOfClusterHighResolution : dump; -# Number of cluster to which the low resolution control belongs +# Number of cluster to which the low resolution control belongs unsigned[1] numberOfClusterLowResolution : dump; -# Total number of clusters +# Total number of clusters unsigned[1] totalNumberOfClusters : dump; alias totalNumber=totalNumberOfClusters; -# Clustering method +# Clustering method codetable[1] clusteringMethod ('4.8.table',masterDir,localDir) : dump; -# Latitude of central point in cluster domain +# Latitude of central point in cluster domain unsigned[4] latitudeOfCentralPointInClusterDomain : dump; -# Longitude of central point in cluster domain +# Longitude of central point in cluster domain unsigned[4] longitudeOfCentralPointInClusterDomain : dump; -# Radius of cluster domain +# Radius of cluster domain unsigned[4] radiusOfClusterDomain : dump ; -# NC - Number of forecasts in the cluster +# NC - Number of forecasts in the cluster unsigned[1] numberOfForecastsInTheCluster : dump; -alias NC = numberOfForecastsInTheCluster; -# Scale factor of standard deviation in the cluster +alias NC = numberOfForecastsInTheCluster; +# Scale factor of standard deviation in the cluster unsigned[1] scaleFactorOfStandardDeviation : edition_specific ; alias scaleFactorOfStandardDeviationInTheCluster=scaleFactorOfStandardDeviation; -# Scaled value of standard deviation in the cluster +# Scaled value of standard deviation in the cluster unsigned[4] scaledValueOfStandardDeviation : dump ; alias scaledValueOfStandardDeviationInTheCluster=scaledValueOfStandardDeviation; -# Scale factor of distance of the cluster from ensemble mean +# Scale factor of distance of the cluster from ensemble mean unsigned[1] scaleFactorOfDistanceFromEnsembleMean : dump; -# Scaled value of distance of the cluster from ensemble mean +# Scaled value of distance of the cluster from ensemble mean unsigned[4] scaledValueOfDistanceFromEnsembleMean : dump; diff --git a/definitions/grib2/template.4.eps.def b/definitions/grib2/template.4.eps.def index bda5c6b25..1f80b38d1 100644 --- a/definitions/grib2/template.4.eps.def +++ b/definitions/grib2/template.4.eps.def @@ -1,17 +1,17 @@ # (C) Copyright 2005- ECMWF. -# Type of ensemble forecast +# Type of ensemble forecast codetable[1] typeOfEnsembleForecast ('4.6.table',masterDir,localDir) = 255 : dump; -# Perturbation number +# Perturbation number unsigned[1] perturbationNumber : dump; alias number=perturbationNumber; -# Number of forecasts in ensemble +# Number of forecasts in ensemble unsigned[1] numberOfForecastsInEnsemble : dump; alias totalNumber=numberOfForecastsInEnsemble; -# Rules for TIGGE, S2S, UERRA and CRRA +# Rules for TIGGE, S2S, UERRA and CRRA if (productionStatusOfProcessedData == 4 || productionStatusOfProcessedData == 5 || productionStatusOfProcessedData == 6 || diff --git a/definitions/grib2/template.4.horizontal.def b/definitions/grib2/template.4.horizontal.def index 954888d36..e5a45721a 100644 --- a/definitions/grib2/template.4.horizontal.def +++ b/definitions/grib2/template.4.horizontal.def @@ -1,25 +1,25 @@ # (C) Copyright 2005- ECMWF. -# Type of first fixed surface +# Type of first fixed surface codetable[1] typeOfFirstFixedSurface ('4.5.table',masterDir,localDir) : dump,edition_specific,string_type; meta unitsOfFirstFixedSurface codetable_units(typeOfFirstFixedSurface) : dump; meta nameOfFirstFixedSurface codetable_title(typeOfFirstFixedSurface) : dump; -# Scale factor of first fixed surface +# Scale factor of first fixed surface signed[1] scaleFactorOfFirstFixedSurface = missing() : can_be_missing,dump,edition_specific; -# Scaled value of first fixed surface +# Scaled value of first fixed surface unsigned[4] scaledValueOfFirstFixedSurface = missing() : can_be_missing,dump,edition_specific; -# Type of second fixed surface +# Type of second fixed surface codetable[1] typeOfSecondFixedSurface ('4.5.table',masterDir,localDir) = 255 : dump,edition_specific; meta unitsOfSecondFixedSurface codetable_units(typeOfSecondFixedSurface) : dump; meta nameOfSecondFixedSurface codetable_title(typeOfSecondFixedSurface) : dump; -# Scale factor of second fixed surface +# Scale factor of second fixed surface signed[1] scaleFactorOfSecondFixedSurface = missing() : can_be_missing,dump,edition_specific; -# Scaled value of second fixed surface +# Scaled value of second fixed surface unsigned[4] scaledValueOfSecondFixedSurface = missing() : can_be_missing,dump,edition_specific; transient pressureUnits="hPa"; diff --git a/definitions/grib2/template.4.rectangular_cluster.def b/definitions/grib2/template.4.rectangular_cluster.def index 1d4f359f8..24d2f5138 100644 --- a/definitions/grib2/template.4.rectangular_cluster.def +++ b/definitions/grib2/template.4.rectangular_cluster.def @@ -1,49 +1,49 @@ # (C) Copyright 2005- ECMWF. -# Cluster identifier +# Cluster identifier unsigned[1] clusterIdentifier : dump ; alias number=clusterIdentifier; -# Number of cluster to which the high resolution control belongs +# Number of cluster to which the high resolution control belongs unsigned[1] NH : dump; -# Number of cluster to which the low resolution control belongs +# Number of cluster to which the low resolution control belongs unsigned[1] NL : dump ; -# Total number of clusters +# Total number of clusters unsigned[1] totalNumberOfClusters : dump ; alias totalNumber=totalNumberOfClusters; -# Clustering method +# Clustering method codetable[1] clusteringMethod ('4.8.table',masterDir,localDir) : dump; -# Northern latitude of cluster domain +# Northern latitude of cluster domain unsigned[4] northernLatitudeOfClusterDomain : dump ; -# Southern latitude of cluster domain +# Southern latitude of cluster domain unsigned[4] southernLatitudeOfClusterDomain : dump ; -# Eastern longitude of cluster domain +# Eastern longitude of cluster domain unsigned[4] easternLongitudeOfClusterDomain : dump; -# Western longitude of cluster domain +# Western longitude of cluster domain unsigned[4] westernLongitudeOfClusterDomain : dump ; -# NC - Number of forecasts in the cluster +# NC - Number of forecasts in the cluster unsigned[1] numberOfForecastsInTheCluster : dump ; alias NC = numberOfForecastsInTheCluster; -# Scale factor of standard deviation in the cluster +# Scale factor of standard deviation in the cluster unsigned[1] scaleFactorOfStandardDeviation : edition_specific ; alias scaleFactorOfStandardDeviationInTheCluster=scaleFactorOfStandardDeviation; -# Scaled value of standard deviation in the cluster +# Scaled value of standard deviation in the cluster unsigned[4] scaledValueOfStandardDeviation : dump ; alias scaledValueOfStandardDeviationInTheCluster=scaledValueOfStandardDeviation; -# Scale factor of distance of the cluster from ensemble mean +# Scale factor of distance of the cluster from ensemble mean unsigned[1] scaleFactorOfDistanceFromEnsembleMean : dump ; -# Scaled value of distance of the cluster from ensemble mean +# Scaled value of distance of the cluster from ensemble mean unsigned[4] scaledValueOfDistanceFromEnsembleMean : dump ; diff --git a/definitions/grib2/template.4.statistical.def b/definitions/grib2/template.4.statistical.def index 108e949f9..dfc0e7203 100644 --- a/definitions/grib2/template.4.statistical.def +++ b/definitions/grib2/template.4.statistical.def @@ -1,53 +1,52 @@ # (C) Copyright 2005- ECMWF. -# Year of end of overall time interval +# Year of end of overall time interval unsigned[2] yearOfEndOfOverallTimeInterval =0 : edition_specific; -# Month of end of overall time interval +# Month of end of overall time interval unsigned[1] monthOfEndOfOverallTimeInterval =0 : edition_specific; -# Day of end of overall time interval +# Day of end of overall time interval unsigned[1] dayOfEndOfOverallTimeInterval =0 : edition_specific; -# Hour of end of overall time interval +# Hour of end of overall time interval unsigned[1] hourOfEndOfOverallTimeInterval =0 : edition_specific; -# Minute of end of overall time interval +# Minute of end of overall time interval unsigned[1] minuteOfEndOfOverallTimeInterval =0 : edition_specific; -# Second of end of overall time interval +# Second of end of overall time interval unsigned[1] secondOfEndOfOverallTimeInterval =0 : edition_specific; -# n - number of time range specifications describing the time intervals used to calculate the statistically-processed field +# n - number of time range specifications describing the time intervals used to calculate the statistically-processed field unsigned[1] numberOfTimeRange = 1 : edition_specific; alias n = numberOfTimeRange; -# Total number of data values missing in statistical process +# Total number of data values missing in statistical process unsigned[4] numberOfMissingInStatisticalProcess = 0 : edition_specific; alias totalNumberOfDataValuesMissingInStatisticalProcess=numberOfMissingInStatisticalProcess; statisticalProcessesList list(numberOfTimeRange) { - # Statistical process used to calculate the processed field from the field at each time increment during the time range + # Statistical process used to calculate the processed field from the field at each time increment during the time range codetable[1] typeOfStatisticalProcessing ('4.10.table',masterDir,localDir) : edition_specific; - # Type of time increment between successive fields used in the statistical processing + # Type of time increment between successive fields used in the statistical processing codetable[1] typeOfTimeIncrement ('4.11.table',masterDir,localDir) = 2 : edition_specific; alias typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing=typeOfTimeIncrement; - # Indicator of unit of time for time range over which statistical processing is done + # Indicator of unit of time for time range over which statistical processing is done codetable[1] indicatorOfUnitForTimeRange ('4.4.table',masterDir,localDir) =1 ; - # Length of the time range over which statistical processing is done, in units defined by the previous octet + # Length of the time range over which statistical processing is done, in units defined by the previous octet unsigned[4] lengthOfTimeRange=0 ; - # Indicator of unit of time for the increment between the successive fields used + # Indicator of unit of time for the increment between the successive fields used codetable[1] indicatorOfUnitForTimeIncrement ('4.4.table',masterDir,localDir)=255 ; - # Time increment between successive fields, in units defined by the previous octet + # Time increment between successive fields, in units defined by the previous octet unsigned[4] timeIncrement=0 ; alias timeIncrementBetweenSuccessiveFields=timeIncrement; - } # See GRIB-488. We only support maximum of 2 time ranges diff --git a/definitions/grib2/template.5.2.def b/definitions/grib2/template.5.2.def index 03e74a290..cc3149827 100644 --- a/definitions/grib2/template.5.2.def +++ b/definitions/grib2/template.5.2.def @@ -5,39 +5,39 @@ include "grib2/template.5.packing.def"; include "grib2/template.5.original_values.def"; -# Group splitting method used +# Group splitting method used codetable[1] groupSplittingMethodUsed ('5.4.table',masterDir,localDir); -# Missing value management used +# Missing value management used codetable[1] missingValueManagementUsed ('5.5.table',masterDir,localDir); -# Primary missing value substitute +# Primary missing value substitute unsigned[4] primaryMissingValueSubstitute ; -# Secondary missing value substitute +# Secondary missing value substitute unsigned[4] secondaryMissingValueSubstitute ; -# NG - Number of groups of data values into which field is split +# NG - Number of groups of data values into which field is split unsigned[4] numberOfGroupsOfDataValues ; alias NG = numberOfGroupsOfDataValues; -# Reference for group widths +# Reference for group widths unsigned[1] referenceForGroupWidths ; -# Number of bits used for the group widths +# Number of bits used for the group widths # (after the reference value in octet 36 has been removed) unsigned[1] numberOfBitsUsedForTheGroupWidths ; -# Reference for group lengths +# Reference for group lengths unsigned[4] referenceForGroupLengths ; -# Length increment for the group lengths +# Length increment for the group lengths unsigned[1] lengthIncrementForTheGroupLengths ; -# True length of last group +# True length of last group unsigned[4] trueLengthOfLastGroup ; -# Number of bits used for the scaled group lengths +# Number of bits used for the scaled group lengths # (after subtraction of the reference value given in octets 38-41 and division # by the length increment given in octet 42) unsigned[1] numberOfBitsForScaledGroupLengths ; From 40c2a8a02ed7decdd64d06e073434a82639881ec Mon Sep 17 00:00:00 2001 From: Robert Osinski Date: Wed, 16 Aug 2023 10:52:21 +0000 Subject: [PATCH 171/372] removed mars.number for type pfc and ppm which are for the whole ensemble --- definitions/mars/grib.eefo.pfc.def | 2 -- definitions/mars/grib.eefo.ppm.def | 2 -- definitions/mars/grib.enfo.pfc.def | 2 -- definitions/mars/grib.enfo.ppm.def | 2 -- 4 files changed, 8 deletions(-) diff --git a/definitions/mars/grib.eefo.pfc.def b/definitions/mars/grib.eefo.pfc.def index 04adb5a22..c1bc2b6bd 100644 --- a/definitions/mars/grib.eefo.pfc.def +++ b/definitions/mars/grib.eefo.pfc.def @@ -1,5 +1,3 @@ -alias mars.number = perturbationNumber; - alias mars.step = stepRange; # We need this because 'postProcessing' is defined later diff --git a/definitions/mars/grib.eefo.ppm.def b/definitions/mars/grib.eefo.ppm.def index 9129cbcd8..a8c09a96e 100644 --- a/definitions/mars/grib.eefo.ppm.def +++ b/definitions/mars/grib.eefo.ppm.def @@ -1,5 +1,3 @@ -alias mars.number = perturbationNumber; - alias mars.step = stepRange; # We need this because 'postProcessing' is defined later diff --git a/definitions/mars/grib.enfo.pfc.def b/definitions/mars/grib.enfo.pfc.def index 04adb5a22..c1bc2b6bd 100644 --- a/definitions/mars/grib.enfo.pfc.def +++ b/definitions/mars/grib.enfo.pfc.def @@ -1,5 +1,3 @@ -alias mars.number = perturbationNumber; - alias mars.step = stepRange; # We need this because 'postProcessing' is defined later diff --git a/definitions/mars/grib.enfo.ppm.def b/definitions/mars/grib.enfo.ppm.def index 9129cbcd8..a8c09a96e 100644 --- a/definitions/mars/grib.enfo.ppm.def +++ b/definitions/mars/grib.enfo.ppm.def @@ -1,5 +1,3 @@ -alias mars.number = perturbationNumber; - alias mars.step = stepRange; # We need this because 'postProcessing' is defined later From 4ef6b20feccf66cee0745b50b057e14937b96aa7 Mon Sep 17 00:00:00 2001 From: Robert Osinski Date: Wed, 16 Aug 2023 14:44:39 +0000 Subject: [PATCH 172/372] removed mmsf for ecPoint --- definitions/mars/grib.mmsf.gbf.def | 24 ------------------------ definitions/mars/grib.mmsf.gwt.def | 24 ------------------------ definitions/mars/grib.mmsf.pfc.def | 27 --------------------------- 3 files changed, 75 deletions(-) delete mode 100644 definitions/mars/grib.mmsf.gbf.def delete mode 100644 definitions/mars/grib.mmsf.gwt.def delete mode 100644 definitions/mars/grib.mmsf.pfc.def diff --git a/definitions/mars/grib.mmsf.gbf.def b/definitions/mars/grib.mmsf.gbf.def deleted file mode 100644 index f4adf1dc1..000000000 --- a/definitions/mars/grib.mmsf.gbf.def +++ /dev/null @@ -1,24 +0,0 @@ -#alias mars.step = endStep; - -alias mars.step = stepRange; - -# We need this because 'postProcessing' is defined later -meta ecpt_model sprintf("%s", postProcessing) : no_copy; -alias mars.model = ecpt_model; - -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } -if (class is "c3") { alias mars.system = systemNumber; } -alias mars.number = perturbationNumber; -alias mars.method = methodNumber; - -if (!(class is "gw")) { # ECC-1448 - alias mars.origin = centre; -} - -# See ECC-624 -if (centre == 80 && subCentre == 98 && class is "c3") { - constant cnmc_cmcc = 'cmcc'; - alias mars.origin = cnmc_cmcc; -} diff --git a/definitions/mars/grib.mmsf.gwt.def b/definitions/mars/grib.mmsf.gwt.def deleted file mode 100644 index f4adf1dc1..000000000 --- a/definitions/mars/grib.mmsf.gwt.def +++ /dev/null @@ -1,24 +0,0 @@ -#alias mars.step = endStep; - -alias mars.step = stepRange; - -# We need this because 'postProcessing' is defined later -meta ecpt_model sprintf("%s", postProcessing) : no_copy; -alias mars.model = ecpt_model; - -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } -if (class is "c3") { alias mars.system = systemNumber; } -alias mars.number = perturbationNumber; -alias mars.method = methodNumber; - -if (!(class is "gw")) { # ECC-1448 - alias mars.origin = centre; -} - -# See ECC-624 -if (centre == 80 && subCentre == 98 && class is "c3") { - constant cnmc_cmcc = 'cmcc'; - alias mars.origin = cnmc_cmcc; -} diff --git a/definitions/mars/grib.mmsf.pfc.def b/definitions/mars/grib.mmsf.pfc.def deleted file mode 100644 index a05a78ca1..000000000 --- a/definitions/mars/grib.mmsf.pfc.def +++ /dev/null @@ -1,27 +0,0 @@ -#alias mars.step = endStep; - -alias mars.step = stepRange; - -# We need this because 'postProcessing' is defined later -meta ecpt_model sprintf("%s", postProcessing) : no_copy; -alias mars.model = ecpt_model; - -meta marsQuantile sprintf("%d:%d",quantileValue,totalNumberOfQuantiles); -alias mars.quantile = marsQuantile; - -if (class is "od") { alias mars.system = systemNumber; } -if (class is "me") { alias mars.system = systemNumber; } -if (class is "en") { alias mars.system = systemNumber; } -if (class is "c3") { alias mars.system = systemNumber; } -alias mars.number = perturbationNumber; -alias mars.method = methodNumber; - -if (!(class is "gw")) { # ECC-1448 - alias mars.origin = centre; -} - -# See ECC-624 -if (centre == 80 && subCentre == 98 && class is "c3") { - constant cnmc_cmcc = 'cmcc'; - alias mars.origin = cnmc_cmcc; -} From 9820d32fa8842a035ceb9d4ca38469649edb9e5a Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 16 Aug 2023 17:48:51 +0100 Subject: [PATCH 173/372] grib_util_set_spec: dead code removal --- src/grib_util.cc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/grib_util.cc b/src/grib_util.cc index dcebec9af..af0e40af6 100644 --- a/src/grib_util.cc +++ b/src/grib_util.cc @@ -951,13 +951,8 @@ grib_handle* grib_util_set_spec(grib_handle* h, int global_grid = 0; /* boolean */ int expandBoundingBox = 0; - static grib_util_packing_spec default_packing_spec = {0,}; Assert(h); - if (!packing_spec) { - packing_spec = &default_packing_spec; - } - /* Get edition number from input handle */ if ((*err = grib_get_long(h, "edition", &editionNumber)) != 0) { if (c->write_on_fail) grib_write_message(h, "error.grib", "w"); From 5dbc391305de87af5f7eec84f8f463f861b93424 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 16 Aug 2023 17:53:28 +0100 Subject: [PATCH 174/372] grib_util_set_spec: dead code removal --- src/grib_util.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/grib_util.cc b/src/grib_util.cc index af0e40af6..a414f9f99 100644 --- a/src/grib_util.cc +++ b/src/grib_util.cc @@ -1287,10 +1287,8 @@ grib_handle* grib_util_set_spec(grib_handle* h, keep_matrix = 0; /* ECC-911 */ } if (keep_matrix) { - int ret; SET_STRING_VALUE("packingType", "grid_simple_matrix"); - ret = grib_get_long(h, "numberOfDirections", &numberOfDirections); - if (ret == GRIB_SUCCESS) { + if (GRIB_SUCCESS == grib_get_long(h, "numberOfDirections", &numberOfDirections)) { grib_get_long(h, "numberOfDirections", &numberOfDirections); SET_LONG_VALUE("NC1", numberOfDirections); grib_get_long(h, "numberOfFrequencies", &numberOfFrequencies); From 6a6387a6bd0c162c3da733f0eaadc2d1dc73e303 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 16 Aug 2023 18:13:36 +0100 Subject: [PATCH 175/372] grib_util_set_spec: dead code removal --- src/grib_util.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/grib_util.cc b/src/grib_util.cc index a414f9f99..4f8d08ce4 100644 --- a/src/grib_util.cc +++ b/src/grib_util.cc @@ -1521,7 +1521,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, } if (editionNumber > 1 || packing_spec->editionNumber > 1) { /* ECC-353 */ - /* JPEG packing is not available in GRIB edition 1 and has to be done AFTER we set data values */ + /* JPEG or CCSDS packing is not available in GRIB edition 1 and has to be done AFTER we set data values */ if (setJpegPacking == 1) { *err = grib_set_string(h_out, "packingType", "grid_jpeg", &slen); if (*err != GRIB_SUCCESS) { From 649126b656e08294fe2b9e99e752fa18a49768f5 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 16 Aug 2023 18:16:51 +0100 Subject: [PATCH 176/372] Spelling --- tests/grib_ecc-967.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/grib_ecc-967.sh b/tests/grib_ecc-967.sh index 6ecc94e46..f332bbcc7 100755 --- a/tests/grib_ecc-967.sh +++ b/tests/grib_ecc-967.sh @@ -17,7 +17,7 @@ label="grib_ecc-967_test" temp=temp.${label}.grib -# Pick a master tables version number way to big! +# Pick a master tables version number way too big! # But one day we will actually get to it. input=$ECCODES_SAMPLES_PATH/reduced_gg_pl_160_grib2.tmpl ${tools_dir}/grib_set -s tablesVersion=253 $input $temp From ded3d5e1e333d1896b360e609eb5e37ffb399c62 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 16 Aug 2023 18:17:11 +0100 Subject: [PATCH 177/372] grib_util_set_spec: dead code removal --- src/grib_util.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/grib_util.cc b/src/grib_util.cc index 4f8d08ce4..05a96df40 100644 --- a/src/grib_util.cc +++ b/src/grib_util.cc @@ -1521,7 +1521,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, } if (editionNumber > 1 || packing_spec->editionNumber > 1) { /* ECC-353 */ - /* JPEG or CCSDS packing is not available in GRIB edition 1 and has to be done AFTER we set data values */ + /* Some packing types are not available in GRIB1 and have to be done AFTER we set data values */ if (setJpegPacking == 1) { *err = grib_set_string(h_out, "packingType", "grid_jpeg", &slen); if (*err != GRIB_SUCCESS) { @@ -1571,8 +1571,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, return h_out; cleanup: - if (h_out) - grib_handle_delete(h_out); + grib_handle_delete(h_out); return NULL; } From ab3c0ce28d1e079445702216832b83957fe221a6 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 17 Aug 2023 10:37:42 +0000 Subject: [PATCH 178/372] ECC-633: Fortran examples: looping over messages --- examples/F90/bufr_get_keys.f90 | 13 +++++-------- examples/F90/bufr_read_header.f90 | 13 +++++-------- examples/F90/grib_get_data.f90 | 8 ++++---- examples/F90/grib_get_keys.f90 | 15 ++++++--------- examples/F90/grib_read_from_file.f90 | 6 +++--- 5 files changed, 23 insertions(+), 32 deletions(-) diff --git a/examples/F90/bufr_get_keys.f90 b/examples/F90/bufr_get_keys.f90 index afa9c08b6..c22475b6e 100644 --- a/examples/F90/bufr_get_keys.f90 +++ b/examples/F90/bufr_get_keys.f90 @@ -26,11 +26,11 @@ program bufr_get_keys call codes_open_file(ifile, '../../data/bufr/syno_multi.bufr', 'r') - ! The first BUFR message is loaded from file, - ! ibufr is the BUFR id to be used in subsequent calls - call codes_bufr_new_from_file(ifile, ibufr, iret) - - do while (iret /= CODES_END_OF_FILE) + do while (.true.) + ! A BUFR message is loaded from the file, + ! ibufr is the BUFR id to be used in subsequent calls + call codes_bufr_new_from_file(ifile, ibufr, iret) + if (iret == CODES_END_OF_FILE) exit ! Get and print some keys from the BUFR header write (*, *) 'message: ', count @@ -83,9 +83,6 @@ program bufr_get_keys ! Release the BUFR message call codes_release(ibufr) - ! Load the next BUFR message - call codes_bufr_new_from_file(ifile, ibufr, iret) - count = count + 1 end do diff --git a/examples/F90/bufr_read_header.f90 b/examples/F90/bufr_read_header.f90 index 09a3c4c66..bf036a59c 100644 --- a/examples/F90/bufr_read_header.f90 +++ b/examples/F90/bufr_read_header.f90 @@ -23,11 +23,11 @@ program bufr_read_header call codes_open_file(ifile, '../../data/bufr/syno_multi.bufr', 'r') - ! The first BUFR message is loaded from file, - ! ibufr is the BUFR id to be used in subsequent calls - call codes_bufr_new_from_file(ifile, ibufr, iret) - - do while (iret /= CODES_END_OF_FILE) + do while (.true.) + ! A BUFR message is loaded from file, + ! ibufr is the BUFR id to be used in subsequent calls + call codes_bufr_new_from_file(ifile, ibufr, iret) + if (iret == CODES_END_OF_FILE) exit ! Get and print some keys from the BUFR header write (*, *) 'message: ', count @@ -59,9 +59,6 @@ program bufr_read_header ! Release the BUFR message call codes_release(ibufr) - ! Load the next BUFR message - call codes_bufr_new_from_file(ifile, ibufr, iret) - count = count + 1 end do diff --git a/examples/F90/grib_get_data.f90 b/examples/F90/grib_get_data.f90 index 7ca4bde76..20a2530b4 100644 --- a/examples/F90/grib_get_data.f90 +++ b/examples/F90/grib_get_data.f90 @@ -26,10 +26,11 @@ program get_data call codes_open_file(ifile, '../../data/reduced_latlon_surface.grib1', 'r') - ! loop on all the messages in a file. - call codes_grib_new_from_file(ifile, igrib, iret) + ! loop on all the messages in the file + do while (.true.) + call codes_grib_new_from_file(ifile, igrib, iret) + if (iret == CODES_END_OF_FILE) exit - do while (iret /= CODES_END_OF_FILE) count1 = count1 + 1 print *, "===== Message #", count1 call codes_get(igrib, 'numberOfPoints', numberOfPoints) @@ -69,7 +70,6 @@ program get_data deallocate (values) call codes_release(igrib) - call codes_grib_new_from_file(ifile, igrib, iret) end do diff --git a/examples/F90/grib_get_keys.f90 b/examples/F90/grib_get_keys.f90 index 1f3ed2f2a..b7db43204 100644 --- a/examples/F90/grib_get_keys.f90 +++ b/examples/F90/grib_get_keys.f90 @@ -31,13 +31,12 @@ program grib_get_keys call codes_open_file(ifile, '../../data/reduced_latlon_surface.grib1', open_mode) - ! loop on all the messages in a file. - - ! a new GRIB message is loaded from file - ! igrib is the grib id to be used in subsequent calls - call codes_grib_new_from_file(ifile, igrib, iret) - - LOOP: DO WHILE (iret /= CODES_END_OF_FILE) + ! loop on all the messages in a file + LOOP: DO WHILE (.true.) + ! a new GRIB message is loaded from file. + ! igrib is the grib id to be used in subsequent calls + call codes_grib_new_from_file(ifile, igrib, iret) + if (iret == CODES_END_OF_FILE) exit LOOP ! check if the value of the key is MISSING is_missing = 0; @@ -100,8 +99,6 @@ program grib_get_keys call codes_release(igrib) - call codes_grib_new_from_file(ifile, igrib, iret) - end do LOOP call codes_close_file(ifile) diff --git a/examples/F90/grib_read_from_file.f90 b/examples/F90/grib_read_from_file.f90 index 7d38c319d..eaa2c1c6e 100644 --- a/examples/F90/grib_read_from_file.f90 +++ b/examples/F90/grib_read_from_file.f90 @@ -42,16 +42,16 @@ contains call codes_open_file(ifile, input_grib_file, 'r') len1 = size - call codes_read_from_file(ifile, buffer, len1, iret) - do while (iret == CODES_SUCCESS) + do while (.true.) + call codes_read_from_file(ifile, buffer, len1, iret) + if (iret /= CODES_SUCCESS) exit count1 = count1 + 1 if (len1 /= message_lengths(count1)) then write (*, '(a,i3,a,i8,a,i8)') 'Error: Message #', count1, ' length=', len1, '. Expected=', message_lengths(count1) stop end if len1 = size - call codes_read_from_file(ifile, buffer, len1, iret) end do if (iret /= CODES_END_OF_FILE) then From 41d9d5c7f1d4fdc0a29116cb8136b9d90445b724 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 17 Aug 2023 12:50:33 +0000 Subject: [PATCH 179/372] ECC-633: Fortran examples: looping over messages --- examples/F90/bufr_attributes.f90 | 14 +++++-------- examples/F90/bufr_expanded.f90 | 16 ++++----------- examples/F90/bufr_read_scatterometer.f90 | 14 ++++--------- examples/F90/bufr_read_synop.f90 | 16 ++++----------- examples/F90/bufr_set_keys.f90 | 25 +++++++++--------------- examples/F90/get_product_kind.f90 | 13 +++--------- examples/F90/grib_ecc-1316.f90 | 7 ++++--- examples/F90/grib_keys_iterator.f90 | 15 +++++--------- examples/F90/grib_multi.f90 | 19 ++++++++---------- examples/F90/grib_samples.f90 | 3 +-- examples/F90/iterator_fortran.f90 | 9 ++++----- 11 files changed, 51 insertions(+), 100 deletions(-) diff --git a/examples/F90/bufr_attributes.f90 b/examples/F90/bufr_attributes.f90 index 13338f5fe..56254d7af 100644 --- a/examples/F90/bufr_attributes.f90 +++ b/examples/F90/bufr_attributes.f90 @@ -7,7 +7,6 @@ ! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. ! ! -! ! Description: How to read attributes of keys in BUFR messages. ! ! @@ -24,11 +23,11 @@ program bufr_attributes call codes_open_file(ifile, '../../data/bufr/syno_multi.bufr', 'r') - ! the first BUFR message is loaded from file - ! ibufr is the BUFR id to be used in subsequent calls - call codes_bufr_new_from_file(ifile, ibufr, iret) - - do while (iret /= CODES_END_OF_FILE) + do while (.true.) + ! A BUFR message is loaded from the file, + ! ibufr is the BUFR id to be used in subsequent calls + call codes_bufr_new_from_file(ifile, ibufr, iret) + if (iret == CODES_END_OF_FILE) exit ! Get and print some keys from the BUFR header write (*, *) 'message: ', count @@ -98,9 +97,6 @@ program bufr_attributes ! Release the BUFR message call codes_release(ibufr) - ! Load the next BUFR message - call codes_bufr_new_from_file(ifile, ibufr, iret) - count = count + 1 end do diff --git a/examples/F90/bufr_expanded.f90 b/examples/F90/bufr_expanded.f90 index d646eed5a..854f086bf 100644 --- a/examples/F90/bufr_expanded.f90 +++ b/examples/F90/bufr_expanded.f90 @@ -6,8 +6,6 @@ ! 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. ! -! -! ! Description: How to read all the expanded data values from BUFR messages. ! ! @@ -20,15 +18,13 @@ program bufr_expanded integer :: i integer :: count = 0 integer(kind=4) :: numberOfValues - real(kind=8), dimension(:), allocatable :: values + real(kind=8), dimension(:), allocatable :: values call codes_open_file(ifile, '../../data/bufr/syno_1.bufr', 'r') - ! The first bufr message is loaded from file, - ! ibufr is the bufr id to be used in subsequent calls - call codes_bufr_new_from_file(ifile, ibufr, iret) - - do while (iret /= CODES_END_OF_FILE) + do while (.true.) + call codes_bufr_new_from_file(ifile, ibufr, iret) + if (iret == CODES_END_OF_FILE) exit write (*, *) 'message: ', count @@ -47,9 +43,6 @@ program bufr_expanded ! Release the bufr message call codes_release(ibufr) - ! Load the next bufr message - call codes_bufr_new_from_file(ifile, ibufr, iret) - ! Free array deallocate (values) @@ -57,7 +50,6 @@ program bufr_expanded end do - ! Close file call codes_close_file(ifile) end program bufr_expanded diff --git a/examples/F90/bufr_read_scatterometer.f90 b/examples/F90/bufr_read_scatterometer.f90 index aec7555cf..8e05d35d0 100644 --- a/examples/F90/bufr_read_scatterometer.f90 +++ b/examples/F90/bufr_read_scatterometer.f90 @@ -25,11 +25,9 @@ program bufr_read_scatterometer call codes_open_file(ifile, '../../data/bufr/asca_139.bufr', 'r') - ! The first BUFR message is loaded from file, - ! ibufr is the bufr id to be used in subsequent calls - call codes_bufr_new_from_file(ifile, ibufr, iret) - - do while (iret /= CODES_END_OF_FILE) + do while (.true.) + call codes_bufr_new_from_file(ifile, ibufr, iret) + if (iret == CODES_END_OF_FILE) exit write (*, '(A,I3)') 'message: ', count @@ -80,17 +78,13 @@ program bufr_read_scatterometer deallocate (lonVal) deallocate (bscatterVal) - ! Release the bufr message + ! Release the BUFR message call codes_release(ibufr) - ! Load the next bufr message - call codes_bufr_new_from_file(ifile, ibufr, iret) - count = count + 1 end do - ! Close file call codes_close_file(ifile) end program bufr_read_scatterometer diff --git a/examples/F90/bufr_read_synop.f90 b/examples/F90/bufr_read_synop.f90 index d2e288ad7..fe59f8759 100644 --- a/examples/F90/bufr_read_synop.f90 +++ b/examples/F90/bufr_read_synop.f90 @@ -7,14 +7,11 @@ ! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. ! ! -! ! Description: How to read SYNOP BUFR messages. - +! ! Please note that SYNOP reports can be encoded in various ways in BUFR. Therefore the code ! below might not work directly for other types of SYNOP messages than the one used in the ! example. It is advised to use bufr_dump first to understand the structure of these messages. - -! ! program bufr_read_synop use eccodes @@ -29,11 +26,9 @@ program bufr_read_synop call codes_open_file(ifile, '../../data/bufr/syno_multi.bufr', 'r') - ! The first bufr message is loaded from file, - ! ibufr is the bufr id to be used in subsequent calls - call codes_bufr_new_from_file(ifile, ibufr, iret) - - do while (iret /= CODES_END_OF_FILE) + do while (.true.) + call codes_bufr_new_from_file(ifile, ibufr, iret) + if (iret == CODES_END_OF_FILE) exit write (*, *) 'message: ', count @@ -105,9 +100,6 @@ program bufr_read_synop ! Release the bufr message call codes_release(ibufr) - ! Load the next bufr message - call codes_bufr_new_from_file(ifile, ibufr, iret) - count = count + 1 end do diff --git a/examples/F90/bufr_set_keys.f90 b/examples/F90/bufr_set_keys.f90 index 7feaca9b0..c282ee229 100644 --- a/examples/F90/bufr_set_keys.f90 +++ b/examples/F90/bufr_set_keys.f90 @@ -9,15 +9,14 @@ ! ! Description: How to set different type of keys in BUFR messages. ! -! program bufr_set_keys use eccodes implicit none - integer :: iret - integer :: infile, outfile - integer :: ibufr - integer :: count = 0 - integer(kind=4) :: centre, centreNew + integer :: iret + integer :: infile, outfile + integer :: ibufr + integer :: count = 0 + integer(kind=4) :: centre, centreNew ! Open input file call codes_open_file(infile, '../../data/bufr/syno_multi.bufr', 'r') @@ -25,16 +24,14 @@ program bufr_set_keys ! Open output file call codes_open_file(outfile, 'bufr_set_keys_test_f.tmp.bufr', 'w') - ! The first bufr message is loaded from file, - ! ibufr is the bufr id to be used in subsequent calls - call codes_bufr_new_from_file(infile, ibufr, iret) - - do while (iret /= CODES_END_OF_FILE) + do while (.true.) + call codes_bufr_new_from_file(infile, ibufr, iret) + if (iret == CODES_END_OF_FILE) exit write (*, *) 'message: ', count ! This is the place where you may wish to modify the message - ! E.g. we change the centre + ! E.g. change the centre ! Set centre centre = 222 @@ -52,11 +49,7 @@ program bufr_set_keys ! Release the handle call codes_release(ibufr) - ! Next message from source - call codes_bufr_new_from_file(infile, ibufr, iret) - count = count + 1 - end do call codes_close_file(infile) diff --git a/examples/F90/get_product_kind.f90 b/examples/F90/get_product_kind.f90 index 0df4bdebe..194244032 100644 --- a/examples/F90/get_product_kind.f90 +++ b/examples/F90/get_product_kind.f90 @@ -7,7 +7,6 @@ ! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. ! ! -! ! Description: how to process a file containing a mix of messages ! and print the kind of product (e.g. GRIB, BUFR etc) ! @@ -37,11 +36,9 @@ program get_product_kind write (*, *) ' ECCODES_SETTINGS_PNG: ', ECCODES_SETTINGS_PNG write (*, *) ' ECCODES_SETTINGS_AEC: ', ECCODES_SETTINGS_AEC -! the first message is loaded from file -! ihandle is the message id to be used in subsequent calls - call codes_new_from_file(ifile, ihandle, CODES_PRODUCT_ANY, iret) - - do while (iret /= CODES_END_OF_FILE) + do while (.true.) + call codes_new_from_file(ifile, ihandle, CODES_PRODUCT_ANY, iret) + if (iret == CODES_END_OF_FILE) exit write (*, *) 'message: ', count @@ -52,11 +49,7 @@ program get_product_kind ! release the message call codes_release(ihandle) - ! load the next message - call codes_new_from_file(ifile, ihandle, CODES_PRODUCT_ANY, iret) - count = count + 1 - end do ! close file diff --git a/examples/F90/grib_ecc-1316.f90 b/examples/F90/grib_ecc-1316.f90 index 7efabf280..b6f521ce5 100644 --- a/examples/F90/grib_ecc-1316.f90 +++ b/examples/F90/grib_ecc-1316.f90 @@ -24,8 +24,10 @@ program grib_ecc_1316 call codes_index_select(idx, 'number', 0) call codes_index_select(idx, 'parameterName', 'Soil moisture') - call codes_new_from_index(idx, igrib, iret) - do while (iret /= CODES_END_OF_INDEX) + do while (.true.) + call codes_new_from_index(idx, igrib, iret) + if (iret == CODES_END_OF_INDEX) exit + count1 = count1 + 1 call codes_get(igrib, 'parameterName', parameterName) call codes_get(igrib, 'number', onumber) @@ -36,7 +38,6 @@ program grib_ecc_1316 ' level=', olevel, & ' step=', ostep call codes_release(igrib) - call codes_new_from_index(idx, igrib, iret) end do call codes_release(igrib) diff --git a/examples/F90/grib_keys_iterator.f90 b/examples/F90/grib_keys_iterator.f90 index ca00157b4..dcafe49c3 100644 --- a/examples/F90/grib_keys_iterator.f90 +++ b/examples/F90/grib_keys_iterator.f90 @@ -11,8 +11,6 @@ ! How to use keys_iterator to get all the available ! keys in a GRIB message. ! -! -! program keys_iterator use eccodes implicit none @@ -26,35 +24,32 @@ program keys_iterator call codes_open_file(ifile, & '../../data/regular_latlon_surface.grib1', 'r') - ! Loop on all the messages in a file. - - call codes_grib_new_from_file(ifile, igrib, iret) + ! Loop on all the messages in a file grib_count = 0 - do while (iret /= CODES_END_OF_FILE) + do while (.true.) + call codes_grib_new_from_file(ifile, igrib, iret) + if (iret == CODES_END_OF_FILE) exit grib_count = grib_count + 1 write (*, *) '-- GRIB N. ', grib_count, ' --' - ! valid name_spaces are ls and mars + ! Choose a namespace. E.g. "ls", "time", "parameter", "geography", "statistics" name_space = 'ls' call codes_keys_iterator_new(igrib, kiter, name_space) do call codes_keys_iterator_next(kiter, iret) - if (iret .ne. CODES_SUCCESS) exit !terminate the loop call codes_keys_iterator_get_name(kiter, key) call codes_get(igrib, trim(key), value) all1 = trim(key)//' = '//trim(value) write (*, *) trim(all1) - end do call codes_keys_iterator_delete(kiter) call codes_release(igrib) - call codes_grib_new_from_file(ifile, igrib, iret) end do call codes_close_file(ifile) diff --git a/examples/F90/grib_multi.f90 b/examples/F90/grib_multi.f90 index d486a8eb7..96b168391 100644 --- a/examples/F90/grib_multi.f90 +++ b/examples/F90/grib_multi.f90 @@ -10,15 +10,15 @@ ! Description: How to decode GRIB2 multi-field messages. ! Try to turn multi support on and off to ! see the difference. Default is OFF. -! For all the tools default is multi support ON. +! For all the tools (e.g., grib_ls etc) multi support is ON. ! program multi use eccodes implicit none - integer :: iret - integer(kind=4) :: step - integer :: ifile, igrib + integer :: iret + integer(kind=4) :: step + integer :: ifile, igrib call codes_open_file(ifile, '../../data/multi_created.grib2', 'r') @@ -28,17 +28,14 @@ program multi ! turn off support for multi-field messages */ !call codes_grib_multi_support_off() - call codes_grib_new_from_file(ifile, igrib, iret) - ! Loop on all the messages in a file. - + ! Loop on all the messages in a file write (*, *) 'step' - do while (iret /= CODES_END_OF_FILE) + do while (.true.) + call codes_grib_new_from_file(ifile, igrib, iret) + if (iret == CODES_END_OF_FILE) exit call codes_get(igrib, 'step', step) write (*, '(i3)') step - - call codes_grib_new_from_file(ifile, igrib, iret) - end do call codes_close_file(ifile) diff --git a/examples/F90/grib_samples.f90 b/examples/F90/grib_samples.f90 index 0974b8f5c..6a818a080 100644 --- a/examples/F90/grib_samples.f90 +++ b/examples/F90/grib_samples.f90 @@ -9,7 +9,6 @@ ! ! Description: How to create a new GRIB message from a sample. ! -! program sample use eccodes implicit none @@ -29,7 +28,7 @@ program sample indicatorOfParameter = 61 decimalPrecision = 2 - ! a new GRIB message is loaded from an existing sample. + ! A new GRIB message is loaded from an existing sample. ! Samples are searched in a default sample path (use codes_info ! to see where that is). The default sample path can be changed by ! setting the environment variable ECCODES_SAMPLES_PATH diff --git a/examples/F90/iterator_fortran.f90 b/examples/F90/iterator_fortran.f90 index 10aafaba6..0dcc10b5d 100644 --- a/examples/F90/iterator_fortran.f90 +++ b/examples/F90/iterator_fortran.f90 @@ -26,10 +26,11 @@ program iterator call codes_open_file(ifile, & '../../data/regular_latlon_surface_constant.grib1', 'R') - ! Loop on all the messages in a file. - call codes_grib_new_from_file(ifile, igrib, iret) + ! Loop on all the messages in a file + LOOP: DO WHILE (.true.) + call codes_grib_new_from_file(ifile, igrib, iret) + if (iret == CODES_END_OF_FILE) exit LOOP - LOOP: DO WHILE (iret /= CODES_END_OF_FILE) ! get as a real8 call codes_get(igrib, & 'missingValue', missingValue) @@ -61,8 +62,6 @@ program iterator call grib_iterator_delete(iter) call codes_release(igrib) - call codes_grib_new_from_file(ifile, igrib, iret) - end do LOOP call codes_close_file(ifile) From 7a8b435d99dcbfd577039246d5259c614bcd0177 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 18 Aug 2023 16:42:11 +0000 Subject: [PATCH 180/372] ECC-1669 and ECC-1668 --- definitions/grib2/cfVarName.def | 21 +++++++++++++++++---- definitions/grib2/name.def | 21 +++++++++++++++++---- definitions/grib2/paramId.def | 17 +++++++++++++++-- definitions/grib2/shortName.def | 21 +++++++++++++++++---- definitions/grib2/units.def | 17 +++++++++++++++-- 5 files changed, 81 insertions(+), 16 deletions(-) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index a596af2a0..d3a6d2cbe 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -4910,8 +4910,8 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } -#Sea ice temperature -'sitemp' = { +#Vertically averaged sea ice temperature +'vasit' = { discipline = 10 ; parameterCategory = 2 ; parameterNumber = 8 ; @@ -5066,6 +5066,12 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#Sea ice temperature +'sit' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } #Sea surface practical salinity 'sos' = { discipline = 10 ; @@ -5973,8 +5979,8 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } -#Time-mean sea ice temperature -'avg_sitemp' = { +#Time-mean vertically averaged sea ice temperature +'avg_vasit' = { discipline = 10 ; parameterCategory = 2 ; parameterNumber = 8 ; @@ -6142,6 +6148,13 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Time-mean sea ice temperature +'avg_sit' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean sea surface practical salinity 'avg_sos' = { discipline = 10 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index bf69dd7b6..21acf6c82 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -4910,8 +4910,8 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } -#Sea ice temperature -'Sea ice temperature' = { +#Vertically averaged sea ice temperature +'Vertically averaged sea ice temperature' = { discipline = 10 ; parameterCategory = 2 ; parameterNumber = 8 ; @@ -5066,6 +5066,12 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#Sea ice temperature +'Sea ice temperature' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } #Sea surface practical salinity 'Sea surface practical salinity' = { discipline = 10 ; @@ -5973,8 +5979,8 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } -#Time-mean sea ice temperature -'Time-mean sea ice temperature' = { +#Time-mean vertically averaged sea ice temperature +'Time-mean vertically averaged sea ice temperature' = { discipline = 10 ; parameterCategory = 2 ; parameterNumber = 8 ; @@ -6142,6 +6148,13 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Time-mean sea ice temperature +'Time-mean sea ice temperature' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean sea surface practical salinity 'Time-mean sea surface practical salinity' = { discipline = 10 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index edc5ce043..72ea5bc62 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -4910,7 +4910,7 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } -#Sea ice temperature +#Vertically averaged sea ice temperature '262010' = { discipline = 10 ; parameterCategory = 2 ; @@ -5066,6 +5066,12 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#Sea ice temperature +'262024' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } #Sea surface practical salinity '262100' = { discipline = 10 ; @@ -5973,7 +5979,7 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } -#Time-mean sea ice temperature +#Time-mean vertically averaged sea ice temperature '263010' = { discipline = 10 ; parameterCategory = 2 ; @@ -6142,6 +6148,13 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Time-mean sea ice temperature +'263024' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean sea surface practical salinity '263100' = { discipline = 10 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index cacb09809..6f4db2dbb 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -4910,8 +4910,8 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } -#Sea ice temperature -'sitemp' = { +#Vertically averaged sea ice temperature +'vasit' = { discipline = 10 ; parameterCategory = 2 ; parameterNumber = 8 ; @@ -5066,6 +5066,12 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#Sea ice temperature +'sit' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } #Sea surface practical salinity 'sos' = { discipline = 10 ; @@ -5973,8 +5979,8 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } -#Time-mean sea ice temperature -'avg_sitemp' = { +#Time-mean vertically averaged sea ice temperature +'avg_vasit' = { discipline = 10 ; parameterCategory = 2 ; parameterNumber = 8 ; @@ -6142,6 +6148,13 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Time-mean sea ice temperature +'avg_sit' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean sea surface practical salinity 'avg_sos' = { discipline = 10 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 3ed4f8a6a..4bed837f2 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -4910,7 +4910,7 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } -#Sea ice temperature +#Vertically averaged sea ice temperature 'K' = { discipline = 10 ; parameterCategory = 2 ; @@ -5066,6 +5066,12 @@ scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; } +#Sea ice temperature +'K' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } #Sea surface practical salinity 'g kg**-1' = { discipline = 10 ; @@ -5973,7 +5979,7 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } -#Time-mean sea ice temperature +#Time-mean vertically averaged sea ice temperature 'K' = { discipline = 10 ; parameterCategory = 2 ; @@ -6142,6 +6148,13 @@ scaleFactorOfSecondFixedSurface = missing() ; typeOfStatisticalProcessing = 0 ; } +#Time-mean sea ice temperature +'K' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 0 ; + } #Time-mean sea surface practical salinity 'g kg**-1' = { discipline = 10 ; From addb063c413e1356238a7d006a189f5432a64bf1 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 19 Aug 2023 13:33:17 +0100 Subject: [PATCH 181/372] Dead code removal: int16 --- src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 1 - .../grib_accessor_class_int16.cc | 0 src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - src/grib_accessor_classes_hash.cc | 236 +++++++++--------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 8 files changed, 116 insertions(+), 127 deletions(-) rename src/{ => deprecated}/grib_accessor_class_int16.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 26626b355..83b73f01e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -359,7 +359,6 @@ list( APPEND eccodes_src_files grib_yacc.h md5.h md5.cc - grib_accessor_class_int16.cc grib_accessor_class_int16_little_endian.cc grib_accessor_class_int32.cc grib_accessor_class_int32_little_endian.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index 97f43b727..c51bb989d 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -90,7 +90,6 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |---grib_accessor_class_hash_array |---grib_accessor_class_headers_only |---grib_accessor_class_ifs_param - |---grib_accessor_class_int16 |---grib_accessor_class_int16_little_endian |---grib_accessor_class_int32 |---grib_accessor_class_int32_little_endian diff --git a/src/grib_accessor_class_int16.cc b/src/deprecated/grib_accessor_class_int16.cc similarity index 100% rename from src/grib_accessor_class_int16.cc rename to src/deprecated/grib_accessor_class_int16.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 74a3838d2..5ca069f99 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -423,8 +423,6 @@ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd); /* grib_accessor_class_ifs_param.cc*/ -/* grib_accessor_class_int16.cc*/ - /* grib_accessor_class_int16_little_endian.cc*/ /* grib_accessor_class_int32.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index 52bbfc49c..b1442d879 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -113,7 +113,6 @@ extern grib_accessor_class* grib_accessor_class_headers_only; extern grib_accessor_class* grib_accessor_class_ibmfloat; extern grib_accessor_class* grib_accessor_class_ieeefloat; extern grib_accessor_class* grib_accessor_class_ifs_param; -extern grib_accessor_class* grib_accessor_class_int16; extern grib_accessor_class* grib_accessor_class_int16_little_endian; extern grib_accessor_class* grib_accessor_class_int32; extern grib_accessor_class* grib_accessor_class_int32_little_endian; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index 66c7a9091..d975c0ab4 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,7 +37,7 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 211 +#define TOTAL_KEYWORDS 210 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 @@ -60,12 +60,12 @@ static unsigned int grib_accessor_classes_get_id (const char *str, size_t len) 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 0, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 2, 144, - 14, 10, 20, 621, 7, 621, 0, 621, 621, 621, + 14, 10, 7, 621, 3, 621, 0, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 0, 621, 0, 82, 111, - 0, 0, 102, 29, 186, 1, 0, 2, 76, 193, + 0, 0, 102, 29, 186, 1, 3, 2, 76, 193, 13, 57, 20, 621, 128, 1, 42, 62, 201, 3, 18, 21, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, @@ -117,48 +117,48 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, -#line 184 "accessor_class_list.gperf" +#line 183 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, -#line 181 "accessor_class_list.gperf" +#line 180 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, {""}, {""}, {""}, {""}, {""}, -#line 182 "accessor_class_list.gperf" +#line 181 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, {""}, #line 67 "accessor_class_list.gperf" {"data_raw_packing", &grib_accessor_class_data_raw_packing}, {""}, -#line 129 "accessor_class_list.gperf" +#line 128 "accessor_class_list.gperf" {"int8", &grib_accessor_class_int8}, {""}, #line 73 "accessor_class_list.gperf" {"data_simple_packing", &grib_accessor_class_data_simple_packing}, #line 69 "accessor_class_list.gperf" {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 175 "accessor_class_list.gperf" +#line 174 "accessor_class_list.gperf" {"section", &grib_accessor_class_section}, -#line 161 "accessor_class_list.gperf" +#line 160 "accessor_class_list.gperf" {"pad", &grib_accessor_class_pad}, -#line 187 "accessor_class_list.gperf" +#line 186 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, #line 75 "accessor_class_list.gperf" {"dictionary", &grib_accessor_class_dictionary}, -#line 123 "accessor_class_list.gperf" - {"int16", &grib_accessor_class_int16}, +#line 126 "accessor_class_list.gperf" + {"int64", &grib_accessor_class_int64}, #line 76 "accessor_class_list.gperf" {"dirty", &grib_accessor_class_dirty}, {""}, #line 66 "accessor_class_list.gperf" {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 177 "accessor_class_list.gperf" +#line 176 "accessor_class_list.gperf" {"section_padding", &grib_accessor_class_section_padding}, -#line 178 "accessor_class_list.gperf" +#line 177 "accessor_class_list.gperf" {"section_pointer", &grib_accessor_class_section_pointer}, #line 113 "accessor_class_list.gperf" {"gen", &grib_accessor_class_gen}, -#line 125 "accessor_class_list.gperf" +#line 124 "accessor_class_list.gperf" {"int32", &grib_accessor_class_int32}, {""}, #line 58 "accessor_class_list.gperf" @@ -168,12 +168,10 @@ static const struct accessor_class_hash classes[] = {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, #line 62 "accessor_class_list.gperf" {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, -#line 127 "accessor_class_list.gperf" - {"int64", &grib_accessor_class_int64}, - {""}, -#line 174 "accessor_class_list.gperf" + {""}, {""}, +#line 173 "accessor_class_list.gperf" {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 176 "accessor_class_list.gperf" +#line 175 "accessor_class_list.gperf" {"section_length", &grib_accessor_class_section_length}, #line 65 "accessor_class_list.gperf" {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, @@ -183,7 +181,7 @@ static const struct accessor_class_hash classes[] = {"gds_is_present", &grib_accessor_class_gds_is_present}, #line 44 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, -#line 196 "accessor_class_list.gperf" +#line 195 "accessor_class_list.gperf" {"time", &grib_accessor_class_time}, #line 114 "accessor_class_list.gperf" {"getenv", &grib_accessor_class_getenv}, @@ -201,41 +199,41 @@ static const struct accessor_class_hash classes[] = {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, #line 60 "accessor_class_list.gperf" {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, -#line 162 "accessor_class_list.gperf" +#line 161 "accessor_class_list.gperf" {"padding", &grib_accessor_class_padding}, {""}, {""}, {""}, #line 108 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, -#line 149 "accessor_class_list.gperf" +#line 148 "accessor_class_list.gperf" {"nearest", &grib_accessor_class_nearest}, {""}, {""}, {""}, -#line 194 "accessor_class_list.gperf" +#line 193 "accessor_class_list.gperf" {"sum", &grib_accessor_class_sum}, {""}, -#line 209 "accessor_class_list.gperf" +#line 208 "accessor_class_list.gperf" {"uint8", &grib_accessor_class_uint8}, #line 99 "accessor_class_list.gperf" {"g2_eps", &grib_accessor_class_g2_eps}, -#line 193 "accessor_class_list.gperf" +#line 192 "accessor_class_list.gperf" {"step_in_units", &grib_accessor_class_step_in_units}, {""}, -#line 132 "accessor_class_list.gperf" - {"julian_day", &grib_accessor_class_julian_day}, -#line 131 "accessor_class_list.gperf" - {"julian_date", &grib_accessor_class_julian_date}, +#line 206 "accessor_class_list.gperf" + {"uint64", &grib_accessor_class_uint64}, + {""}, #line 64 "accessor_class_list.gperf" {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, - {""}, -#line 207 "accessor_class_list.gperf" - {"uint64", &grib_accessor_class_uint64}, +#line 131 "accessor_class_list.gperf" + {"julian_day", &grib_accessor_class_julian_day}, +#line 130 "accessor_class_list.gperf" + {"julian_date", &grib_accessor_class_julian_date}, #line 48 "accessor_class_list.gperf" {"data_complex_packing", &grib_accessor_class_data_complex_packing}, #line 49 "accessor_class_list.gperf" {"data_dummy_field", &grib_accessor_class_data_dummy_field}, -#line 205 "accessor_class_list.gperf" +#line 204 "accessor_class_list.gperf" {"uint32", &grib_accessor_class_uint32}, {""}, {""}, -#line 163 "accessor_class_list.gperf" +#line 162 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, {""}, #line 109 "accessor_class_list.gperf" @@ -259,66 +257,65 @@ static const struct accessor_class_hash classes[] = {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, #line 59 "accessor_class_list.gperf" {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, -#line 190 "accessor_class_list.gperf" +#line 189 "accessor_class_list.gperf" {"statistics", &grib_accessor_class_statistics}, #line 16 "accessor_class_list.gperf" {"bits_per_value", &grib_accessor_class_bits_per_value}, {""}, -#line 150 "accessor_class_list.gperf" +#line 149 "accessor_class_list.gperf" {"non_alpha", &grib_accessor_class_non_alpha}, -#line 183 "accessor_class_list.gperf" +#line 182 "accessor_class_list.gperf" {"simple_packing_error", &grib_accessor_class_simple_packing_error}, {""}, {""}, {""}, {""}, -#line 191 "accessor_class_list.gperf" +#line 190 "accessor_class_list.gperf" {"statistics_spectral", &grib_accessor_class_statistics_spectral}, #line 112 "accessor_class_list.gperf" {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, {""}, -#line 130 "accessor_class_list.gperf" +#line 129 "accessor_class_list.gperf" {"iterator", &grib_accessor_class_iterator}, #line 29 "accessor_class_list.gperf" {"bytes", &grib_accessor_class_bytes}, #line 97 "accessor_class_list.gperf" {"g2_aerosol", &grib_accessor_class_g2_aerosol}, -#line 152 "accessor_class_list.gperf" +#line 151 "accessor_class_list.gperf" {"number_of_points", &grib_accessor_class_number_of_points}, -#line 212 "accessor_class_list.gperf" +#line 211 "accessor_class_list.gperf" {"unsigned", &grib_accessor_class_unsigned}, {""}, {""}, {""}, {""}, -#line 172 "accessor_class_list.gperf" +#line 171 "accessor_class_list.gperf" {"scale", &grib_accessor_class_scale}, -#line 213 "accessor_class_list.gperf" +#line 212 "accessor_class_list.gperf" {"unsigned_bits", &grib_accessor_class_unsigned_bits}, {""}, -#line 153 "accessor_class_list.gperf" +#line 152 "accessor_class_list.gperf" {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, #line 115 "accessor_class_list.gperf" {"global_gaussian", &grib_accessor_class_global_gaussian}, -#line 198 "accessor_class_list.gperf" +#line 197 "accessor_class_list.gperf" {"to_integer", &grib_accessor_class_to_integer}, {""}, -#line 192 "accessor_class_list.gperf" +#line 191 "accessor_class_list.gperf" {"step_human_readable", &grib_accessor_class_step_human_readable}, #line 79 "accessor_class_list.gperf" {"element", &grib_accessor_class_element}, -#line 180 "accessor_class_list.gperf" +#line 179 "accessor_class_list.gperf" {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, -#line 135 "accessor_class_list.gperf" +#line 134 "accessor_class_list.gperf" {"latitudes", &grib_accessor_class_latitudes}, - {""}, +#line 207 "accessor_class_list.gperf" + {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, #line 47 "accessor_class_list.gperf" {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, -#line 210 "accessor_class_list.gperf" +#line 209 "accessor_class_list.gperf" {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, -#line 168 "accessor_class_list.gperf" +#line 167 "accessor_class_list.gperf" {"raw", &grib_accessor_class_raw}, -#line 208 "accessor_class_list.gperf" - {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, - {""}, {""}, -#line 206 "accessor_class_list.gperf" + {""}, {""}, {""}, +#line 205 "accessor_class_list.gperf" {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, {""}, -#line 140 "accessor_class_list.gperf" +#line 139 "accessor_class_list.gperf" {"long", &grib_accessor_class_long}, {""}, #line 78 "accessor_class_list.gperf" @@ -326,22 +323,22 @@ static const struct accessor_class_hash classes[] = {""}, {""}, #line 100 "accessor_class_list.gperf" {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, -#line 189 "accessor_class_list.gperf" +#line 188 "accessor_class_list.gperf" {"sprintf", &grib_accessor_class_sprintf}, {""}, {""}, {""}, -#line 169 "accessor_class_list.gperf" +#line 168 "accessor_class_list.gperf" {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, {""}, #line 77 "accessor_class_list.gperf" {"divdouble", &grib_accessor_class_divdouble}, #line 106 "accessor_class_list.gperf" {"g2latlon", &grib_accessor_class_g2latlon}, -#line 199 "accessor_class_list.gperf" +#line 198 "accessor_class_list.gperf" {"to_string", &grib_accessor_class_to_string}, -#line 179 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" {"select_step_template", &grib_accessor_class_select_step_template}, {""}, {""}, {""}, {""}, -#line 134 "accessor_class_list.gperf" +#line 133 "accessor_class_list.gperf" {"label", &grib_accessor_class_label}, {""}, #line 19 "accessor_class_list.gperf" @@ -361,72 +358,72 @@ static const struct accessor_class_hash classes[] = {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, #line 121 "accessor_class_list.gperf" {"ieeefloat", &grib_accessor_class_ieeefloat}, -#line 158 "accessor_class_list.gperf" +#line 157 "accessor_class_list.gperf" {"offset_file", &grib_accessor_class_offset_file}, #line 28 "accessor_class_list.gperf" {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, -#line 165 "accessor_class_list.gperf" +#line 164 "accessor_class_list.gperf" {"padtomultiple", &grib_accessor_class_padtomultiple}, {""}, -#line 202 "accessor_class_list.gperf" +#line 201 "accessor_class_list.gperf" {"trim", &grib_accessor_class_trim}, {""}, #line 110 "accessor_class_list.gperf" {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, {""}, {""}, {""}, -#line 200 "accessor_class_list.gperf" +#line 199 "accessor_class_list.gperf" {"transient", &grib_accessor_class_transient}, {""}, #line 116 "accessor_class_list.gperf" {"group", &grib_accessor_class_group}, {""}, -#line 166 "accessor_class_list.gperf" +#line 165 "accessor_class_list.gperf" {"position", &grib_accessor_class_position}, #line 57 "accessor_class_list.gperf" {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, #line 50 "accessor_class_list.gperf" {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 201 "accessor_class_list.gperf" +#line 200 "accessor_class_list.gperf" {"transient_darray", &grib_accessor_class_transient_darray}, - {""}, {""}, -#line 171 "accessor_class_list.gperf" +#line 123 "accessor_class_list.gperf" + {"int16_little_endian", &grib_accessor_class_int16_little_endian}, + {""}, +#line 170 "accessor_class_list.gperf" {"round", &grib_accessor_class_round}, #line 84 "accessor_class_list.gperf" {"g1_message_length", &grib_accessor_class_g1_message_length}, -#line 124 "accessor_class_list.gperf" - {"int16_little_endian", &grib_accessor_class_int16_little_endian}, -#line 219 "accessor_class_list.gperf" +#line 127 "accessor_class_list.gperf" + {"int64_little_endian", &grib_accessor_class_int64_little_endian}, +#line 218 "accessor_class_list.gperf" {"when", &grib_accessor_class_when}, #line 18 "accessor_class_list.gperf" {"budgdate", &grib_accessor_class_budgdate}, {""}, -#line 146 "accessor_class_list.gperf" +#line 145 "accessor_class_list.gperf" {"md5", &grib_accessor_class_md5}, {""}, {""}, -#line 126 "accessor_class_list.gperf" +#line 125 "accessor_class_list.gperf" {"int32_little_endian", &grib_accessor_class_int32_little_endian}, -#line 147 "accessor_class_list.gperf" +#line 146 "accessor_class_list.gperf" {"message", &grib_accessor_class_message}, -#line 143 "accessor_class_list.gperf" - {"lookup", &grib_accessor_class_lookup}, -#line 195 "accessor_class_list.gperf" - {"suppressed", &grib_accessor_class_suppressed}, -#line 144 "accessor_class_list.gperf" - {"mars_param", &grib_accessor_class_mars_param}, - {""}, -#line 128 "accessor_class_list.gperf" - {"int64_little_endian", &grib_accessor_class_int64_little_endian}, #line 142 "accessor_class_list.gperf" + {"lookup", &grib_accessor_class_lookup}, +#line 194 "accessor_class_list.gperf" + {"suppressed", &grib_accessor_class_suppressed}, +#line 143 "accessor_class_list.gperf" + {"mars_param", &grib_accessor_class_mars_param}, + {""}, {""}, +#line 141 "accessor_class_list.gperf" {"longitudes", &grib_accessor_class_longitudes}, -#line 216 "accessor_class_list.gperf" +#line 215 "accessor_class_list.gperf" {"values", &grib_accessor_class_values}, -#line 151 "accessor_class_list.gperf" +#line 150 "accessor_class_list.gperf" {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, {""}, -#line 188 "accessor_class_list.gperf" +#line 187 "accessor_class_list.gperf" {"spectral_truncation", &grib_accessor_class_spectral_truncation}, {""}, {""}, -#line 203 "accessor_class_list.gperf" +#line 202 "accessor_class_list.gperf" {"uint16", &grib_accessor_class_uint16}, #line 95 "accessor_class_list.gperf" {"g1step_range", &grib_accessor_class_g1step_range}, @@ -442,7 +439,7 @@ static const struct accessor_class_hash classes[] = {"g1bitmap", &grib_accessor_class_g1bitmap}, #line 55 "accessor_class_list.gperf" {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, -#line 148 "accessor_class_list.gperf" +#line 147 "accessor_class_list.gperf" {"message_copy", &grib_accessor_class_message_copy}, {""}, #line 72 "accessor_class_list.gperf" @@ -450,68 +447,67 @@ static const struct accessor_class_hash classes[] = {""}, #line 102 "accessor_class_list.gperf" {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, -#line 167 "accessor_class_list.gperf" +#line 166 "accessor_class_list.gperf" {"proj_string", &grib_accessor_class_proj_string}, #line 39 "accessor_class_list.gperf" {"constant", &grib_accessor_class_constant}, {""}, #line 27 "accessor_class_list.gperf" {"bufr_string_values", &grib_accessor_class_bufr_string_values}, -#line 159 "accessor_class_list.gperf" +#line 158 "accessor_class_list.gperf" {"offset_values", &grib_accessor_class_offset_values}, -#line 157 "accessor_class_list.gperf" +#line 156 "accessor_class_list.gperf" {"octet_number", &grib_accessor_class_octet_number}, #line 53 "accessor_class_list.gperf" {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, {""}, -#line 139 "accessor_class_list.gperf" +#line 138 "accessor_class_list.gperf" {"local_definition", &grib_accessor_class_local_definition}, #line 54 "accessor_class_list.gperf" {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, - {""}, -#line 138 "accessor_class_list.gperf" +#line 85 "accessor_class_list.gperf" + {"g1_section4_length", &grib_accessor_class_g1_section4_length}, +#line 137 "accessor_class_list.gperf" {"library_version", &grib_accessor_class_library_version}, {""}, #line 51 "accessor_class_list.gperf" {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, -#line 145 "accessor_class_list.gperf" +#line 144 "accessor_class_list.gperf" {"mars_step", &grib_accessor_class_mars_step}, #line 52 "accessor_class_list.gperf" {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, {""}, -#line 197 "accessor_class_list.gperf" +#line 196 "accessor_class_list.gperf" {"to_double", &grib_accessor_class_to_double}, {""}, {""}, {""}, {""}, #line 21 "accessor_class_list.gperf" {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, -#line 85 "accessor_class_list.gperf" - {"g1_section4_length", &grib_accessor_class_g1_section4_length}, - {""}, {""}, -#line 214 "accessor_class_list.gperf" + {""}, {""}, {""}, +#line 213 "accessor_class_list.gperf" {"validity_date", &grib_accessor_class_validity_date}, -#line 215 "accessor_class_list.gperf" +#line 214 "accessor_class_list.gperf" {"validity_time", &grib_accessor_class_validity_time}, {""}, {""}, #line 122 "accessor_class_list.gperf" {"ifs_param", &grib_accessor_class_ifs_param}, {""}, {""}, {""}, -#line 218 "accessor_class_list.gperf" +#line 217 "accessor_class_list.gperf" {"vector", &grib_accessor_class_vector}, {""}, {""}, #line 117 "accessor_class_list.gperf" {"gts_header", &grib_accessor_class_gts_header}, #line 89 "accessor_class_list.gperf" {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, -#line 204 "accessor_class_list.gperf" +#line 203 "accessor_class_list.gperf" {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, {""}, {""}, -#line 141 "accessor_class_list.gperf" +#line 140 "accessor_class_list.gperf" {"long_vector", &grib_accessor_class_long_vector}, {""}, {""}, #line 119 "accessor_class_list.gperf" {"headers_only", &grib_accessor_class_headers_only}, {""}, -#line 136 "accessor_class_list.gperf" +#line 135 "accessor_class_list.gperf" {"latlon_increment", &grib_accessor_class_latlon_increment}, #line 34 "accessor_class_list.gperf" {"codeflag", &grib_accessor_class_codeflag}, @@ -521,27 +517,27 @@ static const struct accessor_class_hash classes[] = #line 33 "accessor_class_list.gperf" {"closest_date", &grib_accessor_class_closest_date}, {""}, -#line 217 "accessor_class_list.gperf" +#line 216 "accessor_class_list.gperf" {"variable", &grib_accessor_class_variable}, #line 74 "accessor_class_list.gperf" {"decimal_precision", &grib_accessor_class_decimal_precision}, -#line 164 "accessor_class_list.gperf" +#line 163 "accessor_class_list.gperf" {"padtoeven", &grib_accessor_class_padtoeven}, {""}, -#line 185 "accessor_class_list.gperf" +#line 184 "accessor_class_list.gperf" {"smart_table", &grib_accessor_class_smart_table}, {""}, {""}, -#line 154 "accessor_class_list.gperf" +#line 153 "accessor_class_list.gperf" {"number_of_values", &grib_accessor_class_number_of_values}, #line 24 "accessor_class_list.gperf" {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, {""}, {""}, -#line 186 "accessor_class_list.gperf" +#line 185 "accessor_class_list.gperf" {"smart_table_column", &grib_accessor_class_smart_table_column}, {""}, #line 22 "accessor_class_list.gperf" {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, -#line 160 "accessor_class_list.gperf" +#line 159 "accessor_class_list.gperf" {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, {""}, #line 35 "accessor_class_list.gperf" @@ -549,10 +545,10 @@ static const struct accessor_class_hash classes[] = #line 23 "accessor_class_list.gperf" {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, {""}, -#line 133 "accessor_class_list.gperf" +#line 132 "accessor_class_list.gperf" {"ksec1expver", &grib_accessor_class_ksec1expver}, {""}, {""}, {""}, {""}, -#line 155 "accessor_class_list.gperf" +#line 154 "accessor_class_list.gperf" {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, {""}, #line 70 "accessor_class_list.gperf" @@ -566,7 +562,7 @@ static const struct accessor_class_hash classes[] = {""}, #line 118 "accessor_class_list.gperf" {"hash_array", &grib_accessor_class_hash_array}, -#line 173 "accessor_class_list.gperf" +#line 172 "accessor_class_list.gperf" {"scale_values", &grib_accessor_class_scale_values}, {""}, #line 107 "accessor_class_list.gperf" @@ -574,7 +570,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, #line 90 "accessor_class_list.gperf" {"g1fcperiod", &grib_accessor_class_g1fcperiod}, -#line 211 "accessor_class_list.gperf" +#line 210 "accessor_class_list.gperf" {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, {""}, {""}, {""}, #line 11 "accessor_class_list.gperf" @@ -585,7 +581,7 @@ static const struct accessor_class_hash classes[] = #line 42 "accessor_class_list.gperf" {"count_total", &grib_accessor_class_count_total}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 137 "accessor_class_list.gperf" +#line 136 "accessor_class_list.gperf" {"latlonvalues", &grib_accessor_class_latlonvalues}, {""}, {""}, #line 36 "accessor_class_list.gperf" @@ -603,7 +599,7 @@ static const struct accessor_class_hash classes[] = #line 82 "accessor_class_list.gperf" {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, {""}, -#line 156 "accessor_class_list.gperf" +#line 155 "accessor_class_list.gperf" {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -632,7 +628,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 170 "accessor_class_list.gperf" +#line 169 "accessor_class_list.gperf" {"reference_value_error", &grib_accessor_class_reference_value_error}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index 1c79ed01a..9da8fff00 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -112,7 +112,6 @@ { "ibmfloat", &grib_accessor_class_ibmfloat, }, { "ieeefloat", &grib_accessor_class_ieeefloat, }, { "ifs_param", &grib_accessor_class_ifs_param, }, -{ "int16", &grib_accessor_class_int16, }, { "int16_little_endian", &grib_accessor_class_int16_little_endian, }, { "int32", &grib_accessor_class_int32, }, { "int32_little_endian", &grib_accessor_class_int32_little_endian, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index e88a4acff..aefe1a24d 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -113,7 +113,6 @@ headers_only, &grib_accessor_class_headers_only ibmfloat, &grib_accessor_class_ibmfloat ieeefloat, &grib_accessor_class_ieeefloat ifs_param, &grib_accessor_class_ifs_param -int16, &grib_accessor_class_int16 int16_little_endian, &grib_accessor_class_int16_little_endian int32, &grib_accessor_class_int32 int32_little_endian, &grib_accessor_class_int32_little_endian From bb6f59354493d4e5fd33f67c829a217c25ca427a Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 20 Aug 2023 12:31:53 +0100 Subject: [PATCH 182/372] Dead code removal: int32 --- src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 1 - .../grib_accessor_class_int32.cc | 0 src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - src/grib_accessor_classes_hash.cc | 202 +++++++++--------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 8 files changed, 100 insertions(+), 109 deletions(-) rename src/{ => deprecated}/grib_accessor_class_int32.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 83b73f01e..1c8fc0027 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -360,7 +360,6 @@ list( APPEND eccodes_src_files md5.h md5.cc grib_accessor_class_int16_little_endian.cc - grib_accessor_class_int32.cc grib_accessor_class_int32_little_endian.cc grib_accessor_class_int64.cc grib_accessor_class_int64_little_endian.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index c51bb989d..115c41cd5 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -91,7 +91,6 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |---grib_accessor_class_headers_only |---grib_accessor_class_ifs_param |---grib_accessor_class_int16_little_endian - |---grib_accessor_class_int32 |---grib_accessor_class_int32_little_endian |---grib_accessor_class_int64 |---grib_accessor_class_int64_little_endian diff --git a/src/grib_accessor_class_int32.cc b/src/deprecated/grib_accessor_class_int32.cc similarity index 100% rename from src/grib_accessor_class_int32.cc rename to src/deprecated/grib_accessor_class_int32.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 5ca069f99..c143344d1 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -425,8 +425,6 @@ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd); /* grib_accessor_class_int16_little_endian.cc*/ -/* grib_accessor_class_int32.cc*/ - /* grib_accessor_class_int32_little_endian.cc*/ /* grib_accessor_class_int64.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index b1442d879..d4669c2f4 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -114,7 +114,6 @@ extern grib_accessor_class* grib_accessor_class_ibmfloat; extern grib_accessor_class* grib_accessor_class_ieeefloat; extern grib_accessor_class* grib_accessor_class_ifs_param; extern grib_accessor_class* grib_accessor_class_int16_little_endian; -extern grib_accessor_class* grib_accessor_class_int32; extern grib_accessor_class* grib_accessor_class_int32_little_endian; extern grib_accessor_class* grib_accessor_class_int64; extern grib_accessor_class* grib_accessor_class_int64_little_endian; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index d975c0ab4..a9df0336d 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,7 +37,7 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 210 +#define TOTAL_KEYWORDS 209 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 @@ -117,50 +117,48 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, -#line 183 "accessor_class_list.gperf" +#line 182 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, -#line 180 "accessor_class_list.gperf" +#line 179 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, {""}, {""}, {""}, {""}, {""}, -#line 181 "accessor_class_list.gperf" +#line 180 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, {""}, #line 67 "accessor_class_list.gperf" {"data_raw_packing", &grib_accessor_class_data_raw_packing}, {""}, -#line 128 "accessor_class_list.gperf" +#line 127 "accessor_class_list.gperf" {"int8", &grib_accessor_class_int8}, {""}, #line 73 "accessor_class_list.gperf" {"data_simple_packing", &grib_accessor_class_data_simple_packing}, #line 69 "accessor_class_list.gperf" {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 174 "accessor_class_list.gperf" +#line 173 "accessor_class_list.gperf" {"section", &grib_accessor_class_section}, -#line 160 "accessor_class_list.gperf" +#line 159 "accessor_class_list.gperf" {"pad", &grib_accessor_class_pad}, -#line 186 "accessor_class_list.gperf" +#line 185 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, #line 75 "accessor_class_list.gperf" {"dictionary", &grib_accessor_class_dictionary}, -#line 126 "accessor_class_list.gperf" +#line 125 "accessor_class_list.gperf" {"int64", &grib_accessor_class_int64}, #line 76 "accessor_class_list.gperf" {"dirty", &grib_accessor_class_dirty}, {""}, #line 66 "accessor_class_list.gperf" {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 176 "accessor_class_list.gperf" +#line 175 "accessor_class_list.gperf" {"section_padding", &grib_accessor_class_section_padding}, -#line 177 "accessor_class_list.gperf" +#line 176 "accessor_class_list.gperf" {"section_pointer", &grib_accessor_class_section_pointer}, #line 113 "accessor_class_list.gperf" {"gen", &grib_accessor_class_gen}, -#line 124 "accessor_class_list.gperf" - {"int32", &grib_accessor_class_int32}, - {""}, + {""}, {""}, #line 58 "accessor_class_list.gperf" {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, {""}, @@ -169,9 +167,9 @@ static const struct accessor_class_hash classes[] = #line 62 "accessor_class_list.gperf" {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, {""}, {""}, -#line 173 "accessor_class_list.gperf" +#line 172 "accessor_class_list.gperf" {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 175 "accessor_class_list.gperf" +#line 174 "accessor_class_list.gperf" {"section_length", &grib_accessor_class_section_length}, #line 65 "accessor_class_list.gperf" {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, @@ -181,7 +179,7 @@ static const struct accessor_class_hash classes[] = {"gds_is_present", &grib_accessor_class_gds_is_present}, #line 44 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, -#line 195 "accessor_class_list.gperf" +#line 194 "accessor_class_list.gperf" {"time", &grib_accessor_class_time}, #line 114 "accessor_class_list.gperf" {"getenv", &grib_accessor_class_getenv}, @@ -199,41 +197,41 @@ static const struct accessor_class_hash classes[] = {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, #line 60 "accessor_class_list.gperf" {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, -#line 161 "accessor_class_list.gperf" +#line 160 "accessor_class_list.gperf" {"padding", &grib_accessor_class_padding}, {""}, {""}, {""}, #line 108 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, -#line 148 "accessor_class_list.gperf" +#line 147 "accessor_class_list.gperf" {"nearest", &grib_accessor_class_nearest}, {""}, {""}, {""}, -#line 193 "accessor_class_list.gperf" +#line 192 "accessor_class_list.gperf" {"sum", &grib_accessor_class_sum}, {""}, -#line 208 "accessor_class_list.gperf" +#line 207 "accessor_class_list.gperf" {"uint8", &grib_accessor_class_uint8}, #line 99 "accessor_class_list.gperf" {"g2_eps", &grib_accessor_class_g2_eps}, -#line 192 "accessor_class_list.gperf" +#line 191 "accessor_class_list.gperf" {"step_in_units", &grib_accessor_class_step_in_units}, {""}, -#line 206 "accessor_class_list.gperf" +#line 205 "accessor_class_list.gperf" {"uint64", &grib_accessor_class_uint64}, {""}, #line 64 "accessor_class_list.gperf" {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, -#line 131 "accessor_class_list.gperf" - {"julian_day", &grib_accessor_class_julian_day}, #line 130 "accessor_class_list.gperf" + {"julian_day", &grib_accessor_class_julian_day}, +#line 129 "accessor_class_list.gperf" {"julian_date", &grib_accessor_class_julian_date}, #line 48 "accessor_class_list.gperf" {"data_complex_packing", &grib_accessor_class_data_complex_packing}, #line 49 "accessor_class_list.gperf" {"data_dummy_field", &grib_accessor_class_data_dummy_field}, -#line 204 "accessor_class_list.gperf" +#line 203 "accessor_class_list.gperf" {"uint32", &grib_accessor_class_uint32}, {""}, {""}, -#line 162 "accessor_class_list.gperf" +#line 161 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, {""}, #line 109 "accessor_class_list.gperf" @@ -257,65 +255,65 @@ static const struct accessor_class_hash classes[] = {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, #line 59 "accessor_class_list.gperf" {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, -#line 189 "accessor_class_list.gperf" +#line 188 "accessor_class_list.gperf" {"statistics", &grib_accessor_class_statistics}, #line 16 "accessor_class_list.gperf" {"bits_per_value", &grib_accessor_class_bits_per_value}, {""}, -#line 149 "accessor_class_list.gperf" +#line 148 "accessor_class_list.gperf" {"non_alpha", &grib_accessor_class_non_alpha}, -#line 182 "accessor_class_list.gperf" +#line 181 "accessor_class_list.gperf" {"simple_packing_error", &grib_accessor_class_simple_packing_error}, {""}, {""}, {""}, {""}, -#line 190 "accessor_class_list.gperf" +#line 189 "accessor_class_list.gperf" {"statistics_spectral", &grib_accessor_class_statistics_spectral}, #line 112 "accessor_class_list.gperf" {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, {""}, -#line 129 "accessor_class_list.gperf" +#line 128 "accessor_class_list.gperf" {"iterator", &grib_accessor_class_iterator}, #line 29 "accessor_class_list.gperf" {"bytes", &grib_accessor_class_bytes}, #line 97 "accessor_class_list.gperf" {"g2_aerosol", &grib_accessor_class_g2_aerosol}, -#line 151 "accessor_class_list.gperf" +#line 150 "accessor_class_list.gperf" {"number_of_points", &grib_accessor_class_number_of_points}, -#line 211 "accessor_class_list.gperf" +#line 210 "accessor_class_list.gperf" {"unsigned", &grib_accessor_class_unsigned}, {""}, {""}, {""}, {""}, -#line 171 "accessor_class_list.gperf" +#line 170 "accessor_class_list.gperf" {"scale", &grib_accessor_class_scale}, -#line 212 "accessor_class_list.gperf" +#line 211 "accessor_class_list.gperf" {"unsigned_bits", &grib_accessor_class_unsigned_bits}, {""}, -#line 152 "accessor_class_list.gperf" +#line 151 "accessor_class_list.gperf" {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, #line 115 "accessor_class_list.gperf" {"global_gaussian", &grib_accessor_class_global_gaussian}, -#line 197 "accessor_class_list.gperf" +#line 196 "accessor_class_list.gperf" {"to_integer", &grib_accessor_class_to_integer}, {""}, -#line 191 "accessor_class_list.gperf" +#line 190 "accessor_class_list.gperf" {"step_human_readable", &grib_accessor_class_step_human_readable}, #line 79 "accessor_class_list.gperf" {"element", &grib_accessor_class_element}, -#line 179 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, -#line 134 "accessor_class_list.gperf" +#line 133 "accessor_class_list.gperf" {"latitudes", &grib_accessor_class_latitudes}, -#line 207 "accessor_class_list.gperf" +#line 206 "accessor_class_list.gperf" {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, #line 47 "accessor_class_list.gperf" {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, -#line 209 "accessor_class_list.gperf" +#line 208 "accessor_class_list.gperf" {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, -#line 167 "accessor_class_list.gperf" +#line 166 "accessor_class_list.gperf" {"raw", &grib_accessor_class_raw}, {""}, {""}, {""}, -#line 205 "accessor_class_list.gperf" +#line 204 "accessor_class_list.gperf" {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, {""}, -#line 139 "accessor_class_list.gperf" +#line 138 "accessor_class_list.gperf" {"long", &grib_accessor_class_long}, {""}, #line 78 "accessor_class_list.gperf" @@ -323,22 +321,22 @@ static const struct accessor_class_hash classes[] = {""}, {""}, #line 100 "accessor_class_list.gperf" {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, -#line 188 "accessor_class_list.gperf" +#line 187 "accessor_class_list.gperf" {"sprintf", &grib_accessor_class_sprintf}, {""}, {""}, {""}, -#line 168 "accessor_class_list.gperf" +#line 167 "accessor_class_list.gperf" {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, {""}, #line 77 "accessor_class_list.gperf" {"divdouble", &grib_accessor_class_divdouble}, #line 106 "accessor_class_list.gperf" {"g2latlon", &grib_accessor_class_g2latlon}, -#line 198 "accessor_class_list.gperf" +#line 197 "accessor_class_list.gperf" {"to_string", &grib_accessor_class_to_string}, -#line 178 "accessor_class_list.gperf" +#line 177 "accessor_class_list.gperf" {"select_step_template", &grib_accessor_class_select_step_template}, {""}, {""}, {""}, {""}, -#line 133 "accessor_class_list.gperf" +#line 132 "accessor_class_list.gperf" {"label", &grib_accessor_class_label}, {""}, #line 19 "accessor_class_list.gperf" @@ -358,72 +356,72 @@ static const struct accessor_class_hash classes[] = {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, #line 121 "accessor_class_list.gperf" {"ieeefloat", &grib_accessor_class_ieeefloat}, -#line 157 "accessor_class_list.gperf" +#line 156 "accessor_class_list.gperf" {"offset_file", &grib_accessor_class_offset_file}, #line 28 "accessor_class_list.gperf" {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, -#line 164 "accessor_class_list.gperf" +#line 163 "accessor_class_list.gperf" {"padtomultiple", &grib_accessor_class_padtomultiple}, {""}, -#line 201 "accessor_class_list.gperf" +#line 200 "accessor_class_list.gperf" {"trim", &grib_accessor_class_trim}, {""}, #line 110 "accessor_class_list.gperf" {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, {""}, {""}, {""}, -#line 199 "accessor_class_list.gperf" +#line 198 "accessor_class_list.gperf" {"transient", &grib_accessor_class_transient}, {""}, #line 116 "accessor_class_list.gperf" {"group", &grib_accessor_class_group}, {""}, -#line 165 "accessor_class_list.gperf" +#line 164 "accessor_class_list.gperf" {"position", &grib_accessor_class_position}, #line 57 "accessor_class_list.gperf" {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, #line 50 "accessor_class_list.gperf" {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 200 "accessor_class_list.gperf" +#line 199 "accessor_class_list.gperf" {"transient_darray", &grib_accessor_class_transient_darray}, #line 123 "accessor_class_list.gperf" {"int16_little_endian", &grib_accessor_class_int16_little_endian}, {""}, -#line 170 "accessor_class_list.gperf" +#line 169 "accessor_class_list.gperf" {"round", &grib_accessor_class_round}, #line 84 "accessor_class_list.gperf" {"g1_message_length", &grib_accessor_class_g1_message_length}, -#line 127 "accessor_class_list.gperf" +#line 126 "accessor_class_list.gperf" {"int64_little_endian", &grib_accessor_class_int64_little_endian}, -#line 218 "accessor_class_list.gperf" +#line 217 "accessor_class_list.gperf" {"when", &grib_accessor_class_when}, #line 18 "accessor_class_list.gperf" {"budgdate", &grib_accessor_class_budgdate}, {""}, -#line 145 "accessor_class_list.gperf" +#line 144 "accessor_class_list.gperf" {"md5", &grib_accessor_class_md5}, {""}, {""}, -#line 125 "accessor_class_list.gperf" +#line 124 "accessor_class_list.gperf" {"int32_little_endian", &grib_accessor_class_int32_little_endian}, -#line 146 "accessor_class_list.gperf" +#line 145 "accessor_class_list.gperf" {"message", &grib_accessor_class_message}, -#line 142 "accessor_class_list.gperf" +#line 141 "accessor_class_list.gperf" {"lookup", &grib_accessor_class_lookup}, -#line 194 "accessor_class_list.gperf" +#line 193 "accessor_class_list.gperf" {"suppressed", &grib_accessor_class_suppressed}, -#line 143 "accessor_class_list.gperf" +#line 142 "accessor_class_list.gperf" {"mars_param", &grib_accessor_class_mars_param}, {""}, {""}, -#line 141 "accessor_class_list.gperf" +#line 140 "accessor_class_list.gperf" {"longitudes", &grib_accessor_class_longitudes}, -#line 215 "accessor_class_list.gperf" +#line 214 "accessor_class_list.gperf" {"values", &grib_accessor_class_values}, -#line 150 "accessor_class_list.gperf" +#line 149 "accessor_class_list.gperf" {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, {""}, -#line 187 "accessor_class_list.gperf" +#line 186 "accessor_class_list.gperf" {"spectral_truncation", &grib_accessor_class_spectral_truncation}, {""}, {""}, -#line 202 "accessor_class_list.gperf" +#line 201 "accessor_class_list.gperf" {"uint16", &grib_accessor_class_uint16}, #line 95 "accessor_class_list.gperf" {"g1step_range", &grib_accessor_class_g1step_range}, @@ -439,7 +437,7 @@ static const struct accessor_class_hash classes[] = {"g1bitmap", &grib_accessor_class_g1bitmap}, #line 55 "accessor_class_list.gperf" {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, -#line 147 "accessor_class_list.gperf" +#line 146 "accessor_class_list.gperf" {"message_copy", &grib_accessor_class_message_copy}, {""}, #line 72 "accessor_class_list.gperf" @@ -447,67 +445,67 @@ static const struct accessor_class_hash classes[] = {""}, #line 102 "accessor_class_list.gperf" {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, -#line 166 "accessor_class_list.gperf" +#line 165 "accessor_class_list.gperf" {"proj_string", &grib_accessor_class_proj_string}, #line 39 "accessor_class_list.gperf" {"constant", &grib_accessor_class_constant}, {""}, #line 27 "accessor_class_list.gperf" {"bufr_string_values", &grib_accessor_class_bufr_string_values}, -#line 158 "accessor_class_list.gperf" +#line 157 "accessor_class_list.gperf" {"offset_values", &grib_accessor_class_offset_values}, -#line 156 "accessor_class_list.gperf" +#line 155 "accessor_class_list.gperf" {"octet_number", &grib_accessor_class_octet_number}, #line 53 "accessor_class_list.gperf" {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, {""}, -#line 138 "accessor_class_list.gperf" +#line 137 "accessor_class_list.gperf" {"local_definition", &grib_accessor_class_local_definition}, #line 54 "accessor_class_list.gperf" {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, #line 85 "accessor_class_list.gperf" {"g1_section4_length", &grib_accessor_class_g1_section4_length}, -#line 137 "accessor_class_list.gperf" +#line 136 "accessor_class_list.gperf" {"library_version", &grib_accessor_class_library_version}, {""}, #line 51 "accessor_class_list.gperf" {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, -#line 144 "accessor_class_list.gperf" +#line 143 "accessor_class_list.gperf" {"mars_step", &grib_accessor_class_mars_step}, #line 52 "accessor_class_list.gperf" {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, {""}, -#line 196 "accessor_class_list.gperf" +#line 195 "accessor_class_list.gperf" {"to_double", &grib_accessor_class_to_double}, {""}, {""}, {""}, {""}, #line 21 "accessor_class_list.gperf" {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, {""}, {""}, {""}, -#line 213 "accessor_class_list.gperf" +#line 212 "accessor_class_list.gperf" {"validity_date", &grib_accessor_class_validity_date}, -#line 214 "accessor_class_list.gperf" +#line 213 "accessor_class_list.gperf" {"validity_time", &grib_accessor_class_validity_time}, {""}, {""}, #line 122 "accessor_class_list.gperf" {"ifs_param", &grib_accessor_class_ifs_param}, {""}, {""}, {""}, -#line 217 "accessor_class_list.gperf" +#line 216 "accessor_class_list.gperf" {"vector", &grib_accessor_class_vector}, {""}, {""}, #line 117 "accessor_class_list.gperf" {"gts_header", &grib_accessor_class_gts_header}, #line 89 "accessor_class_list.gperf" {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, -#line 203 "accessor_class_list.gperf" +#line 202 "accessor_class_list.gperf" {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, {""}, {""}, -#line 140 "accessor_class_list.gperf" +#line 139 "accessor_class_list.gperf" {"long_vector", &grib_accessor_class_long_vector}, {""}, {""}, #line 119 "accessor_class_list.gperf" {"headers_only", &grib_accessor_class_headers_only}, {""}, -#line 135 "accessor_class_list.gperf" +#line 134 "accessor_class_list.gperf" {"latlon_increment", &grib_accessor_class_latlon_increment}, #line 34 "accessor_class_list.gperf" {"codeflag", &grib_accessor_class_codeflag}, @@ -517,27 +515,27 @@ static const struct accessor_class_hash classes[] = #line 33 "accessor_class_list.gperf" {"closest_date", &grib_accessor_class_closest_date}, {""}, -#line 216 "accessor_class_list.gperf" +#line 215 "accessor_class_list.gperf" {"variable", &grib_accessor_class_variable}, #line 74 "accessor_class_list.gperf" {"decimal_precision", &grib_accessor_class_decimal_precision}, -#line 163 "accessor_class_list.gperf" +#line 162 "accessor_class_list.gperf" {"padtoeven", &grib_accessor_class_padtoeven}, {""}, -#line 184 "accessor_class_list.gperf" +#line 183 "accessor_class_list.gperf" {"smart_table", &grib_accessor_class_smart_table}, {""}, {""}, -#line 153 "accessor_class_list.gperf" +#line 152 "accessor_class_list.gperf" {"number_of_values", &grib_accessor_class_number_of_values}, #line 24 "accessor_class_list.gperf" {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, {""}, {""}, -#line 185 "accessor_class_list.gperf" +#line 184 "accessor_class_list.gperf" {"smart_table_column", &grib_accessor_class_smart_table_column}, {""}, #line 22 "accessor_class_list.gperf" {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, -#line 159 "accessor_class_list.gperf" +#line 158 "accessor_class_list.gperf" {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, {""}, #line 35 "accessor_class_list.gperf" @@ -545,10 +543,10 @@ static const struct accessor_class_hash classes[] = #line 23 "accessor_class_list.gperf" {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, {""}, -#line 132 "accessor_class_list.gperf" +#line 131 "accessor_class_list.gperf" {"ksec1expver", &grib_accessor_class_ksec1expver}, {""}, {""}, {""}, {""}, -#line 154 "accessor_class_list.gperf" +#line 153 "accessor_class_list.gperf" {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, {""}, #line 70 "accessor_class_list.gperf" @@ -562,7 +560,7 @@ static const struct accessor_class_hash classes[] = {""}, #line 118 "accessor_class_list.gperf" {"hash_array", &grib_accessor_class_hash_array}, -#line 172 "accessor_class_list.gperf" +#line 171 "accessor_class_list.gperf" {"scale_values", &grib_accessor_class_scale_values}, {""}, #line 107 "accessor_class_list.gperf" @@ -570,7 +568,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, #line 90 "accessor_class_list.gperf" {"g1fcperiod", &grib_accessor_class_g1fcperiod}, -#line 210 "accessor_class_list.gperf" +#line 209 "accessor_class_list.gperf" {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, {""}, {""}, {""}, #line 11 "accessor_class_list.gperf" @@ -581,7 +579,7 @@ static const struct accessor_class_hash classes[] = #line 42 "accessor_class_list.gperf" {"count_total", &grib_accessor_class_count_total}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 136 "accessor_class_list.gperf" +#line 135 "accessor_class_list.gperf" {"latlonvalues", &grib_accessor_class_latlonvalues}, {""}, {""}, #line 36 "accessor_class_list.gperf" @@ -599,7 +597,7 @@ static const struct accessor_class_hash classes[] = #line 82 "accessor_class_list.gperf" {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, {""}, -#line 155 "accessor_class_list.gperf" +#line 154 "accessor_class_list.gperf" {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -628,7 +626,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 169 "accessor_class_list.gperf" +#line 168 "accessor_class_list.gperf" {"reference_value_error", &grib_accessor_class_reference_value_error}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -657,11 +655,11 @@ static const struct accessor_class_hash classes[] = }; static const struct accessor_class_hash* grib_accessor_classes_hash (const char *str, size_t len) -{ - unsigned int key = grib_accessor_classes_get_id (str, len); + { + unsigned int key = grib_accessor_classes_get_id (str, len); #ifdef DEBUG - { + { const char *s; Assert( len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH ); Assert( key <= MAX_HASH_VALUE ); @@ -670,5 +668,5 @@ static const struct accessor_class_hash* grib_accessor_classes_hash (const char } #endif - return &classes[key]; + return &classes[key]; } diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index 9da8fff00..7ef3baa6d 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -113,7 +113,6 @@ { "ieeefloat", &grib_accessor_class_ieeefloat, }, { "ifs_param", &grib_accessor_class_ifs_param, }, { "int16_little_endian", &grib_accessor_class_int16_little_endian, }, -{ "int32", &grib_accessor_class_int32, }, { "int32_little_endian", &grib_accessor_class_int32_little_endian, }, { "int64", &grib_accessor_class_int64, }, { "int64_little_endian", &grib_accessor_class_int64_little_endian, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index aefe1a24d..b7d57f69c 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -114,7 +114,6 @@ ibmfloat, &grib_accessor_class_ibmfloat ieeefloat, &grib_accessor_class_ieeefloat ifs_param, &grib_accessor_class_ifs_param int16_little_endian, &grib_accessor_class_int16_little_endian -int32, &grib_accessor_class_int32 int32_little_endian, &grib_accessor_class_int32_little_endian int64, &grib_accessor_class_int64 int64_little_endian, &grib_accessor_class_int64_little_endian From 96f9c39478747a89df1892012e3cef01b3754011 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 20 Aug 2023 14:10:45 +0100 Subject: [PATCH 183/372] Dead code removal: int64 --- src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 1 - .../grib_accessor_class_int64.cc | 0 src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - src/grib_accessor_classes_hash.cc | 211 +++++++++--------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 8 files changed, 105 insertions(+), 113 deletions(-) rename src/{ => deprecated}/grib_accessor_class_int64.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1c8fc0027..789e332e4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -361,7 +361,6 @@ list( APPEND eccodes_src_files md5.cc grib_accessor_class_int16_little_endian.cc grib_accessor_class_int32_little_endian.cc - grib_accessor_class_int64.cc grib_accessor_class_int64_little_endian.cc grib_accessor_class_int8.cc grib_accessor_class_uint16.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index 115c41cd5..66900152d 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -92,7 +92,6 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |---grib_accessor_class_ifs_param |---grib_accessor_class_int16_little_endian |---grib_accessor_class_int32_little_endian - |---grib_accessor_class_int64 |---grib_accessor_class_int64_little_endian |---grib_accessor_class_int8 |---grib_accessor_class_iterator diff --git a/src/grib_accessor_class_int64.cc b/src/deprecated/grib_accessor_class_int64.cc similarity index 100% rename from src/grib_accessor_class_int64.cc rename to src/deprecated/grib_accessor_class_int64.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index c143344d1..12ec17b9d 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -427,8 +427,6 @@ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd); /* grib_accessor_class_int32_little_endian.cc*/ -/* grib_accessor_class_int64.cc*/ - /* grib_accessor_class_int64_little_endian.cc*/ /* grib_accessor_class_int8.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index d4669c2f4..616f498e4 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -115,7 +115,6 @@ extern grib_accessor_class* grib_accessor_class_ieeefloat; extern grib_accessor_class* grib_accessor_class_ifs_param; extern grib_accessor_class* grib_accessor_class_int16_little_endian; extern grib_accessor_class* grib_accessor_class_int32_little_endian; -extern grib_accessor_class* grib_accessor_class_int64; extern grib_accessor_class* grib_accessor_class_int64_little_endian; extern grib_accessor_class* grib_accessor_class_int8; extern grib_accessor_class* grib_accessor_class_iterator; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index a9df0336d..f25aa0210 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,7 +37,7 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 209 +#define TOTAL_KEYWORDS 208 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 @@ -60,13 +60,13 @@ static unsigned int grib_accessor_classes_get_id (const char *str, size_t len) 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 0, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 2, 144, - 14, 10, 7, 621, 3, 621, 0, 621, 621, 621, + 14, 10, 4, 621, 3, 621, 0, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 0, 621, 0, 82, 111, 0, 0, 102, 29, 186, 1, 3, 2, 76, 193, - 13, 57, 20, 621, 128, 1, 42, 62, 201, 3, + 13, 57, 20, 621, 128, 1, 42, 62, 201, 2, 18, 21, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, @@ -117,44 +117,43 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, -#line 182 "accessor_class_list.gperf" +#line 181 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, -#line 179 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, {""}, {""}, {""}, {""}, {""}, -#line 180 "accessor_class_list.gperf" +#line 179 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, {""}, #line 67 "accessor_class_list.gperf" {"data_raw_packing", &grib_accessor_class_data_raw_packing}, {""}, -#line 127 "accessor_class_list.gperf" +#line 126 "accessor_class_list.gperf" {"int8", &grib_accessor_class_int8}, {""}, #line 73 "accessor_class_list.gperf" {"data_simple_packing", &grib_accessor_class_data_simple_packing}, #line 69 "accessor_class_list.gperf" {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 173 "accessor_class_list.gperf" +#line 172 "accessor_class_list.gperf" {"section", &grib_accessor_class_section}, -#line 159 "accessor_class_list.gperf" +#line 158 "accessor_class_list.gperf" {"pad", &grib_accessor_class_pad}, -#line 185 "accessor_class_list.gperf" +#line 184 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, #line 75 "accessor_class_list.gperf" {"dictionary", &grib_accessor_class_dictionary}, -#line 125 "accessor_class_list.gperf" - {"int64", &grib_accessor_class_int64}, + {""}, #line 76 "accessor_class_list.gperf" {"dirty", &grib_accessor_class_dirty}, {""}, #line 66 "accessor_class_list.gperf" {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 175 "accessor_class_list.gperf" +#line 174 "accessor_class_list.gperf" {"section_padding", &grib_accessor_class_section_padding}, -#line 176 "accessor_class_list.gperf" +#line 175 "accessor_class_list.gperf" {"section_pointer", &grib_accessor_class_section_pointer}, #line 113 "accessor_class_list.gperf" {"gen", &grib_accessor_class_gen}, @@ -167,9 +166,9 @@ static const struct accessor_class_hash classes[] = #line 62 "accessor_class_list.gperf" {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, {""}, {""}, -#line 172 "accessor_class_list.gperf" +#line 171 "accessor_class_list.gperf" {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 174 "accessor_class_list.gperf" +#line 173 "accessor_class_list.gperf" {"section_length", &grib_accessor_class_section_length}, #line 65 "accessor_class_list.gperf" {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, @@ -179,7 +178,7 @@ static const struct accessor_class_hash classes[] = {"gds_is_present", &grib_accessor_class_gds_is_present}, #line 44 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, -#line 194 "accessor_class_list.gperf" +#line 193 "accessor_class_list.gperf" {"time", &grib_accessor_class_time}, #line 114 "accessor_class_list.gperf" {"getenv", &grib_accessor_class_getenv}, @@ -197,41 +196,41 @@ static const struct accessor_class_hash classes[] = {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, #line 60 "accessor_class_list.gperf" {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, -#line 160 "accessor_class_list.gperf" +#line 159 "accessor_class_list.gperf" {"padding", &grib_accessor_class_padding}, {""}, {""}, {""}, #line 108 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, -#line 147 "accessor_class_list.gperf" +#line 146 "accessor_class_list.gperf" {"nearest", &grib_accessor_class_nearest}, {""}, {""}, {""}, -#line 192 "accessor_class_list.gperf" +#line 191 "accessor_class_list.gperf" {"sum", &grib_accessor_class_sum}, {""}, -#line 207 "accessor_class_list.gperf" +#line 206 "accessor_class_list.gperf" {"uint8", &grib_accessor_class_uint8}, #line 99 "accessor_class_list.gperf" {"g2_eps", &grib_accessor_class_g2_eps}, -#line 191 "accessor_class_list.gperf" +#line 190 "accessor_class_list.gperf" {"step_in_units", &grib_accessor_class_step_in_units}, {""}, -#line 205 "accessor_class_list.gperf" +#line 204 "accessor_class_list.gperf" {"uint64", &grib_accessor_class_uint64}, {""}, #line 64 "accessor_class_list.gperf" {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, -#line 130 "accessor_class_list.gperf" - {"julian_day", &grib_accessor_class_julian_day}, #line 129 "accessor_class_list.gperf" + {"julian_day", &grib_accessor_class_julian_day}, +#line 128 "accessor_class_list.gperf" {"julian_date", &grib_accessor_class_julian_date}, #line 48 "accessor_class_list.gperf" {"data_complex_packing", &grib_accessor_class_data_complex_packing}, #line 49 "accessor_class_list.gperf" {"data_dummy_field", &grib_accessor_class_data_dummy_field}, -#line 203 "accessor_class_list.gperf" +#line 202 "accessor_class_list.gperf" {"uint32", &grib_accessor_class_uint32}, {""}, {""}, -#line 161 "accessor_class_list.gperf" +#line 160 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, {""}, #line 109 "accessor_class_list.gperf" @@ -255,65 +254,65 @@ static const struct accessor_class_hash classes[] = {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, #line 59 "accessor_class_list.gperf" {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, -#line 188 "accessor_class_list.gperf" +#line 187 "accessor_class_list.gperf" {"statistics", &grib_accessor_class_statistics}, #line 16 "accessor_class_list.gperf" {"bits_per_value", &grib_accessor_class_bits_per_value}, {""}, -#line 148 "accessor_class_list.gperf" +#line 147 "accessor_class_list.gperf" {"non_alpha", &grib_accessor_class_non_alpha}, -#line 181 "accessor_class_list.gperf" +#line 180 "accessor_class_list.gperf" {"simple_packing_error", &grib_accessor_class_simple_packing_error}, {""}, {""}, {""}, {""}, -#line 189 "accessor_class_list.gperf" +#line 188 "accessor_class_list.gperf" {"statistics_spectral", &grib_accessor_class_statistics_spectral}, #line 112 "accessor_class_list.gperf" {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, {""}, -#line 128 "accessor_class_list.gperf" +#line 127 "accessor_class_list.gperf" {"iterator", &grib_accessor_class_iterator}, #line 29 "accessor_class_list.gperf" {"bytes", &grib_accessor_class_bytes}, #line 97 "accessor_class_list.gperf" {"g2_aerosol", &grib_accessor_class_g2_aerosol}, -#line 150 "accessor_class_list.gperf" +#line 149 "accessor_class_list.gperf" {"number_of_points", &grib_accessor_class_number_of_points}, -#line 210 "accessor_class_list.gperf" +#line 209 "accessor_class_list.gperf" {"unsigned", &grib_accessor_class_unsigned}, {""}, {""}, {""}, {""}, -#line 170 "accessor_class_list.gperf" +#line 169 "accessor_class_list.gperf" {"scale", &grib_accessor_class_scale}, -#line 211 "accessor_class_list.gperf" +#line 210 "accessor_class_list.gperf" {"unsigned_bits", &grib_accessor_class_unsigned_bits}, {""}, -#line 151 "accessor_class_list.gperf" +#line 150 "accessor_class_list.gperf" {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, #line 115 "accessor_class_list.gperf" {"global_gaussian", &grib_accessor_class_global_gaussian}, -#line 196 "accessor_class_list.gperf" +#line 195 "accessor_class_list.gperf" {"to_integer", &grib_accessor_class_to_integer}, {""}, -#line 190 "accessor_class_list.gperf" +#line 189 "accessor_class_list.gperf" {"step_human_readable", &grib_accessor_class_step_human_readable}, #line 79 "accessor_class_list.gperf" {"element", &grib_accessor_class_element}, -#line 178 "accessor_class_list.gperf" +#line 177 "accessor_class_list.gperf" {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, -#line 133 "accessor_class_list.gperf" +#line 132 "accessor_class_list.gperf" {"latitudes", &grib_accessor_class_latitudes}, -#line 206 "accessor_class_list.gperf" +#line 205 "accessor_class_list.gperf" {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, #line 47 "accessor_class_list.gperf" {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, -#line 208 "accessor_class_list.gperf" +#line 207 "accessor_class_list.gperf" {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, -#line 166 "accessor_class_list.gperf" +#line 165 "accessor_class_list.gperf" {"raw", &grib_accessor_class_raw}, {""}, {""}, {""}, -#line 204 "accessor_class_list.gperf" +#line 203 "accessor_class_list.gperf" {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, {""}, -#line 138 "accessor_class_list.gperf" +#line 137 "accessor_class_list.gperf" {"long", &grib_accessor_class_long}, {""}, #line 78 "accessor_class_list.gperf" @@ -321,22 +320,22 @@ static const struct accessor_class_hash classes[] = {""}, {""}, #line 100 "accessor_class_list.gperf" {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, -#line 187 "accessor_class_list.gperf" +#line 186 "accessor_class_list.gperf" {"sprintf", &grib_accessor_class_sprintf}, {""}, {""}, {""}, -#line 167 "accessor_class_list.gperf" +#line 166 "accessor_class_list.gperf" {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, {""}, #line 77 "accessor_class_list.gperf" {"divdouble", &grib_accessor_class_divdouble}, #line 106 "accessor_class_list.gperf" {"g2latlon", &grib_accessor_class_g2latlon}, -#line 197 "accessor_class_list.gperf" +#line 196 "accessor_class_list.gperf" {"to_string", &grib_accessor_class_to_string}, -#line 177 "accessor_class_list.gperf" +#line 176 "accessor_class_list.gperf" {"select_step_template", &grib_accessor_class_select_step_template}, {""}, {""}, {""}, {""}, -#line 132 "accessor_class_list.gperf" +#line 131 "accessor_class_list.gperf" {"label", &grib_accessor_class_label}, {""}, #line 19 "accessor_class_list.gperf" @@ -356,72 +355,72 @@ static const struct accessor_class_hash classes[] = {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, #line 121 "accessor_class_list.gperf" {"ieeefloat", &grib_accessor_class_ieeefloat}, -#line 156 "accessor_class_list.gperf" +#line 155 "accessor_class_list.gperf" {"offset_file", &grib_accessor_class_offset_file}, #line 28 "accessor_class_list.gperf" {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, -#line 163 "accessor_class_list.gperf" +#line 162 "accessor_class_list.gperf" {"padtomultiple", &grib_accessor_class_padtomultiple}, {""}, -#line 200 "accessor_class_list.gperf" +#line 199 "accessor_class_list.gperf" {"trim", &grib_accessor_class_trim}, {""}, #line 110 "accessor_class_list.gperf" {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, {""}, {""}, {""}, -#line 198 "accessor_class_list.gperf" +#line 197 "accessor_class_list.gperf" {"transient", &grib_accessor_class_transient}, {""}, #line 116 "accessor_class_list.gperf" {"group", &grib_accessor_class_group}, {""}, -#line 164 "accessor_class_list.gperf" +#line 163 "accessor_class_list.gperf" {"position", &grib_accessor_class_position}, #line 57 "accessor_class_list.gperf" {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, #line 50 "accessor_class_list.gperf" {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 199 "accessor_class_list.gperf" +#line 198 "accessor_class_list.gperf" {"transient_darray", &grib_accessor_class_transient_darray}, #line 123 "accessor_class_list.gperf" {"int16_little_endian", &grib_accessor_class_int16_little_endian}, - {""}, -#line 169 "accessor_class_list.gperf" +#line 125 "accessor_class_list.gperf" + {"int64_little_endian", &grib_accessor_class_int64_little_endian}, +#line 168 "accessor_class_list.gperf" {"round", &grib_accessor_class_round}, #line 84 "accessor_class_list.gperf" {"g1_message_length", &grib_accessor_class_g1_message_length}, -#line 126 "accessor_class_list.gperf" - {"int64_little_endian", &grib_accessor_class_int64_little_endian}, -#line 217 "accessor_class_list.gperf" +#line 216 "accessor_class_list.gperf" {"when", &grib_accessor_class_when}, + {""}, #line 18 "accessor_class_list.gperf" {"budgdate", &grib_accessor_class_budgdate}, {""}, -#line 144 "accessor_class_list.gperf" +#line 143 "accessor_class_list.gperf" {"md5", &grib_accessor_class_md5}, {""}, {""}, #line 124 "accessor_class_list.gperf" {"int32_little_endian", &grib_accessor_class_int32_little_endian}, -#line 145 "accessor_class_list.gperf" +#line 144 "accessor_class_list.gperf" {"message", &grib_accessor_class_message}, -#line 141 "accessor_class_list.gperf" +#line 140 "accessor_class_list.gperf" {"lookup", &grib_accessor_class_lookup}, -#line 193 "accessor_class_list.gperf" +#line 192 "accessor_class_list.gperf" {"suppressed", &grib_accessor_class_suppressed}, -#line 142 "accessor_class_list.gperf" +#line 141 "accessor_class_list.gperf" {"mars_param", &grib_accessor_class_mars_param}, {""}, {""}, -#line 140 "accessor_class_list.gperf" +#line 139 "accessor_class_list.gperf" {"longitudes", &grib_accessor_class_longitudes}, -#line 214 "accessor_class_list.gperf" +#line 213 "accessor_class_list.gperf" {"values", &grib_accessor_class_values}, -#line 149 "accessor_class_list.gperf" +#line 148 "accessor_class_list.gperf" {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, {""}, -#line 186 "accessor_class_list.gperf" +#line 185 "accessor_class_list.gperf" {"spectral_truncation", &grib_accessor_class_spectral_truncation}, {""}, {""}, -#line 201 "accessor_class_list.gperf" +#line 200 "accessor_class_list.gperf" {"uint16", &grib_accessor_class_uint16}, #line 95 "accessor_class_list.gperf" {"g1step_range", &grib_accessor_class_g1step_range}, @@ -437,7 +436,7 @@ static const struct accessor_class_hash classes[] = {"g1bitmap", &grib_accessor_class_g1bitmap}, #line 55 "accessor_class_list.gperf" {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, -#line 146 "accessor_class_list.gperf" +#line 145 "accessor_class_list.gperf" {"message_copy", &grib_accessor_class_message_copy}, {""}, #line 72 "accessor_class_list.gperf" @@ -445,67 +444,67 @@ static const struct accessor_class_hash classes[] = {""}, #line 102 "accessor_class_list.gperf" {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, -#line 165 "accessor_class_list.gperf" +#line 164 "accessor_class_list.gperf" {"proj_string", &grib_accessor_class_proj_string}, #line 39 "accessor_class_list.gperf" {"constant", &grib_accessor_class_constant}, {""}, #line 27 "accessor_class_list.gperf" {"bufr_string_values", &grib_accessor_class_bufr_string_values}, -#line 157 "accessor_class_list.gperf" +#line 156 "accessor_class_list.gperf" {"offset_values", &grib_accessor_class_offset_values}, -#line 155 "accessor_class_list.gperf" +#line 154 "accessor_class_list.gperf" {"octet_number", &grib_accessor_class_octet_number}, #line 53 "accessor_class_list.gperf" {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, - {""}, -#line 137 "accessor_class_list.gperf" - {"local_definition", &grib_accessor_class_local_definition}, -#line 54 "accessor_class_list.gperf" - {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, #line 85 "accessor_class_list.gperf" {"g1_section4_length", &grib_accessor_class_g1_section4_length}, #line 136 "accessor_class_list.gperf" + {"local_definition", &grib_accessor_class_local_definition}, +#line 54 "accessor_class_list.gperf" + {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, + {""}, +#line 135 "accessor_class_list.gperf" {"library_version", &grib_accessor_class_library_version}, {""}, #line 51 "accessor_class_list.gperf" {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, -#line 143 "accessor_class_list.gperf" +#line 142 "accessor_class_list.gperf" {"mars_step", &grib_accessor_class_mars_step}, #line 52 "accessor_class_list.gperf" {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, {""}, -#line 195 "accessor_class_list.gperf" +#line 194 "accessor_class_list.gperf" {"to_double", &grib_accessor_class_to_double}, {""}, {""}, {""}, {""}, #line 21 "accessor_class_list.gperf" {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, {""}, {""}, {""}, -#line 212 "accessor_class_list.gperf" +#line 211 "accessor_class_list.gperf" {"validity_date", &grib_accessor_class_validity_date}, -#line 213 "accessor_class_list.gperf" +#line 212 "accessor_class_list.gperf" {"validity_time", &grib_accessor_class_validity_time}, {""}, {""}, #line 122 "accessor_class_list.gperf" {"ifs_param", &grib_accessor_class_ifs_param}, {""}, {""}, {""}, -#line 216 "accessor_class_list.gperf" +#line 215 "accessor_class_list.gperf" {"vector", &grib_accessor_class_vector}, {""}, {""}, #line 117 "accessor_class_list.gperf" {"gts_header", &grib_accessor_class_gts_header}, #line 89 "accessor_class_list.gperf" {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, -#line 202 "accessor_class_list.gperf" +#line 201 "accessor_class_list.gperf" {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, {""}, {""}, -#line 139 "accessor_class_list.gperf" +#line 138 "accessor_class_list.gperf" {"long_vector", &grib_accessor_class_long_vector}, {""}, {""}, #line 119 "accessor_class_list.gperf" {"headers_only", &grib_accessor_class_headers_only}, {""}, -#line 134 "accessor_class_list.gperf" +#line 133 "accessor_class_list.gperf" {"latlon_increment", &grib_accessor_class_latlon_increment}, #line 34 "accessor_class_list.gperf" {"codeflag", &grib_accessor_class_codeflag}, @@ -515,27 +514,27 @@ static const struct accessor_class_hash classes[] = #line 33 "accessor_class_list.gperf" {"closest_date", &grib_accessor_class_closest_date}, {""}, -#line 215 "accessor_class_list.gperf" +#line 214 "accessor_class_list.gperf" {"variable", &grib_accessor_class_variable}, #line 74 "accessor_class_list.gperf" {"decimal_precision", &grib_accessor_class_decimal_precision}, -#line 162 "accessor_class_list.gperf" +#line 161 "accessor_class_list.gperf" {"padtoeven", &grib_accessor_class_padtoeven}, {""}, -#line 183 "accessor_class_list.gperf" +#line 182 "accessor_class_list.gperf" {"smart_table", &grib_accessor_class_smart_table}, {""}, {""}, -#line 152 "accessor_class_list.gperf" +#line 151 "accessor_class_list.gperf" {"number_of_values", &grib_accessor_class_number_of_values}, #line 24 "accessor_class_list.gperf" {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, {""}, {""}, -#line 184 "accessor_class_list.gperf" +#line 183 "accessor_class_list.gperf" {"smart_table_column", &grib_accessor_class_smart_table_column}, {""}, #line 22 "accessor_class_list.gperf" {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, -#line 158 "accessor_class_list.gperf" +#line 157 "accessor_class_list.gperf" {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, {""}, #line 35 "accessor_class_list.gperf" @@ -543,10 +542,10 @@ static const struct accessor_class_hash classes[] = #line 23 "accessor_class_list.gperf" {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, {""}, -#line 131 "accessor_class_list.gperf" +#line 130 "accessor_class_list.gperf" {"ksec1expver", &grib_accessor_class_ksec1expver}, {""}, {""}, {""}, {""}, -#line 153 "accessor_class_list.gperf" +#line 152 "accessor_class_list.gperf" {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, {""}, #line 70 "accessor_class_list.gperf" @@ -560,7 +559,7 @@ static const struct accessor_class_hash classes[] = {""}, #line 118 "accessor_class_list.gperf" {"hash_array", &grib_accessor_class_hash_array}, -#line 171 "accessor_class_list.gperf" +#line 170 "accessor_class_list.gperf" {"scale_values", &grib_accessor_class_scale_values}, {""}, #line 107 "accessor_class_list.gperf" @@ -568,7 +567,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, #line 90 "accessor_class_list.gperf" {"g1fcperiod", &grib_accessor_class_g1fcperiod}, -#line 209 "accessor_class_list.gperf" +#line 208 "accessor_class_list.gperf" {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, {""}, {""}, {""}, #line 11 "accessor_class_list.gperf" @@ -579,7 +578,7 @@ static const struct accessor_class_hash classes[] = #line 42 "accessor_class_list.gperf" {"count_total", &grib_accessor_class_count_total}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 135 "accessor_class_list.gperf" +#line 134 "accessor_class_list.gperf" {"latlonvalues", &grib_accessor_class_latlonvalues}, {""}, {""}, #line 36 "accessor_class_list.gperf" @@ -597,7 +596,7 @@ static const struct accessor_class_hash classes[] = #line 82 "accessor_class_list.gperf" {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, {""}, -#line 154 "accessor_class_list.gperf" +#line 153 "accessor_class_list.gperf" {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -626,7 +625,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 168 "accessor_class_list.gperf" +#line 167 "accessor_class_list.gperf" {"reference_value_error", &grib_accessor_class_reference_value_error}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -655,11 +654,11 @@ static const struct accessor_class_hash classes[] = }; static const struct accessor_class_hash* grib_accessor_classes_hash (const char *str, size_t len) - { - unsigned int key = grib_accessor_classes_get_id (str, len); +{ + unsigned int key = grib_accessor_classes_get_id (str, len); #ifdef DEBUG - { + { const char *s; Assert( len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH ); Assert( key <= MAX_HASH_VALUE ); @@ -668,5 +667,5 @@ static const struct accessor_class_hash* grib_accessor_classes_hash (const char } #endif - return &classes[key]; + return &classes[key]; } diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index 7ef3baa6d..6617ea1c7 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -114,7 +114,6 @@ { "ifs_param", &grib_accessor_class_ifs_param, }, { "int16_little_endian", &grib_accessor_class_int16_little_endian, }, { "int32_little_endian", &grib_accessor_class_int32_little_endian, }, -{ "int64", &grib_accessor_class_int64, }, { "int64_little_endian", &grib_accessor_class_int64_little_endian, }, { "int8", &grib_accessor_class_int8, }, { "iterator", &grib_accessor_class_iterator, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index b7d57f69c..3a29ffce4 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -115,7 +115,6 @@ ieeefloat, &grib_accessor_class_ieeefloat ifs_param, &grib_accessor_class_ifs_param int16_little_endian, &grib_accessor_class_int16_little_endian int32_little_endian, &grib_accessor_class_int32_little_endian -int64, &grib_accessor_class_int64 int64_little_endian, &grib_accessor_class_int64_little_endian int8, &grib_accessor_class_int8 iterator, &grib_accessor_class_iterator From 9070952b84fdd18351a28383be5caf148d2ac492 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 20 Aug 2023 14:43:09 +0100 Subject: [PATCH 184/372] ECC-1670: GRIB: Add new key 'setPackingType' --- definitions/grib1/section.4.def | 1 + definitions/grib2/section.7.def | 1 + src/CMakeLists.txt | 1 + src/grib_accessor_class.h | 1 + src/grib_accessor_class_packing_type.cc | 167 +++++++ src/grib_accessor_classes_hash.cc | 608 ++++++++++++------------ src/grib_accessor_factory.h | 1 + src/grib_accessor_factory_hash_list | 1 + tests/grib_change_packing.sh | 5 + 9 files changed, 478 insertions(+), 308 deletions(-) create mode 100644 src/grib_accessor_class_packing_type.cc diff --git a/definitions/grib1/section.4.def b/definitions/grib1/section.4.def index ef6428e3f..80f602a7e 100644 --- a/definitions/grib1/section.4.def +++ b/definitions/grib1/section.4.def @@ -179,6 +179,7 @@ alias setDecimalPrecision=changeDecimalPrecision; meta bitsPerValueAndRepack bits_per_value(values,bitsPerValue) : edition_specific; alias setBitsPerValue=bitsPerValueAndRepack; +meta setPackingType packing_type(values,packingType) : edition_specific; meta scaleValuesBy scale_values(values,missingValue) : edition_specific; meta offsetValuesBy offset_values(values,missingValue) : edition_specific; diff --git a/definitions/grib2/section.7.def b/definitions/grib2/section.7.def index 5e4280475..f6d947674 100644 --- a/definitions/grib2/section.7.def +++ b/definitions/grib2/section.7.def @@ -21,6 +21,7 @@ meta decimalPrecision decimal_precision(bitsPerValue,decimalScaleFactor,changing alias setDecimalPrecision=changeDecimalPrecision; meta setBitsPerValue bits_per_value(values,bitsPerValue) : edition_specific; +meta setPackingType packing_type(values, packingType) : edition_specific; meta getNumberOfValues size(values) : edition_specific,dump ; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 789e332e4..ac472b2de 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -152,6 +152,7 @@ list( APPEND eccodes_src_files grib_accessor_class_padtoeven.cc grib_accessor_class_padtomultiple.cc grib_accessor_class_section_padding.cc + grib_accessor_class_packing_type.cc grib_accessor_class_section_pointer.cc grib_accessor_class_position.cc grib_accessor_class_signed.cc diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index 616f498e4..9e67cc9a7 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -148,6 +148,7 @@ extern grib_accessor_class* grib_accessor_class_octet_number; extern grib_accessor_class* grib_accessor_class_offset_file; extern grib_accessor_class* grib_accessor_class_offset_values; extern grib_accessor_class* grib_accessor_class_pack_bufr_values; +extern grib_accessor_class* grib_accessor_class_packing_type; extern grib_accessor_class* grib_accessor_class_pad; extern grib_accessor_class* grib_accessor_class_padding; extern grib_accessor_class* grib_accessor_class_padto; diff --git a/src/grib_accessor_class_packing_type.cc b/src/grib_accessor_class_packing_type.cc new file mode 100644 index 000000000..a9a4a2deb --- /dev/null +++ b/src/grib_accessor_class_packing_type.cc @@ -0,0 +1,167 @@ +/* + * (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 + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = unpack_string;pack_string + IMPLEMENTS = string_length + IMPLEMENTS = get_native_type + IMPLEMENTS = init + MEMBERS = const char* values + MEMBERS = const char* packing_type + 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 int get_native_type(grib_accessor*); +static int pack_string(grib_accessor*, const char*, size_t* len); +static int unpack_string(grib_accessor*, char*, size_t* len); +static size_t string_length(grib_accessor*); +static void init(grib_accessor*, const long, grib_arguments*); + +typedef struct grib_accessor_packing_type +{ + grib_accessor att; + /* Members defined in gen */ + /* Members defined in packing_type */ + const char* values; + const char* packing_type; +} grib_accessor_packing_type; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_packing_type = { + &grib_accessor_class_gen, /* super */ + "packing_type", /* name */ + sizeof(grib_accessor_packing_type), /* size */ + 0, /* inited */ + 0, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* destroy */ + 0, /* dump */ + 0, /* next_offset */ + &string_length, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* 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 */ + &pack_string, /* pack_string */ + &unpack_string, /* 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_packing_type = &_grib_accessor_class_packing_type; + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long l, grib_arguments* args) +{ + int n = 0; + grib_accessor_packing_type* self = (grib_accessor_packing_type*)a; + self->values = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); + self->packing_type = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->length = 0; +} + +static size_t string_length(grib_accessor* a) +{ + return 1024; +} + +static int get_native_type(grib_accessor* a) +{ + return GRIB_TYPE_STRING; +} + +static int pack_string(grib_accessor*a, const char* sval, size_t* len) +{ + grib_accessor_packing_type* self = (grib_accessor_packing_type*)a; + grib_handle* h = grib_handle_of_accessor(a); + double* values = NULL; + grib_context* c = a->context; + size_t size = 0; + int err = 0; + + if ((err = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) + return err; + + values = (double*)grib_context_malloc(c, size * sizeof(double)); + if (!values) return GRIB_OUT_OF_MEMORY; + + if ((err = grib_get_double_array_internal(h, self->values, values, &size)) != GRIB_SUCCESS) { + grib_context_free(c, values); + return err; + } + + if ((err = grib_set_string_internal(h, self->packing_type, sval, len)) != GRIB_SUCCESS) { + grib_context_free(c, values); + return err; + } + + if ((err = grib_set_double_array_internal(h, self->values, values, size)) != GRIB_SUCCESS) { + grib_context_free(c, values); + return err; + } + + grib_context_free(c, values); + return GRIB_SUCCESS; +} + +static int unpack_string(grib_accessor* a, char* val, size_t* len) +{ + grib_accessor_packing_type* self = (grib_accessor_packing_type*)a; + grib_handle* h = grib_handle_of_accessor(a); + + return grib_get_string(h, self->packing_type, val, len); +} diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index f25aa0210..cd45c0866 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,7 +37,7 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 208 +#define TOTAL_KEYWORDS 209 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 @@ -59,15 +59,15 @@ static unsigned int grib_accessor_classes_get_id (const char *str, size_t len) 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 0, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 2, 144, - 14, 10, 4, 621, 3, 621, 0, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 2, 123, + 14, 12, 1, 621, 17, 621, 0, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 0, 621, 0, 82, 111, - 0, 0, 102, 29, 186, 1, 3, 2, 76, 193, - 13, 57, 20, 621, 128, 1, 42, 62, 201, 2, - 18, 21, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 0, 621, 0, 74, 117, + 0, 0, 97, 29, 162, 1, 18, 3, 91, 207, + 13, 60, 20, 621, 129, 1, 42, 71, 153, 5, + 18, 27, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, @@ -117,14 +117,14 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, -#line 181 "accessor_class_list.gperf" +#line 182 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, -#line 178 "accessor_class_list.gperf" +#line 179 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, {""}, {""}, {""}, {""}, {""}, -#line 179 "accessor_class_list.gperf" +#line 180 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, {""}, #line 67 "accessor_class_list.gperf" @@ -137,27 +137,26 @@ static const struct accessor_class_hash classes[] = {"data_simple_packing", &grib_accessor_class_data_simple_packing}, #line 69 "accessor_class_list.gperf" {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 172 "accessor_class_list.gperf" +#line 173 "accessor_class_list.gperf" {"section", &grib_accessor_class_section}, -#line 158 "accessor_class_list.gperf" +#line 159 "accessor_class_list.gperf" {"pad", &grib_accessor_class_pad}, -#line 184 "accessor_class_list.gperf" +#line 185 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, #line 75 "accessor_class_list.gperf" {"dictionary", &grib_accessor_class_dictionary}, - {""}, -#line 76 "accessor_class_list.gperf" - {"dirty", &grib_accessor_class_dirty}, - {""}, + {""}, {""}, {""}, #line 66 "accessor_class_list.gperf" {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 174 "accessor_class_list.gperf" - {"section_padding", &grib_accessor_class_section_padding}, #line 175 "accessor_class_list.gperf" + {"section_padding", &grib_accessor_class_section_padding}, +#line 176 "accessor_class_list.gperf" {"section_pointer", &grib_accessor_class_section_pointer}, #line 113 "accessor_class_list.gperf" {"gen", &grib_accessor_class_gen}, - {""}, {""}, +#line 76 "accessor_class_list.gperf" + {"dirty", &grib_accessor_class_dirty}, + {""}, #line 58 "accessor_class_list.gperf" {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, {""}, @@ -166,9 +165,9 @@ static const struct accessor_class_hash classes[] = #line 62 "accessor_class_list.gperf" {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, {""}, {""}, -#line 171 "accessor_class_list.gperf" +#line 172 "accessor_class_list.gperf" {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 173 "accessor_class_list.gperf" +#line 174 "accessor_class_list.gperf" {"section_length", &grib_accessor_class_section_length}, #line 65 "accessor_class_list.gperf" {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, @@ -178,7 +177,7 @@ static const struct accessor_class_hash classes[] = {"gds_is_present", &grib_accessor_class_gds_is_present}, #line 44 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, -#line 193 "accessor_class_list.gperf" +#line 194 "accessor_class_list.gperf" {"time", &grib_accessor_class_time}, #line 114 "accessor_class_list.gperf" {"getenv", &grib_accessor_class_getenv}, @@ -196,444 +195,438 @@ static const struct accessor_class_hash classes[] = {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, #line 60 "accessor_class_list.gperf" {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, -#line 159 "accessor_class_list.gperf" +#line 160 "accessor_class_list.gperf" {"padding", &grib_accessor_class_padding}, {""}, {""}, {""}, #line 108 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, #line 146 "accessor_class_list.gperf" {"nearest", &grib_accessor_class_nearest}, - {""}, {""}, {""}, -#line 191 "accessor_class_list.gperf" - {"sum", &grib_accessor_class_sum}, - {""}, -#line 206 "accessor_class_list.gperf" - {"uint8", &grib_accessor_class_uint8}, + {""}, {""}, {""}, {""}, {""}, {""}, #line 99 "accessor_class_list.gperf" {"g2_eps", &grib_accessor_class_g2_eps}, -#line 190 "accessor_class_list.gperf" +#line 191 "accessor_class_list.gperf" {"step_in_units", &grib_accessor_class_step_in_units}, - {""}, -#line 204 "accessor_class_list.gperf" - {"uint64", &grib_accessor_class_uint64}, - {""}, + {""}, {""}, {""}, #line 64 "accessor_class_list.gperf" {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, -#line 129 "accessor_class_list.gperf" - {"julian_day", &grib_accessor_class_julian_day}, -#line 128 "accessor_class_list.gperf" - {"julian_date", &grib_accessor_class_julian_date}, -#line 48 "accessor_class_list.gperf" - {"data_complex_packing", &grib_accessor_class_data_complex_packing}, -#line 49 "accessor_class_list.gperf" - {"data_dummy_field", &grib_accessor_class_data_dummy_field}, -#line 202 "accessor_class_list.gperf" - {"uint32", &grib_accessor_class_uint32}, - {""}, {""}, -#line 160 "accessor_class_list.gperf" - {"padto", &grib_accessor_class_padto}, +#line 192 "accessor_class_list.gperf" + {"sum", &grib_accessor_class_sum}, {""}, -#line 109 "accessor_class_list.gperf" - {"g2step_range", &grib_accessor_class_g2step_range}, -#line 68 "accessor_class_list.gperf" - {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, +#line 207 "accessor_class_list.gperf" + {"uint8", &grib_accessor_class_uint8}, #line 13 "accessor_class_list.gperf" {"bit", &grib_accessor_class_bit}, #line 15 "accessor_class_list.gperf" {"bits", &grib_accessor_class_bits}, - {""}, +#line 48 "accessor_class_list.gperf" + {"data_complex_packing", &grib_accessor_class_data_complex_packing}, #line 14 "accessor_class_list.gperf" {"bitmap", &grib_accessor_class_bitmap}, +#line 158 "accessor_class_list.gperf" + {"packing_type", &grib_accessor_class_packing_type}, {""}, +#line 109 "accessor_class_list.gperf" + {"g2step_range", &grib_accessor_class_g2step_range}, +#line 161 "accessor_class_list.gperf" + {"padto", &grib_accessor_class_padto}, + {""}, +#line 49 "accessor_class_list.gperf" + {"data_dummy_field", &grib_accessor_class_data_dummy_field}, + {""}, +#line 16 "accessor_class_list.gperf" + {"bits_per_value", &grib_accessor_class_bits_per_value}, +#line 203 "accessor_class_list.gperf" + {"uint32", &grib_accessor_class_uint32}, #line 103 "accessor_class_list.gperf" {"g2date", &grib_accessor_class_g2date}, {""}, #line 101 "accessor_class_list.gperf" {"g2bitmap", &grib_accessor_class_g2bitmap}, +#line 68 "accessor_class_list.gperf" + {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, +#line 205 "accessor_class_list.gperf" + {"uint64", &grib_accessor_class_uint64}, +#line 188 "accessor_class_list.gperf" + {"statistics", &grib_accessor_class_statistics}, #line 61 "accessor_class_list.gperf" {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, #line 59 "accessor_class_list.gperf" {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, -#line 187 "accessor_class_list.gperf" - {"statistics", &grib_accessor_class_statistics}, -#line 16 "accessor_class_list.gperf" - {"bits_per_value", &grib_accessor_class_bits_per_value}, +#line 129 "accessor_class_list.gperf" + {"julian_day", &grib_accessor_class_julian_day}, +#line 128 "accessor_class_list.gperf" + {"julian_date", &grib_accessor_class_julian_date}, {""}, #line 147 "accessor_class_list.gperf" {"non_alpha", &grib_accessor_class_non_alpha}, -#line 180 "accessor_class_list.gperf" - {"simple_packing_error", &grib_accessor_class_simple_packing_error}, - {""}, {""}, {""}, {""}, -#line 188 "accessor_class_list.gperf" + {""}, {""}, +#line 189 "accessor_class_list.gperf" {"statistics_spectral", &grib_accessor_class_statistics_spectral}, #line 112 "accessor_class_list.gperf" {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, - {""}, -#line 127 "accessor_class_list.gperf" - {"iterator", &grib_accessor_class_iterator}, #line 29 "accessor_class_list.gperf" {"bytes", &grib_accessor_class_bytes}, + {""}, {""}, {""}, +#line 127 "accessor_class_list.gperf" + {"iterator", &grib_accessor_class_iterator}, + {""}, #line 97 "accessor_class_list.gperf" {"g2_aerosol", &grib_accessor_class_g2_aerosol}, + {""}, {""}, +#line 181 "accessor_class_list.gperf" + {"simple_packing_error", &grib_accessor_class_simple_packing_error}, + {""}, {""}, {""}, #line 149 "accessor_class_list.gperf" {"number_of_points", &grib_accessor_class_number_of_points}, -#line 209 "accessor_class_list.gperf" - {"unsigned", &grib_accessor_class_unsigned}, - {""}, {""}, {""}, {""}, -#line 169 "accessor_class_list.gperf" - {"scale", &grib_accessor_class_scale}, #line 210 "accessor_class_list.gperf" + {"unsigned", &grib_accessor_class_unsigned}, + {""}, +#line 170 "accessor_class_list.gperf" + {"scale", &grib_accessor_class_scale}, + {""}, +#line 196 "accessor_class_list.gperf" + {"to_integer", &grib_accessor_class_to_integer}, + {""}, +#line 211 "accessor_class_list.gperf" {"unsigned_bits", &grib_accessor_class_unsigned_bits}, {""}, #line 150 "accessor_class_list.gperf" {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, + {""}, {""}, +#line 166 "accessor_class_list.gperf" + {"raw", &grib_accessor_class_raw}, +#line 190 "accessor_class_list.gperf" + {"step_human_readable", &grib_accessor_class_step_human_readable}, +#line 100 "accessor_class_list.gperf" + {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, +#line 47 "accessor_class_list.gperf" + {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, #line 115 "accessor_class_list.gperf" {"global_gaussian", &grib_accessor_class_global_gaussian}, -#line 195 "accessor_class_list.gperf" - {"to_integer", &grib_accessor_class_to_integer}, {""}, -#line 189 "accessor_class_list.gperf" - {"step_human_readable", &grib_accessor_class_step_human_readable}, +#line 187 "accessor_class_list.gperf" + {"sprintf", &grib_accessor_class_sprintf}, +#line 208 "accessor_class_list.gperf" + {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, #line 79 "accessor_class_list.gperf" {"element", &grib_accessor_class_element}, -#line 177 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, #line 132 "accessor_class_list.gperf" {"latitudes", &grib_accessor_class_latitudes}, -#line 205 "accessor_class_list.gperf" - {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, -#line 47 "accessor_class_list.gperf" - {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, -#line 207 "accessor_class_list.gperf" - {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, -#line 165 "accessor_class_list.gperf" - {"raw", &grib_accessor_class_raw}, - {""}, {""}, {""}, -#line 203 "accessor_class_list.gperf" - {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, {""}, +#line 77 "accessor_class_list.gperf" + {"divdouble", &grib_accessor_class_divdouble}, + {""}, +#line 204 "accessor_class_list.gperf" + {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, +#line 56 "accessor_class_list.gperf" + {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, +#line 167 "accessor_class_list.gperf" + {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, + {""}, {""}, +#line 206 "accessor_class_list.gperf" + {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, + {""}, +#line 106 "accessor_class_list.gperf" + {"g2latlon", &grib_accessor_class_g2latlon}, +#line 197 "accessor_class_list.gperf" + {"to_string", &grib_accessor_class_to_string}, #line 137 "accessor_class_list.gperf" {"long", &grib_accessor_class_long}, {""}, #line 78 "accessor_class_list.gperf" {"double", &grib_accessor_class_double}, - {""}, {""}, -#line 100 "accessor_class_list.gperf" - {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, -#line 186 "accessor_class_list.gperf" - {"sprintf", &grib_accessor_class_sprintf}, - {""}, {""}, {""}, -#line 166 "accessor_class_list.gperf" - {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, - {""}, -#line 77 "accessor_class_list.gperf" - {"divdouble", &grib_accessor_class_divdouble}, -#line 106 "accessor_class_list.gperf" - {"g2latlon", &grib_accessor_class_g2latlon}, -#line 196 "accessor_class_list.gperf" - {"to_string", &grib_accessor_class_to_string}, -#line 176 "accessor_class_list.gperf" +#line 177 "accessor_class_list.gperf" {"select_step_template", &grib_accessor_class_select_step_template}, - {""}, {""}, {""}, {""}, -#line 131 "accessor_class_list.gperf" - {"label", &grib_accessor_class_label}, - {""}, +#line 214 "accessor_class_list.gperf" + {"values", &grib_accessor_class_values}, #line 19 "accessor_class_list.gperf" {"bufr_data_array", &grib_accessor_class_bufr_data_array}, {""}, #line 20 "accessor_class_list.gperf" {"bufr_data_element", &grib_accessor_class_bufr_data_element}, -#line 17 "accessor_class_list.gperf" - {"blob", &grib_accessor_class_blob}, - {""}, {""}, + {""}, +#line 57 "accessor_class_list.gperf" + {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, +#line 50 "accessor_class_list.gperf" + {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, #line 26 "accessor_class_list.gperf" {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, - {""}, -#line 120 "accessor_class_list.gperf" - {"ibmfloat", &grib_accessor_class_ibmfloat}, -#line 56 "accessor_class_list.gperf" - {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, #line 121 "accessor_class_list.gperf" {"ieeefloat", &grib_accessor_class_ieeefloat}, #line 155 "accessor_class_list.gperf" {"offset_file", &grib_accessor_class_offset_file}, +#line 17 "accessor_class_list.gperf" + {"blob", &grib_accessor_class_blob}, +#line 84 "accessor_class_list.gperf" + {"g1_message_length", &grib_accessor_class_g1_message_length}, +#line 217 "accessor_class_list.gperf" + {"when", &grib_accessor_class_when}, #line 28 "accessor_class_list.gperf" {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, -#line 162 "accessor_class_list.gperf" - {"padtomultiple", &grib_accessor_class_padtomultiple}, {""}, -#line 199 "accessor_class_list.gperf" +#line 120 "accessor_class_list.gperf" + {"ibmfloat", &grib_accessor_class_ibmfloat}, +#line 200 "accessor_class_list.gperf" {"trim", &grib_accessor_class_trim}, {""}, #line 110 "accessor_class_list.gperf" {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, {""}, {""}, {""}, -#line 197 "accessor_class_list.gperf" +#line 198 "accessor_class_list.gperf" {"transient", &grib_accessor_class_transient}, {""}, #line 116 "accessor_class_list.gperf" {"group", &grib_accessor_class_group}, - {""}, #line 163 "accessor_class_list.gperf" - {"position", &grib_accessor_class_position}, -#line 57 "accessor_class_list.gperf" - {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, -#line 50 "accessor_class_list.gperf" - {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 198 "accessor_class_list.gperf" + {"padtomultiple", &grib_accessor_class_padtomultiple}, + {""}, {""}, +#line 131 "accessor_class_list.gperf" + {"label", &grib_accessor_class_label}, +#line 199 "accessor_class_list.gperf" {"transient_darray", &grib_accessor_class_transient_darray}, -#line 123 "accessor_class_list.gperf" - {"int16_little_endian", &grib_accessor_class_int16_little_endian}, -#line 125 "accessor_class_list.gperf" - {"int64_little_endian", &grib_accessor_class_int64_little_endian}, -#line 168 "accessor_class_list.gperf" - {"round", &grib_accessor_class_round}, -#line 84 "accessor_class_list.gperf" - {"g1_message_length", &grib_accessor_class_g1_message_length}, -#line 216 "accessor_class_list.gperf" - {"when", &grib_accessor_class_when}, {""}, -#line 18 "accessor_class_list.gperf" - {"budgdate", &grib_accessor_class_budgdate}, - {""}, -#line 143 "accessor_class_list.gperf" - {"md5", &grib_accessor_class_md5}, +#line 164 "accessor_class_list.gperf" + {"position", &grib_accessor_class_position}, {""}, {""}, -#line 124 "accessor_class_list.gperf" - {"int32_little_endian", &grib_accessor_class_int32_little_endian}, -#line 144 "accessor_class_list.gperf" - {"message", &grib_accessor_class_message}, -#line 140 "accessor_class_list.gperf" - {"lookup", &grib_accessor_class_lookup}, -#line 192 "accessor_class_list.gperf" - {"suppressed", &grib_accessor_class_suppressed}, -#line 141 "accessor_class_list.gperf" - {"mars_param", &grib_accessor_class_mars_param}, - {""}, {""}, -#line 139 "accessor_class_list.gperf" - {"longitudes", &grib_accessor_class_longitudes}, -#line 213 "accessor_class_list.gperf" - {"values", &grib_accessor_class_values}, -#line 148 "accessor_class_list.gperf" - {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, - {""}, -#line 185 "accessor_class_list.gperf" - {"spectral_truncation", &grib_accessor_class_spectral_truncation}, - {""}, {""}, -#line 200 "accessor_class_list.gperf" - {"uint16", &grib_accessor_class_uint16}, #line 95 "accessor_class_list.gperf" {"g1step_range", &grib_accessor_class_g1step_range}, +#line 169 "accessor_class_list.gperf" + {"round", &grib_accessor_class_round}, +#line 18 "accessor_class_list.gperf" + {"budgdate", &grib_accessor_class_budgdate}, {""}, {""}, -#line 38 "accessor_class_list.gperf" - {"concept", &grib_accessor_class_concept}, - {""}, {""}, {""}, -#line 87 "accessor_class_list.gperf" - {"g1date", &grib_accessor_class_g1date}, #line 71 "accessor_class_list.gperf" {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, + {""}, +#line 87 "accessor_class_list.gperf" + {"g1date", &grib_accessor_class_g1date}, +#line 201 "accessor_class_list.gperf" + {"uint16", &grib_accessor_class_uint16}, #line 86 "accessor_class_list.gperf" {"g1bitmap", &grib_accessor_class_g1bitmap}, -#line 55 "accessor_class_list.gperf" - {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, -#line 145 "accessor_class_list.gperf" - {"message_copy", &grib_accessor_class_message_copy}, - {""}, #line 72 "accessor_class_list.gperf" {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, + {""}, {""}, +#line 55 "accessor_class_list.gperf" + {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, {""}, -#line 102 "accessor_class_list.gperf" - {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, -#line 164 "accessor_class_list.gperf" - {"proj_string", &grib_accessor_class_proj_string}, -#line 39 "accessor_class_list.gperf" - {"constant", &grib_accessor_class_constant}, - {""}, -#line 27 "accessor_class_list.gperf" - {"bufr_string_values", &grib_accessor_class_bufr_string_values}, -#line 156 "accessor_class_list.gperf" - {"offset_values", &grib_accessor_class_offset_values}, -#line 154 "accessor_class_list.gperf" - {"octet_number", &grib_accessor_class_octet_number}, -#line 53 "accessor_class_list.gperf" - {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, +#line 212 "accessor_class_list.gperf" + {"validity_date", &grib_accessor_class_validity_date}, +#line 213 "accessor_class_list.gperf" + {"validity_time", &grib_accessor_class_validity_time}, +#line 143 "accessor_class_list.gperf" + {"md5", &grib_accessor_class_md5}, +#line 186 "accessor_class_list.gperf" + {"spectral_truncation", &grib_accessor_class_spectral_truncation}, +#line 193 "accessor_class_list.gperf" + {"suppressed", &grib_accessor_class_suppressed}, #line 85 "accessor_class_list.gperf" {"g1_section4_length", &grib_accessor_class_g1_section4_length}, -#line 136 "accessor_class_list.gperf" - {"local_definition", &grib_accessor_class_local_definition}, +#line 144 "accessor_class_list.gperf" + {"message", &grib_accessor_class_message}, + {""}, +#line 125 "accessor_class_list.gperf" + {"int64_little_endian", &grib_accessor_class_int64_little_endian}, +#line 141 "accessor_class_list.gperf" + {"mars_param", &grib_accessor_class_mars_param}, +#line 53 "accessor_class_list.gperf" + {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, +#line 216 "accessor_class_list.gperf" + {"vector", &grib_accessor_class_vector}, + {""}, #line 54 "accessor_class_list.gperf" {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, {""}, -#line 135 "accessor_class_list.gperf" - {"library_version", &grib_accessor_class_library_version}, +#line 148 "accessor_class_list.gperf" + {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, {""}, #line 51 "accessor_class_list.gperf" {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, -#line 142 "accessor_class_list.gperf" - {"mars_step", &grib_accessor_class_mars_step}, +#line 38 "accessor_class_list.gperf" + {"concept", &grib_accessor_class_concept}, #line 52 "accessor_class_list.gperf" {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, - {""}, -#line 194 "accessor_class_list.gperf" +#line 140 "accessor_class_list.gperf" + {"lookup", &grib_accessor_class_lookup}, +#line 124 "accessor_class_list.gperf" + {"int32_little_endian", &grib_accessor_class_int32_little_endian}, +#line 102 "accessor_class_list.gperf" + {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, +#line 165 "accessor_class_list.gperf" + {"proj_string", &grib_accessor_class_proj_string}, +#line 123 "accessor_class_list.gperf" + {"int16_little_endian", &grib_accessor_class_int16_little_endian}, +#line 139 "accessor_class_list.gperf" + {"longitudes", &grib_accessor_class_longitudes}, +#line 27 "accessor_class_list.gperf" + {"bufr_string_values", &grib_accessor_class_bufr_string_values}, + {""}, {""}, {""}, {""}, +#line 145 "accessor_class_list.gperf" + {"message_copy", &grib_accessor_class_message_copy}, +#line 39 "accessor_class_list.gperf" + {"constant", &grib_accessor_class_constant}, +#line 156 "accessor_class_list.gperf" + {"offset_values", &grib_accessor_class_offset_values}, +#line 162 "accessor_class_list.gperf" + {"padtoeven", &grib_accessor_class_padtoeven}, +#line 117 "accessor_class_list.gperf" + {"gts_header", &grib_accessor_class_gts_header}, +#line 154 "accessor_class_list.gperf" + {"octet_number", &grib_accessor_class_octet_number}, +#line 195 "accessor_class_list.gperf" {"to_double", &grib_accessor_class_to_double}, {""}, {""}, {""}, {""}, -#line 21 "accessor_class_list.gperf" - {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, - {""}, {""}, {""}, -#line 211 "accessor_class_list.gperf" - {"validity_date", &grib_accessor_class_validity_date}, -#line 212 "accessor_class_list.gperf" - {"validity_time", &grib_accessor_class_validity_time}, +#line 89 "accessor_class_list.gperf" + {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, + {""}, +#line 215 "accessor_class_list.gperf" + {"variable", &grib_accessor_class_variable}, +#line 151 "accessor_class_list.gperf" + {"number_of_values", &grib_accessor_class_number_of_values}, {""}, {""}, #line 122 "accessor_class_list.gperf" {"ifs_param", &grib_accessor_class_ifs_param}, - {""}, {""}, {""}, -#line 215 "accessor_class_list.gperf" - {"vector", &grib_accessor_class_vector}, - {""}, {""}, -#line 117 "accessor_class_list.gperf" - {"gts_header", &grib_accessor_class_gts_header}, -#line 89 "accessor_class_list.gperf" - {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, -#line 201 "accessor_class_list.gperf" +#line 202 "accessor_class_list.gperf" {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, +#line 142 "accessor_class_list.gperf" + {"mars_step", &grib_accessor_class_mars_step}, + {""}, +#line 157 "accessor_class_list.gperf" + {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, {""}, {""}, -#line 138 "accessor_class_list.gperf" - {"long_vector", &grib_accessor_class_long_vector}, +#line 135 "accessor_class_list.gperf" + {"library_version", &grib_accessor_class_library_version}, {""}, {""}, #line 119 "accessor_class_list.gperf" {"headers_only", &grib_accessor_class_headers_only}, {""}, -#line 133 "accessor_class_list.gperf" - {"latlon_increment", &grib_accessor_class_latlon_increment}, -#line 34 "accessor_class_list.gperf" - {"codeflag", &grib_accessor_class_codeflag}, - {""}, {""}, {""}, -#line 25 "accessor_class_list.gperf" - {"bufr_group", &grib_accessor_class_bufr_group}, -#line 33 "accessor_class_list.gperf" - {"closest_date", &grib_accessor_class_closest_date}, +#line 21 "accessor_class_list.gperf" + {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, {""}, -#line 214 "accessor_class_list.gperf" - {"variable", &grib_accessor_class_variable}, -#line 74 "accessor_class_list.gperf" - {"decimal_precision", &grib_accessor_class_decimal_precision}, -#line 161 "accessor_class_list.gperf" - {"padtoeven", &grib_accessor_class_padtoeven}, - {""}, -#line 182 "accessor_class_list.gperf" - {"smart_table", &grib_accessor_class_smart_table}, - {""}, {""}, -#line 151 "accessor_class_list.gperf" - {"number_of_values", &grib_accessor_class_number_of_values}, -#line 24 "accessor_class_list.gperf" - {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, - {""}, {""}, -#line 183 "accessor_class_list.gperf" - {"smart_table_column", &grib_accessor_class_smart_table_column}, - {""}, -#line 22 "accessor_class_list.gperf" - {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, -#line 157 "accessor_class_list.gperf" - {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, - {""}, -#line 35 "accessor_class_list.gperf" - {"codetable", &grib_accessor_class_codetable}, -#line 23 "accessor_class_list.gperf" - {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, - {""}, -#line 130 "accessor_class_list.gperf" - {"ksec1expver", &grib_accessor_class_ksec1expver}, - {""}, {""}, {""}, {""}, #line 152 "accessor_class_list.gperf" {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, +#line 136 "accessor_class_list.gperf" + {"local_definition", &grib_accessor_class_local_definition}, + {""}, {""}, +#line 80 "accessor_class_list.gperf" + {"evaluate", &grib_accessor_class_evaluate}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 34 "accessor_class_list.gperf" + {"codeflag", &grib_accessor_class_codeflag}, +#line 171 "accessor_class_list.gperf" + {"scale_values", &grib_accessor_class_scale_values}, +#line 25 "accessor_class_list.gperf" + {"bufr_group", &grib_accessor_class_bufr_group}, +#line 130 "accessor_class_list.gperf" + {"ksec1expver", &grib_accessor_class_ksec1expver}, + {""}, {""}, {""}, {""}, {""}, +#line 138 "accessor_class_list.gperf" + {"long_vector", &grib_accessor_class_long_vector}, {""}, #line 70 "accessor_class_list.gperf" {"data_sh_packed", &grib_accessor_class_data_sh_packed}, - {""}, -#line 80 "accessor_class_list.gperf" - {"evaluate", &grib_accessor_class_evaluate}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 40 "accessor_class_list.gperf" - {"count_file", &grib_accessor_class_count_file}, - {""}, -#line 118 "accessor_class_list.gperf" - {"hash_array", &grib_accessor_class_hash_array}, -#line 170 "accessor_class_list.gperf" - {"scale_values", &grib_accessor_class_scale_values}, - {""}, #line 107 "accessor_class_list.gperf" {"g2level", &grib_accessor_class_g2level}, + {""}, +#line 133 "accessor_class_list.gperf" + {"latlon_increment", &grib_accessor_class_latlon_increment}, {""}, {""}, {""}, +#line 24 "accessor_class_list.gperf" + {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, +#line 118 "accessor_class_list.gperf" + {"hash_array", &grib_accessor_class_hash_array}, +#line 35 "accessor_class_list.gperf" + {"codetable", &grib_accessor_class_codetable}, +#line 183 "accessor_class_list.gperf" + {"smart_table", &grib_accessor_class_smart_table}, +#line 33 "accessor_class_list.gperf" + {"closest_date", &grib_accessor_class_closest_date}, +#line 22 "accessor_class_list.gperf" + {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, + {""}, {""}, {""}, +#line 23 "accessor_class_list.gperf" + {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, +#line 184 "accessor_class_list.gperf" + {"smart_table_column", &grib_accessor_class_smart_table_column}, #line 90 "accessor_class_list.gperf" {"g1fcperiod", &grib_accessor_class_g1fcperiod}, -#line 208 "accessor_class_list.gperf" - {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, - {""}, {""}, {""}, -#line 11 "accessor_class_list.gperf" - {"abstract_vector", &grib_accessor_class_abstract_vector}, - {""}, #line 83 "accessor_class_list.gperf" {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, -#line 42 "accessor_class_list.gperf" - {"count_total", &grib_accessor_class_count_total}, - {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 74 "accessor_class_list.gperf" + {"decimal_precision", &grib_accessor_class_decimal_precision}, #line 134 "accessor_class_list.gperf" {"latlonvalues", &grib_accessor_class_latlonvalues}, - {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 40 "accessor_class_list.gperf" + {"count_file", &grib_accessor_class_count_file}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 11 "accessor_class_list.gperf" + {"abstract_vector", &grib_accessor_class_abstract_vector}, + {""}, {""}, {""}, +#line 30 "accessor_class_list.gperf" + {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, +#line 92 "accessor_class_list.gperf" + {"g1monthlydate", &grib_accessor_class_g1monthlydate}, + {""}, {""}, {""}, {""}, {""}, +#line 31 "accessor_class_list.gperf" + {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, + {""}, +#line 209 "accessor_class_list.gperf" + {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, + {""}, #line 36 "accessor_class_list.gperf" {"codetable_title", &grib_accessor_class_codetable_title}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 30 "accessor_class_list.gperf" - {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, - {""}, {""}, {""}, {""}, {""}, {""}, -#line 31 "accessor_class_list.gperf" - {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, - {""}, {""}, {""}, {""}, -#line 37 "accessor_class_list.gperf" - {"codetable_units", &grib_accessor_class_codetable_units}, - {""}, -#line 82 "accessor_class_list.gperf" - {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, - {""}, #line 153 "accessor_class_list.gperf" {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, + {""}, {""}, {""}, {""}, +#line 42 "accessor_class_list.gperf" + {"count_total", &grib_accessor_class_count_total}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 82 "accessor_class_list.gperf" + {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, + {""}, {""}, {""}, {""}, {""}, +#line 37 "accessor_class_list.gperf" + {"codetable_units", &grib_accessor_class_codetable_units}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 92 "accessor_class_list.gperf" - {"g1monthlydate", &grib_accessor_class_g1monthlydate}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, #line 10 "accessor_class_list.gperf" {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 41 "accessor_class_list.gperf" - {"count_missing", &grib_accessor_class_count_missing}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, -#line 32 "accessor_class_list.gperf" - {"check_internal_version", &grib_accessor_class_check_internal_version}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, #line 88 "accessor_class_list.gperf" {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 32 "accessor_class_list.gperf" + {"check_internal_version", &grib_accessor_class_check_internal_version}, {""}, {""}, {""}, #line 96 "accessor_class_list.gperf" {"g1verificationdate", &grib_accessor_class_g1verificationdate}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 167 "accessor_class_list.gperf" + {""}, +#line 41 "accessor_class_list.gperf" + {"count_missing", &grib_accessor_class_count_missing}, + {""}, {""}, {""}, {""}, +#line 168 "accessor_class_list.gperf" {"reference_value_error", &grib_accessor_class_reference_value_error}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, #line 94 "accessor_class_list.gperf" {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, #line 93 "accessor_class_list.gperf" {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, - {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, #line 98 "accessor_class_list.gperf" {"g2_chemical", &grib_accessor_class_g2_chemical}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -647,8 +640,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, #line 91 "accessor_class_list.gperf" {"g1forecastmonth", &grib_accessor_class_g1forecastmonth} }; diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index 6617ea1c7..f32647c89 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -147,6 +147,7 @@ { "offset_file", &grib_accessor_class_offset_file, }, { "offset_values", &grib_accessor_class_offset_values, }, { "pack_bufr_values", &grib_accessor_class_pack_bufr_values, }, +{ "packing_type", &grib_accessor_class_packing_type, }, { "pad", &grib_accessor_class_pad, }, { "padding", &grib_accessor_class_padding, }, { "padto", &grib_accessor_class_padto, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index 3a29ffce4..41793b6af 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -148,6 +148,7 @@ octet_number, &grib_accessor_class_octet_number offset_file, &grib_accessor_class_offset_file offset_values, &grib_accessor_class_offset_values pack_bufr_values, &grib_accessor_class_pack_bufr_values +packing_type, &grib_accessor_class_packing_type pad, &grib_accessor_class_pad padding, &grib_accessor_class_padding padto, &grib_accessor_class_padto diff --git a/tests/grib_change_packing.sh b/tests/grib_change_packing.sh index 322572c8e..2b4d8ebf5 100755 --- a/tests/grib_change_packing.sh +++ b/tests/grib_change_packing.sh @@ -55,6 +55,11 @@ test_packing() { result=`${tools_dir}/grib_get -p accuracy $temp` [ $result -eq 0 -o $result -eq 32 -o $result -eq 64 ] + temp1=$temp.1 + ${tools_dir}/grib_set -s setPackingType=$packing $grib $temp1 + ${tools_dir}/grib_compare $temp $temp1 + rm -f $temp1 + shift done From 2fc2b16b227437f4d4f88f29a3a551b481a835de Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 20 Aug 2023 16:51:42 +0100 Subject: [PATCH 185/372] grib_util_set_spec: Refactoring --- src/grib_util.cc | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/grib_util.cc b/src/grib_util.cc index 05a96df40..edfd3eb33 100644 --- a/src/grib_util.cc +++ b/src/grib_util.cc @@ -376,12 +376,14 @@ static const char* get_packing_spec_packing_type_name(long packing_spec_packing_ static void print_values(grib_context* c, const grib_util_grid_spec* spec, const grib_util_packing_spec* packing_spec, + const char* input_packing_type, const double* data_values, const size_t data_values_count, /* the data pay load */ const grib_values* keyval_pairs, const size_t count) /* keys and their values */ { size_t i = 0; int isConstant = 1; double v = 0, minVal = DBL_MAX, maxVal = -DBL_MAX; + fprintf(stderr, "ECCODES DEBUG grib_util: input_packing_type = %s\n", input_packing_type); fprintf(stderr, "ECCODES DEBUG grib_util: grib_set_values, setting %zu key/value pairs\n", count); for (i = 0; i < count; i++) { @@ -942,7 +944,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, char sample_name[1024]; /* name of the GRIB sample file */ char input_grid_type[100]; char input_packing_type[100]; - long input_bits_per_value = 0, editionNumber = 0, input_decimal_scale_factor = 0; + long editionNumber = 0; size_t count = 0, len = 100, slen = 20, input_grid_type_len = 100; double laplacianOperator; int i = 0, packingTypeIsSet = 0, setSecondOrder = 0, setJpegPacking = 0, setCcsdsPacking = 0; @@ -964,13 +966,6 @@ grib_handle* grib_util_set_spec(grib_handle* h, } grib_get_string(h, "packingType", input_packing_type, &len); - grib_get_long(h, "bitsPerValue", &input_bits_per_value); - grib_get_long(h, "decimalScaleFactor", &input_decimal_scale_factor); - if (h->context->debug == -1) { - fprintf(stderr, "ECCODES DEBUG grib_util: input_packing_type = %s\n", input_packing_type); - fprintf(stderr, "ECCODES DEBUG grib_util: input_bits_per_value = %ld\n", input_bits_per_value); - fprintf(stderr, "ECCODES DEBUG grib_util: input_decimal_scale_factor = %ld\n", input_decimal_scale_factor); - } /* ECC-1201, ECC-1529, ECC-1530: Make sure input packing type is preserved */ if (packing_spec->packing == GRIB_UTIL_PACKING_SAME_AS_INPUT && @@ -1405,7 +1400,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, if (h->context->debug == -1) { fprintf(stderr, "ECCODES DEBUG grib_util: global_grid = %d\n", global_grid); fprintf(stderr, "ECCODES DEBUG grib_util: expandBoundingBox = %d\n", expandBoundingBox); - print_values(h->context, spec, packing_spec, data_values, data_values_count, values, count); + print_values(h->context, spec, packing_spec, input_packing_type, data_values, data_values_count, values, count); } /* Apply adjustments to bounding box if needed */ From e4984e87912d50373099f960b109503a120e8dc2 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 20 Aug 2023 17:40:13 +0100 Subject: [PATCH 186/372] Dead code removal: int8 --- src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 1 - .../grib_accessor_class_int8.cc | 0 src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - src/grib_accessor_classes_hash.cc | 844 +++++++++--------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 8 files changed, 425 insertions(+), 426 deletions(-) rename src/{ => deprecated}/grib_accessor_class_int8.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ac472b2de..d6bab3e7f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -363,7 +363,6 @@ list( APPEND eccodes_src_files grib_accessor_class_int16_little_endian.cc grib_accessor_class_int32_little_endian.cc grib_accessor_class_int64_little_endian.cc - grib_accessor_class_int8.cc grib_accessor_class_uint16.cc grib_accessor_class_uint16_little_endian.cc grib_accessor_class_uint32.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index 66900152d..c5c4c07a0 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -93,7 +93,6 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |---grib_accessor_class_int16_little_endian |---grib_accessor_class_int32_little_endian |---grib_accessor_class_int64_little_endian - |---grib_accessor_class_int8 |---grib_accessor_class_iterator |---grib_accessor_class_label |---grib_accessor_class_long diff --git a/src/grib_accessor_class_int8.cc b/src/deprecated/grib_accessor_class_int8.cc similarity index 100% rename from src/grib_accessor_class_int8.cc rename to src/deprecated/grib_accessor_class_int8.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 12ec17b9d..5a6b0ce0e 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -429,8 +429,6 @@ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd); /* grib_accessor_class_int64_little_endian.cc*/ -/* grib_accessor_class_int8.cc*/ - /* grib_accessor_class_uint16.cc*/ /* grib_accessor_class_uint16_little_endian.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index 9e67cc9a7..84e6d8092 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -116,7 +116,6 @@ extern grib_accessor_class* grib_accessor_class_ifs_param; extern grib_accessor_class* grib_accessor_class_int16_little_endian; extern grib_accessor_class* grib_accessor_class_int32_little_endian; extern grib_accessor_class* grib_accessor_class_int64_little_endian; -extern grib_accessor_class* grib_accessor_class_int8; extern grib_accessor_class* grib_accessor_class_iterator; extern grib_accessor_class* grib_accessor_class_julian_date; extern grib_accessor_class* grib_accessor_class_julian_day; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index cd45c0866..907e5d9e2 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,12 +37,12 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 209 +#define TOTAL_KEYWORDS 208 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 -#define MAX_HASH_VALUE 620 -/* maximum key range = 620, duplicates = 0 */ +#define MAX_HASH_VALUE 619 +/* maximum key range = 619, duplicates = 0 */ #ifdef __GNUC__ @@ -55,32 +55,32 @@ static unsigned int grib_accessor_classes_get_id (const char *str, size_t len) { static const unsigned short asso_values[] = { - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 0, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 2, 123, - 14, 12, 1, 621, 17, 621, 0, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 0, 621, 0, 74, 117, - 0, 0, 97, 29, 162, 1, 18, 3, 91, 207, - 13, 60, 20, 621, 129, 1, 42, 71, 153, 5, - 18, 27, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621 + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 0, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 4, 164, + 29, 1, 2, 620, 15, 620, 3, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 2, 620, 2, 68, 75, + 1, 2, 75, 25, 178, 0, 15, 2, 106, 183, + 21, 64, 3, 620, 157, 8, 37, 75, 185, 0, + 1, 12, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, + 620, 620, 620, 620, 620, 620 }; unsigned int hval = len; @@ -116,520 +116,528 @@ static const struct accessor_class_hash classes[] = {""}, #line 9 "accessor_class_list.gperf" {" "}, - {""}, {""}, {""}, {""}, -#line 182 "accessor_class_list.gperf" + {""}, {""}, {""}, {""}, {""}, {""}, +#line 158 "accessor_class_list.gperf" + {"pad", &grib_accessor_class_pad}, + {""}, {""}, {""}, +#line 181 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, + {""}, +#line 184 "accessor_class_list.gperf" + {"spd", &grib_accessor_class_spd}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, -#line 179 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, - {""}, {""}, {""}, {""}, {""}, -#line 180 "accessor_class_list.gperf" - {"signed_bits", &grib_accessor_class_signed_bits}, {""}, -#line 67 "accessor_class_list.gperf" - {"data_raw_packing", &grib_accessor_class_data_raw_packing}, - {""}, -#line 126 "accessor_class_list.gperf" - {"int8", &grib_accessor_class_int8}, - {""}, -#line 73 "accessor_class_list.gperf" - {"data_simple_packing", &grib_accessor_class_data_simple_packing}, -#line 69 "accessor_class_list.gperf" - {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 173 "accessor_class_list.gperf" - {"section", &grib_accessor_class_section}, -#line 159 "accessor_class_list.gperf" - {"pad", &grib_accessor_class_pad}, -#line 185 "accessor_class_list.gperf" - {"spd", &grib_accessor_class_spd}, -#line 75 "accessor_class_list.gperf" - {"dictionary", &grib_accessor_class_dictionary}, - {""}, {""}, {""}, -#line 66 "accessor_class_list.gperf" - {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 175 "accessor_class_list.gperf" - {"section_padding", &grib_accessor_class_section_padding}, -#line 176 "accessor_class_list.gperf" - {"section_pointer", &grib_accessor_class_section_pointer}, -#line 113 "accessor_class_list.gperf" - {"gen", &grib_accessor_class_gen}, #line 76 "accessor_class_list.gperf" {"dirty", &grib_accessor_class_dirty}, - {""}, -#line 58 "accessor_class_list.gperf" - {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, - {""}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 67 "accessor_class_list.gperf" + {"data_raw_packing", &grib_accessor_class_data_raw_packing}, +#line 73 "accessor_class_list.gperf" + {"data_simple_packing", &grib_accessor_class_data_simple_packing}, #line 43 "accessor_class_list.gperf" {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, -#line 62 "accessor_class_list.gperf" - {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, - {""}, {""}, -#line 172 "accessor_class_list.gperf" - {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 174 "accessor_class_list.gperf" - {"section_length", &grib_accessor_class_section_length}, + {""}, +#line 69 "accessor_class_list.gperf" + {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, +#line 113 "accessor_class_list.gperf" + {"gen", &grib_accessor_class_gen}, +#line 179 "accessor_class_list.gperf" + {"signed_bits", &grib_accessor_class_signed_bits}, +#line 75 "accessor_class_list.gperf" + {"dictionary", &grib_accessor_class_dictionary}, #line 65 "accessor_class_list.gperf" {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, #line 46 "accessor_class_list.gperf" {"data_apply_gdsnotpresent", &grib_accessor_class_data_apply_gdsnotpresent}, -#line 111 "accessor_class_list.gperf" - {"gds_is_present", &grib_accessor_class_gds_is_present}, + {""}, #line 44 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, -#line 194 "accessor_class_list.gperf" +#line 159 "accessor_class_list.gperf" + {"padding", &grib_accessor_class_padding}, +#line 172 "accessor_class_list.gperf" + {"section", &grib_accessor_class_section}, + {""}, {""}, +#line 193 "accessor_class_list.gperf" {"time", &grib_accessor_class_time}, -#line 114 "accessor_class_list.gperf" - {"getenv", &grib_accessor_class_getenv}, - {""}, -#line 105 "accessor_class_list.gperf" - {"g2grid", &grib_accessor_class_g2grid}, -#line 81 "accessor_class_list.gperf" - {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, {""}, #line 45 "accessor_class_list.gperf" {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, -#line 104 "accessor_class_list.gperf" - {"g2end_step", &grib_accessor_class_g2end_step}, +#line 66 "accessor_class_list.gperf" + {"data_png_packing", &grib_accessor_class_data_png_packing}, +#line 157 "accessor_class_list.gperf" + {"packing_type", &grib_accessor_class_packing_type}, +#line 175 "accessor_class_list.gperf" + {"section_pointer", &grib_accessor_class_section_pointer}, +#line 174 "accessor_class_list.gperf" + {"section_padding", &grib_accessor_class_section_padding}, +#line 81 "accessor_class_list.gperf" + {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, + {""}, +#line 111 "accessor_class_list.gperf" + {"gds_is_present", &grib_accessor_class_gds_is_present}, + {""}, {""}, {""}, +#line 114 "accessor_class_list.gperf" + {"getenv", &grib_accessor_class_getenv}, + {""}, +#line 58 "accessor_class_list.gperf" + {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, +#line 62 "accessor_class_list.gperf" + {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, #line 63 "accessor_class_list.gperf" {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, #line 60 "accessor_class_list.gperf" {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, -#line 160 "accessor_class_list.gperf" - {"padding", &grib_accessor_class_padding}, - {""}, {""}, {""}, -#line 108 "accessor_class_list.gperf" - {"g2lon", &grib_accessor_class_g2lon}, -#line 146 "accessor_class_list.gperf" - {"nearest", &grib_accessor_class_nearest}, - {""}, {""}, {""}, {""}, {""}, {""}, +#line 105 "accessor_class_list.gperf" + {"g2grid", &grib_accessor_class_g2grid}, + {""}, +#line 171 "accessor_class_list.gperf" + {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, #line 99 "accessor_class_list.gperf" {"g2_eps", &grib_accessor_class_g2_eps}, -#line 191 "accessor_class_list.gperf" - {"step_in_units", &grib_accessor_class_step_in_units}, - {""}, {""}, {""}, -#line 64 "accessor_class_list.gperf" - {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, -#line 192 "accessor_class_list.gperf" - {"sum", &grib_accessor_class_sum}, + {""}, {""}, +#line 173 "accessor_class_list.gperf" + {"section_length", &grib_accessor_class_section_length}, + {""}, {""}, +#line 145 "accessor_class_list.gperf" + {"nearest", &grib_accessor_class_nearest}, {""}, -#line 207 "accessor_class_list.gperf" - {"uint8", &grib_accessor_class_uint8}, #line 13 "accessor_class_list.gperf" {"bit", &grib_accessor_class_bit}, #line 15 "accessor_class_list.gperf" {"bits", &grib_accessor_class_bits}, -#line 48 "accessor_class_list.gperf" - {"data_complex_packing", &grib_accessor_class_data_complex_packing}, -#line 14 "accessor_class_list.gperf" - {"bitmap", &grib_accessor_class_bitmap}, -#line 158 "accessor_class_list.gperf" - {"packing_type", &grib_accessor_class_packing_type}, - {""}, -#line 109 "accessor_class_list.gperf" - {"g2step_range", &grib_accessor_class_g2step_range}, -#line 161 "accessor_class_list.gperf" +#line 104 "accessor_class_list.gperf" + {"g2end_step", &grib_accessor_class_g2end_step}, +#line 160 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, {""}, -#line 49 "accessor_class_list.gperf" - {"data_dummy_field", &grib_accessor_class_data_dummy_field}, +#line 14 "accessor_class_list.gperf" + {"bitmap", &grib_accessor_class_bitmap}, +#line 64 "accessor_class_list.gperf" + {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, + {""}, {""}, +#line 108 "accessor_class_list.gperf" + {"g2lon", &grib_accessor_class_g2lon}, +#line 190 "accessor_class_list.gperf" + {"step_in_units", &grib_accessor_class_step_in_units}, +#line 202 "accessor_class_list.gperf" + {"uint32", &grib_accessor_class_uint32}, +#line 206 "accessor_class_list.gperf" + {"uint8", &grib_accessor_class_uint8}, + {""}, {""}, +#line 191 "accessor_class_list.gperf" + {"sum", &grib_accessor_class_sum}, {""}, #line 16 "accessor_class_list.gperf" {"bits_per_value", &grib_accessor_class_bits_per_value}, -#line 203 "accessor_class_list.gperf" - {"uint32", &grib_accessor_class_uint32}, + {""}, +#line 169 "accessor_class_list.gperf" + {"scale", &grib_accessor_class_scale}, +#line 48 "accessor_class_list.gperf" + {"data_complex_packing", &grib_accessor_class_data_complex_packing}, +#line 187 "accessor_class_list.gperf" + {"statistics", &grib_accessor_class_statistics}, +#line 29 "accessor_class_list.gperf" + {"bytes", &grib_accessor_class_bytes}, + {""}, +#line 109 "accessor_class_list.gperf" + {"g2step_range", &grib_accessor_class_g2step_range}, +#line 204 "accessor_class_list.gperf" + {"uint64", &grib_accessor_class_uint64}, #line 103 "accessor_class_list.gperf" {"g2date", &grib_accessor_class_g2date}, - {""}, +#line 49 "accessor_class_list.gperf" + {"data_dummy_field", &grib_accessor_class_data_dummy_field}, +#line 146 "accessor_class_list.gperf" + {"non_alpha", &grib_accessor_class_non_alpha}, +#line 47 "accessor_class_list.gperf" + {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, #line 101 "accessor_class_list.gperf" {"g2bitmap", &grib_accessor_class_g2bitmap}, + {""}, +#line 188 "accessor_class_list.gperf" + {"statistics_spectral", &grib_accessor_class_statistics_spectral}, +#line 128 "accessor_class_list.gperf" + {"julian_day", &grib_accessor_class_julian_day}, #line 68 "accessor_class_list.gperf" {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, -#line 205 "accessor_class_list.gperf" - {"uint64", &grib_accessor_class_uint64}, -#line 188 "accessor_class_list.gperf" - {"statistics", &grib_accessor_class_statistics}, + {""}, +#line 127 "accessor_class_list.gperf" + {"julian_date", &grib_accessor_class_julian_date}, +#line 112 "accessor_class_list.gperf" + {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, + {""}, +#line 176 "accessor_class_list.gperf" + {"select_step_template", &grib_accessor_class_select_step_template}, +#line 126 "accessor_class_list.gperf" + {"iterator", &grib_accessor_class_iterator}, + {""}, {""}, +#line 186 "accessor_class_list.gperf" + {"sprintf", &grib_accessor_class_sprintf}, + {""}, {""}, {""}, {""}, +#line 148 "accessor_class_list.gperf" + {"number_of_points", &grib_accessor_class_number_of_points}, + {""}, #line 61 "accessor_class_list.gperf" {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, #line 59 "accessor_class_list.gperf" {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, -#line 129 "accessor_class_list.gperf" - {"julian_day", &grib_accessor_class_julian_day}, -#line 128 "accessor_class_list.gperf" - {"julian_date", &grib_accessor_class_julian_date}, - {""}, -#line 147 "accessor_class_list.gperf" - {"non_alpha", &grib_accessor_class_non_alpha}, - {""}, {""}, -#line 189 "accessor_class_list.gperf" - {"statistics_spectral", &grib_accessor_class_statistics_spectral}, -#line 112 "accessor_class_list.gperf" - {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, -#line 29 "accessor_class_list.gperf" - {"bytes", &grib_accessor_class_bytes}, - {""}, {""}, {""}, -#line 127 "accessor_class_list.gperf" - {"iterator", &grib_accessor_class_iterator}, + {""}, {""}, {""}, {""}, {""}, +#line 149 "accessor_class_list.gperf" + {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, {""}, #line 97 "accessor_class_list.gperf" {"g2_aerosol", &grib_accessor_class_g2_aerosol}, - {""}, {""}, -#line 181 "accessor_class_list.gperf" - {"simple_packing_error", &grib_accessor_class_simple_packing_error}, - {""}, {""}, {""}, -#line 149 "accessor_class_list.gperf" - {"number_of_points", &grib_accessor_class_number_of_points}, -#line 210 "accessor_class_list.gperf" +#line 209 "accessor_class_list.gperf" {"unsigned", &grib_accessor_class_unsigned}, - {""}, -#line 170 "accessor_class_list.gperf" - {"scale", &grib_accessor_class_scale}, - {""}, -#line 196 "accessor_class_list.gperf" + {""}, {""}, +#line 195 "accessor_class_list.gperf" {"to_integer", &grib_accessor_class_to_integer}, - {""}, -#line 211 "accessor_class_list.gperf" +#line 203 "accessor_class_list.gperf" + {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, +#line 210 "accessor_class_list.gperf" {"unsigned_bits", &grib_accessor_class_unsigned_bits}, {""}, -#line 150 "accessor_class_list.gperf" - {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, - {""}, {""}, -#line 166 "accessor_class_list.gperf" - {"raw", &grib_accessor_class_raw}, -#line 190 "accessor_class_list.gperf" +#line 180 "accessor_class_list.gperf" + {"simple_packing_error", &grib_accessor_class_simple_packing_error}, + {""}, {""}, {""}, +#line 77 "accessor_class_list.gperf" + {"divdouble", &grib_accessor_class_divdouble}, +#line 189 "accessor_class_list.gperf" {"step_human_readable", &grib_accessor_class_step_human_readable}, +#line 207 "accessor_class_list.gperf" + {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, + {""}, {""}, +#line 196 "accessor_class_list.gperf" + {"to_string", &grib_accessor_class_to_string}, #line 100 "accessor_class_list.gperf" {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, -#line 47 "accessor_class_list.gperf" - {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, +#line 205 "accessor_class_list.gperf" + {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, +#line 121 "accessor_class_list.gperf" + {"ieeefloat", &grib_accessor_class_ieeefloat}, + {""}, {""}, {""}, +#line 79 "accessor_class_list.gperf" + {"element", &grib_accessor_class_element}, +#line 131 "accessor_class_list.gperf" + {"latitudes", &grib_accessor_class_latitudes}, +#line 154 "accessor_class_list.gperf" + {"offset_file", &grib_accessor_class_offset_file}, + {""}, #line 115 "accessor_class_list.gperf" {"global_gaussian", &grib_accessor_class_global_gaussian}, {""}, -#line 187 "accessor_class_list.gperf" - {"sprintf", &grib_accessor_class_sprintf}, -#line 208 "accessor_class_list.gperf" - {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, -#line 79 "accessor_class_list.gperf" - {"element", &grib_accessor_class_element}, -#line 178 "accessor_class_list.gperf" - {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, -#line 132 "accessor_class_list.gperf" - {"latitudes", &grib_accessor_class_latitudes}, - {""}, -#line 77 "accessor_class_list.gperf" - {"divdouble", &grib_accessor_class_divdouble}, - {""}, -#line 204 "accessor_class_list.gperf" - {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, -#line 56 "accessor_class_list.gperf" - {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, -#line 167 "accessor_class_list.gperf" - {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, - {""}, {""}, -#line 206 "accessor_class_list.gperf" - {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, +#line 162 "accessor_class_list.gperf" + {"padtomultiple", &grib_accessor_class_padtomultiple}, {""}, +#line 165 "accessor_class_list.gperf" + {"raw", &grib_accessor_class_raw}, #line 106 "accessor_class_list.gperf" {"g2latlon", &grib_accessor_class_g2latlon}, -#line 197 "accessor_class_list.gperf" - {"to_string", &grib_accessor_class_to_string}, -#line 137 "accessor_class_list.gperf" - {"long", &grib_accessor_class_long}, - {""}, -#line 78 "accessor_class_list.gperf" - {"double", &grib_accessor_class_double}, -#line 177 "accessor_class_list.gperf" - {"select_step_template", &grib_accessor_class_select_step_template}, -#line 214 "accessor_class_list.gperf" - {"values", &grib_accessor_class_values}, #line 19 "accessor_class_list.gperf" {"bufr_data_array", &grib_accessor_class_bufr_data_array}, {""}, #line 20 "accessor_class_list.gperf" {"bufr_data_element", &grib_accessor_class_bufr_data_element}, +#line 26 "accessor_class_list.gperf" + {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, +#line 177 "accessor_class_list.gperf" + {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, + {""}, {""}, {""}, {""}, {""}, +#line 136 "accessor_class_list.gperf" + {"long", &grib_accessor_class_long}, +#line 28 "accessor_class_list.gperf" + {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, +#line 163 "accessor_class_list.gperf" + {"position", &grib_accessor_class_position}, +#line 78 "accessor_class_list.gperf" + {"double", &grib_accessor_class_double}, +#line 17 "accessor_class_list.gperf" + {"blob", &grib_accessor_class_blob}, {""}, +#line 166 "accessor_class_list.gperf" + {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, + {""}, +#line 216 "accessor_class_list.gperf" + {"when", &grib_accessor_class_when}, + {""}, +#line 120 "accessor_class_list.gperf" + {"ibmfloat", &grib_accessor_class_ibmfloat}, +#line 38 "accessor_class_list.gperf" + {"concept", &grib_accessor_class_concept}, + {""}, +#line 142 "accessor_class_list.gperf" + {"md5", &grib_accessor_class_md5}, + {""}, +#line 18 "accessor_class_list.gperf" + {"budgdate", &grib_accessor_class_budgdate}, +#line 116 "accessor_class_list.gperf" + {"group", &grib_accessor_class_group}, + {""}, +#line 56 "accessor_class_list.gperf" + {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, #line 57 "accessor_class_list.gperf" {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, #line 50 "accessor_class_list.gperf" {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 26 "accessor_class_list.gperf" - {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, -#line 121 "accessor_class_list.gperf" - {"ieeefloat", &grib_accessor_class_ieeefloat}, -#line 155 "accessor_class_list.gperf" - {"offset_file", &grib_accessor_class_offset_file}, -#line 17 "accessor_class_list.gperf" - {"blob", &grib_accessor_class_blob}, -#line 84 "accessor_class_list.gperf" - {"g1_message_length", &grib_accessor_class_g1_message_length}, -#line 217 "accessor_class_list.gperf" - {"when", &grib_accessor_class_when}, -#line 28 "accessor_class_list.gperf" - {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, - {""}, -#line 120 "accessor_class_list.gperf" - {"ibmfloat", &grib_accessor_class_ibmfloat}, -#line 200 "accessor_class_list.gperf" - {"trim", &grib_accessor_class_trim}, - {""}, -#line 110 "accessor_class_list.gperf" - {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, - {""}, {""}, {""}, -#line 198 "accessor_class_list.gperf" - {"transient", &grib_accessor_class_transient}, - {""}, -#line 116 "accessor_class_list.gperf" - {"group", &grib_accessor_class_group}, -#line 163 "accessor_class_list.gperf" - {"padtomultiple", &grib_accessor_class_padtomultiple}, - {""}, {""}, -#line 131 "accessor_class_list.gperf" - {"label", &grib_accessor_class_label}, +#line 213 "accessor_class_list.gperf" + {"values", &grib_accessor_class_values}, +#line 143 "accessor_class_list.gperf" + {"message", &grib_accessor_class_message}, +#line 147 "accessor_class_list.gperf" + {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, #line 199 "accessor_class_list.gperf" - {"transient_darray", &grib_accessor_class_transient_darray}, - {""}, -#line 164 "accessor_class_list.gperf" - {"position", &grib_accessor_class_position}, - {""}, {""}, -#line 95 "accessor_class_list.gperf" - {"g1step_range", &grib_accessor_class_g1step_range}, -#line 169 "accessor_class_list.gperf" - {"round", &grib_accessor_class_round}, -#line 18 "accessor_class_list.gperf" - {"budgdate", &grib_accessor_class_budgdate}, + {"trim", &grib_accessor_class_trim}, +#line 140 "accessor_class_list.gperf" + {"mars_param", &grib_accessor_class_mars_param}, {""}, {""}, #line 71 "accessor_class_list.gperf" {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, {""}, -#line 87 "accessor_class_list.gperf" - {"g1date", &grib_accessor_class_g1date}, -#line 201 "accessor_class_list.gperf" - {"uint16", &grib_accessor_class_uint16}, -#line 86 "accessor_class_list.gperf" - {"g1bitmap", &grib_accessor_class_g1bitmap}, -#line 72 "accessor_class_list.gperf" - {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, - {""}, {""}, -#line 55 "accessor_class_list.gperf" - {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, - {""}, -#line 212 "accessor_class_list.gperf" - {"validity_date", &grib_accessor_class_validity_date}, -#line 213 "accessor_class_list.gperf" - {"validity_time", &grib_accessor_class_validity_time}, -#line 143 "accessor_class_list.gperf" - {"md5", &grib_accessor_class_md5}, -#line 186 "accessor_class_list.gperf" - {"spectral_truncation", &grib_accessor_class_spectral_truncation}, -#line 193 "accessor_class_list.gperf" - {"suppressed", &grib_accessor_class_suppressed}, -#line 85 "accessor_class_list.gperf" - {"g1_section4_length", &grib_accessor_class_g1_section4_length}, #line 144 "accessor_class_list.gperf" - {"message", &grib_accessor_class_message}, - {""}, -#line 125 "accessor_class_list.gperf" - {"int64_little_endian", &grib_accessor_class_int64_little_endian}, -#line 141 "accessor_class_list.gperf" - {"mars_param", &grib_accessor_class_mars_param}, -#line 53 "accessor_class_list.gperf" - {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, -#line 216 "accessor_class_list.gperf" - {"vector", &grib_accessor_class_vector}, - {""}, -#line 54 "accessor_class_list.gperf" - {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, - {""}, -#line 148 "accessor_class_list.gperf" - {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, - {""}, -#line 51 "accessor_class_list.gperf" - {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, -#line 38 "accessor_class_list.gperf" - {"concept", &grib_accessor_class_concept}, -#line 52 "accessor_class_list.gperf" - {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, -#line 140 "accessor_class_list.gperf" - {"lookup", &grib_accessor_class_lookup}, -#line 124 "accessor_class_list.gperf" - {"int32_little_endian", &grib_accessor_class_int32_little_endian}, -#line 102 "accessor_class_list.gperf" - {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, -#line 165 "accessor_class_list.gperf" - {"proj_string", &grib_accessor_class_proj_string}, -#line 123 "accessor_class_list.gperf" - {"int16_little_endian", &grib_accessor_class_int16_little_endian}, -#line 139 "accessor_class_list.gperf" - {"longitudes", &grib_accessor_class_longitudes}, -#line 27 "accessor_class_list.gperf" - {"bufr_string_values", &grib_accessor_class_bufr_string_values}, - {""}, {""}, {""}, {""}, -#line 145 "accessor_class_list.gperf" {"message_copy", &grib_accessor_class_message_copy}, #line 39 "accessor_class_list.gperf" {"constant", &grib_accessor_class_constant}, -#line 156 "accessor_class_list.gperf" - {"offset_values", &grib_accessor_class_offset_values}, -#line 162 "accessor_class_list.gperf" - {"padtoeven", &grib_accessor_class_padtoeven}, -#line 117 "accessor_class_list.gperf" - {"gts_header", &grib_accessor_class_gts_header}, -#line 154 "accessor_class_list.gperf" + {""}, +#line 72 "accessor_class_list.gperf" + {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, + {""}, {""}, {""}, +#line 153 "accessor_class_list.gperf" {"octet_number", &grib_accessor_class_octet_number}, -#line 195 "accessor_class_list.gperf" - {"to_double", &grib_accessor_class_to_double}, +#line 110 "accessor_class_list.gperf" + {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, +#line 197 "accessor_class_list.gperf" + {"transient", &grib_accessor_class_transient}, {""}, {""}, {""}, {""}, -#line 89 "accessor_class_list.gperf" - {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, +#line 84 "accessor_class_list.gperf" + {"g1_message_length", &grib_accessor_class_g1_message_length}, +#line 130 "accessor_class_list.gperf" + {"label", &grib_accessor_class_label}, {""}, -#line 215 "accessor_class_list.gperf" - {"variable", &grib_accessor_class_variable}, -#line 151 "accessor_class_list.gperf" - {"number_of_values", &grib_accessor_class_number_of_values}, +#line 198 "accessor_class_list.gperf" + {"transient_darray", &grib_accessor_class_transient_darray}, {""}, {""}, -#line 122 "accessor_class_list.gperf" - {"ifs_param", &grib_accessor_class_ifs_param}, -#line 202 "accessor_class_list.gperf" - {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, -#line 142 "accessor_class_list.gperf" - {"mars_step", &grib_accessor_class_mars_step}, - {""}, -#line 157 "accessor_class_list.gperf" - {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, - {""}, {""}, -#line 135 "accessor_class_list.gperf" - {"library_version", &grib_accessor_class_library_version}, - {""}, {""}, -#line 119 "accessor_class_list.gperf" - {"headers_only", &grib_accessor_class_headers_only}, - {""}, -#line 21 "accessor_class_list.gperf" - {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, - {""}, -#line 152 "accessor_class_list.gperf" - {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, -#line 136 "accessor_class_list.gperf" - {"local_definition", &grib_accessor_class_local_definition}, - {""}, {""}, -#line 80 "accessor_class_list.gperf" - {"evaluate", &grib_accessor_class_evaluate}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, #line 34 "accessor_class_list.gperf" {"codeflag", &grib_accessor_class_codeflag}, -#line 171 "accessor_class_list.gperf" - {"scale_values", &grib_accessor_class_scale_values}, -#line 25 "accessor_class_list.gperf" - {"bufr_group", &grib_accessor_class_bufr_group}, -#line 130 "accessor_class_list.gperf" - {"ksec1expver", &grib_accessor_class_ksec1expver}, - {""}, {""}, {""}, {""}, {""}, -#line 138 "accessor_class_list.gperf" - {"long_vector", &grib_accessor_class_long_vector}, +#line 27 "accessor_class_list.gperf" + {"bufr_string_values", &grib_accessor_class_bufr_string_values}, +#line 185 "accessor_class_list.gperf" + {"spectral_truncation", &grib_accessor_class_spectral_truncation}, +#line 168 "accessor_class_list.gperf" + {"round", &grib_accessor_class_round}, + {""}, {""}, +#line 95 "accessor_class_list.gperf" + {"g1step_range", &grib_accessor_class_g1step_range}, +#line 155 "accessor_class_list.gperf" + {"offset_values", &grib_accessor_class_offset_values}, +#line 87 "accessor_class_list.gperf" + {"g1date", &grib_accessor_class_g1date}, +#line 141 "accessor_class_list.gperf" + {"mars_step", &grib_accessor_class_mars_step}, {""}, -#line 70 "accessor_class_list.gperf" - {"data_sh_packed", &grib_accessor_class_data_sh_packed}, -#line 107 "accessor_class_list.gperf" - {"g2level", &grib_accessor_class_g2level}, +#line 164 "accessor_class_list.gperf" + {"proj_string", &grib_accessor_class_proj_string}, +#line 86 "accessor_class_list.gperf" + {"g1bitmap", &grib_accessor_class_g1bitmap}, {""}, -#line 133 "accessor_class_list.gperf" - {"latlon_increment", &grib_accessor_class_latlon_increment}, - {""}, {""}, {""}, +#line 212 "accessor_class_list.gperf" + {"validity_time", &grib_accessor_class_validity_time}, + {""}, +#line 211 "accessor_class_list.gperf" + {"validity_date", &grib_accessor_class_validity_date}, #line 24 "accessor_class_list.gperf" {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, -#line 118 "accessor_class_list.gperf" - {"hash_array", &grib_accessor_class_hash_array}, -#line 35 "accessor_class_list.gperf" - {"codetable", &grib_accessor_class_codetable}, -#line 183 "accessor_class_list.gperf" - {"smart_table", &grib_accessor_class_smart_table}, -#line 33 "accessor_class_list.gperf" - {"closest_date", &grib_accessor_class_closest_date}, +#line 194 "accessor_class_list.gperf" + {"to_double", &grib_accessor_class_to_double}, + {""}, +#line 122 "accessor_class_list.gperf" + {"ifs_param", &grib_accessor_class_ifs_param}, +#line 200 "accessor_class_list.gperf" + {"uint16", &grib_accessor_class_uint16}, #line 22 "accessor_class_list.gperf" {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, - {""}, {""}, {""}, + {""}, +#line 85 "accessor_class_list.gperf" + {"g1_section4_length", &grib_accessor_class_g1_section4_length}, + {""}, #line 23 "accessor_class_list.gperf" {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, -#line 184 "accessor_class_list.gperf" +#line 139 "accessor_class_list.gperf" + {"lookup", &grib_accessor_class_lookup}, +#line 117 "accessor_class_list.gperf" + {"gts_header", &grib_accessor_class_gts_header}, +#line 35 "accessor_class_list.gperf" + {"codetable", &grib_accessor_class_codetable}, +#line 125 "accessor_class_list.gperf" + {"int64_little_endian", &grib_accessor_class_int64_little_endian}, +#line 138 "accessor_class_list.gperf" + {"longitudes", &grib_accessor_class_longitudes}, +#line 55 "accessor_class_list.gperf" + {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, +#line 215 "accessor_class_list.gperf" + {"vector", &grib_accessor_class_vector}, +#line 192 "accessor_class_list.gperf" + {"suppressed", &grib_accessor_class_suppressed}, + {""}, {""}, +#line 40 "accessor_class_list.gperf" + {"count_file", &grib_accessor_class_count_file}, + {""}, +#line 161 "accessor_class_list.gperf" + {"padtoeven", &grib_accessor_class_padtoeven}, + {""}, {""}, +#line 102 "accessor_class_list.gperf" + {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, +#line 123 "accessor_class_list.gperf" + {"int16_little_endian", &grib_accessor_class_int16_little_endian}, +#line 53 "accessor_class_list.gperf" + {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, +#line 33 "accessor_class_list.gperf" + {"closest_date", &grib_accessor_class_closest_date}, + {""}, +#line 54 "accessor_class_list.gperf" + {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, +#line 70 "accessor_class_list.gperf" + {"data_sh_packed", &grib_accessor_class_data_sh_packed}, + {""}, {""}, +#line 51 "accessor_class_list.gperf" + {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, + {""}, +#line 52 "accessor_class_list.gperf" + {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, +#line 182 "accessor_class_list.gperf" + {"smart_table", &grib_accessor_class_smart_table}, + {""}, {""}, +#line 124 "accessor_class_list.gperf" + {"int32_little_endian", &grib_accessor_class_int32_little_endian}, + {""}, +#line 156 "accessor_class_list.gperf" + {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, +#line 170 "accessor_class_list.gperf" + {"scale_values", &grib_accessor_class_scale_values}, +#line 183 "accessor_class_list.gperf" {"smart_table_column", &grib_accessor_class_smart_table_column}, -#line 90 "accessor_class_list.gperf" - {"g1fcperiod", &grib_accessor_class_g1fcperiod}, -#line 83 "accessor_class_list.gperf" - {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, + {""}, {""}, {""}, {""}, {""}, +#line 21 "accessor_class_list.gperf" + {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, +#line 134 "accessor_class_list.gperf" + {"library_version", &grib_accessor_class_library_version}, + {""}, {""}, {""}, +#line 36 "accessor_class_list.gperf" + {"codetable_title", &grib_accessor_class_codetable_title}, + {""}, +#line 201 "accessor_class_list.gperf" + {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, + {""}, +#line 89 "accessor_class_list.gperf" + {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, +#line 150 "accessor_class_list.gperf" + {"number_of_values", &grib_accessor_class_number_of_values}, + {""}, +#line 214 "accessor_class_list.gperf" + {"variable", &grib_accessor_class_variable}, + {""}, {""}, {""}, +#line 80 "accessor_class_list.gperf" + {"evaluate", &grib_accessor_class_evaluate}, +#line 119 "accessor_class_list.gperf" + {"headers_only", &grib_accessor_class_headers_only}, {""}, {""}, #line 74 "accessor_class_list.gperf" {"decimal_precision", &grib_accessor_class_decimal_precision}, -#line 134 "accessor_class_list.gperf" - {"latlonvalues", &grib_accessor_class_latlonvalues}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 40 "accessor_class_list.gperf" - {"count_file", &grib_accessor_class_count_file}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 11 "accessor_class_list.gperf" - {"abstract_vector", &grib_accessor_class_abstract_vector}, - {""}, {""}, {""}, +#line 25 "accessor_class_list.gperf" + {"bufr_group", &grib_accessor_class_bufr_group}, #line 30 "accessor_class_list.gperf" {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, -#line 92 "accessor_class_list.gperf" - {"g1monthlydate", &grib_accessor_class_g1monthlydate}, - {""}, {""}, {""}, {""}, {""}, +#line 135 "accessor_class_list.gperf" + {"local_definition", &grib_accessor_class_local_definition}, + {""}, {""}, {""}, +#line 151 "accessor_class_list.gperf" + {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, +#line 11 "accessor_class_list.gperf" + {"abstract_vector", &grib_accessor_class_abstract_vector}, + {""}, {""}, {""}, {""}, +#line 83 "accessor_class_list.gperf" + {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, + {""}, #line 31 "accessor_class_list.gperf" {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, - {""}, -#line 209 "accessor_class_list.gperf" - {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, - {""}, -#line 36 "accessor_class_list.gperf" - {"codetable_title", &grib_accessor_class_codetable_title}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 153 "accessor_class_list.gperf" - {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, - {""}, {""}, {""}, {""}, + {""}, {""}, {""}, #line 42 "accessor_class_list.gperf" {"count_total", &grib_accessor_class_count_total}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 82 "accessor_class_list.gperf" - {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, - {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, #line 37 "accessor_class_list.gperf" {"codetable_units", &grib_accessor_class_codetable_units}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 152 "accessor_class_list.gperf" + {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, + {""}, +#line 82 "accessor_class_list.gperf" + {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, +#line 137 "accessor_class_list.gperf" + {"long_vector", &grib_accessor_class_long_vector}, +#line 129 "accessor_class_list.gperf" + {"ksec1expver", &grib_accessor_class_ksec1expver}, + {""}, {""}, {""}, +#line 132 "accessor_class_list.gperf" + {"latlon_increment", &grib_accessor_class_latlon_increment}, +#line 208 "accessor_class_list.gperf" + {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, +#line 118 "accessor_class_list.gperf" + {"hash_array", &grib_accessor_class_hash_array}, + {""}, {""}, +#line 107 "accessor_class_list.gperf" + {"g2level", &grib_accessor_class_g2level}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 90 "accessor_class_list.gperf" + {"g1fcperiod", &grib_accessor_class_g1fcperiod}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 133 "accessor_class_list.gperf" + {"latlonvalues", &grib_accessor_class_latlonvalues}, +#line 41 "accessor_class_list.gperf" + {"count_missing", &grib_accessor_class_count_missing}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, #line 10 "accessor_class_list.gperf" {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 92 "accessor_class_list.gperf" + {"g1monthlydate", &grib_accessor_class_g1monthlydate}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 32 "accessor_class_list.gperf" + {"check_internal_version", &grib_accessor_class_check_internal_version}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, #line 88 "accessor_class_list.gperf" {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 32 "accessor_class_list.gperf" - {"check_internal_version", &grib_accessor_class_check_internal_version}, - {""}, {""}, {""}, #line 96 "accessor_class_list.gperf" {"g1verificationdate", &grib_accessor_class_g1verificationdate}, - {""}, -#line 41 "accessor_class_list.gperf" - {"count_missing", &grib_accessor_class_count_missing}, - {""}, {""}, {""}, {""}, -#line 168 "accessor_class_list.gperf" - {"reference_value_error", &grib_accessor_class_reference_value_error}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, #line 94 "accessor_class_list.gperf" {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, #line 93 "accessor_class_list.gperf" {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, #line 98 "accessor_class_list.gperf" {"g2_chemical", &grib_accessor_class_g2_chemical}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 167 "accessor_class_list.gperf" + {"reference_value_error", &grib_accessor_class_reference_value_error}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -638,9 +646,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, #line 91 "accessor_class_list.gperf" {"g1forecastmonth", &grib_accessor_class_g1forecastmonth} }; diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index f32647c89..2b92be7e8 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -115,7 +115,6 @@ { "int16_little_endian", &grib_accessor_class_int16_little_endian, }, { "int32_little_endian", &grib_accessor_class_int32_little_endian, }, { "int64_little_endian", &grib_accessor_class_int64_little_endian, }, -{ "int8", &grib_accessor_class_int8, }, { "iterator", &grib_accessor_class_iterator, }, { "julian_date", &grib_accessor_class_julian_date, }, { "julian_day", &grib_accessor_class_julian_day, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index 41793b6af..253064502 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -116,7 +116,6 @@ ifs_param, &grib_accessor_class_ifs_param int16_little_endian, &grib_accessor_class_int16_little_endian int32_little_endian, &grib_accessor_class_int32_little_endian int64_little_endian, &grib_accessor_class_int64_little_endian -int8, &grib_accessor_class_int8 iterator, &grib_accessor_class_iterator julian_date, &grib_accessor_class_julian_date julian_day, &grib_accessor_class_julian_day From b5b4e9a651267539ae4e38fb9ea0376cf6fe8620 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 20 Aug 2023 18:44:36 +0100 Subject: [PATCH 187/372] Dead code removal: grib_2order_packer_simple --- src/CMakeLists.txt | 1 - src/{ => deprecated}/grib_2order_packer_simple.cc | 0 src/eccodes_prototypes.h | 4 ---- 3 files changed, 5 deletions(-) rename src/{ => deprecated}/grib_2order_packer_simple.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d6bab3e7f..d23d74a08 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -184,7 +184,6 @@ list( APPEND eccodes_src_files grib_accessor_class_data_g1shsimple_packing.cc grib_accessor_class_data_shsimple_packing.cc grib_accessor_class_data_dummy_field.cc - grib_2order_packer_simple.cc grib_accessor_class_variable.cc grib_accessor_class_second_order_bits_per_value.cc grib_accessor_class_data_g2simple_packing.cc diff --git a/src/grib_2order_packer_simple.cc b/src/deprecated/grib_2order_packer_simple.cc similarity index 100% rename from src/grib_2order_packer_simple.cc rename to src/deprecated/grib_2order_packer_simple.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 5a6b0ce0e..e8a5134b2 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -566,10 +566,6 @@ int grib_get_g1_message_size(grib_handle* h, grib_accessor* tl, grib_accessor* s /* grib_accessor_class_data_dummy_field.cc*/ -/* grib_2order_packer_simple.cc*/ -void grib_free_second_order_groups(grib_context* c, second_order_packed* sp); -second_order_packed* grib_get_second_order_groups(grib_context* c, const unsigned long* vals, size_t len); - /* grib_accessor_class_variable.cc*/ void accessor_variable_set_type(grib_accessor* a, int type); From a14370019f54ab2c741f78b528501b77f0ccd0dd Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 20 Aug 2023 19:02:13 +0100 Subject: [PATCH 188/372] Testing: grib timer --- src/grib_timer.cc | 8 +------- tests/CMakeLists.txt | 2 +- tests/grib_ecc-386.cc | 15 +++++++-------- 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/grib_timer.cc b/src/grib_timer.cc index 4d41591de..c0b380c00 100644 --- a/src/grib_timer.cc +++ b/src/grib_timer.cc @@ -338,7 +338,7 @@ grib_timer* grib_get_timer(grib_context* c, const char* name, const char* statna { if (!c) c = grib_context_get_default(); - grib_context_log(c, GRIB_LOG_FATAL, "grib_get_timer function not available"); + grib_context_log(c, GRIB_LOG_ERROR, "%s function not available", __func__); return NULL; } @@ -359,24 +359,18 @@ double grib_timer_value(grib_timer* t) void grib_timer_print(grib_timer* t) { - return; } - void grib_timer_partial_rate(grib_timer* t, double start, long total) { - return; } void grib_print_all_timers() { - return; } void grib_reset_all_timers() { - return; } - #endif diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index fa4cb5545..cce98f1f1 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -456,7 +456,7 @@ if( HAVE_BUILD_TOOLS ) # Performance test. Must have -DENABLE_TIMER=ON ecbuild_add_test( TARGET eccodes_t_grib_ecc-386 TYPE SCRIPT - CONDITION ENABLE_EXTRA_TESTS AND ENABLE_TIMER + CONDITION ENABLE_EXTRA_TESTS COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/grib_ecc-386.sh TEST_DEPENDS eccodes_download_gribs ) else() diff --git a/tests/grib_ecc-386.cc b/tests/grib_ecc-386.cc index 70c430f97..d4e238c4f 100644 --- a/tests/grib_ecc-386.cc +++ b/tests/grib_ecc-386.cc @@ -21,7 +21,6 @@ static void usage(const char* prog) exit(1); } -#ifdef ECCODES_TIMER int main(int argc, char** argv) { grib_timer* tes = grib_get_timer(0, "decoding", 0, 0); @@ -32,7 +31,7 @@ int main(int argc, char** argv) double* values = NULL; double duration_actual = 0; const double duration_max = 3.6; /* seconds */ - const int num_repetitions = 1000; + const int num_repetitions = 100; if (argc < 2) usage(argv[0]); @@ -73,9 +72,9 @@ int main(int argc, char** argv) fclose(in); return 0; } -#else -int main(int argc, char** argv) -{ - return 0; -} -#endif + +// int main(int argc, char** argv) +// { +// return 0; +// } +// #endif From b92bb986687e2940e11409ebbd1682f482d2e7fe Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 20 Aug 2023 19:15:17 +0100 Subject: [PATCH 189/372] Testing: GTS message --- src/grib_accessor_class_message.cc | 3 ++- tests/gts_ls.sh | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/grib_accessor_class_message.cc b/src/grib_accessor_class_message.cc index 3a9ecc910..6a87d00e5 100644 --- a/src/grib_accessor_class_message.cc +++ b/src/grib_accessor_class_message.cc @@ -134,7 +134,8 @@ static void resize(grib_accessor* a, size_t new_size) grib_buffer_replace(a, (const unsigned char*)zero, new_size, 1, 0); grib_context_free(a->context, zero); - grib_context_log(a->context, GRIB_LOG_DEBUG, "resize: grib_accessor_class_message.c %ld %ld %s %s\n", (long)new_size, (long)a->length, a->cclass->name, a->name); + grib_context_log(a->context, GRIB_LOG_DEBUG, "resize: grib_accessor_class_message %ld %ld %s %s", + (long)new_size, (long)a->length, a->cclass->name, a->name); Assert(new_size == a->length); } diff --git a/tests/gts_ls.sh b/tests/gts_ls.sh index 313f7b6df..3de662f3e 100755 --- a/tests/gts_ls.sh +++ b/tests/gts_ls.sh @@ -45,4 +45,12 @@ ${tools_dir}/gts_ls -p TT,AA,II,CCCC,YY,GG,gg,BBB $f 2> $REDIRECT > $res_ls diff $ref_ls $res_ls >$REDIRECT 2> $REDIRECT +#------------------------------------------- +# Decode the key 'theMessage' +#------------------------------------------- +echo 'print "[theMessage]";' | ${tools_dir}/gts_filter - $gts_file + +${tools_dir}/gts_ls -wcount=1 -p theMessage $f + +# Clean up rm -f $fLog $res_ls From 8bd66aa26d4f3b90499c3e715757bb33ccdae927 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 12:29:19 +0100 Subject: [PATCH 190/372] Testing: subarray unpacking --- tests/CMakeLists.txt | 2 ++ tests/grib_unpack_subarray.cc | 47 +++++++++++++++++++++++++++++++++++ tests/grib_unpack_subarray.sh | 20 +++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 tests/grib_unpack_subarray.cc create mode 100755 tests/grib_unpack_subarray.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index cce98f1f1..e4f033d7e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -53,6 +53,7 @@ list(APPEND test_c_bins grib_set_bytes grib_copy_message grib_packing_order + grib_unpack_subarray grib_sh_imag grib_spectral grib_lam_bf @@ -156,6 +157,7 @@ if( HAVE_BUILD_TOOLS ) grib_grid_space_view grib_partial_message grib_headers_only + grib_unpack_subarray grib_count bufr_templates bufr_dump_data diff --git a/tests/grib_unpack_subarray.cc b/tests/grib_unpack_subarray.cc new file mode 100644 index 000000000..a858e17cb --- /dev/null +++ b/tests/grib_unpack_subarray.cc @@ -0,0 +1,47 @@ +/* + * (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" + +int main(int argc, char** argv) +{ + Assert(argc == 2); + + int err = 0; + size_t nvalues = 0; + const char* filename = argv[1]; + grib_context* c = grib_context_get_default(); + + FILE* fin = fopen(filename, "r"); + Assert(fin); + grib_handle* h = grib_handle_new_from_file(0, fin, &err); + Assert(h); + Assert(!err); + + grib_accessor* a = grib_find_accessor(h, "codedValues"); + Assert(a); + GRIB_CHECK(grib_get_size(h, "codedValues", &nvalues), 0); + double* values = (double*)grib_context_malloc(c, sizeof(double) * nvalues); + Assert(values); + + size_t start = nvalues / 10; + size_t len = nvalues / 5; + printf("nvalues=%zu, start=%zu, len=%zu\n", nvalues, start, len); + GRIB_CHECK(grib_unpack_double_subarray(a, values, start, len), 0); + for (size_t i = 0; i < len; ++i) { + printf("v[%zu]=%.10e\n", start + i, values[i]); + } + + grib_context_free(c, values); + grib_handle_delete(h); + fclose(fin); + + return 0; +} diff --git a/tests/grib_unpack_subarray.sh b/tests/grib_unpack_subarray.sh new file mode 100755 index 000000000..43bc730d8 --- /dev/null +++ b/tests/grib_unpack_subarray.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +label="grib_unpack_subarray_test" +temp=${label}".grib.tmp" + +infile=$data_dir/sample.grib2 +$EXEC ${test_dir}/grib_unpack_subarray $infile + +# Clean up +rm -f $temp From 6646a503066366a46256bd5a094e7a6c9bbe3c23 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 12:41:15 +0100 Subject: [PATCH 191/372] Testing: subarray unpacking --- tests/grib_unpack_subarray.cc | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/tests/grib_unpack_subarray.cc b/tests/grib_unpack_subarray.cc index a858e17cb..3321b4040 100644 --- a/tests/grib_unpack_subarray.cc +++ b/tests/grib_unpack_subarray.cc @@ -28,18 +28,25 @@ int main(int argc, char** argv) grib_accessor* a = grib_find_accessor(h, "codedValues"); Assert(a); GRIB_CHECK(grib_get_size(h, "codedValues", &nvalues), 0); - double* values = (double*)grib_context_malloc(c, sizeof(double) * nvalues); - Assert(values); + double* all_values = (double*)grib_context_malloc(c, sizeof(double) * nvalues); + double* sub_values = (double*)grib_context_malloc(c, sizeof(double) * nvalues); + Assert(all_values); + Assert(sub_values); + + size_t len = nvalues; + GRIB_CHECK(grib_unpack_double(a, all_values, &len), 0); size_t start = nvalues / 10; - size_t len = nvalues / 5; + len = nvalues / 5; printf("nvalues=%zu, start=%zu, len=%zu\n", nvalues, start, len); - GRIB_CHECK(grib_unpack_double_subarray(a, values, start, len), 0); + GRIB_CHECK(grib_unpack_double_subarray(a, sub_values, start, len), 0); for (size_t i = 0; i < len; ++i) { - printf("v[%zu]=%.10e\n", start + i, values[i]); + //printf("sub[%zu]=%.10e\n", start + i, sub_values[i]); + Assert(all_values[start+i] == sub_values[i]); } - grib_context_free(c, values); + grib_context_free(c, all_values); + grib_context_free(c, sub_values); grib_handle_delete(h); fclose(fin); From 377850faf47eda082ff7abfec73ab3041ee525f3 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 13:43:54 +0100 Subject: [PATCH 192/372] Comments --- src/grib_api.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/grib_api.h b/src/grib_api.h index 28ff1eec8..0dc7be127 100644 --- a/src/grib_api.h +++ b/src/grib_api.h @@ -614,9 +614,9 @@ int grib_get_data(const grib_handle* h, double* lats, double* lons, double* valu * Get the next value from a geoiterator. * * @param i : the geoiterator - * @param lat : on output latitude in degree - * @param lon : on output longitude in degree - * @param value : on output value of the point + * @param lat : output latitude in degrees + * @param lon : output longitude in degrees + * @param value : output value of the point * @return positive value if successful, 0 if no more data are available */ int grib_iterator_next(grib_iterator* i, double* lat, double* lon, double* value); @@ -625,9 +625,9 @@ int grib_iterator_next(grib_iterator* i, double* lat, double* lon, double* value * Get the previous value from a geoiterator. * * @param i : the geoiterator - * @param lat : on output latitude in degree - * @param lon : on output longitude in degree - * @param value : on output value of the point* + * @param lat : output latitude in degrees + * @param lon : output longitude in degrees + * @param value : output value of the point* * @return positive value if successful, 0 if no more data are available */ int grib_iterator_previous(grib_iterator* i, double* lat, double* lon, double* value); From db60bd75205acfb62ea7449166c8bb497275fc0b Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 13:44:49 +0100 Subject: [PATCH 193/372] Testing: Geoiterator previous --- tests/grib_geo_iter.cc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/grib_geo_iter.cc b/tests/grib_geo_iter.cc index 28b7603fe..b9d23830f 100644 --- a/tests/grib_geo_iter.cc +++ b/tests/grib_geo_iter.cc @@ -73,6 +73,22 @@ int main(int argc, char** argv) Assert(grib_iterator_has_next(iter) == 0); + { + // Test getting the previous value from a geoiterator. + // Note: Only implemented for regular grids + char gridType[128] = {0,}; + size_t len = sizeof(gridType); + GRIB_CHECK(grib_get_string(h, "gridType", gridType, &len), 0); + if (strstr(gridType, "regular_")) { + double last_lat = 0, last_lon = 0, last_value = 0; + int result = grib_iterator_previous(iter, &last_lat, &last_lon, &last_value); + Assert(result == 1); + Assert(lat == last_lat); + Assert(lon == last_lon); + Assert(value == last_value); + } + } + grib_iterator_delete(iter); grib_handle_delete(h); From e8d0eaa3cd082f030c75c2c9dc9def9f59f3b944 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 13:52:22 +0100 Subject: [PATCH 194/372] Comments --- src/eccodes.h | 16 ++++++++-------- src/grib_api.h | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/eccodes.h b/src/eccodes.h index b5d42c955..e2ddb6588 100644 --- a/src/eccodes.h +++ b/src/eccodes.h @@ -606,9 +606,9 @@ int codes_grib_get_data(const codes_handle* h, double* lats, double* lons, doubl * Get the next value from a geoiterator. * * @param i : the geoiterator - * @param lat : on output latitude in degree - * @param lon : on output longitude in degree - * @param value : on output value of the point + * @param lat : output latitude in degrees + * @param lon : output longitude in degrees + * @param value : output value of the point * @return positive value if successful, 0 if no more data are available */ int codes_grib_iterator_next(codes_iterator* i, double* lat, double* lon, double* value); @@ -617,9 +617,9 @@ int codes_grib_iterator_next(codes_iterator* i, double* lat, double* lon, double * Get the previous value from a geoiterator. * * @param i : the geoiterator - * @param lat : on output latitude in degree - * @param lon : on output longitude in degree - * @param value : on output value of the point* + * @param lat : output latitude in degrees + * @param lon : output longitude in degrees + * @param value : output value of the point* * @return positive value if successful, 0 if no more data are available */ int codes_grib_iterator_previous(codes_iterator* i, double* lat, double* lon, double* value); @@ -628,7 +628,7 @@ int codes_grib_iterator_previous(codes_iterator* i, double* lat, double* lon, do * Test procedure for values in a geoiterator. * * @param i : the geoiterator - * @return boolean, 1 if the iterator still nave next values, 0 otherwise + * @return boolean, 1 if the iterator still has next values, 0 otherwise */ int codes_grib_iterator_has_next(codes_iterator* i); @@ -685,7 +685,7 @@ int codes_grib_nearest_find(codes_nearest* nearest, const codes_handle* h, doubl /** * Frees a nearest object from memory * - * @param nearest : the nearest + * @param nearest : the nearest neighbour object * @return 0 if OK, integer value on error */ int codes_grib_nearest_delete(codes_nearest* nearest); diff --git a/src/grib_api.h b/src/grib_api.h index 0dc7be127..6b0f82b4e 100644 --- a/src/grib_api.h +++ b/src/grib_api.h @@ -599,7 +599,7 @@ grib_iterator* grib_iterator_new(const grib_handle* h, unsigned long flags, int* /** * Get latitude/longitude and data values. - * The Latitudes, longitudes and values arrays must be properly allocated by the caller. + * The latitudes, longitudes and values arrays must be properly allocated by the caller. * Their required dimension can be obtained by getting the value of the integer key "numberOfPoints". * * @param h : handle from which geography and data values are taken @@ -636,7 +636,7 @@ int grib_iterator_previous(grib_iterator* i, double* lat, double* lon, double* v * Test procedure for values in a geoiterator. * * @param i : the geoiterator - * @return boolean, 1 if the geoiterator still nave next values, 0 otherwise + * @return boolean, 1 if the geoiterator still has next values, 0 otherwise */ int grib_iterator_has_next(grib_iterator* i); From 5c9f0a04b872ec374ec6c606bb2c969b788d8780 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 16:23:58 +0100 Subject: [PATCH 195/372] Testing: substring invalid cases --- tests/filter_substr.sh | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/filter_substr.sh b/tests/filter_substr.sh index bcf29ef44..37ffadbcc 100755 --- a/tests/filter_substr.sh +++ b/tests/filter_substr.sh @@ -34,5 +34,19 @@ EOF ${tools_dir}/grib_filter - $sample 2>$temp < 0" $temp + +${tools_dir}/grib_filter - $sample 2>$temp < Date: Mon, 21 Aug 2023 16:41:26 +0100 Subject: [PATCH 196/372] Testing: dump with different flags --- tests/grib_dump_samples.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/grib_dump_samples.sh b/tests/grib_dump_samples.sh index db5baaaa4..327c39aef 100755 --- a/tests/grib_dump_samples.sh +++ b/tests/grib_dump_samples.sh @@ -31,6 +31,7 @@ samples=" for sfile in $samples; do sample="$ECCODES_SAMPLES_PATH/$sfile" ${tools_dir}/grib_dump -O $sample >/dev/null + ${tools_dir}/grib_dump -atH $sample >/dev/null done # Test grib_dump with -t option From 04ee038a95e97c8a51801433ca1cb7c6a721f63f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 17:26:56 +0100 Subject: [PATCH 197/372] Testing: dump with different flags --- src/grib_dumper_class_wmo.cc | 44 ++++++++++++++---------------------- tests/grib_dump_samples.sh | 2 +- 2 files changed, 18 insertions(+), 28 deletions(-) diff --git a/src/grib_dumper_class_wmo.cc b/src/grib_dumper_class_wmo.cc index 7c898543a..a884d2966 100644 --- a/src/grib_dumper_class_wmo.cc +++ b/src/grib_dumper_class_wmo.cc @@ -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" #include /* @@ -225,7 +220,7 @@ static void dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) err = grib_unpack_long(a, &value, &size); set_begin_end(d, a); - /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + //for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); print_offset(self->dumper.out, self->begin, self->theEnd); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) fprintf(self->dumper.out, "%s (int) ", a->creator->op); @@ -239,7 +234,7 @@ static void dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) } if(comment) { - /* ECC-1186: Whole comment is too big, so pick the part that follows the ':' i.e. flag table file */ + // ECC-1186: Whole comment is too big, so pick the part that follows the ':' i.e. flag table file const char* p = strchr(comment, ':'); if (p) fprintf(self->dumper.out," (%s) ]", p+1); else fprintf(self->dumper.out, "]"); @@ -271,7 +266,7 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) err = grib_unpack_double(a, &value, &size); set_begin_end(d, a); - /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + //for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); print_offset(self->dumper.out, self->begin, self->theEnd); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) @@ -281,7 +276,7 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, "%s = MISSING", a->name); else fprintf(self->dumper.out, "%s = %g", a->name, value); - /*if(comment) fprintf(self->dumper.out," [%s]",comment);*/ + // if(comment) fprintf(self->dumper.out," [%s]",comment); if (err == 0) print_hexadecimal(self->dumper.out, d->option_flags, a); @@ -322,7 +317,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) p++; } - /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + //for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); print_offset(self->dumper.out, self->begin, self->theEnd); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) fprintf(self->dumper.out, "%s (str) ", a->creator->op); @@ -332,7 +327,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (err == 0) print_hexadecimal(self->dumper.out, d->option_flags, a); - /*if(comment) fprintf(self->dumper.out," [%s]",comment);*/ + // if(comment) fprintf(self->dumper.out," [%s]",comment); if (err) fprintf(self->dumper.out, " *** ERR=%d (%s) [grib_dumper_wmo::dump_string]", err, grib_get_error_message(err)); aliases(d, a); @@ -354,7 +349,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) set_begin_end(d, a); - /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + // for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); print_offset(self->dumper.out, self->begin, self->theEnd); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) fprintf(self->dumper.out, "%s ", a->creator->op); @@ -388,7 +383,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) } k = 0; - /* if(size > 100) size = 100; */ + // if(size > 100) size = 100; while (k < size) { int j; for (i = 0; i < d->depth + 3; i++) @@ -438,12 +433,11 @@ static void dump_values(grib_dumper* d, grib_accessor* a) set_begin_end(d, a); - /* For the DIAG pseudo GRIBs. Key charValues uses 1-byte integers to represent a character */ + // For the DIAG pseudo GRIBs. Key charValues uses 1-byte integers to represent a character if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE) { is_char = 1; } - /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ print_offset(self->dumper.out, self->begin, self->theEnd); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) { char type_name[32] = ""; @@ -487,7 +481,6 @@ static void dump_values(grib_dumper* d, grib_accessor* a) k = 0; while (k < size) { int j; - /*for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," ");*/ for (j = 0; j < 8 && k < size; j++, k++) { if (is_char) fprintf(self->dumper.out, "'%c'", (char)buf[k]); @@ -503,21 +496,19 @@ static void dump_values(grib_dumper* d, grib_accessor* a) // fprintf(self->dumper.out, "%d %g\n", k, buf[k]); } if (more) { - /*for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," ");*/ + //for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); fprintf(self->dumper.out, "... %lu more values\n", (unsigned long)more); } - /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ fprintf(self->dumper.out, "} # %s %s \n", a->creator->op, a->name); grib_context_free(d->context, buf); } static void dump_label(grib_dumper* d, grib_accessor* a, const char* comment) { - /*grib_dumper_wmo *self = (grib_dumper_wmo*)d; - - for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); - fprintf(self->dumper.out,"----> %s %s %s\n",a->creator->op, a->name,comment?comment:"");*/ +// grib_dumper_wmo *self = (grib_dumper_wmo*)d; +// for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); +// fprintf(self->dumper.out,"----> %s %s %s\n",a->creator->op, a->name,comment?comment:""); } static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) @@ -531,7 +522,6 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso if (!strncmp(a->name, "section", 7)) is_wmo_section = 1; - /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ if (is_wmo_section) { upper = (char*)malloc(strlen(a->name) + 1); Assert(upper); @@ -551,13 +541,13 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso else { } - /*printf("------------- section_offset = %ld\n",self->section_offset);*/ + //printf("------------- section_offset = %ld\n",self->section_offset); d->depth += 3; grib_dump_accessors_block(d, block); d->depth -= 3; - /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ - /*fprintf(self->dumper.out,"<===== %s %s\n",a->creator->op, a->name);*/ + //for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + //fprintf(self->dumper.out,"<===== %s %s\n",a->creator->op, a->name); } static void set_begin_end(grib_dumper* d, grib_accessor* a) @@ -631,7 +621,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm err = grib_unpack_string_array(a, values, &size); - /* print_offset(self->dumper.out,d,a); */ + // print_offset(self->dumper.out,d,a); print_offset(self->dumper.out, self->begin, self->theEnd); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) { diff --git a/tests/grib_dump_samples.sh b/tests/grib_dump_samples.sh index 327c39aef..ba4f7d870 100755 --- a/tests/grib_dump_samples.sh +++ b/tests/grib_dump_samples.sh @@ -30,7 +30,7 @@ samples=" for sfile in $samples; do sample="$ECCODES_SAMPLES_PATH/$sfile" - ${tools_dir}/grib_dump -O $sample >/dev/null + ${tools_dir}/grib_dump -Oa $sample >/dev/null ${tools_dir}/grib_dump -atH $sample >/dev/null done From bbbd74e50b9eafbc614f69ebc5b0eda106d4050c Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 17:34:27 +0100 Subject: [PATCH 198/372] Dead code removal: Unused functions --- src/eccodes_prototypes.h | 2 -- src/grib_bufr_descriptor.cc | 14 -------------- 2 files changed, 16 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index e8a5134b2..5642a64db 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -183,8 +183,6 @@ void grib_hash_array_value_delete(grib_context* c, grib_hash_array_value* v); bufr_descriptor* grib_bufr_descriptor_new(grib_accessor* tables_accessor, int code, int silent, int* err); bufr_descriptor* grib_bufr_descriptor_clone(bufr_descriptor* d); int grib_bufr_descriptor_set_code(grib_accessor* tables_accessor, int code, bufr_descriptor* v); -void grib_bufr_descriptor_set_reference(bufr_descriptor* v, long reference); -void grib_bufr_descriptor_set_width(bufr_descriptor* v, long width); void grib_bufr_descriptor_set_scale(bufr_descriptor* v, long scale); int grib_bufr_descriptor_can_be_missing(bufr_descriptor* v); void grib_bufr_descriptor_delete(bufr_descriptor* v); diff --git a/src/grib_bufr_descriptor.cc b/src/grib_bufr_descriptor.cc index 68aa7e290..fa653bc29 100644 --- a/src/grib_bufr_descriptor.cc +++ b/src/grib_bufr_descriptor.cc @@ -89,20 +89,6 @@ int grib_bufr_descriptor_set_code(grib_accessor* tables_accessor, int code, bufr return err; } -void grib_bufr_descriptor_set_reference(bufr_descriptor* v, long reference) -{ - if (!v) - return; - v->reference = reference; -} - -void grib_bufr_descriptor_set_width(bufr_descriptor* v, long width) -{ - if (!v) - return; - v->width = width; -} - void grib_bufr_descriptor_set_scale(bufr_descriptor* v, long scale) { if (!v) From 47c844db78ddd442b333abb4cea836cd43e25838 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 17:41:25 +0100 Subject: [PATCH 199/372] Dead code removal: Unused functions --- src/eccodes_prototypes.h | 2 -- src/grib_bufr_descriptors_array.cc | 10 +++++----- src/grib_darray.cc | 22 +++++++++++----------- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 5642a64db..ac0f6012a 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -189,7 +189,6 @@ void grib_bufr_descriptor_delete(bufr_descriptor* v); /* grib_bufr_descriptors_array.cc*/ bufr_descriptors_array* grib_bufr_descriptors_array_new(grib_context* c, size_t size, size_t incsize); -bufr_descriptor* grib_bufr_descriptors_array_pop(bufr_descriptors_array* a); bufr_descriptor* grib_bufr_descriptors_array_pop_front(bufr_descriptors_array* a); bufr_descriptors_array* grib_bufr_descriptors_array_push(bufr_descriptors_array* v, bufr_descriptor* val); bufr_descriptors_array* grib_bufr_descriptors_array_append(bufr_descriptors_array* v, bufr_descriptors_array* ar); @@ -206,7 +205,6 @@ void grib_darray_print(const char* title, const grib_darray* darray); grib_darray* grib_darray_new(grib_context* c, size_t size, size_t incsize); grib_darray* grib_darray_push(grib_context* c, grib_darray* v, double val); void grib_darray_delete(grib_context* c, grib_darray* v); -double* grib_darray_get_array(grib_context* c, grib_darray* v); int grib_darray_is_constant(grib_darray* v, double epsilon); size_t grib_darray_used_size(grib_darray* v); diff --git a/src/grib_bufr_descriptors_array.cc b/src/grib_bufr_descriptors_array.cc index a5967f26c..49a0db7f9 100644 --- a/src/grib_bufr_descriptors_array.cc +++ b/src/grib_bufr_descriptors_array.cc @@ -40,11 +40,11 @@ bufr_descriptors_array* grib_bufr_descriptors_array_new(grib_context* c, size_t return v; } -bufr_descriptor* grib_bufr_descriptors_array_pop(bufr_descriptors_array* a) -{ - a->n -= 1; - return a->v[a->n]; -} +// bufr_descriptor* grib_bufr_descriptors_array_pop(bufr_descriptors_array* a) +// { +// a->n -= 1; +// return a->v[a->n]; +// } bufr_descriptor* grib_bufr_descriptors_array_pop_front(bufr_descriptors_array* a) { diff --git a/src/grib_darray.cc b/src/grib_darray.cc index 3646e6937..582e62255 100644 --- a/src/grib_darray.cc +++ b/src/grib_darray.cc @@ -104,17 +104,17 @@ void grib_darray_delete(grib_context* c, grib_darray* v) grib_context_free(c, v); } -double* grib_darray_get_array(grib_context* c, grib_darray* v) -{ - double* ret = NULL; - size_t i = 0; - if (!v) - return NULL; - ret = (double*)grib_context_malloc_clear(c, sizeof(double) * v->n); - for (i = 0; i < v->n; i++) - ret[i] = v->v[i]; - return ret; -} +// double* grib_darray_get_array(grib_context* c, grib_darray* v) +// { +// double* ret = NULL; +// size_t i = 0; +// if (!v) +// return NULL; +// ret = (double*)grib_context_malloc_clear(c, sizeof(double) * v->n); +// for (i = 0; i < v->n; i++) +// ret[i] = v->v[i]; +// return ret; +// } int grib_darray_is_constant(grib_darray* v, double epsilon) { From c3a333e8651910a5bc4128827e0db9397523c92e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 17:47:04 +0100 Subject: [PATCH 200/372] Dead code removal: Unused functions --- src/eccodes_prototypes.h | 2 -- src/grib_bufr_descriptors_array.cc | 54 ++++++++++++++---------------- 2 files changed, 26 insertions(+), 30 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index ac0f6012a..7e551e962 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -192,9 +192,7 @@ bufr_descriptors_array* grib_bufr_descriptors_array_new(grib_context* c, size_t bufr_descriptor* grib_bufr_descriptors_array_pop_front(bufr_descriptors_array* a); bufr_descriptors_array* grib_bufr_descriptors_array_push(bufr_descriptors_array* v, bufr_descriptor* val); bufr_descriptors_array* grib_bufr_descriptors_array_append(bufr_descriptors_array* v, bufr_descriptors_array* ar); -bufr_descriptors_array* grib_bufr_descriptors_array_push_front(bufr_descriptors_array* v, bufr_descriptor* val); bufr_descriptor* grib_bufr_descriptors_array_get(bufr_descriptors_array* a, size_t i); -void grib_bufr_descriptors_array_set(bufr_descriptors_array* a, size_t i, bufr_descriptor* v); void grib_bufr_descriptors_array_delete(bufr_descriptors_array* v); void grib_bufr_descriptors_array_delete_array(bufr_descriptors_array* v); bufr_descriptor** grib_bufr_descriptors_array_get_array(bufr_descriptors_array* v); diff --git a/src/grib_bufr_descriptors_array.cc b/src/grib_bufr_descriptors_array.cc index 49a0db7f9..b221fea75 100644 --- a/src/grib_bufr_descriptors_array.cc +++ b/src/grib_bufr_descriptors_array.cc @@ -135,40 +135,38 @@ bufr_descriptors_array* grib_bufr_descriptors_array_append(bufr_descriptors_arra return v; } -bufr_descriptors_array* grib_bufr_descriptors_array_push_front(bufr_descriptors_array* v, bufr_descriptor* val) -{ - size_t i = 0; - if (!v) { - size_t start_size = DYN_ARRAY_SIZE_INIT; - size_t start_incsize = DYN_ARRAY_SIZE_INCR; - v = grib_bufr_descriptors_array_new(0, start_size, start_incsize); - } - - if (v->number_of_pop_front) { - v->v--; - v->number_of_pop_front--; - } - else { - if (v->n >= v->size) - v = grib_bufr_descriptors_array_resize(v); - for (i = v->n; i > 0; i--) - v[i] = v[i - 1]; - } - v->v[0] = val; - v->n++; - - return v; -} +// bufr_descriptors_array* grib_bufr_descriptors_array_push_front(bufr_descriptors_array* v, bufr_descriptor* val) +// { +// size_t i = 0; +// if (!v) { +// size_t start_size = DYN_ARRAY_SIZE_INIT; +// size_t start_incsize = DYN_ARRAY_SIZE_INCR; +// v = grib_bufr_descriptors_array_new(0, start_size, start_incsize); +// } +// if (v->number_of_pop_front) { +// v->v--; +// v->number_of_pop_front--; +// } +// else { +// if (v->n >= v->size) +// v = grib_bufr_descriptors_array_resize(v); +// for (i = v->n; i > 0; i--) +// v[i] = v[i - 1]; +// } +// v->v[0] = val; +// v->n++; +// return v; +// } bufr_descriptor* grib_bufr_descriptors_array_get(bufr_descriptors_array* a, size_t i) { return a->v[i]; } -void grib_bufr_descriptors_array_set(bufr_descriptors_array* a, size_t i, bufr_descriptor* v) -{ - a->v[i] = v; -} +// void grib_bufr_descriptors_array_set(bufr_descriptors_array* a, size_t i, bufr_descriptor* v) +// { +// a->v[i] = v; +// } void grib_bufr_descriptors_array_delete(bufr_descriptors_array* v) { From 47588fd2771af63e2a158add3b1dac2edce3fd59 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 17:49:40 +0100 Subject: [PATCH 201/372] Dead code removal: Unused functions --- src/eccodes_prototypes.h | 1 - src/grib_bufr_descriptors_array.cc | 22 ++++++++++------------ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 7e551e962..955c4b370 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -195,7 +195,6 @@ bufr_descriptors_array* grib_bufr_descriptors_array_append(bufr_descriptors_arra bufr_descriptor* grib_bufr_descriptors_array_get(bufr_descriptors_array* a, size_t i); void grib_bufr_descriptors_array_delete(bufr_descriptors_array* v); void grib_bufr_descriptors_array_delete_array(bufr_descriptors_array* v); -bufr_descriptor** grib_bufr_descriptors_array_get_array(bufr_descriptors_array* v); size_t grib_bufr_descriptors_array_used_size(bufr_descriptors_array* v); /* grib_darray.cc*/ diff --git a/src/grib_bufr_descriptors_array.cc b/src/grib_bufr_descriptors_array.cc index b221fea75..0134048a2 100644 --- a/src/grib_bufr_descriptors_array.cc +++ b/src/grib_bufr_descriptors_array.cc @@ -201,18 +201,16 @@ void grib_bufr_descriptors_array_delete_array(bufr_descriptors_array* v) } } -bufr_descriptor** grib_bufr_descriptors_array_get_array(bufr_descriptors_array* v) -{ - bufr_descriptor** vv; - size_t i; - grib_context* c = grib_context_get_default(); - - vv = (bufr_descriptor**)grib_context_malloc_clear(c, sizeof(bufr_descriptor*) * v->n); - for (i = 0; i < v->n; i++) - vv[i] = grib_bufr_descriptor_clone(v->v[i]); - - return vv; -} +// bufr_descriptor** grib_bufr_descriptors_array_get_array(bufr_descriptors_array* v) +// { +// bufr_descriptor** vv; +// size_t i; +// grib_context* c = grib_context_get_default(); +// vv = (bufr_descriptor**)grib_context_malloc_clear(c, sizeof(bufr_descriptor*) * v->n); +// for (i = 0; i < v->n; i++) +// vv[i] = grib_bufr_descriptor_clone(v->v[i]); +// return vv; +// } size_t grib_bufr_descriptors_array_used_size(bufr_descriptors_array* v) { From 33cd110bd1a9b2dc20aada90214f5f7973d5063f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 18:56:17 +0100 Subject: [PATCH 202/372] Definitions: cleanup --- definitions/bufr/boot_edition_1.def | 6 +++--- definitions/bufr/boot_edition_2.def | 10 +++++----- definitions/bufr/boot_edition_3.def | 8 ++++---- definitions/bufr/boot_edition_4.def | 10 +++++----- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/definitions/bufr/boot_edition_1.def b/definitions/bufr/boot_edition_1.def index bbf700062..1949309bd 100644 --- a/definitions/bufr/boot_edition_1.def +++ b/definitions/bufr/boot_edition_1.def @@ -1,6 +1,6 @@ # (C) Copyright 2005- ECMWF. -ascii[4] identifier = "BUFR" : read_only,hidden; +ascii[4] identifier = "BUFR" : read_only,hidden; alias identifier=identifier; unsigned[3] section1Length; @@ -8,7 +8,7 @@ unsigned[3] section1Length; unsigned[1] edition = 1 : dump; alias editionNumber=edition; -template section_1 "bufr/section.1.1.def"; +template section_1 "bufr/section.1.1.def"; flagbit localSectionPresent(section1Flags,7) = 1; alias section2Present=localSectionPresent; @@ -18,7 +18,7 @@ if(localSectionPresent){ template section_2 "bufr/section.2.def"; } else { - transient section2Length = 0; + transient section2Length = 0; } template section_3 "bufr/section.3.def"; diff --git a/definitions/bufr/boot_edition_2.def b/definitions/bufr/boot_edition_2.def index 88ccefaf1..bfa052117 100644 --- a/definitions/bufr/boot_edition_2.def +++ b/definitions/bufr/boot_edition_2.def @@ -1,24 +1,24 @@ # (C) Copyright 2005- ECMWF. -ascii[4] identifier = "BUFR" : read_only,hidden; +ascii[4] identifier = "BUFR" : read_only,hidden; alias identifier=identifier; -unsigned[3] totalLength; +unsigned[3] totalLength; unsigned[1] edition = 2 : dump; alias editionNumber=edition; -template section_1 "bufr/section.1.2.def"; +template section_1 "bufr/section.1.2.def"; flagbit localSectionPresent(section1Flags,7) = 1; alias section2Present=localSectionPresent; alias localUsePresent=localSectionPresent; if(localSectionPresent){ - template section_2 "bufr/section.2.def"; + template section_2 "bufr/section.2.def"; } else { - transient section2Length = 0; + transient section2Length = 0; } template section_3 "bufr/section.3.def"; diff --git a/definitions/bufr/boot_edition_3.def b/definitions/bufr/boot_edition_3.def index a05dd8ea9..a34ab4b7f 100644 --- a/definitions/bufr/boot_edition_3.def +++ b/definitions/bufr/boot_edition_3.def @@ -1,9 +1,9 @@ # (C) Copyright 2005- ECMWF. -ascii[4] identifier = "BUFR" : read_only,hidden; +ascii[4] identifier = "BUFR" : read_only,hidden; alias identifier=identifier; -section_length[3] totalLength ; +section_length[3] totalLength ; unsigned[1] edition = 3 : dump; alias editionNumber=edition; @@ -15,10 +15,10 @@ alias section2Present=localSectionPresent; alias localUsePresent=localSectionPresent; if(localSectionPresent){ - template section_2 "bufr/section.2.def"; + template section_2 "bufr/section.2.def"; } else { - transient section2Length = 0; + transient section2Length = 0; } template section_3 "bufr/section.3.def"; diff --git a/definitions/bufr/boot_edition_4.def b/definitions/bufr/boot_edition_4.def index 0f8fa73ac..63d6f6430 100644 --- a/definitions/bufr/boot_edition_4.def +++ b/definitions/bufr/boot_edition_4.def @@ -1,23 +1,23 @@ # (C) Copyright 2005- ECMWF. -ascii[4] identifier = "BUFR" : read_only,hidden; +ascii[4] identifier = "BUFR" : read_only,hidden; alias identifier=identifier; -section_length[3] totalLength ; +section_length[3] totalLength ; unsigned[1] edition = 4 : dump; alias editionNumber=edition; -template section_1 "bufr/section.1.4.def"; +template section_1 "bufr/section.1.4.def"; flagbit localSectionPresent(section1Flags,7) = 1; alias section2Present=localSectionPresent; alias localUsePresent=localSectionPresent; if(localSectionPresent){ - template section_2 "bufr/section.2.def"; + template section_2 "bufr/section.2.def"; } else { - transient section2Length = 0; + transient section2Length = 0; } template section_3 "bufr/section.3.def"; From 20060abf93118b53ce4dc38318d22c0b73feadfd Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 18:56:39 +0100 Subject: [PATCH 203/372] Testing: BUFR editions --- tests/bufr_change_edition.sh | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/tests/bufr_change_edition.sh b/tests/bufr_change_edition.sh index 98228556a..b21cfc482 100755 --- a/tests/bufr_change_edition.sh +++ b/tests/bufr_change_edition.sh @@ -15,7 +15,8 @@ cd ${data_dir}/bufr # Define a common label for all the tmp files label="bufr_change_edition_test" -fBufrTmp=${label}".bufr.tmp" +tempBufr=temp.${label}".bufr" +tempLog=temp.$label.log bufr_files=`cat ${data_dir}/bufr/bufr_data_files.txt` @@ -23,12 +24,24 @@ for f in ${bufr_files}; do if [ "$f" = "ias1_240.bufr" ]; then continue; fi # Convert to BUFR edition 4 - ${tools_dir}/bufr_set -s editionNumber=4 $f $fBufrTmp - ${tools_dir}/bufr_compare -b edition $f $fBufrTmp + ${tools_dir}/bufr_set -s editionNumber=4 $f $tempBufr + ${tools_dir}/bufr_compare -b edition $f $tempBufr - ed=`${tools_dir}/bufr_get -w count=1 -p editionNumber $fBufrTmp` + ed=`${tools_dir}/bufr_get -w count=1 -p editionNumber $tempBufr` [ "$ed" = "4" ] - done -rm -f $fBufrTmp +# Unsupported editions +# ----------------------- +f=$ECCODES_SAMPLES_PATH/BUFR3.tmpl +${tools_dir}/bufr_set -s edition=1 $f $tempBufr +set +e +${tools_dir}/bufr_dump -O $tempBufr > $tempLog 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "unreadable message" $tempLog + + +# Clean up +rm -f $tempBufr $tempLog From 1e2b4472de7be07fe149ca52d975fdc08d47141e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 19:22:14 +0100 Subject: [PATCH 204/372] Dead code removal: Unused functions --- src/grib_accessor_class_constant.cc | 34 +++++------------------------ 1 file changed, 5 insertions(+), 29 deletions(-) diff --git a/src/grib_accessor_class_constant.cc b/src/grib_accessor_class_constant.cc index 0d48cddcf..b54de5b88 100644 --- a/src/grib_accessor_class_constant.cc +++ b/src/grib_accessor_class_constant.cc @@ -20,7 +20,7 @@ START_CLASS_DEF CLASS = accessor SUPER = grib_accessor_class_variable - IMPLEMENTS = init;pack_double;pack_long;pack_string;pack_bytes + IMPLEMENTS = init END_CLASS_DEF */ @@ -35,10 +35,6 @@ or edit "accessor.class" and rerun ./make_class.pl */ -static int pack_bytes(grib_accessor*, const unsigned char*, size_t* len); -static int pack_double(grib_accessor*, const double* val, size_t* len); -static int pack_long(grib_accessor*, const long* val, size_t* len); -static int pack_string(grib_accessor*, const char*, size_t* len); static void init(grib_accessor*, const long, grib_arguments*); typedef struct grib_accessor_constant @@ -75,17 +71,17 @@ static grib_accessor_class _grib_accessor_class_constant = { 0, /* get sub_section */ 0, /* pack_missing */ 0, /* is_missing */ - &pack_long, /* pack_long */ + 0, /* pack_long */ 0, /* unpack_long */ - &pack_double, /* pack_double */ + 0, /* pack_double */ 0, /* pack_float */ 0, /* unpack_double */ 0, /* unpack_float */ - &pack_string, /* pack_string */ + 0, /* pack_string */ 0, /* unpack_string */ 0, /* pack_string_array */ 0, /* unpack_string_array */ - &pack_bytes, /* pack_bytes */ + 0, /* pack_bytes */ 0, /* unpack_bytes */ 0, /* pack_expression */ 0, /* notify_change */ @@ -113,23 +109,3 @@ static void init(grib_accessor* a, const long len, grib_arguments* arg) { a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; } - -static int pack_bytes(grib_accessor* a, const unsigned char* val, size_t* len) -{ - return GRIB_READ_ONLY; -} - -static int pack_double(grib_accessor* a, const double* val, size_t* len) -{ - return GRIB_READ_ONLY; -} - -static int pack_long(grib_accessor* a, const long* val, size_t* len) -{ - return GRIB_READ_ONLY; -} - -static int pack_string(grib_accessor* a, const char* val, size_t* len) -{ - return GRIB_READ_ONLY; -} From e81ce8098fa0a3e8b1e6f48b3ff182a7c0ac187e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 19:30:52 +0100 Subject: [PATCH 205/372] Testing: swapScanningAlternativeRows --- tests/grib_change_scanning.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/grib_change_scanning.sh b/tests/grib_change_scanning.sh index 2312c1ca3..25c5e005b 100755 --- a/tests/grib_change_scanning.sh +++ b/tests/grib_change_scanning.sh @@ -121,6 +121,14 @@ status=$? set -e [ $status -ne 0 ] +# Invalid Ni/Nj +${tools_dir}/grib_set -s Ni=9 $ECCODES_SAMPLES_PATH/GRIB2.tmpl $tempGribA +set +e +${tools_dir}/grib_set -s swapScanningAlternativeRows=1 $tempGribA $tempGribB +status=$? +set -e +[ $status -ne 0 ] + # ECC-1492 grib_check_key_equals "$ECCODES_SAMPLES_PATH/GRIB1.tmpl" iScansNegatively,iScansPositively '0 1' grib_check_key_equals "$ECCODES_SAMPLES_PATH/GRIB1.tmpl" jScansNegatively,jScansPositively '1 0' From 988e817ef159252b5f05e338fbfa01bbad3503f8 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 22:02:03 +0100 Subject: [PATCH 206/372] Dead code removal: Unused functions --- src/eccodes_prototypes.h | 2 - src/grib_accessor_class_gen.cc | 10 ++-- src/grib_iarray.cc | 83 ++++++++++++++++------------------ tests/unit_tests.cc | 34 ++++++++++++++ 4 files changed, 79 insertions(+), 50 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 955c4b370..ec0a32c24 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -228,8 +228,6 @@ grib_iarray* grib_iarray_new(grib_context* c, size_t size, size_t incsize); long grib_iarray_pop(grib_iarray* a); long grib_iarray_pop_front(grib_iarray* a); grib_iarray* grib_iarray_push(grib_iarray* v, long val); -grib_iarray* grib_iarray_push_front(grib_iarray* v, long val); -grib_iarray* grib_iarray_push_array(grib_iarray* v, long* val, size_t size); void grib_iarray_delete(grib_iarray* v); void grib_iarray_delete_array(grib_iarray* v); long* grib_iarray_get_array(grib_iarray* v); diff --git a/src/grib_accessor_class_gen.cc b/src/grib_accessor_class_gen.cc index 4846fc5d7..9f4a7dbdd 100644 --- a/src/grib_accessor_class_gen.cc +++ b/src/grib_accessor_class_gen.cc @@ -356,10 +356,12 @@ static int unpack_float(grib_accessor* a, float* v, size_t* len) static int unpack_string(grib_accessor* a, char* v, size_t* len) { + int err = 0; if (a->cclass->unpack_double && a->cclass->unpack_double != &unpack_double) { double val = 0.0; size_t l = 1; - grib_unpack_double(a, &val, &l); + err = grib_unpack_double(a, &val, &l); + if (err) return err; snprintf(v, 64, "%g", val); *len = strlen(v); grib_context_log(a->context, GRIB_LOG_DEBUG, "Casting double %s to string", a->name); @@ -369,7 +371,8 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) if (a->cclass->unpack_long && a->cclass->unpack_long != &unpack_long) { long val = 0; size_t l = 1; - grib_unpack_long(a, &val, &l); + err = grib_unpack_long(a, &val, &l); + if (err) return err; snprintf(v, 64, "%ld", val); *len = strlen(v); grib_context_log(a->context, GRIB_LOG_DEBUG, "Casting long %s to string\n", a->name); @@ -388,7 +391,8 @@ static int unpack_string_array(grib_accessor* a, char** v, size_t* len) if (err) return err; v[0] = (char*)grib_context_malloc_clear(a->context, length); - grib_unpack_string(a, v[0], &length); + err = grib_unpack_string(a, v[0], &length); + if (err) return err; *len = 1; return GRIB_SUCCESS; diff --git a/src/grib_iarray.cc b/src/grib_iarray.cc index 93621dd83..fcc64e181 100644 --- a/src/grib_iarray.cc +++ b/src/grib_iarray.cc @@ -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" /* For debugging purposes */ @@ -142,48 +138,45 @@ grib_iarray* grib_iarray_push(grib_iarray* v, long val) return v; } -grib_iarray* grib_iarray_push_front(grib_iarray* v, long val) -{ - size_t start_size = 100; - size_t start_incsize = 100; - size_t i; - if (!v) - v = grib_iarray_new(0, start_size, start_incsize); +// grib_iarray* grib_iarray_push_front(grib_iarray* v, long val) +// { +// size_t start_size = 100; +// size_t start_incsize = 100; +// size_t i; +// if (!v) +// v = grib_iarray_new(0, start_size, start_incsize); +// if (v->number_of_pop_front) { +// v->v--; +// v->number_of_pop_front--; +// } +// else { +// if (v->n >= v->size) +// v = grib_iarray_resize(v); +// for (i = v->n; i > 0; i--) +// v[i] = v[i - 1]; +// } +// v->v[0] = val; +// v->n++; +// return v; +// } - if (v->number_of_pop_front) { - v->v--; - v->number_of_pop_front--; - } - else { - if (v->n >= v->size) - v = grib_iarray_resize(v); - for (i = v->n; i > 0; i--) - v[i] = v[i - 1]; - } - v->v[0] = val; - v->n++; - - return v; -} - -grib_iarray* grib_iarray_push_array(grib_iarray* v, long* val, size_t size) -{ - size_t start_size = size; - size_t start_incsize = 100; - long* vp = 0; - long* valp = val; - if (!v) - v = grib_iarray_new(0, start_size, start_incsize); - - v = grib_iarray_resize_to(v, size + v->n); - vp = v->v + v->n + v->number_of_pop_front; - v->n += size; - while (size) { - *(vp++) = *(valp++); - size--; - } - return v; -} +// grib_iarray* grib_iarray_push_array(grib_iarray* v, long* val, size_t size) +// { +// size_t start_size = size; +// size_t start_incsize = 100; +// long* vp = 0; +// long* valp = val; +// if (!v) +// v = grib_iarray_new(0, start_size, start_incsize); +// v = grib_iarray_resize_to(v, size + v->n); +// vp = v->v + v->n + v->number_of_pop_front; +// v->n += size; +// while (size) { +// *(vp++) = *(valp++); +// size--; +// } +// return v; +// } void grib_iarray_delete(grib_iarray* v) { diff --git a/tests/unit_tests.cc b/tests/unit_tests.cc index 5abd7abb5..2c66f811a 100644 --- a/tests/unit_tests.cc +++ b/tests/unit_tests.cc @@ -543,10 +543,44 @@ void test_scale_factor_scaled_values() Assert(factor == 5); } +void test_iarray() +{ + grib_context* c = grib_context_get_default(); + grib_iarray* a = grib_iarray_new(c, 10, 10); + grib_iarray_push(a, 42); + grib_iarray_print("test_iarray", a); + grib_iarray_delete(a); +} + +void test_darray() +{ + grib_context* c = grib_context_get_default(); + grib_darray* a = grib_darray_new(c, 10, 10); + grib_darray_push(c, a, 42.009); + grib_darray_push(c, a, -1.11); + grib_darray_push(c, a, 5099); + grib_darray_print("test_darray", a); + grib_darray_delete(c, a); +} + +void test_sarray() +{ + grib_context* c = grib_context_get_default(); + grib_sarray* a = grib_sarray_new(c, 10, 10); + grib_sarray_push(c, a, "ants"); + grib_sarray_push(c, a, "bugs"); + grib_sarray_print("test_sarray", a); + grib_sarray_delete(c, a); +} + int main(int argc, char** argv) { printf("Doing unit tests. ecCodes version = %ld\n", grib_get_api_version()); + test_iarray(); + test_darray(); + test_sarray(); + test_scale_factor_scaled_values(); test_dates(); test_logging_proc(); From a5a7e3f6abaa5f5378f01db1dfbc682555c98073 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 21 Aug 2023 23:25:23 +0100 Subject: [PATCH 207/372] Dead code removal: Unused functions --- src/eccodes_prototypes.h | 3 - src/grib_hash_array.cc | 17 +++-- src/grib_scaling.cc | 149 +++++++++++++++++---------------------- 3 files changed, 74 insertions(+), 95 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index ec0a32c24..d84ab5653 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -176,7 +176,6 @@ void grib_concept_condition_delete(grib_context* c, grib_concept_condition* v); /* grib_hash_array.cc*/ grib_hash_array_value* grib_integer_hash_array_value_new(grib_context* c, const char* name, grib_iarray* array); -grib_hash_array_value* grib_double_hash_array_value_new(grib_context* c, const char* name, grib_darray* array); void grib_hash_array_value_delete(grib_context* c, grib_hash_array_value* v); /* grib_bufr_descriptor.cc*/ @@ -1139,8 +1138,6 @@ grib_accessor* grib_find_accessor_fast(grib_handle* h, const char* name); /* grib_scaling.cc*/ double grib_power(long s, long n); long grib_get_binary_scale_fact(double max, double min, long bpval, int* ret); -long grib_get_bits_per_value(double max, double min, long binary_scale_factor); -long grib_get_decimal_scale_fact(double max, double min, long bpval, long binary_scale); /* grib_templates.cc*/ grib_handle* codes_external_template(grib_context* c, ProductKind product_kind, const char* name); diff --git a/src/grib_hash_array.cc b/src/grib_hash_array.cc index 3e0446b32..54ba4294f 100644 --- a/src/grib_hash_array.cc +++ b/src/grib_hash_array.cc @@ -21,15 +21,14 @@ grib_hash_array_value* grib_integer_hash_array_value_new(grib_context* c, const return v; } -grib_hash_array_value* grib_double_hash_array_value_new(grib_context* c, const char* name, grib_darray* array) -{ - grib_hash_array_value* v = (grib_hash_array_value*)grib_context_malloc_clear_persistent(c, sizeof(grib_hash_array_value)); - - v->name = grib_context_strdup_persistent(c, name); - v->type = GRIB_HASH_ARRAY_TYPE_DOUBLE; - v->darray = array; - return v; -} +// grib_hash_array_value* grib_double_hash_array_value_new(grib_context* c, const char* name, grib_darray* array) +// { +// grib_hash_array_value* v = (grib_hash_array_value*)grib_context_malloc_clear_persistent(c, sizeof(grib_hash_array_value)); +// v->name = grib_context_strdup_persistent(c, name); +// v->type = GRIB_HASH_ARRAY_TYPE_DOUBLE; +// v->darray = array; +// return v; +// } void grib_hash_array_value_delete(grib_context* c, grib_hash_array_value* v) { diff --git a/src/grib_scaling.cc b/src/grib_scaling.cc index 41e77e28e..d00562d1c 100644 --- a/src/grib_scaling.cc +++ b/src/grib_scaling.cc @@ -82,87 +82,70 @@ long grib_get_binary_scale_fact(double max, double min, long bpval, int* ret) return scale; } -long grib_get_bits_per_value(double max, double min, long binary_scale_factor) -{ - double range = max - min; - double zs = 1; - long scale = 0; - const long last = 127; /* Depends on edition, should be parameter */ +// long grib_get_bits_per_value(double max, double min, long binary_scale_factor) +// { +// double range = max - min; +// double zs = 1; +// long scale = 0; +// const long last = 127; /* Depends on edition, should be parameter */ +// unsigned long maxint = codes_power(binary_scale_factor, 2) - 1; +// double dmaxint = (double)maxint; +// if (maxint == 0) +// maxint = 1; +// /* printf("---- Maxint %ld range=%g\n",maxint,range); */ +// if (range == 0) +// return 0; +// /* range -= 1e-10; */ +// while ((range * zs) <= dmaxint) { +// scale--; +// zs *= 2; +// } +// while ((range * zs) > dmaxint) { +// scale++; +// zs /= 2; +// } +// while ((unsigned long)(range * zs + 0.5) <= maxint) { +// scale--; +// zs *= 2; +// } +// while ((unsigned long)(range * zs + 0.5) > maxint) { +// scale++; +// zs /= 2; +// } +// Assert(scale >= -last && scale <= last); +// /* printf("---- scale=%ld\n",scale);*/ +// return scale; +// } - unsigned long maxint = codes_power(binary_scale_factor, 2) - 1; - double dmaxint = (double)maxint; - - if (maxint == 0) - maxint = 1; - - /* printf("---- Maxint %ld range=%g\n",maxint,range); */ - if (range == 0) - return 0; - - /* range -= 1e-10; */ - while ((range * zs) <= dmaxint) { - scale--; - zs *= 2; - } - - while ((range * zs) > dmaxint) { - scale++; - zs /= 2; - } - - while ((unsigned long)(range * zs + 0.5) <= maxint) { - scale--; - zs *= 2; - } - - while ((unsigned long)(range * zs + 0.5) > maxint) { - scale++; - zs /= 2; - } - - Assert(scale >= -last && scale <= last); - /* printf("---- scale=%ld\n",scale);*/ - - return scale; -} - -long grib_get_decimal_scale_fact(double max, double min, long bpval, long binary_scale) -{ - double range = max - min; - double zs = 1; - long scale = 0; - const long last = 127; /* Depends on edition, should be parameter */ - - unsigned long maxint = codes_power(bpval, 2) - 1; - double dmaxint = (double)maxint; - - range *= codes_power(-binary_scale, 2); - - Assert(bpval >= 1); - if (range == 0) - return 0; - - while ((range * zs) > dmaxint) { - scale--; - zs /= 10; - } - while ((range * zs) <= dmaxint) { - scale++; - zs *= 10; - } - - while ((unsigned long)(range * zs + 0.5) > maxint) { - scale--; - zs /= 10; - } - while ((unsigned long)(range * zs + 0.5) <= maxint) { - scale++; - zs *= 10; - } - - /* printf("grib_api: decimal_scale_fact=%ld max=%g min=%g bits_per_value=%ld binary_scale=%ld\n",scale,max,min,bpval,binary_scale); */ - - Assert(scale >= -last && scale <= last); - - return scale; -} +// long grib_get_decimal_scale_fact(double max, double min, long bpval, long binary_scale) +// { +// double range = max - min; +// double zs = 1; +// long scale = 0; +// const long last = 127; /* Depends on edition, should be parameter */ +// unsigned long maxint = codes_power(bpval, 2) - 1; +// double dmaxint = (double)maxint; +// range *= codes_power(-binary_scale, 2); +// Assert(bpval >= 1); +// if (range == 0) +// return 0; +// while ((range * zs) > dmaxint) { +// scale--; +// zs /= 10; +// } +// while ((range * zs) <= dmaxint) { +// scale++; +// zs *= 10; +// } +// while ((unsigned long)(range * zs + 0.5) > maxint) { +// scale--; +// zs /= 10; +// } +// while ((unsigned long)(range * zs + 0.5) <= maxint) { +// scale++; +// zs *= 10; +// } +// /* printf("grib_api: decimal_scale_fact=%ld max=%g min=%g bits_per_value=%ld binary_scale=%ld\n",scale,max,min,bpval,binary_scale); */ +// Assert(scale >= -last && scale <= last); +// return scale; +// } From 5377aadbe4ca2f7c5b41bb5cfc333f29139eb208 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 12:47:38 +0100 Subject: [PATCH 208/372] Revert change (possible cause of Metview Flextra test failure) --- src/grib_accessor_class_gen.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/grib_accessor_class_gen.cc b/src/grib_accessor_class_gen.cc index 9f4a7dbdd..ed8ef36ab 100644 --- a/src/grib_accessor_class_gen.cc +++ b/src/grib_accessor_class_gen.cc @@ -356,12 +356,12 @@ static int unpack_float(grib_accessor* a, float* v, size_t* len) static int unpack_string(grib_accessor* a, char* v, size_t* len) { - int err = 0; + //int err = 0; if (a->cclass->unpack_double && a->cclass->unpack_double != &unpack_double) { double val = 0.0; size_t l = 1; - err = grib_unpack_double(a, &val, &l); - if (err) return err; + grib_unpack_double(a, &val, &l); // TODO(masn): check return value + //if (err) return err; snprintf(v, 64, "%g", val); *len = strlen(v); grib_context_log(a->context, GRIB_LOG_DEBUG, "Casting double %s to string", a->name); @@ -371,8 +371,8 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) if (a->cclass->unpack_long && a->cclass->unpack_long != &unpack_long) { long val = 0; size_t l = 1; - err = grib_unpack_long(a, &val, &l); - if (err) return err; + grib_unpack_long(a, &val, &l); // TODO(masn): check return value + //if (err) return err; snprintf(v, 64, "%ld", val); *len = strlen(v); grib_context_log(a->context, GRIB_LOG_DEBUG, "Casting long %s to string\n", a->name); From e8cc8504d4b053f37a1ffb39ea1ee83e92a0816a Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 14:35:43 +0100 Subject: [PATCH 209/372] Improved error message --- src/grib_accessor_class_gen.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/grib_accessor_class_gen.cc b/src/grib_accessor_class_gen.cc index ed8ef36ab..234d46974 100644 --- a/src/grib_accessor_class_gen.cc +++ b/src/grib_accessor_class_gen.cc @@ -301,7 +301,7 @@ static int unpack_long(grib_accessor* a, long* v, size_t* len) } } - grib_context_log(a->context, GRIB_LOG_ERROR, "Cannot unpack %s as long", a->name); + grib_context_log(a->context, GRIB_LOG_ERROR, "Cannot unpack key '%s' as long", a->name); if (grib_get_native_type(grib_handle_of_accessor(a), a->name, &type) == GRIB_SUCCESS) { grib_context_log(a->context, GRIB_LOG_ERROR, "Hint: Try unpacking as %s", grib_get_type_name(type)); } @@ -336,7 +336,7 @@ static int unpack(grib_accessor* a, T* v, size_t* len) } } - grib_context_log(a->context, GRIB_LOG_ERROR, "Cannot unpack %s as %s", a->name, Tname); + grib_context_log(a->context, GRIB_LOG_ERROR, "Cannot unpack key '%s' as %s", a->name, Tname); if (grib_get_native_type(grib_handle_of_accessor(a), a->name, &type) == GRIB_SUCCESS) { grib_context_log(a->context, GRIB_LOG_ERROR, "Hint: Try unpacking as %s", grib_get_type_name(type)); } From 25bcc19d7720522f371da85a4e569d7678750f96 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 14:39:28 +0100 Subject: [PATCH 210/372] Examples: Fortran dump --- examples/F90/CMakeLists.txt | 1 + examples/F90/codes_dump.f90 | 38 +++++++++++++++++++++++++++++++++++++ examples/F90/codes_dump.sh | 13 +++++++++++++ fortran/grib_fortran.c | 5 +++-- 4 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 examples/F90/codes_dump.f90 create mode 100755 examples/F90/codes_dump.sh diff --git a/examples/F90/CMakeLists.txt b/examples/F90/CMakeLists.txt index 65d127cc9..2f0924fef 100644 --- a/examples/F90/CMakeLists.txt +++ b/examples/F90/CMakeLists.txt @@ -18,6 +18,7 @@ if( HAVE_BUILD_TOOLS ) grib_ecc-671 ) list( APPEND tests_extra grib_index + codes_dump grib_copy_message bufr_copy_message grib_get_keys diff --git a/examples/F90/codes_dump.f90 b/examples/F90/codes_dump.f90 new file mode 100644 index 000000000..14de52244 --- /dev/null +++ b/examples/F90/codes_dump.f90 @@ -0,0 +1,38 @@ +! (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. +! +! +program grib_dump_test + use eccodes + implicit none + integer :: ifile + integer :: iret, i + integer :: count1 = 0 + integer :: msgid ! message identifier + character(len=100) :: infile_name + + ifile = 5 + call getarg(1, infile_name) + call codes_open_file(ifile, infile_name, 'r') + + do while (.true.) + call codes_any_new_from_file(ifile, msgid, iret) + if (iret == CODES_END_OF_FILE) exit + + count1 = count1 + 1 + print *, "===== Message #", count1 + + call codes_dump(msgid) + + call codes_release(msgid) + + end do + + call codes_close_file(ifile) + +end program diff --git a/examples/F90/codes_dump.sh b/examples/F90/codes_dump.sh new file mode 100755 index 000000000..3dc98453f --- /dev/null +++ b/examples/F90/codes_dump.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.ctest.sh + +${examples_dir}/eccodes_f_codes_dump ${data_dir}/sample.grib2 +${examples_dir}/eccodes_f_codes_dump ${data_dir}/bufr/airs_57.bufr diff --git a/fortran/grib_fortran.c b/fortran/grib_fortran.c index 5fb0e97b2..5b8f6be73 100644 --- a/fortran/grib_fortran.c +++ b/fortran/grib_fortran.c @@ -2129,11 +2129,12 @@ static void do_the_dump(grib_handle* h) | GRIB_DUMP_FLAG_READ_ONLY | GRIB_DUMP_FLAG_ALIASES | GRIB_DUMP_FLAG_TYPE; - grib_dump_content(h,stdout,"debug", dump_flags, NULL); + grib_dump_content(h,stdout, "debug", dump_flags, NULL); } else { - grib_dump_content(h,stdout,"wmo",0,NULL); + const int dump_flags = GRIB_DUMP_FLAG_CODED | GRIB_DUMP_FLAG_OCTET | GRIB_DUMP_FLAG_VALUES | GRIB_DUMP_FLAG_READ_ONLY; + grib_dump_content(h,stdout, "wmo", dump_flags, NULL); } } int grib_f_dump_(int* gid){ From 2a667cef1b132616862d99792fd01fd7942c7d67 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 14:53:11 +0100 Subject: [PATCH 211/372] Testing: Fix error message --- tests/grib_proj_string.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/grib_proj_string.sh b/tests/grib_proj_string.sh index 9dc1e8557..e1a60ca56 100755 --- a/tests/grib_proj_string.sh +++ b/tests/grib_proj_string.sh @@ -86,7 +86,7 @@ ${tools_dir}/grib_get -p projString:i $grib2_sample > $tempText 2>&1 status=$? set -e [ $status -ne 0 ] -grep -q "ERROR.*Cannot unpack projTargetString as long" $tempText +grep -q "ERROR.*Cannot unpack.*projTargetString.* as long" $tempText grep -q "Hint: Try unpacking as string" $tempText set +e @@ -94,7 +94,7 @@ ${tools_dir}/grib_get -p projString:d $grib2_sample > $tempText 2>&1 status=$? set -e [ $status -ne 0 ] -grep -q "ERROR.*Cannot unpack projTargetString as double" $tempText +grep -q "ERROR.*Cannot unpack.*projTargetString.* as double" $tempText grep -q "Hint: Try unpacking as string" $tempText From bfb9893d2848850085afe3005c82ec4a5159541f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 15:38:31 +0100 Subject: [PATCH 212/372] Examples: Fortran dump fixes --- examples/F90/codes_dump.f90 | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/examples/F90/codes_dump.f90 b/examples/F90/codes_dump.f90 index 14de52244..ac553b188 100644 --- a/examples/F90/codes_dump.f90 +++ b/examples/F90/codes_dump.f90 @@ -11,12 +11,11 @@ program grib_dump_test use eccodes implicit none integer :: ifile - integer :: iret, i + integer :: iret integer :: count1 = 0 - integer :: msgid ! message identifier - character(len=100) :: infile_name + integer :: msgid + character(len=100) :: infile_name - ifile = 5 call getarg(1, infile_name) call codes_open_file(ifile, infile_name, 'r') From 08989dde144c6f6f8584037a7f7410f3ad70557b Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 15:38:53 +0100 Subject: [PATCH 213/372] Fix failure in python tests --- src/grib_accessor_class_gen.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/grib_accessor_class_gen.cc b/src/grib_accessor_class_gen.cc index 234d46974..b8a376b75 100644 --- a/src/grib_accessor_class_gen.cc +++ b/src/grib_accessor_class_gen.cc @@ -391,8 +391,7 @@ static int unpack_string_array(grib_accessor* a, char** v, size_t* len) if (err) return err; v[0] = (char*)grib_context_malloc_clear(a->context, length); - err = grib_unpack_string(a, v[0], &length); - if (err) return err; + grib_unpack_string(a, v[0], &length); // TODO(masn): check return value *len = 1; return GRIB_SUCCESS; From cf3ea9b924669df759cd889e618514ca91bcf3d2 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 16:39:14 +0100 Subject: [PATCH 214/372] Examples: Fortran dump both GRIB and BUFR --- examples/F90/codes_dump.f90 | 21 ++++++++++++--------- examples/F90/codes_dump.sh | 4 ++-- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/examples/F90/codes_dump.f90 b/examples/F90/codes_dump.f90 index ac553b188..97b2e7a3c 100644 --- a/examples/F90/codes_dump.f90 +++ b/examples/F90/codes_dump.f90 @@ -10,22 +10,25 @@ program grib_dump_test use eccodes implicit none - integer :: ifile - integer :: iret - integer :: count1 = 0 - integer :: msgid + integer :: ifile, iret, msgid + integer :: product_kind + character(len=10) :: product_string character(len=100) :: infile_name - call getarg(1, infile_name) + call getarg(1, product_string) + product_kind = CODES_PRODUCT_GRIB + if (product_string == "bufr") product_kind = CODES_PRODUCT_BUFR + + call getarg(2, infile_name) + call codes_open_file(ifile, infile_name, 'r') + print *, "===== FILE:", infile_name do while (.true.) - call codes_any_new_from_file(ifile, msgid, iret) + call codes_new_from_file(ifile, msgid, product_kind, iret) + !call codes_any_new_from_file(ifile, msgid, iret) if (iret == CODES_END_OF_FILE) exit - count1 = count1 + 1 - print *, "===== Message #", count1 - call codes_dump(msgid) call codes_release(msgid) diff --git a/examples/F90/codes_dump.sh b/examples/F90/codes_dump.sh index 3dc98453f..b778154bf 100755 --- a/examples/F90/codes_dump.sh +++ b/examples/F90/codes_dump.sh @@ -9,5 +9,5 @@ . ./include.ctest.sh -${examples_dir}/eccodes_f_codes_dump ${data_dir}/sample.grib2 -${examples_dir}/eccodes_f_codes_dump ${data_dir}/bufr/airs_57.bufr +${examples_dir}/eccodes_f_codes_dump grib ${data_dir}/sample.grib2 +${examples_dir}/eccodes_f_codes_dump bufr ${data_dir}/bufr/airs_57.bufr From c19b933b0f7c651c5bcd3db929955e175bd0ee47 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 17:02:48 +0100 Subject: [PATCH 215/372] Check for failures in unpack_string --- examples/F90/codes_dump.f90 | 2 +- examples/F90/codes_dump.sh | 5 +++-- src/grib_accessor_class_gen.cc | 10 +++++----- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/examples/F90/codes_dump.f90 b/examples/F90/codes_dump.f90 index 97b2e7a3c..7c09fb24e 100644 --- a/examples/F90/codes_dump.f90 +++ b/examples/F90/codes_dump.f90 @@ -13,7 +13,7 @@ program grib_dump_test integer :: ifile, iret, msgid integer :: product_kind character(len=10) :: product_string - character(len=100) :: infile_name + character(len=512) :: infile_name call getarg(1, product_string) product_kind = CODES_PRODUCT_GRIB diff --git a/examples/F90/codes_dump.sh b/examples/F90/codes_dump.sh index b778154bf..cdf9d4897 100755 --- a/examples/F90/codes_dump.sh +++ b/examples/F90/codes_dump.sh @@ -9,5 +9,6 @@ . ./include.ctest.sh -${examples_dir}/eccodes_f_codes_dump grib ${data_dir}/sample.grib2 -${examples_dir}/eccodes_f_codes_dump bufr ${data_dir}/bufr/airs_57.bufr +cd $data_dir +${examples_dir}/eccodes_f_codes_dump grib sample.grib2 +${examples_dir}/eccodes_f_codes_dump bufr bufr/airs_57.bufr diff --git a/src/grib_accessor_class_gen.cc b/src/grib_accessor_class_gen.cc index b8a376b75..bd7341160 100644 --- a/src/grib_accessor_class_gen.cc +++ b/src/grib_accessor_class_gen.cc @@ -356,12 +356,12 @@ static int unpack_float(grib_accessor* a, float* v, size_t* len) static int unpack_string(grib_accessor* a, char* v, size_t* len) { - //int err = 0; + int err = 0; if (a->cclass->unpack_double && a->cclass->unpack_double != &unpack_double) { double val = 0.0; size_t l = 1; - grib_unpack_double(a, &val, &l); // TODO(masn): check return value - //if (err) return err; + err = grib_unpack_double(a, &val, &l); + if (err) return err; snprintf(v, 64, "%g", val); *len = strlen(v); grib_context_log(a->context, GRIB_LOG_DEBUG, "Casting double %s to string", a->name); @@ -371,8 +371,8 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) if (a->cclass->unpack_long && a->cclass->unpack_long != &unpack_long) { long val = 0; size_t l = 1; - grib_unpack_long(a, &val, &l); // TODO(masn): check return value - //if (err) return err; + err = grib_unpack_long(a, &val, &l); + if (err) return err; snprintf(v, 64, "%ld", val); *len = strlen(v); grib_context_log(a->context, GRIB_LOG_DEBUG, "Casting long %s to string\n", a->name); From 9b5452d002c97e3683eb3955b53b523d421dc4b5 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 17:26:42 +0100 Subject: [PATCH 216/372] Dead code removal --- tools/bufr_compare.cc | 34 ++++++++-------------------------- 1 file changed, 8 insertions(+), 26 deletions(-) diff --git a/tools/bufr_compare.cc b/tools/bufr_compare.cc index 2478fd943..8d6c38dd5 100644 --- a/tools/bufr_compare.cc +++ b/tools/bufr_compare.cc @@ -238,8 +238,6 @@ int grib_tool_before_getopt(grib_runtime_options* options) int grib_tool_init(grib_runtime_options* options) { int ret = 0, i; - int nfiles = 1; - char orderby[] = "md5Headers"; grib_context* context = grib_context_get_default(); options->strict = 1; @@ -306,27 +304,12 @@ int grib_tool_init(grib_runtime_options* options) /* Check 1st file is not a directory */ exit_if_input_is_directory(tool_name, options->infile_extra->name); - if (grib_options_on("r")) { - const char* filename[1]; - filename[0] = options->infile_extra->name; - options->random = 1; - options->orderby = strdup(orderby); - options->idx = grib_fieldset_new_from_files(context, filename, - nfiles, 0, 0, 0, orderby, &ret); - if (ret) { - fprintf(stderr, "%s: Unable to create index for input file %s (%s)", - tool_name, options->infile_extra->name, grib_get_error_message(ret)); - exit(ret); - } - } - else { - options->random = 0; - options->infile_extra->file = fopen(options->infile_extra->name, "r"); + options->random = 0; + options->infile_extra->file = fopen(options->infile_extra->name, "r"); - if (!options->infile_extra->file) { - perror(options->infile_extra->name); - exit(1); - } + if (!options->infile_extra->file) { + perror(options->infile_extra->name); + exit(1); } global_tolerance = 0; @@ -483,10 +466,9 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) return 0; } - else if (options->random) - global_handle = grib_fieldset_next_handle(options->idx, &err); - else + else { global_handle = bufr_handle_new_from_file_x(h->context, options->infile_extra->file, options->mode, 0, &err); + } if (!global_handle || err != GRIB_SUCCESS) { morein2++; @@ -530,7 +512,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { int err = 0; - if (!options->through_index && !options->random) { + if (!options->through_index) { global_handle = codes_bufr_handle_new_from_file(h->context, options->infile_extra->file, &err); if (!global_handle || err != GRIB_SUCCESS) From 1643dcd31f0ac7bd40d78871f1f89a4323af699d Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 17:40:33 +0100 Subject: [PATCH 217/372] Testing: Failing cases --- tests/codes_export_resource.sh | 11 +++++++++++ tests/codes_split_file.sh | 9 +++++++++ 2 files changed, 20 insertions(+) diff --git a/tests/codes_export_resource.sh b/tests/codes_export_resource.sh index c9795e944..fddb45c45 100755 --- a/tests/codes_export_resource.sh +++ b/tests/codes_export_resource.sh @@ -43,6 +43,12 @@ cmp $ECCODES_DEFINITION_PATH/$f $temp # Failing cases # ---------------- +set +e +${tools_dir}/codes_export_resource +status=$? +set -e +[ $status -eq 1 ] + set +e ${tools_dir}/codes_export_resource -d nonexistent $temp status=$? @@ -55,6 +61,11 @@ status=$? set -e [ $status -eq 1 ] +set +e +${tools_dir}/codes_export_resource -z A B +status=$? +set -e +[ $status -eq 1 ] # Clean up diff --git a/tests/codes_split_file.sh b/tests/codes_split_file.sh index 88021b4c2..9f5577f14 100755 --- a/tests/codes_split_file.sh +++ b/tests/codes_split_file.sh @@ -16,6 +16,7 @@ temp=$label.temp.grib # Do all the work in a temporary directory temp_dir=tempdir.${label} +rm -rf $temp_dir mkdir -p $temp_dir cd $temp_dir @@ -59,6 +60,14 @@ total=`${tools_dir}/codes_count tigge_ecmwf.grib2_[0-9]*` cat tigge_ecmwf.grib2_[0-9][0-9][0-9] > $temp ${tools_dir}/grib_compare $input $temp +# Failing cases +# ---------------- +set +e +${tools_dir}/codes_split_file +status=$? +set -e +[ $status -eq 1 ] + # Clean up cd $test_dir From 358fda69543d396471b00ce8007941eb3a2f0ef8 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 17:44:54 +0100 Subject: [PATCH 218/372] Testing: Failing cases --- tests/bufr_split_by_rdbSubtype.sh | 16 ++++++++++++++++ tests/codes_split_file.sh | 6 ++++++ 2 files changed, 22 insertions(+) diff --git a/tests/bufr_split_by_rdbSubtype.sh b/tests/bufr_split_by_rdbSubtype.sh index 5bd28151c..faa4b49e2 100755 --- a/tests/bufr_split_by_rdbSubtype.sh +++ b/tests/bufr_split_by_rdbSubtype.sh @@ -17,6 +17,7 @@ fRules=${label}.filter # Do all the work in a temporary directory temp_dir=tempdir.${label} +rm -rf $temp_dir mkdir -p $temp_dir cd $temp_dir @@ -43,6 +44,21 @@ for f in ${bufr_files}; do rm -f out.filter_by_rdbSubtype.* done +# Failing cases +# ---------------- +set +e +${tools_dir}/bufr_split_by_rdbSubtype +status=$? +set -e +[ $status -eq 1 ] + +set +e +${tools_dir}/bufr_split_by_rdbSubtype $data_dir +status=$? +set -e +[ $status -eq 1 ] + + # Clean up # ------------- cd $test_dir diff --git a/tests/codes_split_file.sh b/tests/codes_split_file.sh index 9f5577f14..86077999a 100755 --- a/tests/codes_split_file.sh +++ b/tests/codes_split_file.sh @@ -68,6 +68,12 @@ status=$? set -e [ $status -eq 1 ] +set +e +${tools_dir}/codes_split_file 4 $data_dir +status=$? +set -e +[ $status -eq 1 ] + # Clean up cd $test_dir From 3ea385c179477cbd2cba012321ad34b2f2812f78 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 17:52:29 +0100 Subject: [PATCH 219/372] Testing: Failing cases --- tests/grib_check_gaussian_grids.sh | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tests/grib_check_gaussian_grids.sh b/tests/grib_check_gaussian_grids.sh index 3d5dc7169..bb14c284e 100755 --- a/tests/grib_check_gaussian_grids.sh +++ b/tests/grib_check_gaussian_grids.sh @@ -14,6 +14,9 @@ tempGrib=temp.$label.grib tempText=temp.$label.txt +${tools_dir}/grib_check_gaussian_grid -V + + # Check all sample GRIBs with a Gaussian grid samples_dir=$ECCODES_SAMPLES_PATH for gg in ${samples_dir}/reduced_gg_* ${samples_dir}/regular_gg_*; do @@ -53,12 +56,21 @@ grep -q "Error: Sum of pl array 50662 does not match numberOfDataPoints 44" $tem input=$samples_dir/reduced_gg_pl_96_grib2.tmpl ${tools_dir}/grib_set -s numberOfValues=44 $input $tempGrib set +e -${tools_dir}/grib_check_gaussian_grid -v $tempGrib 2> $tempText +${tools_dir}/grib_check_gaussian_grid -f -v $tempGrib 2> $tempText status=$? set -e [ $status -eq 1 ] cat $tempText grep -q "Error: Sum of pl array 50662 does not match numberOfValues 44" $tempText +# Failing cases +# ---------------- +set +e +${tools_dir}/grib_check_gaussian_grid +status=$? +set -e +[ $status -eq 1 ] + +# Clean up rm -f $tempGrib $tempText From c1ff5c0c7b82441bc32215a3a22aa284d575b64c Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 17:55:04 +0100 Subject: [PATCH 220/372] Testing: Failing cases --- tests/grib_check_gaussian_grids.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/grib_check_gaussian_grids.sh b/tests/grib_check_gaussian_grids.sh index bb14c284e..b94125177 100755 --- a/tests/grib_check_gaussian_grids.sh +++ b/tests/grib_check_gaussian_grids.sh @@ -71,6 +71,9 @@ status=$? set -e [ $status -eq 1 ] +${tools_dir}/grib_check_gaussian_grid -v $data_dir > $tempText +grep -q "not a regular file" $tempText + # Clean up rm -f $tempGrib $tempText From ebeef143972f4b15d4022d3cfe73cde871d6a5e3 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 18:03:44 +0100 Subject: [PATCH 221/372] Testing: Failing cases --- tests/grib_check_gaussian_grids.sh | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/tests/grib_check_gaussian_grids.sh b/tests/grib_check_gaussian_grids.sh index b94125177..474eaf726 100755 --- a/tests/grib_check_gaussian_grids.sh +++ b/tests/grib_check_gaussian_grids.sh @@ -13,10 +13,8 @@ label="grib_check_gaussian_grids_test" tempGrib=temp.$label.grib tempText=temp.$label.txt - ${tools_dir}/grib_check_gaussian_grid -V - # Check all sample GRIBs with a Gaussian grid samples_dir=$ECCODES_SAMPLES_PATH for gg in ${samples_dir}/reduced_gg_* ${samples_dir}/regular_gg_*; do @@ -30,7 +28,17 @@ for gg in ${samples_dir}/reduced_gg_*tmpl; do done -# Set wrong angle and re-test. Should fail +# Set wrong N. Should fail +input=$samples_dir/reduced_gg_pl_32_grib2.tmpl +${tools_dir}/grib_set -s N=0 $input $tempGrib +set +e +${tools_dir}/grib_check_gaussian_grid -v $tempGrib 2> $tempText +status=$? +set -e +[ $status -eq 1 ] +grep -q "Error: N should be > 0" $tempText + +# Set wrong angle. Should fail input=$samples_dir/reduced_gg_pl_1280_grib2.tmpl ${tools_dir}/grib_set -s longitudeOfLastGridPoint=359929680 $input $tempGrib set +e @@ -41,7 +49,7 @@ set -e grep -q "Error: longitudeOfLastGridPointInDegrees.*but should be" $tempText -# Set wrong numberOfDataPoints and re-test. Should fail +# Set wrong numberOfDataPoints. Should fail input=$samples_dir/reduced_gg_pl_96_grib2.tmpl ${tools_dir}/grib_set -s numberOfDataPoints=44 $input $tempGrib set +e @@ -52,7 +60,7 @@ set -e grep -q "Error: Sum of pl array 50662 does not match numberOfDataPoints 44" $tempText -# Set wrong numberOfValues and re-test. Should fail +# Set wrong numberOfValues. Should fail input=$samples_dir/reduced_gg_pl_96_grib2.tmpl ${tools_dir}/grib_set -s numberOfValues=44 $input $tempGrib set +e @@ -63,8 +71,9 @@ set -e cat $tempText grep -q "Error: Sum of pl array 50662 does not match numberOfValues 44" $tempText -# Failing cases -# ---------------- + +# Other errors/warnings +# ---------------------- set +e ${tools_dir}/grib_check_gaussian_grid status=$? @@ -74,6 +83,9 @@ set -e ${tools_dir}/grib_check_gaussian_grid -v $data_dir > $tempText grep -q "not a regular file" $tempText +${tools_dir}/grib_check_gaussian_grid -v $ECCODES_SAMPLES_PATH/GRIB2.tmpl > $tempText +grep -q "ignoring" $tempText + # Clean up rm -f $tempGrib $tempText From ebb5385218b064843821c3b2f522999983e65b88 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 18:11:51 +0100 Subject: [PATCH 222/372] Testing: Failing cases --- tests/grib_compare.sh | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/grib_compare.sh b/tests/grib_compare.sh index e2a9d705c..40ab45380 100755 --- a/tests/grib_compare.sh +++ b/tests/grib_compare.sh @@ -21,7 +21,7 @@ rm -f $outfile infile=$ECCODES_SAMPLES_PATH/reduced_gg_pl_32_grib2.tmpl ${tools_dir}/grib_set -d4 $infile $outfile set +e -${tools_dir}/grib_compare $infile $outfile +${tools_dir}/grib_compare -v $infile $outfile status=$? set -e [ $status -eq 1 ] @@ -223,6 +223,20 @@ set -e [ $status -eq 1 ] +# Failing cases +# ----------------- +set +e +${tools_dir}/grib_compare -H -c data:n $temp1 $temp2 +status=$? +set -e +[ $status -eq 1 ] + +set +e +${tools_dir}/grib_compare -a $temp1 $temp2 +status=$? +set -e +[ $status -eq 1 ] + # Clean up # --------- From 945413a2c7d93bf5154fe74a84ce609ffaee25bf Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 19:45:59 +0100 Subject: [PATCH 223/372] No need to call Assert after GRIB_LOG_FATAL --- src/grib_context.cc | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/src/grib_context.cc b/src/grib_context.cc index 90b531f6f..72b47150d 100644 --- a/src/grib_context.cc +++ b/src/grib_context.cc @@ -83,8 +83,7 @@ static void* default_long_lasting_malloc(const grib_context* c, size_t size) void* ret; ret = malloc(size); if (!ret) { - grib_context_log(c, GRIB_LOG_FATAL, "default_long_lasting_malloc: error allocating %zu bytes", size); - Assert(0); + grib_context_log(c, GRIB_LOG_FATAL, "%s: error allocating %zu bytes", __func__, size); } return ret; } @@ -99,8 +98,7 @@ static void* default_buffer_malloc(const grib_context* c, size_t size) void* ret; ret = malloc(size); if (!ret) { - grib_context_log(c, GRIB_LOG_FATAL, "default_buffer_malloc: error allocating %zu bytes", size); - Assert(0); + grib_context_log(c, GRIB_LOG_FATAL, "%s: error allocating %zu bytes", __func__, size); } return ret; } @@ -110,8 +108,7 @@ static void* default_buffer_realloc(const grib_context* c, void* p, size_t size) void* ret; ret = realloc(p, size); if (!ret) { - grib_context_log(c, GRIB_LOG_FATAL, "default_buffer_realloc: error allocating %zu bytes", size); - Assert(0); + grib_context_log(c, GRIB_LOG_FATAL, "%s: error allocating %zu bytes", __func__, size); } return ret; } @@ -126,8 +123,7 @@ static void* default_malloc(const grib_context* c, size_t size) void* ret; ret = malloc(size); if (!ret) { - grib_context_log(c, GRIB_LOG_FATAL, "default_malloc: error allocating %zu bytes", size); - Assert(0); + grib_context_log(c, GRIB_LOG_FATAL, "%s: error allocating %zu bytes", __func__, size); } return ret; } @@ -137,8 +133,7 @@ static void* default_realloc(const grib_context* c, void* p, size_t size) void* ret; ret = realloc(p, size); if (!ret) { - grib_context_log(c, GRIB_LOG_FATAL, "default_realloc: error allocating %zu bytes", size); - Assert(0); + grib_context_log(c, GRIB_LOG_FATAL, "%s: error allocating %zu bytes", __func__, size); } return ret; } @@ -908,9 +903,7 @@ void* grib_context_malloc_persistent(const grib_context* c, size_t size) { void* p = c->alloc_persistent_mem(c, size); if (!p) { - grib_context_log(c, GRIB_LOG_FATAL, - "grib_context_malloc_persistent: error allocating %zu bytes", size); - Assert(0); + grib_context_log(c, GRIB_LOG_FATAL, "%s: error allocating %zu bytes", __func__, size); } return p; } @@ -941,8 +934,7 @@ void* grib_context_malloc(const grib_context* c, size_t size) else p = c->alloc_mem(c, size); if (!p) { - grib_context_log(c, GRIB_LOG_FATAL, "grib_context_malloc: error allocating %zu bytes", size); - Assert(0); + grib_context_log(c, GRIB_LOG_FATAL, "%s: error allocating %zu bytes", __func__, size); } return p; } @@ -954,7 +946,7 @@ void* grib_context_realloc(const grib_context* c, void* p, size_t size) c = grib_context_get_default(); q = c->realloc_mem(c, p, size); if (!q) { - grib_context_log(c, GRIB_LOG_FATAL, "grib_context_realloc: error allocating %zu bytes", size); + grib_context_log(c, GRIB_LOG_FATAL, "%s: error allocating %zu bytes", __func__, size); return NULL; } return q; @@ -989,7 +981,7 @@ void* grib_context_buffer_malloc(const grib_context* c, size_t size) else p = c->alloc_buffer_mem(c, size); if (!p) { - grib_context_log(c, GRIB_LOG_FATAL, "grib_context_buffer_malloc: error allocating %zu bytes", size); + grib_context_log(c, GRIB_LOG_FATAL, "%s: error allocating %zu bytes", __func__, size); return NULL; } return p; @@ -1007,7 +999,7 @@ void* grib_context_buffer_realloc(const grib_context* c, void* p, size_t size) { void* q = c->realloc_buffer_mem(c, p, size); if (!q) { - grib_context_log(c, GRIB_LOG_FATAL, "grib_context_buffer_realloc: error allocating %zu bytes", size); + grib_context_log(c, GRIB_LOG_FATAL, "%s: error allocating %zu bytes", __func__, size); return NULL; } return q; From b67defba920bf593fadcd4b27246cf540d46b01e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 20:18:53 +0100 Subject: [PATCH 224/372] Testing: environment variables --- tests/codes_info.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/codes_info.sh b/tests/codes_info.sh index 189dfd20a..4d81e2061 100755 --- a/tests/codes_info.sh +++ b/tests/codes_info.sh @@ -39,6 +39,16 @@ export GRIB_DEFINITION_PATH=/tmp/dtest export GRIB_SAMPLES_PATH=/tmp/stest ${tools_dir}/codes_info > $tempLog grep -q "This is for backward compatibility" $tempLog +unset GRIB_DEFINITION_PATH +unset GRIB_SAMPLES_PATH + +# Obscure environment variables +export _ECCODES_ECMWF_TEST_DEFINITION_PATH=abc +export _ECCODES_ECMWF_TEST_SAMPLES_PATH=def +ECCODES_DEBUG=1 ${tools_dir}/codes_info +unset _ECCODES_ECMWF_TEST_DEFINITION_PATH +unset _ECCODES_ECMWF_TEST_SAMPLES_PATH + # Clean up rm -f $tempLog From 408e1862415fd7cc370e2e9cd3fba1c53c978fd2 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 20:35:14 +0100 Subject: [PATCH 225/372] Check result of grib_unpack_string --- src/grib_accessor_class_ascii.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/grib_accessor_class_ascii.cc b/src/grib_accessor_class_ascii.cc index 46d18b63d..035b2c9cc 100644 --- a/src/grib_accessor_class_ascii.cc +++ b/src/grib_accessor_class_ascii.cc @@ -229,7 +229,8 @@ static int unpack_double(grib_accessor* a, double* v, size_t* len) size_t l = sizeof(val); char* last = NULL; - grib_unpack_string(a, val, &l); + int err = grib_unpack_string(a, val, &l); + if (err) return err; *v = strtod(val, &last); From 6bf39400273877209b465da0da5e225b882f549f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 20:35:46 +0100 Subject: [PATCH 226/372] Testing: unpacking ascii --- tests/bufr_get.sh | 5 +++++ tests/grib_ls.sh | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/tests/bufr_get.sh b/tests/bufr_get.sh index 41052db70..57dade77e 100755 --- a/tests/bufr_get.sh +++ b/tests/bufr_get.sh @@ -36,6 +36,11 @@ id=`${tools_dir}/bufr_get -p edition,identifier avhn_87.bufr` id=`${tools_dir}/bufr_get -p edition,identifier aaen_55.bufr` [ "$id" = "4 BUFR" ] +set +e +${tools_dir}/bufr_get -p identifier:d avhn_87.bufr +status=$? +set -e +[ $status -ne 0 ] #------------------------------------------- # Test "-p" switch diff --git a/tests/grib_ls.sh b/tests/grib_ls.sh index 29ede3bcf..7d884608c 100755 --- a/tests/grib_ls.sh +++ b/tests/grib_ls.sh @@ -201,6 +201,11 @@ set -e [ $status -ne 0 ] grep -q "Invalid file offset" $tempText +# Decode an ascii key as double +file=$ECCODES_SAMPLES_PATH/reduced_gg_pl_32_grib2.tmpl +grib_check_key_equals $file 'expver:d' 1 +grib_check_key_equals $file 'expver:s' '0001' + # Clean up rm -f $temp1 $temp2 $tempText $tempLog From 6b3fab9e3592d06452a2209f7af872d7aadfa32e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 21:36:04 +0100 Subject: [PATCH 227/372] Testing: ifsParam key --- tests/CMakeLists.txt | 1 + tests/grib_ifsParam.sh | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100755 tests/grib_ifsParam.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index e4f033d7e..b75b0331a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -88,6 +88,7 @@ if( HAVE_BUILD_TOOLS ) grib_calendar grib_md5 grib_cfNames + grib_ifsParam grib_packing_order filter_substr grib_uerra diff --git a/tests/grib_ifsParam.sh b/tests/grib_ifsParam.sh new file mode 100755 index 000000000..f8c5d78a8 --- /dev/null +++ b/tests/grib_ifsParam.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +label="grib_ifsParam_test" +tempLog=temp.$label.log +tempGrib=temp.$label.grib +tempText=temp.$label.txt + +sample_g1="$ECCODES_SAMPLES_PATH/GRIB1.tmpl" +sample_g2="$ECCODES_SAMPLES_PATH/GRIB2.tmpl" + +${tools_dir}/grib_set -s paramId=167 $sample_g1 $tempGrib +grib_check_key_equals $tempGrib ifsParam 167 + +${tools_dir}/grib_set -s paramId=129001 $sample_g1 $tempGrib +grib_check_key_equals $tempGrib ifsParam 1 + +${tools_dir}/grib_set -s paramId=200001 $sample_g1 $tempGrib +grib_check_key_equals $tempGrib ifsParam 1 + +${tools_dir}/grib_set -s paramId=211001 $sample_g1 $tempGrib +grib_check_key_equals $tempGrib ifsParam 210001 + + +# Clean up +rm -f $tempGrib $tempText $tempLog From d1401bca1eebd99b3d7c950be40477a9dacf8b9f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 22 Aug 2023 22:48:21 +0100 Subject: [PATCH 228/372] BUFR indexing and compare --- tests/bufr_compare.sh | 18 ++++++++++++++++++ tools/grib_tools.cc | 7 ++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/tests/bufr_compare.sh b/tests/bufr_compare.sh index 8175cd30b..e4c41cce6 100755 --- a/tests/bufr_compare.sh +++ b/tests/bufr_compare.sh @@ -281,6 +281,24 @@ ${tools_dir}/bufr_compare -b stationOrSiteName $fBufrTmp1 $fBufrTmp2 unset ECCODES_BUFR_MULTI_ELEMENT_CONSTANT_ARRAYS rm -f $fBufrTmp1 $fBufrTmp2 +# Through index +# ------------- +tempIndex1=temp.$label.1.idx +tempIndex2=temp.$label.2.idx +f=$ECCODES_SAMPLES_PATH/BUFR3_local.tmpl +${tools_dir}/bufr_set -s ident:s=66611 $f $fBufrTmp +${tools_dir}/bufr_index_build -N -o $tempIndex1 $f +${tools_dir}/bufr_index_build -N -o $tempIndex2 $fBufrTmp + +set +e +${tools_dir}/bufr_compare $tempIndex1 $tempIndex2 +status=$? +set -e +[ $status -eq 1 ] + +${tools_dir}/bufr_compare -bident -v $tempIndex1 $tempIndex2 +rm -f $tempIndex1 $tempIndex2 + # Clean up # ------------- diff --git a/tools/grib_tools.cc b/tools/grib_tools.cc index faa2ca00f..ce038d07f 100644 --- a/tools/grib_tools.cc +++ b/tools/grib_tools.cc @@ -179,10 +179,11 @@ int grib_tool(int argc, char** argv) dump_file = stdout; } - /* ECC-926: Currently only GRIB indexing works. Disable the through_index if BUFR, GTS etc */ - if (global_options.mode == MODE_GRIB && + /* ECC-926: Currently only GRIB and BUFR indexing work. Disable the through_index if GTS etc */ + if ((global_options.mode == MODE_GRIB || global_options.mode == MODE_BUFR) && is_index_file(global_options.infile->name) && - (global_options.infile_extra && is_index_file(global_options.infile_extra->name))) { + (global_options.infile_extra && is_index_file(global_options.infile_extra->name))) + { global_options.through_index = 1; return grib_tool_index(&global_options); } From aca7a5ddb14a0468938a45d23d166365f43e9865 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Aug 2023 12:40:30 +0100 Subject: [PATCH 229/372] Geoiterator: error handling --- src/grib_iterator_class_lambert_conformal.cc | 10 +++---- src/grib_iterator_class_mercator.cc | 6 ++-- ...grib_iterator_class_polar_stereographic.cc | 6 ++-- src/grib_iterator_class_space_view.cc | 30 ++++++++++--------- tests/grib_grid_space_view.sh | 18 ++++++++++- 5 files changed, 44 insertions(+), 26 deletions(-) diff --git a/src/grib_iterator_class_lambert_conformal.cc b/src/grib_iterator_class_lambert_conformal.cc index cf0000953..3e9d51055 100644 --- a/src/grib_iterator_class_lambert_conformal.cc +++ b/src/grib_iterator_class_lambert_conformal.cc @@ -204,12 +204,12 @@ static int init_sphere(grib_handle* h, /* Allocate latitude and longitude arrays */ self->lats = (double*)grib_context_malloc(h->context, nv * sizeof(double)); if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %ld bytes", ITER, nv * sizeof(double)); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } self->lons = (double*)grib_context_malloc(h->context, nv * sizeof(double)); if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %ld bytes", ITER, nv * sizeof(double)); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } @@ -315,12 +315,12 @@ static int init_oblate(grib_handle* h, /* Allocate latitude and longitude arrays */ self->lats = (double*)grib_context_malloc(h->context, nv * sizeof(double)); if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %ld bytes", ITER, nv * sizeof(double)); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } self->lons = (double*)grib_context_malloc(h->context, nv * sizeof(double)); if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %ld bytes", ITER, nv * sizeof(double)); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } @@ -414,7 +414,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) } if (iter->nv != nx * ny) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%ld!=%ldx%ld)", ITER, iter->nv, nx, ny); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=%ldx%ld)", ITER, iter->nv, nx, ny); return GRIB_WRONG_GRID; } diff --git a/src/grib_iterator_class_mercator.cc b/src/grib_iterator_class_mercator.cc index 1f19af9a8..19d7195ff 100644 --- a/src/grib_iterator_class_mercator.cc +++ b/src/grib_iterator_class_mercator.cc @@ -186,12 +186,12 @@ static int init_mercator(grib_handle* h, /* Allocate latitude and longitude arrays */ self->lats = (double*)grib_context_malloc(h->context, nv * sizeof(double)); if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %ld bytes", ITER, nv * sizeof(double)); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } self->lons = (double*)grib_context_malloc(h->context, nv * sizeof(double)); if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %ld bytes", ITER, nv * sizeof(double)); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } @@ -270,7 +270,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) } if (iter->nv != ni * nj) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%ld!=%ldx%ld)", ITER, iter->nv, ni, nj); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=%ldx%ld)", ITER, iter->nv, ni, nj); return GRIB_WRONG_GRID; } diff --git a/src/grib_iterator_class_polar_stereographic.cc b/src/grib_iterator_class_polar_stereographic.cc index 753649141..b9c0314a3 100644 --- a/src/grib_iterator_class_polar_stereographic.cc +++ b/src/grib_iterator_class_polar_stereographic.cc @@ -164,7 +164,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) return ret; if (iter->nv != nx * ny) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%ld!=%ldx%ld)", ITER, iter->nv, nx, ny); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=%ldx%ld)", ITER, iter->nv, nx, ny); return GRIB_WRONG_GRID; } if ((ret = grib_get_double_internal(h, s_latFirstInDegrees, &latFirstInDegrees)) != GRIB_SUCCESS) @@ -244,12 +244,12 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) } self->lats = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %ld bytes", ITER, iter->nv * sizeof(double)); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, iter->nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } self->lons = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %ld bytes", ITER, iter->nv * sizeof(double)); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, iter->nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } lats = self->lats; diff --git a/src/grib_iterator_class_space_view.cc b/src/grib_iterator_class_space_view.cc index c2e402e59..1622f94a5 100644 --- a/src/grib_iterator_class_space_view.cc +++ b/src/grib_iterator_class_space_view.cc @@ -81,6 +81,8 @@ static void init_class(grib_iterator_class* c) } /* END_CLASS_IMP */ +#define ITER "Space view Geoiterator" + static int next(grib_iterator* iter, double* lat, double* lon, double* val) { grib_iterator_space_view* self = (grib_iterator_space_view*)iter; @@ -178,7 +180,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) const char* sXpInGridLengths = grib_arguments_get_name(h, args, self->carg++); const char* sYpInGridLengths = grib_arguments_get_name(h, args, self->carg++); const char* sOrientationInDegrees = grib_arguments_get_name(h, args, self->carg++); - const char* sNrInRadiusOfEarth = grib_arguments_get_name(h, args, self->carg++); + const char* sNrInRadiusOfEarthScaled = grib_arguments_get_name(h, args, self->carg++); const char* sXo = grib_arguments_get_name(h, args, self->carg++); const char* sYo = grib_arguments_get_name(h, args, self->carg++); @@ -206,7 +208,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) } if (iter->nv != nx * ny) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Wrong number of points (%ld!=%ldx%ld)", iter->nv, nx, ny); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=%ldx%ld)", ITER, iter->nv, nx, ny); return GRIB_WRONG_GRID; } if ((ret = grib_get_double_internal(h, sLatOfSubSatellitePointInDegrees, &latOfSubSatellitePointInDegrees)) != GRIB_SUCCESS) @@ -225,11 +227,11 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) return ret; /* Orthographic not supported. This happens when Nr (camera altitude) is missing */ - if (grib_is_missing(h, sNrInRadiusOfEarth, &ret)) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Space View: Orthographic view (Nr missing) not supported"); - return GRIB_NOT_IMPLEMENTED; + if (grib_is_missing(h, "Nr", &ret)) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Orthographic view (Nr missing) not supported", ITER); + return GRIB_GEOCALCULUS_PROBLEM; } - if ((ret = grib_get_double_internal(h, sNrInRadiusOfEarth, &nrInRadiusOfEarth)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(h, sNrInRadiusOfEarthScaled, &nrInRadiusOfEarth)) != GRIB_SUCCESS) return ret; if ((ret = grib_get_long_internal(h, sXo, &Xo)) != GRIB_SUCCESS) @@ -254,7 +256,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) } if (nrInRadiusOfEarth == 0) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Space View: Key %s must be greater than zero", sNrInRadiusOfEarth); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Key %s must be greater than zero", ITER, sNrInRadiusOfEarthScaled); return GRIB_GEOCALCULUS_PROBLEM; } @@ -265,8 +267,8 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) lop = lonOfSubSatellitePointInDegrees; if (lap != 0.0) { grib_context_log(h->context, GRIB_LOG_ERROR, - "Space View: Key '%s' must be 0 (satellite must be located in the equator plane)", - sLatOfSubSatellitePointInDegrees); + "%s: Key %s must be 0 (satellite must be located in the equator plane)", + ITER, sLatOfSubSatellitePointInDegrees); return GRIB_GEOCALCULUS_PROBLEM; } @@ -280,7 +282,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) /* adjustBadlyEncodedEcmwfGribs(h, &nx, &ny, &dx, &dy, &xp, &yp); */ if (dx == 0 || dy == 0) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Space View: Keys %s and %s must be greater than zero", sDx, sDy); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Keys %s and %s must be greater than zero", ITER, sDx, sDy); return GRIB_GEOCALCULUS_PROBLEM; } rx = angular_size / dx; @@ -288,12 +290,12 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) self->lats = (double*)grib_context_malloc(h->context, array_size); if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Error allocating %ld bytes", array_size); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, array_size); return GRIB_OUT_OF_MEMORY; } self->lons = (double*)grib_context_malloc(h->context, array_size); if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Error allocating %ld bytes", array_size); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, array_size); return GRIB_OUT_OF_MEMORY; } lats = self->lats; @@ -318,12 +320,12 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) /* Store array of sin and cosine values to avoid recalculation */ s_x = (double*)grib_context_malloc(h->context, nx * sizeof(double)); if (!s_x) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Error allocating %ld bytes", nx * sizeof(double)); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nx * sizeof(double)); return GRIB_OUT_OF_MEMORY; } c_x = (double*)grib_context_malloc(h->context, nx * sizeof(double)); if (!c_x) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Error allocating %ld bytes", nx * sizeof(double)); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nx * sizeof(double)); return GRIB_OUT_OF_MEMORY; } diff --git a/tests/grib_grid_space_view.sh b/tests/grib_grid_space_view.sh index 4c0e2b07f..5b987cd53 100755 --- a/tests/grib_grid_space_view.sh +++ b/tests/grib_grid_space_view.sh @@ -44,7 +44,23 @@ fi ${tools_dir}/grib_get_data $tempGrib2 > $tempOut ${tools_dir}/grib_ls -l 50,0 $tempGrib2 -rm -f $tempGrib2 + +# Invalid cases +set +e +${tools_dir}/grib_get_data -sNr=missing $tempGrib2 > $tempOut 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Orthographic view (Nr missing) not supported" $tempOut + +set +e +${tools_dir}/grib_get_data -sNr=0 $tempGrib2 > $tempOut 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "must be greater than zero" $tempOut + +rm -f $tempGrib2 $tempOut # ----------- # GRIB1 From 2cfe640f1c758dcecdc04d23e8fee7a25970e830 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Aug 2023 14:17:27 +0100 Subject: [PATCH 230/372] Testing: Increase coverage --- examples/C/bufr_set_keys.sh | 32 +++++++++++++---------------- examples/C/get_product_kind.sh | 6 ++++++ examples/C/grib_nearest_multiple.sh | 6 ++++++ tests/grib_filter.sh | 23 +++++++++++++++++++++ tests/grib_step.sh | 9 +++++++- 5 files changed, 57 insertions(+), 19 deletions(-) diff --git a/examples/C/bufr_set_keys.sh b/examples/C/bufr_set_keys.sh index 96fd48416..3131463cf 100755 --- a/examples/C/bufr_set_keys.sh +++ b/examples/C/bufr_set_keys.sh @@ -10,37 +10,33 @@ . ./include.ctest.sh - -#Define a common label for all the tmp files +# Define a common label for all the tmp files label="bufr_set_keys_test_c" - -#Define tmp file +REDIRECT=/dev/null fBufrTmp=${label}.tmp.bufr rm -f $fBufrTmp -#We check "syno_multi.bufr". The path is -#hardcoded in the example +# We check "syno_multi.bufr". The path is hard coded in the example f=${data_dir}/bufr/syno_multi.bufr -REDIRECT=/dev/null +set +e +${examples_dir}/c_bufr_set_keys +status=$? +set -e +[ $status -ne 0 ] -# +# Run ${examples_dir}/c_bufr_set_keys $fBufrTmp 2> $REDIRECT > $REDIRECT -#Compare modified to the original +# Compare modified to the original set +e ${tools_dir}/bufr_compare $f $fBufrTmp >$REDIRECT 2> $REDIRECT - -#Check if modified is different -if [ $? -eq 0 ]; then - echo "setting keys produced identical files " >&2 - exit 1 -fi - +status=$? set -e +[ $status -ne 0 ] -#Check if modified has the same number of messages +# Check if modified has the same number of messages [ `${tools_dir}/bufr_count $f` -eq `${tools_dir}/bufr_count ${fBufrTmp}` ] -#Clean up +# Clean up rm -f $fBufrTmp diff --git a/examples/C/get_product_kind.sh b/examples/C/get_product_kind.sh index cd6ff1c5b..609274efc 100755 --- a/examples/C/get_product_kind.sh +++ b/examples/C/get_product_kind.sh @@ -15,6 +15,12 @@ fTmp=${label}.tmp fOut=${label}.tmp.out fRef=${label}.tmp.ref +set +e +${examples_dir}/c_get_product_kind +status=$? +set -e +[ $status -eq 1 ] + # Create a file containing one GRIB and three BUFR messages cat ${data_dir}/sample.grib2 ${data_dir}/bufr/syno_multi.bufr >$fTmp diff --git a/examples/C/grib_nearest_multiple.sh b/examples/C/grib_nearest_multiple.sh index d203cfe06..ee43c5881 100755 --- a/examples/C/grib_nearest_multiple.sh +++ b/examples/C/grib_nearest_multiple.sh @@ -15,6 +15,12 @@ temp1=$label.temp1.$$ temp2=$label.temp2.$$ tempRef=$label.ref.$$ +set +e +${examples_dir}/c_grib_nearest_multiple 2>/dev/null +status=$? +set -e +[ $status -eq 1 ] + cat > $temp1 <$tempFilt < $tempOut +grep -q "Ni defined: true" $tempOut + + +cat >$tempFilt < $tempOut +grep -q "N defined: false" $tempOut + +cat >$tempFilt < $tempOut +grep -q "No args: false" $tempOut + # Clean up rm -f $tempGrib $tempFilt $tempOut $tempRef diff --git a/tests/grib_step.sh b/tests/grib_step.sh index e3f90142b..2b1ca37b6 100755 --- a/tests/grib_step.sh +++ b/tests/grib_step.sh @@ -155,7 +155,14 @@ ${tools_dir}/grib_set -s julianDay=2454504 $input $temp grib_check_key_equals $input day 6 grib_check_key_equals $temp day 7 +# Seconds (ignored) +# ----------------------------------------------- +grib2_sample=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +${tools_dir}/grib_ls -s second=9 -n time $grib2_sample 2>$templog +# Something should have been written to stderr +[ -s $templog ] +grep -q "Truncating time: non-zero seconds.* ignored" $templog # Clean up -rm -f $temp +rm -f $temp $templog rm -f $grib2File.p8tmp ${grib2File}.tmp x.grib From 788af792e2eea620bc8e693ae89fe933cc3e7408 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Aug 2023 14:26:56 +0100 Subject: [PATCH 231/372] Testing: Increase coverage --- tests/unit_tests.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/unit_tests.cc b/tests/unit_tests.cc index 2c66f811a..0a488e5cc 100644 --- a/tests/unit_tests.cc +++ b/tests/unit_tests.cc @@ -573,6 +573,15 @@ void test_sarray() grib_sarray_delete(c, a); } +void test_codes_get_product_name() +{ + Assert( STR_EQUAL("ANY", codes_get_product_name(PRODUCT_ANY)) ); + Assert( STR_EQUAL("GRIB", codes_get_product_name(PRODUCT_GRIB)) ); + Assert( STR_EQUAL("BUFR", codes_get_product_name(PRODUCT_BUFR)) ); + Assert( STR_EQUAL("GTS", codes_get_product_name(PRODUCT_GTS)) ); + Assert( STR_EQUAL("METAR", codes_get_product_name(PRODUCT_METAR)) ); +} + int main(int argc, char** argv) { printf("Doing unit tests. ecCodes version = %ld\n", grib_get_api_version()); @@ -581,6 +590,8 @@ int main(int argc, char** argv) test_darray(); test_sarray(); + test_codes_get_product_name(); + test_scale_factor_scaled_values(); test_dates(); test_logging_proc(); From d0311a82ca75f1ca5641c553584b46ff9ed1ed1a Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Aug 2023 14:41:14 +0100 Subject: [PATCH 232/372] Dead code removal: pack_long --- src/grib_accessor_class_evaluate.cc | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/grib_accessor_class_evaluate.cc b/src/grib_accessor_class_evaluate.cc index 2c9fdf1e3..596b95884 100644 --- a/src/grib_accessor_class_evaluate.cc +++ b/src/grib_accessor_class_evaluate.cc @@ -15,7 +15,7 @@ START_CLASS_DEF CLASS = accessor SUPER = grib_accessor_class_long - IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = unpack_long IMPLEMENTS = init MEMBERS= grib_arguments* arg END_CLASS_DEF @@ -32,7 +32,6 @@ or edit "accessor.class" and rerun ./make_class.pl */ -static int pack_long(grib_accessor*, const long* val, size_t* len); static int unpack_long(grib_accessor*, long* val, size_t* len); static void init(grib_accessor*, const long, grib_arguments*); @@ -66,7 +65,7 @@ static grib_accessor_class _grib_accessor_class_evaluate = { 0, /* get sub_section */ 0, /* pack_missing */ 0, /* is_missing */ - &pack_long, /* pack_long */ + 0, /* pack_long */ &unpack_long, /* unpack_long */ 0, /* pack_double */ 0, /* pack_float */ @@ -107,18 +106,12 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -static int pack_long(grib_accessor* a, const long* val, size_t* len) -{ - return GRIB_NOT_IMPLEMENTED; -} - static int unpack_long(grib_accessor* a, long* val, size_t* len) { - int ret = 0; grib_accessor_evaluate* self = (grib_accessor_evaluate*)a; - grib_expression* e = grib_arguments_get_expression(grib_handle_of_accessor(a), self->arg, 0); + grib_expression* e = grib_arguments_get_expression(grib_handle_of_accessor(a), self->arg, 0); - ret = grib_expression_evaluate_long(grib_handle_of_accessor(a), e, val); + int ret = grib_expression_evaluate_long(grib_handle_of_accessor(a), e, val); *len = 1; return ret; From d934bc13b98e4e903d66d35c65233b7f62edcdd1 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Aug 2023 14:41:29 +0100 Subject: [PATCH 233/372] Testing: Increase coverage --- tests/unit_tests.cc | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/tests/unit_tests.cc b/tests/unit_tests.cc index 0a488e5cc..e77a019ee 100644 --- a/tests/unit_tests.cc +++ b/tests/unit_tests.cc @@ -575,13 +575,23 @@ void test_sarray() void test_codes_get_product_name() { - Assert( STR_EQUAL("ANY", codes_get_product_name(PRODUCT_ANY)) ); - Assert( STR_EQUAL("GRIB", codes_get_product_name(PRODUCT_GRIB)) ); - Assert( STR_EQUAL("BUFR", codes_get_product_name(PRODUCT_BUFR)) ); - Assert( STR_EQUAL("GTS", codes_get_product_name(PRODUCT_GTS)) ); + Assert( STR_EQUAL("ANY", codes_get_product_name(PRODUCT_ANY)) ); + Assert( STR_EQUAL("GRIB", codes_get_product_name(PRODUCT_GRIB)) ); + Assert( STR_EQUAL("BUFR", codes_get_product_name(PRODUCT_BUFR)) ); + Assert( STR_EQUAL("GTS", codes_get_product_name(PRODUCT_GTS)) ); Assert( STR_EQUAL("METAR", codes_get_product_name(PRODUCT_METAR)) ); } +void test_codes_get_type_name() +{ + Assert( STR_EQUAL("long", grib_get_type_name(GRIB_TYPE_LONG)) ); + Assert( STR_EQUAL("string", grib_get_type_name(GRIB_TYPE_STRING)) ); + Assert( STR_EQUAL("double", grib_get_type_name(GRIB_TYPE_DOUBLE)) ); + Assert( STR_EQUAL("bytes", grib_get_type_name(GRIB_TYPE_BYTES)) ); + Assert( STR_EQUAL("label", grib_get_type_name(GRIB_TYPE_LABEL)) ); + Assert( STR_EQUAL("section", grib_get_type_name(GRIB_TYPE_SECTION)) ); +} + int main(int argc, char** argv) { printf("Doing unit tests. ecCodes version = %ld\n", grib_get_api_version()); @@ -591,6 +601,7 @@ int main(int argc, char** argv) test_sarray(); test_codes_get_product_name(); + test_codes_get_type_name(); test_scale_factor_scaled_values(); test_dates(); From 87a227c8b2ec29560ae96ec1e36808620287c1e4 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Aug 2023 17:00:27 +0100 Subject: [PATCH 234/372] Dead code removal: Unused functions --- src/eccodes_prototypes.h | 2 -- src/grib_darray.cc | 8 ++++---- src/grib_iarray.cc | 8 ++++---- src/grib_oarray.cc | 39 ++++++++++++++------------------------ src/grib_trie_with_rank.cc | 2 +- src/grib_vdarray.cc | 14 ++++---------- src/grib_viarray.cc | 8 ++++---- src/grib_vsarray.cc | 14 ++++---------- 8 files changed, 35 insertions(+), 60 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index d84ab5653..e0ef46ff2 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -217,9 +217,7 @@ size_t grib_sarray_used_size(grib_sarray* v); grib_oarray* grib_oarray_new(grib_context* c, size_t size, size_t incsize); grib_oarray* grib_oarray_push(grib_context* c, grib_oarray* v, void* val); void grib_oarray_delete(grib_context* c, grib_oarray* v); -void** grib_oarray_get_array(grib_context* c, grib_oarray* v); void* grib_oarray_get(grib_oarray* v, int i); -size_t grib_oarray_used_size(grib_oarray* v); /* grib_iarray.cc*/ void grib_iarray_print(const char* title, const grib_iarray* iarray); diff --git a/src/grib_darray.cc b/src/grib_darray.cc index 582e62255..f2250862d 100644 --- a/src/grib_darray.cc +++ b/src/grib_darray.cc @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* For debugging purposes */ +// For debugging purposes void grib_darray_print(const char* title, const grib_darray* darray) { size_t i; @@ -46,7 +46,7 @@ grib_darray* grib_darray_new(grib_context* c, size_t size, size_t incsize) v = (grib_darray*)grib_context_malloc_clear(c, sizeof(grib_darray)); if (!v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_darray_new unable to allocate %lu bytes\n", sizeof(grib_darray)); + "grib_darray_new unable to allocate %zu bytes", sizeof(grib_darray)); return NULL; } v->size = size; @@ -56,7 +56,7 @@ grib_darray* grib_darray_new(grib_context* c, size_t size, size_t incsize) v->v = (double*)grib_context_malloc_clear(c, sizeof(double) * size); if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_darray_new unable to allocate %lu bytes\n", sizeof(double) * size); + "grib_darray_new unable to allocate %zu bytes", sizeof(double) * size); return NULL; } return v; @@ -73,7 +73,7 @@ static grib_darray* grib_darray_resize(grib_darray* v) v->size = newsize; if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_darray_resize unable to allocate %lu bytes\n", sizeof(double) * newsize); + "grib_darray_resize unable to allocate %zu bytes", sizeof(double) * newsize); return NULL; } return v; diff --git a/src/grib_iarray.cc b/src/grib_iarray.cc index fcc64e181..50d16bcaa 100644 --- a/src/grib_iarray.cc +++ b/src/grib_iarray.cc @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* For debugging purposes */ +// For debugging purposes void grib_iarray_print(const char* title, const grib_iarray* iarray) { size_t i; @@ -47,7 +47,7 @@ grib_iarray* grib_iarray_new(grib_context* c, size_t size, size_t incsize) v = (grib_iarray*)grib_context_malloc(c, sizeof(grib_iarray)); if (!v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_iarray_new unable to allocate %lu bytes\n", sizeof(grib_iarray)); + "grib_iarray_new unable to allocate %zu bytes", sizeof(grib_iarray)); return NULL; } v->context = c; @@ -58,7 +58,7 @@ grib_iarray* grib_iarray_new(grib_context* c, size_t size, size_t incsize) v->number_of_pop_front = 0; if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_iarray_new unable to allocate %lu bytes\n", sizeof(long) * size); + "grib_iarray_new unable to allocate %zu bytes", sizeof(long) * size); return NULL; } return v; @@ -99,7 +99,7 @@ static grib_iarray* grib_iarray_resize_to(grib_iarray* v, size_t newsize) newv = (long*)grib_context_malloc_clear(c, newsize * sizeof(long)); if (!newv) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_iarray_resize unable to allocate %lu bytes\n", sizeof(long) * newsize); + "grib_iarray_resize unable to allocate %zu bytes", sizeof(long) * newsize); return NULL; } diff --git a/src/grib_oarray.cc b/src/grib_oarray.cc index 54a4ca2a5..91e7d9f33 100644 --- a/src/grib_oarray.cc +++ b/src/grib_oarray.cc @@ -8,12 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/*************************************************************************** - * - * Enrico Fucile - * - ***************************************************************************/ - #include "grib_api_internal.h" grib_oarray* grib_oarray_new(grib_context* c, size_t size, size_t incsize) @@ -24,7 +18,7 @@ grib_oarray* grib_oarray_new(grib_context* c, size_t size, size_t incsize) v = (grib_oarray*)grib_context_malloc_clear(c, sizeof(grib_oarray)); if (!v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_oarray_new unable to allocate %lu bytes\n", sizeof(grib_oarray)); + "grib_oarray_new unable to allocate %zu bytes", sizeof(grib_oarray)); return NULL; } v->size = size; @@ -34,7 +28,7 @@ grib_oarray* grib_oarray_new(grib_context* c, size_t size, size_t incsize) v->context = c; if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_oarray_new unable to allocate %lu bytes\n", sizeof(char*) * size); + "grib_oarray_new unable to allocate %zu bytes", sizeof(char*) * size); return NULL; } return v; @@ -51,7 +45,7 @@ static grib_oarray* grib_oarray_resize(grib_oarray* v) v->size = newsize; if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_oarray_resize unable to allocate %lu bytes\n", sizeof(char*) * newsize); + "grib_oarray_resize unable to allocate %zu bytes", sizeof(char*) * newsize); return NULL; } return v; @@ -98,17 +92,17 @@ void grib_oarray_delete(grib_context* c, grib_oarray* v) // v->n = 0; // } -void** grib_oarray_get_array(grib_context* c, grib_oarray* v) -{ - void** ret = NULL; - size_t i = 0; - if (!v) - return NULL; - ret = (void**)grib_context_malloc_clear(c, sizeof(char*) * v->n); - for (i = 0; i < v->n; i++) - ret[i] = v->v[i]; - return ret; -} +// void** grib_oarray_get_array(grib_context* c, grib_oarray* v) +// { +// void** ret = NULL; +// size_t i = 0; +// if (!v) +// return NULL; +// ret = (void**)grib_context_malloc_clear(c, sizeof(char*) * v->n); +// for (i = 0; i < v->n; i++) +// ret[i] = v->v[i]; +// return ret; +// } void* grib_oarray_get(grib_oarray* v, int i) { @@ -117,8 +111,3 @@ void* grib_oarray_get(grib_oarray* v, int i) return NULL; return v->v[i]; } - -size_t grib_oarray_used_size(grib_oarray* v) -{ - return v->n; -} diff --git a/src/grib_trie_with_rank.cc b/src/grib_trie_with_rank.cc index 9fd326701..d999f9f1f 100644 --- a/src/grib_trie_with_rank.cc +++ b/src/grib_trie_with_rank.cc @@ -485,7 +485,7 @@ int grib_trie_with_rank_insert(grib_trie_with_rank* t, const char* key, void* da grib_oarray_push(t->context, t->objs, data); /* grib_trie_with_rank_insert_in_list(t,data); */ GRIB_MUTEX_UNLOCK(&mutex); - return t->objs->n; /* grib_oarray_used_size(t->objs) */ + return t->objs->n; } /* diff --git a/src/grib_vdarray.cc b/src/grib_vdarray.cc index 9aadbf455..5ec7fc80b 100644 --- a/src/grib_vdarray.cc +++ b/src/grib_vdarray.cc @@ -8,15 +8,9 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/*************************************************************************** - * - * Enrico Fucile - * - ***************************************************************************/ - #include "grib_api_internal.h" -/* For debugging purposes */ +// For debugging purposes void grib_vdarray_print(const char* title, const grib_vdarray* vdarray) { size_t i = 0; @@ -38,7 +32,7 @@ grib_vdarray* grib_vdarray_new(grib_context* c, size_t size, size_t incsize) v = (grib_vdarray*)grib_context_malloc_clear(c, sizeof(grib_vdarray)); if (!v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_vdarray_new unable to allocate %lu bytes\n", sizeof(grib_vdarray)); + "%s: Unable to allocate %zu bytes", __func__, sizeof(grib_vdarray)); return NULL; } v->size = size; @@ -48,7 +42,7 @@ grib_vdarray* grib_vdarray_new(grib_context* c, size_t size, size_t incsize) v->v = (grib_darray**)grib_context_malloc_clear(c, sizeof(grib_darray*) * size); if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_vdarray_new unable to allocate %lu bytes\n", sizeof(grib_darray*) * size); + "%s: Unable to allocate %zu bytes", __func__, sizeof(grib_darray*) * size); return NULL; } return v; @@ -65,7 +59,7 @@ static grib_vdarray* grib_vdarray_resize(grib_vdarray* v) v->size = newsize; if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_vdarray_resize unable to allocate %lu bytes\n", sizeof(grib_darray*) * newsize); + "%s: Unable to allocate %lu bytes\n", __func__, sizeof(grib_darray*) * newsize); return NULL; } return v; diff --git a/src/grib_viarray.cc b/src/grib_viarray.cc index 5a9aa4ddb..bc6e1bc18 100644 --- a/src/grib_viarray.cc +++ b/src/grib_viarray.cc @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* For debugging purposes */ +// For debugging purposes void grib_viarray_print(const char* title, const grib_viarray* viarray) { size_t i; @@ -33,7 +33,7 @@ grib_viarray* grib_viarray_new(grib_context* c, size_t size, size_t incsize) v = (grib_viarray*)grib_context_malloc_clear(c, sizeof(grib_viarray)); if (!v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_viarray_new unable to allocate %lu bytes\n", sizeof(grib_viarray)); + "%s: Unable to allocate %zu bytes", __func__, sizeof(grib_viarray)); return NULL; } v->size = size; @@ -43,7 +43,7 @@ grib_viarray* grib_viarray_new(grib_context* c, size_t size, size_t incsize) v->v = (grib_iarray**)grib_context_malloc_clear(c, sizeof(grib_iarray*) * size); if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_viarray_new unable to allocate %lu bytes\n", sizeof(grib_iarray*) * size); + "%s: Unable to allocate %zu bytes", __func__, sizeof(grib_iarray*) * size); return NULL; } return v; @@ -60,7 +60,7 @@ static grib_viarray* grib_viarray_resize(grib_viarray* v) v->size = newsize; if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_viarray_resize unable to allocate %lu bytes\n", sizeof(grib_iarray*) * newsize); + "%s: Unable to allocate %zu bytes", __func__, sizeof(grib_iarray*) * newsize); return NULL; } return v; diff --git a/src/grib_vsarray.cc b/src/grib_vsarray.cc index 9f1d1bb3f..9de0650f7 100644 --- a/src/grib_vsarray.cc +++ b/src/grib_vsarray.cc @@ -8,15 +8,9 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/*************************************************************************** - * - * Enrico Fucile - * - ***************************************************************************/ - #include "grib_api_internal.h" -/* For debugging purposes */ +// For debugging purposes void grib_vsarray_print(const char* title, const grib_vsarray* vsarray) { size_t i = 0; @@ -41,7 +35,7 @@ grib_vsarray* grib_vsarray_new(grib_context* c, size_t size, size_t incsize) v = (grib_vsarray*)grib_context_malloc_clear(c, sizeof(grib_vsarray)); if (!v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_vsarray_new unable to allocate %lu bytes\n", sizeof(grib_vsarray)); + "%s: Unable to allocate %zu bytes", __func__, sizeof(grib_vsarray)); return NULL; } v->size = size; @@ -51,7 +45,7 @@ grib_vsarray* grib_vsarray_new(grib_context* c, size_t size, size_t incsize) v->v = (grib_sarray**)grib_context_malloc_clear(c, sizeof(grib_sarray*) * size); if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_vsarray_new unable to allocate %lu bytes\n", sizeof(grib_sarray*) * size); + "%s: Unable to allocate %zu bytes", __func__, sizeof(grib_sarray*) * size); return NULL; } return v; @@ -68,7 +62,7 @@ static grib_vsarray* grib_vsarray_resize(grib_vsarray* v) v->size = newsize; if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_vsarray_resize unable to allocate %lu bytes\n", sizeof(grib_sarray*) * newsize); + "%s: Unable to allocate %zu bytes", __func__, sizeof(grib_sarray*) * newsize); return NULL; } return v; From 3e6cfd08d24505c42fc4d55c8b4208f5627eda0d Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Aug 2023 17:00:49 +0100 Subject: [PATCH 235/372] Testing: Increase coverage --- tests/unit_tests.cc | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/tests/unit_tests.cc b/tests/unit_tests.cc index e77a019ee..6712d8dee 100644 --- a/tests/unit_tests.cc +++ b/tests/unit_tests.cc @@ -545,36 +545,66 @@ void test_scale_factor_scaled_values() void test_iarray() { + printf("Running %s ...\n", __func__); grib_context* c = grib_context_get_default(); grib_iarray* a = grib_iarray_new(c, 10, 10); grib_iarray_push(a, 42); - grib_iarray_print("test_iarray", a); + grib_iarray_push(a, 10000); + grib_iarray_print("iarray", a); + + grib_iarray* b = grib_iarray_new(c, 1, 1); + grib_iarray_push(b, 0); + grib_iarray_push(b, -1); + grib_iarray_push(b, +1); + + grib_viarray* va = grib_viarray_new(c, 1, 1); + grib_viarray_push(c, va, a); + grib_viarray_push(c, va, b); + grib_viarray_print("viarray", va); + grib_iarray_delete(a); + grib_iarray_delete(b); + grib_viarray_delete(c, va); } void test_darray() { + printf("Running %s ...\n", __func__); grib_context* c = grib_context_get_default(); grib_darray* a = grib_darray_new(c, 10, 10); grib_darray_push(c, a, 42.009); grib_darray_push(c, a, -1.11); grib_darray_push(c, a, 5099); - grib_darray_print("test_darray", a); + grib_darray_print("darray", a); + + grib_darray* b = grib_darray_new(c, 5, 1); + grib_darray_push(c, b, 8); + grib_darray_push(c, b, 12); + + grib_vdarray* va = grib_vdarray_new(c, 1, 1); + grib_vdarray_push(c, va, a); + grib_vdarray_push(c, va, b); + grib_vdarray_print("vdarray", va); + grib_darray_delete(c, a); + grib_darray_delete(c, b); + grib_vdarray_delete(c, va); } void test_sarray() { + printf("Running %s ...\n", __func__); grib_context* c = grib_context_get_default(); grib_sarray* a = grib_sarray_new(c, 10, 10); grib_sarray_push(c, a, "ants"); grib_sarray_push(c, a, "bugs"); - grib_sarray_print("test_sarray", a); + grib_sarray_print("sarray", a); grib_sarray_delete(c, a); } void test_codes_get_product_name() { + printf("Running %s ...\n", __func__); Assert( STR_EQUAL("ANY", codes_get_product_name(PRODUCT_ANY)) ); Assert( STR_EQUAL("GRIB", codes_get_product_name(PRODUCT_GRIB)) ); Assert( STR_EQUAL("BUFR", codes_get_product_name(PRODUCT_BUFR)) ); @@ -584,6 +614,7 @@ void test_codes_get_product_name() void test_codes_get_type_name() { + printf("Running %s ...\n", __func__); Assert( STR_EQUAL("long", grib_get_type_name(GRIB_TYPE_LONG)) ); Assert( STR_EQUAL("string", grib_get_type_name(GRIB_TYPE_STRING)) ); Assert( STR_EQUAL("double", grib_get_type_name(GRIB_TYPE_DOUBLE)) ); From 29ba800e67c116f5a2e91c92f9006c16429d4596 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Aug 2023 17:22:19 +0100 Subject: [PATCH 236/372] Dead code removal: Unused action --- src/CMakeLists.txt | 1 - src/action_class_hierarchy.txt | 1 - src/{ => deprecated}/action_class_set_iarray.cc | 0 src/eccodes_prototypes.h | 3 --- 4 files changed, 5 deletions(-) rename src/{ => deprecated}/action_class_set_iarray.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d23d74a08..b9ca729ce 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -35,7 +35,6 @@ list( APPEND eccodes_src_files action_class_set.cc action_class_set_sarray.cc action_class_set_darray.cc - action_class_set_iarray.cc action_class_noop.cc action_class_write.cc action_class_print.cc diff --git a/src/action_class_hierarchy.txt b/src/action_class_hierarchy.txt index 8391f6c6e..2074b2c20 100644 --- a/src/action_class_hierarchy.txt +++ b/src/action_class_hierarchy.txt @@ -23,7 +23,6 @@ Action Class Hierarchy |---action_class_template |-action_class_set |-action_class_set_darray - |-action_class_set_iarray |-action_class_set_missing |-action_class_set_sarray |-action_class_when diff --git a/src/action_class_set_iarray.cc b/src/deprecated/action_class_set_iarray.cc similarity index 100% rename from src/action_class_set_iarray.cc rename to src/deprecated/action_class_set_iarray.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index e0ef46ff2..23c7b0e5c 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -83,9 +83,6 @@ grib_action* grib_action_create_set(grib_context* context, const char* name, gri /* action_class_set_darray.cc*/ grib_action* grib_action_create_set_darray(grib_context* context, const char* name, grib_darray* darray); -/* action_class_set_iarray.cc*/ -grib_action* grib_action_create_set_iarray(grib_context* context, const char* name, grib_iarray* iarray); - /* action_class_set_sarray.cc*/ grib_action* grib_action_create_set_sarray(grib_context* context, const char* name, grib_sarray* sarray); From 14d7035e59d86a95bf2d601e9b01fb8ab01a72d0 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Aug 2023 17:33:22 +0100 Subject: [PATCH 237/372] Dead code removal --- src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 1 - ...grib_accessor_class_int32_little_endian.cc | 0 src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - src/grib_accessor_classes_hash.cc | 851 +++++++++--------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 8 files changed, 419 insertions(+), 439 deletions(-) rename src/{ => deprecated}/grib_accessor_class_int32_little_endian.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b9ca729ce..b24e15e2c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -359,7 +359,6 @@ list( APPEND eccodes_src_files md5.h md5.cc grib_accessor_class_int16_little_endian.cc - grib_accessor_class_int32_little_endian.cc grib_accessor_class_int64_little_endian.cc grib_accessor_class_uint16.cc grib_accessor_class_uint16_little_endian.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index c5c4c07a0..ba5b95f12 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -91,7 +91,6 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |---grib_accessor_class_headers_only |---grib_accessor_class_ifs_param |---grib_accessor_class_int16_little_endian - |---grib_accessor_class_int32_little_endian |---grib_accessor_class_int64_little_endian |---grib_accessor_class_iterator |---grib_accessor_class_label diff --git a/src/grib_accessor_class_int32_little_endian.cc b/src/deprecated/grib_accessor_class_int32_little_endian.cc similarity index 100% rename from src/grib_accessor_class_int32_little_endian.cc rename to src/deprecated/grib_accessor_class_int32_little_endian.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 23c7b0e5c..6cbe12193 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -410,8 +410,6 @@ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd); /* grib_accessor_class_int16_little_endian.cc*/ -/* grib_accessor_class_int32_little_endian.cc*/ - /* grib_accessor_class_int64_little_endian.cc*/ /* grib_accessor_class_uint16.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index 84e6d8092..463456661 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -114,7 +114,6 @@ extern grib_accessor_class* grib_accessor_class_ibmfloat; extern grib_accessor_class* grib_accessor_class_ieeefloat; extern grib_accessor_class* grib_accessor_class_ifs_param; extern grib_accessor_class* grib_accessor_class_int16_little_endian; -extern grib_accessor_class* grib_accessor_class_int32_little_endian; extern grib_accessor_class* grib_accessor_class_int64_little_endian; extern grib_accessor_class* grib_accessor_class_iterator; extern grib_accessor_class* grib_accessor_class_julian_date; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index 907e5d9e2..644473820 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,12 +37,12 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 208 +#define TOTAL_KEYWORDS 207 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 -#define MAX_HASH_VALUE 619 -/* maximum key range = 619, duplicates = 0 */ +#define MAX_HASH_VALUE 581 +/* maximum key range = 581, duplicates = 0 */ #ifdef __GNUC__ @@ -55,32 +55,32 @@ static unsigned int grib_accessor_classes_get_id (const char *str, size_t len) { static const unsigned short asso_values[] = { - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 0, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 4, 164, - 29, 1, 2, 620, 15, 620, 3, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 2, 620, 2, 68, 75, - 1, 2, 75, 25, 178, 0, 15, 2, 106, 183, - 21, 64, 3, 620, 157, 8, 37, 75, 185, 0, - 1, 12, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620 + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 0, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 4, 60, + 29, 3, 9, 582, 12, 582, 1, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 2, 582, 2, 121, 135, + 1, 2, 105, 25, 219, 0, 3, 2, 113, 184, + 21, 64, 3, 582, 113, 8, 37, 87, 132, 0, + 4, 3, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582 }; unsigned int hval = len; @@ -117,22 +117,21 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 158 "accessor_class_list.gperf" +#line 157 "accessor_class_list.gperf" {"pad", &grib_accessor_class_pad}, - {""}, {""}, {""}, -#line 181 "accessor_class_list.gperf" +#line 76 "accessor_class_list.gperf" + {"dirty", &grib_accessor_class_dirty}, + {""}, {""}, +#line 180 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, {""}, -#line 184 "accessor_class_list.gperf" +#line 183 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, -#line 178 "accessor_class_list.gperf" +#line 177 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, - {""}, -#line 76 "accessor_class_list.gperf" - {"dirty", &grib_accessor_class_dirty}, - {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, #line 67 "accessor_class_list.gperf" {"data_raw_packing", &grib_accessor_class_data_raw_packing}, #line 73 "accessor_class_list.gperf" @@ -144,7 +143,7 @@ static const struct accessor_class_hash classes[] = {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, #line 113 "accessor_class_list.gperf" {"gen", &grib_accessor_class_gen}, -#line 179 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, #line 75 "accessor_class_list.gperf" {"dictionary", &grib_accessor_class_dictionary}, @@ -155,30 +154,30 @@ static const struct accessor_class_hash classes[] = {""}, #line 44 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, -#line 159 "accessor_class_list.gperf" +#line 158 "accessor_class_list.gperf" {"padding", &grib_accessor_class_padding}, -#line 172 "accessor_class_list.gperf" +#line 171 "accessor_class_list.gperf" {"section", &grib_accessor_class_section}, {""}, {""}, -#line 193 "accessor_class_list.gperf" +#line 192 "accessor_class_list.gperf" {"time", &grib_accessor_class_time}, {""}, #line 45 "accessor_class_list.gperf" {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, #line 66 "accessor_class_list.gperf" {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 157 "accessor_class_list.gperf" +#line 156 "accessor_class_list.gperf" {"packing_type", &grib_accessor_class_packing_type}, -#line 175 "accessor_class_list.gperf" - {"section_pointer", &grib_accessor_class_section_pointer}, #line 174 "accessor_class_list.gperf" + {"section_pointer", &grib_accessor_class_section_pointer}, +#line 173 "accessor_class_list.gperf" {"section_padding", &grib_accessor_class_section_padding}, -#line 81 "accessor_class_list.gperf" - {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, - {""}, + {""}, {""}, #line 111 "accessor_class_list.gperf" {"gds_is_present", &grib_accessor_class_gds_is_present}, - {""}, {""}, {""}, +#line 81 "accessor_class_list.gperf" + {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, + {""}, {""}, #line 114 "accessor_class_list.gperf" {"getenv", &grib_accessor_class_getenv}, {""}, @@ -193,462 +192,450 @@ static const struct accessor_class_hash classes[] = #line 105 "accessor_class_list.gperf" {"g2grid", &grib_accessor_class_g2grid}, {""}, -#line 171 "accessor_class_list.gperf" +#line 170 "accessor_class_list.gperf" {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, #line 99 "accessor_class_list.gperf" {"g2_eps", &grib_accessor_class_g2_eps}, {""}, {""}, -#line 173 "accessor_class_list.gperf" +#line 172 "accessor_class_list.gperf" {"section_length", &grib_accessor_class_section_length}, {""}, {""}, -#line 145 "accessor_class_list.gperf" +#line 144 "accessor_class_list.gperf" {"nearest", &grib_accessor_class_nearest}, - {""}, -#line 13 "accessor_class_list.gperf" - {"bit", &grib_accessor_class_bit}, -#line 15 "accessor_class_list.gperf" - {"bits", &grib_accessor_class_bits}, + {""}, {""}, {""}, #line 104 "accessor_class_list.gperf" {"g2end_step", &grib_accessor_class_g2end_step}, -#line 160 "accessor_class_list.gperf" +#line 159 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, - {""}, -#line 14 "accessor_class_list.gperf" - {"bitmap", &grib_accessor_class_bitmap}, + {""}, {""}, #line 64 "accessor_class_list.gperf" {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, {""}, {""}, #line 108 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, -#line 190 "accessor_class_list.gperf" - {"step_in_units", &grib_accessor_class_step_in_units}, -#line 202 "accessor_class_list.gperf" - {"uint32", &grib_accessor_class_uint32}, -#line 206 "accessor_class_list.gperf" - {"uint8", &grib_accessor_class_uint8}, - {""}, {""}, -#line 191 "accessor_class_list.gperf" - {"sum", &grib_accessor_class_sum}, - {""}, -#line 16 "accessor_class_list.gperf" - {"bits_per_value", &grib_accessor_class_bits_per_value}, - {""}, -#line 169 "accessor_class_list.gperf" - {"scale", &grib_accessor_class_scale}, -#line 48 "accessor_class_list.gperf" - {"data_complex_packing", &grib_accessor_class_data_complex_packing}, -#line 187 "accessor_class_list.gperf" - {"statistics", &grib_accessor_class_statistics}, -#line 29 "accessor_class_list.gperf" - {"bytes", &grib_accessor_class_bytes}, - {""}, -#line 109 "accessor_class_list.gperf" - {"g2step_range", &grib_accessor_class_g2step_range}, -#line 204 "accessor_class_list.gperf" - {"uint64", &grib_accessor_class_uint64}, -#line 103 "accessor_class_list.gperf" - {"g2date", &grib_accessor_class_g2date}, -#line 49 "accessor_class_list.gperf" - {"data_dummy_field", &grib_accessor_class_data_dummy_field}, -#line 146 "accessor_class_list.gperf" - {"non_alpha", &grib_accessor_class_non_alpha}, -#line 47 "accessor_class_list.gperf" - {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, -#line 101 "accessor_class_list.gperf" - {"g2bitmap", &grib_accessor_class_g2bitmap}, - {""}, -#line 188 "accessor_class_list.gperf" - {"statistics_spectral", &grib_accessor_class_statistics_spectral}, -#line 128 "accessor_class_list.gperf" - {"julian_day", &grib_accessor_class_julian_day}, -#line 68 "accessor_class_list.gperf" - {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, - {""}, -#line 127 "accessor_class_list.gperf" - {"julian_date", &grib_accessor_class_julian_date}, -#line 112 "accessor_class_list.gperf" - {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, - {""}, -#line 176 "accessor_class_list.gperf" - {"select_step_template", &grib_accessor_class_select_step_template}, -#line 126 "accessor_class_list.gperf" - {"iterator", &grib_accessor_class_iterator}, - {""}, {""}, -#line 186 "accessor_class_list.gperf" - {"sprintf", &grib_accessor_class_sprintf}, - {""}, {""}, {""}, {""}, -#line 148 "accessor_class_list.gperf" - {"number_of_points", &grib_accessor_class_number_of_points}, - {""}, -#line 61 "accessor_class_list.gperf" - {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, -#line 59 "accessor_class_list.gperf" - {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, - {""}, {""}, {""}, {""}, {""}, -#line 149 "accessor_class_list.gperf" - {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, - {""}, -#line 97 "accessor_class_list.gperf" - {"g2_aerosol", &grib_accessor_class_g2_aerosol}, -#line 209 "accessor_class_list.gperf" - {"unsigned", &grib_accessor_class_unsigned}, - {""}, {""}, -#line 195 "accessor_class_list.gperf" - {"to_integer", &grib_accessor_class_to_integer}, -#line 203 "accessor_class_list.gperf" - {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, -#line 210 "accessor_class_list.gperf" - {"unsigned_bits", &grib_accessor_class_unsigned_bits}, - {""}, -#line 180 "accessor_class_list.gperf" - {"simple_packing_error", &grib_accessor_class_simple_packing_error}, - {""}, {""}, {""}, -#line 77 "accessor_class_list.gperf" - {"divdouble", &grib_accessor_class_divdouble}, #line 189 "accessor_class_list.gperf" - {"step_human_readable", &grib_accessor_class_step_human_readable}, -#line 207 "accessor_class_list.gperf" - {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, - {""}, {""}, -#line 196 "accessor_class_list.gperf" - {"to_string", &grib_accessor_class_to_string}, -#line 100 "accessor_class_list.gperf" - {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, -#line 205 "accessor_class_list.gperf" - {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, -#line 121 "accessor_class_list.gperf" - {"ieeefloat", &grib_accessor_class_ieeefloat}, - {""}, {""}, {""}, -#line 79 "accessor_class_list.gperf" - {"element", &grib_accessor_class_element}, -#line 131 "accessor_class_list.gperf" - {"latitudes", &grib_accessor_class_latitudes}, -#line 154 "accessor_class_list.gperf" - {"offset_file", &grib_accessor_class_offset_file}, - {""}, -#line 115 "accessor_class_list.gperf" - {"global_gaussian", &grib_accessor_class_global_gaussian}, - {""}, -#line 162 "accessor_class_list.gperf" - {"padtomultiple", &grib_accessor_class_padtomultiple}, - {""}, -#line 165 "accessor_class_list.gperf" - {"raw", &grib_accessor_class_raw}, -#line 106 "accessor_class_list.gperf" - {"g2latlon", &grib_accessor_class_g2latlon}, -#line 19 "accessor_class_list.gperf" - {"bufr_data_array", &grib_accessor_class_bufr_data_array}, - {""}, -#line 20 "accessor_class_list.gperf" - {"bufr_data_element", &grib_accessor_class_bufr_data_element}, -#line 26 "accessor_class_list.gperf" - {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, -#line 177 "accessor_class_list.gperf" - {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, - {""}, {""}, {""}, {""}, {""}, -#line 136 "accessor_class_list.gperf" - {"long", &grib_accessor_class_long}, -#line 28 "accessor_class_list.gperf" - {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, -#line 163 "accessor_class_list.gperf" - {"position", &grib_accessor_class_position}, -#line 78 "accessor_class_list.gperf" - {"double", &grib_accessor_class_double}, -#line 17 "accessor_class_list.gperf" - {"blob", &grib_accessor_class_blob}, - {""}, -#line 166 "accessor_class_list.gperf" - {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, - {""}, -#line 216 "accessor_class_list.gperf" - {"when", &grib_accessor_class_when}, - {""}, -#line 120 "accessor_class_list.gperf" - {"ibmfloat", &grib_accessor_class_ibmfloat}, -#line 38 "accessor_class_list.gperf" - {"concept", &grib_accessor_class_concept}, - {""}, -#line 142 "accessor_class_list.gperf" - {"md5", &grib_accessor_class_md5}, - {""}, -#line 18 "accessor_class_list.gperf" - {"budgdate", &grib_accessor_class_budgdate}, -#line 116 "accessor_class_list.gperf" - {"group", &grib_accessor_class_group}, - {""}, + {"step_in_units", &grib_accessor_class_step_in_units}, + {""}, {""}, {""}, {""}, {""}, {""}, #line 56 "accessor_class_list.gperf" {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, #line 57 "accessor_class_list.gperf" {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, #line 50 "accessor_class_list.gperf" {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 213 "accessor_class_list.gperf" - {"values", &grib_accessor_class_values}, -#line 143 "accessor_class_list.gperf" - {"message", &grib_accessor_class_message}, -#line 147 "accessor_class_list.gperf" - {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, -#line 199 "accessor_class_list.gperf" - {"trim", &grib_accessor_class_trim}, -#line 140 "accessor_class_list.gperf" - {"mars_param", &grib_accessor_class_mars_param}, +#line 48 "accessor_class_list.gperf" + {"data_complex_packing", &grib_accessor_class_data_complex_packing}, +#line 186 "accessor_class_list.gperf" + {"statistics", &grib_accessor_class_statistics}, +#line 205 "accessor_class_list.gperf" + {"uint8", &grib_accessor_class_uint8}, + {""}, +#line 109 "accessor_class_list.gperf" + {"g2step_range", &grib_accessor_class_g2step_range}, +#line 201 "accessor_class_list.gperf" + {"uint32", &grib_accessor_class_uint32}, +#line 103 "accessor_class_list.gperf" + {"g2date", &grib_accessor_class_g2date}, +#line 190 "accessor_class_list.gperf" + {"sum", &grib_accessor_class_sum}, +#line 145 "accessor_class_list.gperf" + {"non_alpha", &grib_accessor_class_non_alpha}, + {""}, +#line 101 "accessor_class_list.gperf" + {"g2bitmap", &grib_accessor_class_g2bitmap}, + {""}, +#line 187 "accessor_class_list.gperf" + {"statistics_spectral", &grib_accessor_class_statistics_spectral}, +#line 127 "accessor_class_list.gperf" + {"julian_day", &grib_accessor_class_julian_day}, +#line 203 "accessor_class_list.gperf" + {"uint64", &grib_accessor_class_uint64}, + {""}, +#line 126 "accessor_class_list.gperf" + {"julian_date", &grib_accessor_class_julian_date}, +#line 112 "accessor_class_list.gperf" + {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, + {""}, +#line 49 "accessor_class_list.gperf" + {"data_dummy_field", &grib_accessor_class_data_dummy_field}, +#line 125 "accessor_class_list.gperf" + {"iterator", &grib_accessor_class_iterator}, {""}, {""}, -#line 71 "accessor_class_list.gperf" - {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, - {""}, -#line 144 "accessor_class_list.gperf" - {"message_copy", &grib_accessor_class_message_copy}, -#line 39 "accessor_class_list.gperf" - {"constant", &grib_accessor_class_constant}, - {""}, -#line 72 "accessor_class_list.gperf" - {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, - {""}, {""}, {""}, -#line 153 "accessor_class_list.gperf" - {"octet_number", &grib_accessor_class_octet_number}, -#line 110 "accessor_class_list.gperf" - {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, -#line 197 "accessor_class_list.gperf" - {"transient", &grib_accessor_class_transient}, - {""}, {""}, {""}, {""}, #line 84 "accessor_class_list.gperf" {"g1_message_length", &grib_accessor_class_g1_message_length}, -#line 130 "accessor_class_list.gperf" - {"label", &grib_accessor_class_label}, + {""}, {""}, +#line 68 "accessor_class_list.gperf" + {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, +#line 164 "accessor_class_list.gperf" + {"raw", &grib_accessor_class_raw}, + {""}, {""}, +#line 61 "accessor_class_list.gperf" + {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, +#line 59 "accessor_class_list.gperf" + {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, {""}, -#line 198 "accessor_class_list.gperf" - {"transient_darray", &grib_accessor_class_transient_darray}, - {""}, {""}, -#line 34 "accessor_class_list.gperf" - {"codeflag", &grib_accessor_class_codeflag}, -#line 27 "accessor_class_list.gperf" - {"bufr_string_values", &grib_accessor_class_bufr_string_values}, -#line 185 "accessor_class_list.gperf" - {"spectral_truncation", &grib_accessor_class_spectral_truncation}, -#line 168 "accessor_class_list.gperf" - {"round", &grib_accessor_class_round}, - {""}, {""}, +#line 13 "accessor_class_list.gperf" + {"bit", &grib_accessor_class_bit}, +#line 15 "accessor_class_list.gperf" + {"bits", &grib_accessor_class_bits}, #line 95 "accessor_class_list.gperf" {"g1step_range", &grib_accessor_class_g1step_range}, -#line 155 "accessor_class_list.gperf" - {"offset_values", &grib_accessor_class_offset_values}, + {""}, #line 87 "accessor_class_list.gperf" {"g1date", &grib_accessor_class_g1date}, -#line 141 "accessor_class_list.gperf" - {"mars_step", &grib_accessor_class_mars_step}, - {""}, -#line 164 "accessor_class_list.gperf" - {"proj_string", &grib_accessor_class_proj_string}, +#line 14 "accessor_class_list.gperf" + {"bitmap", &grib_accessor_class_bitmap}, +#line 97 "accessor_class_list.gperf" + {"g2_aerosol", &grib_accessor_class_g2_aerosol}, +#line 147 "accessor_class_list.gperf" + {"number_of_points", &grib_accessor_class_number_of_points}, #line 86 "accessor_class_list.gperf" {"g1bitmap", &grib_accessor_class_g1bitmap}, {""}, -#line 212 "accessor_class_list.gperf" - {"validity_time", &grib_accessor_class_validity_time}, - {""}, -#line 211 "accessor_class_list.gperf" - {"validity_date", &grib_accessor_class_validity_date}, -#line 24 "accessor_class_list.gperf" - {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, #line 194 "accessor_class_list.gperf" - {"to_double", &grib_accessor_class_to_double}, - {""}, -#line 122 "accessor_class_list.gperf" - {"ifs_param", &grib_accessor_class_ifs_param}, -#line 200 "accessor_class_list.gperf" - {"uint16", &grib_accessor_class_uint16}, -#line 22 "accessor_class_list.gperf" - {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, + {"to_integer", &grib_accessor_class_to_integer}, {""}, +#line 165 "accessor_class_list.gperf" + {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, +#line 29 "accessor_class_list.gperf" + {"bytes", &grib_accessor_class_bytes}, + {""}, {""}, +#line 148 "accessor_class_list.gperf" + {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, +#line 16 "accessor_class_list.gperf" + {"bits_per_value", &grib_accessor_class_bits_per_value}, +#line 212 "accessor_class_list.gperf" + {"values", &grib_accessor_class_values}, +#line 208 "accessor_class_list.gperf" + {"unsigned", &grib_accessor_class_unsigned}, +#line 185 "accessor_class_list.gperf" + {"sprintf", &grib_accessor_class_sprintf}, +#line 179 "accessor_class_list.gperf" + {"simple_packing_error", &grib_accessor_class_simple_packing_error}, +#line 116 "accessor_class_list.gperf" + {"group", &grib_accessor_class_group}, +#line 195 "accessor_class_list.gperf" + {"to_string", &grib_accessor_class_to_string}, +#line 209 "accessor_class_list.gperf" + {"unsigned_bits", &grib_accessor_class_unsigned_bits}, +#line 202 "accessor_class_list.gperf" + {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, +#line 168 "accessor_class_list.gperf" + {"scale", &grib_accessor_class_scale}, #line 85 "accessor_class_list.gperf" {"g1_section4_length", &grib_accessor_class_g1_section4_length}, - {""}, -#line 23 "accessor_class_list.gperf" - {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, -#line 139 "accessor_class_list.gperf" - {"lookup", &grib_accessor_class_lookup}, -#line 117 "accessor_class_list.gperf" - {"gts_header", &grib_accessor_class_gts_header}, -#line 35 "accessor_class_list.gperf" - {"codetable", &grib_accessor_class_codetable}, -#line 125 "accessor_class_list.gperf" - {"int64_little_endian", &grib_accessor_class_int64_little_endian}, -#line 138 "accessor_class_list.gperf" - {"longitudes", &grib_accessor_class_longitudes}, #line 55 "accessor_class_list.gperf" {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, -#line 215 "accessor_class_list.gperf" - {"vector", &grib_accessor_class_vector}, -#line 192 "accessor_class_list.gperf" - {"suppressed", &grib_accessor_class_suppressed}, - {""}, {""}, -#line 40 "accessor_class_list.gperf" - {"count_file", &grib_accessor_class_count_file}, +#line 199 "accessor_class_list.gperf" + {"uint16", &grib_accessor_class_uint16}, +#line 198 "accessor_class_list.gperf" + {"trim", &grib_accessor_class_trim}, +#line 188 "accessor_class_list.gperf" + {"step_human_readable", &grib_accessor_class_step_human_readable}, +#line 206 "accessor_class_list.gperf" + {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, {""}, -#line 161 "accessor_class_list.gperf" - {"padtoeven", &grib_accessor_class_padtoeven}, - {""}, {""}, -#line 102 "accessor_class_list.gperf" - {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, -#line 123 "accessor_class_list.gperf" - {"int16_little_endian", &grib_accessor_class_int16_little_endian}, +#line 204 "accessor_class_list.gperf" + {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, + {""}, +#line 47 "accessor_class_list.gperf" + {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, +#line 79 "accessor_class_list.gperf" + {"element", &grib_accessor_class_element}, +#line 130 "accessor_class_list.gperf" + {"latitudes", &grib_accessor_class_latitudes}, +#line 106 "accessor_class_list.gperf" + {"g2latlon", &grib_accessor_class_g2latlon}, #line 53 "accessor_class_list.gperf" {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, -#line 33 "accessor_class_list.gperf" - {"closest_date", &grib_accessor_class_closest_date}, +#line 115 "accessor_class_list.gperf" + {"global_gaussian", &grib_accessor_class_global_gaussian}, {""}, #line 54 "accessor_class_list.gperf" {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, -#line 70 "accessor_class_list.gperf" - {"data_sh_packed", &grib_accessor_class_data_sh_packed}, - {""}, {""}, +#line 110 "accessor_class_list.gperf" + {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, +#line 196 "accessor_class_list.gperf" + {"transient", &grib_accessor_class_transient}, +#line 175 "accessor_class_list.gperf" + {"select_step_template", &grib_accessor_class_select_step_template}, #line 51 "accessor_class_list.gperf" {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, - {""}, +#line 161 "accessor_class_list.gperf" + {"padtomultiple", &grib_accessor_class_padtomultiple}, #line 52 "accessor_class_list.gperf" {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, -#line 182 "accessor_class_list.gperf" - {"smart_table", &grib_accessor_class_smart_table}, + {""}, +#line 176 "accessor_class_list.gperf" + {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, +#line 162 "accessor_class_list.gperf" + {"position", &grib_accessor_class_position}, +#line 197 "accessor_class_list.gperf" + {"transient_darray", &grib_accessor_class_transient_darray}, {""}, {""}, -#line 124 "accessor_class_list.gperf" - {"int32_little_endian", &grib_accessor_class_int32_little_endian}, - {""}, -#line 156 "accessor_class_list.gperf" - {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, -#line 170 "accessor_class_list.gperf" - {"scale_values", &grib_accessor_class_scale_values}, -#line 183 "accessor_class_list.gperf" - {"smart_table_column", &grib_accessor_class_smart_table_column}, - {""}, {""}, {""}, {""}, {""}, -#line 21 "accessor_class_list.gperf" - {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, -#line 134 "accessor_class_list.gperf" - {"library_version", &grib_accessor_class_library_version}, +#line 121 "accessor_class_list.gperf" + {"ieeefloat", &grib_accessor_class_ieeefloat}, +#line 135 "accessor_class_list.gperf" + {"long", &grib_accessor_class_long}, +#line 184 "accessor_class_list.gperf" + {"spectral_truncation", &grib_accessor_class_spectral_truncation}, +#line 167 "accessor_class_list.gperf" + {"round", &grib_accessor_class_round}, +#line 78 "accessor_class_list.gperf" + {"double", &grib_accessor_class_double}, +#line 211 "accessor_class_list.gperf" + {"validity_time", &grib_accessor_class_validity_time}, +#line 153 "accessor_class_list.gperf" + {"offset_file", &grib_accessor_class_offset_file}, +#line 210 "accessor_class_list.gperf" + {"validity_date", &grib_accessor_class_validity_date}, +#line 141 "accessor_class_list.gperf" + {"md5", &grib_accessor_class_md5}, + {""}, {""}, +#line 163 "accessor_class_list.gperf" + {"proj_string", &grib_accessor_class_proj_string}, {""}, {""}, {""}, -#line 36 "accessor_class_list.gperf" - {"codetable_title", &grib_accessor_class_codetable_title}, - {""}, -#line 201 "accessor_class_list.gperf" - {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, - {""}, +#line 77 "accessor_class_list.gperf" + {"divdouble", &grib_accessor_class_divdouble}, #line 89 "accessor_class_list.gperf" {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, -#line 150 "accessor_class_list.gperf" - {"number_of_values", &grib_accessor_class_number_of_values}, - {""}, -#line 214 "accessor_class_list.gperf" - {"variable", &grib_accessor_class_variable}, - {""}, {""}, {""}, -#line 80 "accessor_class_list.gperf" - {"evaluate", &grib_accessor_class_evaluate}, -#line 119 "accessor_class_list.gperf" - {"headers_only", &grib_accessor_class_headers_only}, - {""}, {""}, -#line 74 "accessor_class_list.gperf" - {"decimal_precision", &grib_accessor_class_decimal_precision}, -#line 25 "accessor_class_list.gperf" - {"bufr_group", &grib_accessor_class_bufr_group}, -#line 30 "accessor_class_list.gperf" - {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, -#line 135 "accessor_class_list.gperf" - {"local_definition", &grib_accessor_class_local_definition}, - {""}, {""}, {""}, -#line 151 "accessor_class_list.gperf" - {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, -#line 11 "accessor_class_list.gperf" - {"abstract_vector", &grib_accessor_class_abstract_vector}, - {""}, {""}, {""}, {""}, -#line 83 "accessor_class_list.gperf" - {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, - {""}, -#line 31 "accessor_class_list.gperf" - {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, - {""}, {""}, {""}, -#line 42 "accessor_class_list.gperf" - {"count_total", &grib_accessor_class_count_total}, - {""}, {""}, {""}, -#line 37 "accessor_class_list.gperf" - {"codetable_units", &grib_accessor_class_codetable_units}, - {""}, {""}, {""}, {""}, -#line 152 "accessor_class_list.gperf" - {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, - {""}, -#line 82 "accessor_class_list.gperf" - {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, -#line 137 "accessor_class_list.gperf" - {"long_vector", &grib_accessor_class_long_vector}, -#line 129 "accessor_class_list.gperf" +#line 142 "accessor_class_list.gperf" + {"message", &grib_accessor_class_message}, +#line 128 "accessor_class_list.gperf" {"ksec1expver", &grib_accessor_class_ksec1expver}, - {""}, {""}, {""}, -#line 132 "accessor_class_list.gperf" - {"latlon_increment", &grib_accessor_class_latlon_increment}, -#line 208 "accessor_class_list.gperf" - {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, -#line 118 "accessor_class_list.gperf" - {"hash_array", &grib_accessor_class_hash_array}, + {""}, +#line 139 "accessor_class_list.gperf" + {"mars_param", &grib_accessor_class_mars_param}, +#line 100 "accessor_class_list.gperf" + {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, {""}, {""}, -#line 107 "accessor_class_list.gperf" - {"g2level", &grib_accessor_class_g2level}, - {""}, {""}, {""}, {""}, {""}, {""}, +#line 214 "accessor_class_list.gperf" + {"vector", &grib_accessor_class_vector}, +#line 143 "accessor_class_list.gperf" + {"message_copy", &grib_accessor_class_message_copy}, +#line 200 "accessor_class_list.gperf" + {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, + {""}, {""}, {""}, +#line 160 "accessor_class_list.gperf" + {"padtoeven", &grib_accessor_class_padtoeven}, #line 90 "accessor_class_list.gperf" {"g1fcperiod", &grib_accessor_class_g1fcperiod}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 102 "accessor_class_list.gperf" + {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, +#line 215 "accessor_class_list.gperf" + {"when", &grib_accessor_class_when}, {""}, {""}, +#line 191 "accessor_class_list.gperf" + {"suppressed", &grib_accessor_class_suppressed}, + {""}, {""}, +#line 19 "accessor_class_list.gperf" + {"bufr_data_array", &grib_accessor_class_bufr_data_array}, +#line 122 "accessor_class_list.gperf" + {"ifs_param", &grib_accessor_class_ifs_param}, +#line 20 "accessor_class_list.gperf" + {"bufr_data_element", &grib_accessor_class_bufr_data_element}, +#line 26 "accessor_class_list.gperf" + {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, +#line 129 "accessor_class_list.gperf" + {"label", &grib_accessor_class_label}, +#line 140 "accessor_class_list.gperf" + {"mars_step", &grib_accessor_class_mars_step}, + {""}, {""}, {""}, +#line 17 "accessor_class_list.gperf" + {"blob", &grib_accessor_class_blob}, + {""}, +#line 28 "accessor_class_list.gperf" + {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, + {""}, +#line 155 "accessor_class_list.gperf" + {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, +#line 71 "accessor_class_list.gperf" + {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, +#line 120 "accessor_class_list.gperf" + {"ibmfloat", &grib_accessor_class_ibmfloat}, +#line 38 "accessor_class_list.gperf" + {"concept", &grib_accessor_class_concept}, #line 133 "accessor_class_list.gperf" - {"latlonvalues", &grib_accessor_class_latlonvalues}, -#line 41 "accessor_class_list.gperf" - {"count_missing", &grib_accessor_class_count_missing}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"library_version", &grib_accessor_class_library_version}, + {""}, +#line 72 "accessor_class_list.gperf" + {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, + {""}, +#line 83 "accessor_class_list.gperf" + {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, + {""}, {""}, {""}, +#line 18 "accessor_class_list.gperf" + {"budgdate", &grib_accessor_class_budgdate}, + {""}, {""}, +#line 213 "accessor_class_list.gperf" + {"variable", &grib_accessor_class_variable}, + {""}, {""}, +#line 149 "accessor_class_list.gperf" + {"number_of_values", &grib_accessor_class_number_of_values}, {""}, {""}, {""}, {""}, -#line 10 "accessor_class_list.gperf" - {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, +#line 39 "accessor_class_list.gperf" + {"constant", &grib_accessor_class_constant}, +#line 80 "accessor_class_list.gperf" + {"evaluate", &grib_accessor_class_evaluate}, + {""}, {""}, +#line 146 "accessor_class_list.gperf" + {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, +#line 138 "accessor_class_list.gperf" + {"lookup", &grib_accessor_class_lookup}, +#line 152 "accessor_class_list.gperf" + {"octet_number", &grib_accessor_class_octet_number}, + {""}, +#line 154 "accessor_class_list.gperf" + {"offset_values", &grib_accessor_class_offset_values}, +#line 137 "accessor_class_list.gperf" + {"longitudes", &grib_accessor_class_longitudes}, +#line 124 "accessor_class_list.gperf" + {"int64_little_endian", &grib_accessor_class_int64_little_endian}, + {""}, +#line 150 "accessor_class_list.gperf" + {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, +#line 123 "accessor_class_list.gperf" + {"int16_little_endian", &grib_accessor_class_int16_little_endian}, +#line 181 "accessor_class_list.gperf" + {"smart_table", &grib_accessor_class_smart_table}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 182 "accessor_class_list.gperf" + {"smart_table_column", &grib_accessor_class_smart_table_column}, + {""}, {""}, {""}, +#line 27 "accessor_class_list.gperf" + {"bufr_string_values", &grib_accessor_class_bufr_string_values}, +#line 169 "accessor_class_list.gperf" + {"scale_values", &grib_accessor_class_scale_values}, + {""}, +#line 117 "accessor_class_list.gperf" + {"gts_header", &grib_accessor_class_gts_header}, + {""}, +#line 193 "accessor_class_list.gperf" + {"to_double", &grib_accessor_class_to_double}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 136 "accessor_class_list.gperf" + {"long_vector", &grib_accessor_class_long_vector}, +#line 107 "accessor_class_list.gperf" + {"g2level", &grib_accessor_class_g2level}, + {""}, {""}, {""}, +#line 131 "accessor_class_list.gperf" + {"latlon_increment", &grib_accessor_class_latlon_increment}, + {""}, {""}, {""}, +#line 34 "accessor_class_list.gperf" + {"codeflag", &grib_accessor_class_codeflag}, + {""}, {""}, {""}, {""}, +#line 74 "accessor_class_list.gperf" + {"decimal_precision", &grib_accessor_class_decimal_precision}, + {""}, {""}, {""}, {""}, {""}, +#line 132 "accessor_class_list.gperf" + {"latlonvalues", &grib_accessor_class_latlonvalues}, + {""}, {""}, +#line 134 "accessor_class_list.gperf" + {"local_definition", &grib_accessor_class_local_definition}, + {""}, {""}, {""}, {""}, +#line 25 "accessor_class_list.gperf" + {"bufr_group", &grib_accessor_class_bufr_group}, + {""}, {""}, +#line 33 "accessor_class_list.gperf" + {"closest_date", &grib_accessor_class_closest_date}, + {""}, {""}, {""}, #line 92 "accessor_class_list.gperf" {"g1monthlydate", &grib_accessor_class_g1monthlydate}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, +#line 118 "accessor_class_list.gperf" + {"hash_array", &grib_accessor_class_hash_array}, + {""}, {""}, {""}, {""}, +#line 40 "accessor_class_list.gperf" + {"count_file", &grib_accessor_class_count_file}, + {""}, {""}, {""}, {""}, +#line 119 "accessor_class_list.gperf" + {"headers_only", &grib_accessor_class_headers_only}, + {""}, +#line 96 "accessor_class_list.gperf" + {"g1verificationdate", &grib_accessor_class_g1verificationdate}, + {""}, {""}, {""}, {""}, +#line 21 "accessor_class_list.gperf" + {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, + {""}, {""}, +#line 35 "accessor_class_list.gperf" + {"codetable", &grib_accessor_class_codetable}, + {""}, {""}, +#line 24 "accessor_class_list.gperf" + {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, + {""}, {""}, {""}, +#line 70 "accessor_class_list.gperf" + {"data_sh_packed", &grib_accessor_class_data_sh_packed}, +#line 22 "accessor_class_list.gperf" + {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, + {""}, +#line 207 "accessor_class_list.gperf" + {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, + {""}, +#line 23 "accessor_class_list.gperf" + {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 82 "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}, + {""}, {""}, {""}, {""}, +#line 88 "accessor_class_list.gperf" + {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, + {""}, {""}, {""}, +#line 42 "accessor_class_list.gperf" + {"count_total", &grib_accessor_class_count_total}, + {""}, {""}, {""}, {""}, +#line 166 "accessor_class_list.gperf" + {"reference_value_error", &grib_accessor_class_reference_value_error}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 36 "accessor_class_list.gperf" + {"codetable_title", &grib_accessor_class_codetable_title}, +#line 94 "accessor_class_list.gperf" + {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, +#line 93 "accessor_class_list.gperf" + {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, + {""}, {""}, +#line 30 "accessor_class_list.gperf" + {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 31 "accessor_class_list.gperf" + {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, + {""}, {""}, {""}, {""}, {""}, +#line 41 "accessor_class_list.gperf" + {"count_missing", &grib_accessor_class_count_missing}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 151 "accessor_class_list.gperf" + {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, +#line 10 "accessor_class_list.gperf" + {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, + {""}, {""}, {""}, +#line 37 "accessor_class_list.gperf" + {"codetable_units", &grib_accessor_class_codetable_units}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, #line 32 "accessor_class_list.gperf" {"check_internal_version", &grib_accessor_class_check_internal_version}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, -#line 88 "accessor_class_list.gperf" - {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, -#line 96 "accessor_class_list.gperf" - {"g1verificationdate", &grib_accessor_class_g1verificationdate}, - {""}, {""}, {""}, {""}, {""}, {""}, -#line 94 "accessor_class_list.gperf" - {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, -#line 93 "accessor_class_list.gperf" - {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, -#line 98 "accessor_class_list.gperf" - {"g2_chemical", &grib_accessor_class_g2_chemical}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, -#line 167 "accessor_class_list.gperf" - {"reference_value_error", &grib_accessor_class_reference_value_error}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, + {""}, {""}, {""}, {""}, #line 91 "accessor_class_list.gperf" - {"g1forecastmonth", &grib_accessor_class_g1forecastmonth} + {"g1forecastmonth", &grib_accessor_class_g1forecastmonth}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 98 "accessor_class_list.gperf" + {"g2_chemical", &grib_accessor_class_g2_chemical} }; static const struct accessor_class_hash* grib_accessor_classes_hash (const char *str, size_t len) diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index 2b92be7e8..de2515884 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -113,7 +113,6 @@ { "ieeefloat", &grib_accessor_class_ieeefloat, }, { "ifs_param", &grib_accessor_class_ifs_param, }, { "int16_little_endian", &grib_accessor_class_int16_little_endian, }, -{ "int32_little_endian", &grib_accessor_class_int32_little_endian, }, { "int64_little_endian", &grib_accessor_class_int64_little_endian, }, { "iterator", &grib_accessor_class_iterator, }, { "julian_date", &grib_accessor_class_julian_date, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index 253064502..e20db5b11 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -114,7 +114,6 @@ ibmfloat, &grib_accessor_class_ibmfloat ieeefloat, &grib_accessor_class_ieeefloat ifs_param, &grib_accessor_class_ifs_param int16_little_endian, &grib_accessor_class_int16_little_endian -int32_little_endian, &grib_accessor_class_int32_little_endian int64_little_endian, &grib_accessor_class_int64_little_endian iterator, &grib_accessor_class_iterator julian_date, &grib_accessor_class_julian_date From a5191bbd857326d4229f72f57c92fdfe21ae9af3 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Aug 2023 18:13:32 +0100 Subject: [PATCH 238/372] Testing: Increase coverage --- tests/grib_filter.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/grib_filter.sh b/tests/grib_filter.sh index 7aac9de31..eb30597c2 100755 --- a/tests/grib_filter.sh +++ b/tests/grib_filter.sh @@ -332,6 +332,18 @@ ${tools_dir}/grib_filter $tempFilt $ECCODES_SAMPLES_PATH/GRIB2.tmpl > $tempOut grep -q "No args: false" $tempOut +# Use of dummy expression (=true) +cat >$tempFilt < $tempOut +cat $tempOut +grep -q "case 1" $tempOut +grep -q "case 2" $tempOut + + # Clean up rm -f $tempGrib $tempFilt $tempOut $tempRef rm -f ${data_dir}/formatint.rules ${data_dir}/binop.rules From c704400fdc3568172aaf6765ad3177c87532ce25 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Aug 2023 19:19:11 +0100 Subject: [PATCH 239/372] Testing: F90 Increase coverage --- examples/F90/CMakeLists.txt | 2 ++ examples/F90/codes_dump.f90 | 2 +- examples/F90/codes_set_paths.f90 | 21 +++++++++++++++++++++ examples/F90/codes_set_paths.sh | 13 +++++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 examples/F90/codes_set_paths.f90 create mode 100755 examples/F90/codes_set_paths.sh diff --git a/examples/F90/CMakeLists.txt b/examples/F90/CMakeLists.txt index 2f0924fef..4db9170d1 100644 --- a/examples/F90/CMakeLists.txt +++ b/examples/F90/CMakeLists.txt @@ -10,6 +10,7 @@ if( HAVE_BUILD_TOOLS ) list( APPEND tests_sanity codes_ecc-1392 codes_datetime_julian + codes_set_paths grib_set_pv grib_set_data bufr_ecc-1284 @@ -65,6 +66,7 @@ else() list( APPEND tests_sanity grib_set_pv grib_set_data + codes_set_paths get_native_type grib_ecc-671 ) list( APPEND tests_extra diff --git a/examples/F90/codes_dump.f90 b/examples/F90/codes_dump.f90 index 7c09fb24e..b68c68e51 100644 --- a/examples/F90/codes_dump.f90 +++ b/examples/F90/codes_dump.f90 @@ -7,7 +7,7 @@ ! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. ! ! -program grib_dump_test +program codes_dump_test use eccodes implicit none integer :: ifile, iret, msgid diff --git a/examples/F90/codes_set_paths.f90 b/examples/F90/codes_set_paths.f90 new file mode 100644 index 000000000..7511ae3eb --- /dev/null +++ b/examples/F90/codes_set_paths.f90 @@ -0,0 +1,21 @@ +! (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. +! +! +program codes_set_paths + use eccodes + implicit none + + character(len=512) :: samples_path, defs_path + + samples_path = "/tmp/samples" + defs_path = "/tmp/defs" + call codes_set_samples_path(samples_path) + call codes_set_definitions_path(defs_path) + +end program diff --git a/examples/F90/codes_set_paths.sh b/examples/F90/codes_set_paths.sh new file mode 100755 index 000000000..dc43d6865 --- /dev/null +++ b/examples/F90/codes_set_paths.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.ctest.sh + +export ECCODES_DEBUG=1 +${examples_dir}/eccodes_f_codes_set_paths From 1aaf72018369a5866d9b648622c0708e3879d6f5 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Aug 2023 19:19:30 +0100 Subject: [PATCH 240/372] Remove unused variable --- examples/F90/get_native_type.f90 | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/F90/get_native_type.f90 b/examples/F90/get_native_type.f90 index 66a66f9e5..2bc547b2d 100644 --- a/examples/F90/get_native_type.f90 +++ b/examples/F90/get_native_type.f90 @@ -9,7 +9,6 @@ program get_native_type use eccodes implicit none - integer :: iret integer :: ihandle integer :: ktype = CODES_TYPE_UNDEFINED From 8d6b11772ae3152a29d673558da6967b8ff17cd2 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Aug 2023 20:07:46 +0100 Subject: [PATCH 241/372] Examples: Fortran is_defined --- examples/F90/grib_get_keys.f90 | 11 ++++++++--- examples/F90/grib_get_keys.sh | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/examples/F90/grib_get_keys.f90 b/examples/F90/grib_get_keys.f90 index b7db43204..5a20b8179 100644 --- a/examples/F90/grib_get_keys.f90 +++ b/examples/F90/grib_get_keys.f90 @@ -26,7 +26,7 @@ program grib_get_keys real, dimension(:), allocatable :: values integer :: numberOfValues real :: average, min_val, max_val - integer :: is_missing + integer :: is_missing, is_defined character(len=10) :: open_mode = 'r' call codes_open_file(ifile, '../../data/reduced_latlon_surface.grib1', open_mode) @@ -38,9 +38,14 @@ program grib_get_keys call codes_grib_new_from_file(ifile, igrib, iret) if (iret == CODES_END_OF_FILE) exit LOOP + ! check key is defined + is_defined = 0 + call codes_is_defined(igrib, 'Ni', is_defined) + write (*, *) 'Key Ni is defined? ', is_defined + ! check if the value of the key is MISSING - is_missing = 0; - call codes_is_missing(igrib, 'Ni', is_missing); + is_missing = 0 + call codes_is_missing(igrib, 'Ni', is_missing) if (is_missing /= 1) then ! key value is not missing so get as an integer call codes_get(igrib, 'Ni', numberOfPointsAlongAParallel) diff --git a/examples/F90/grib_get_keys.sh b/examples/F90/grib_get_keys.sh index 6d7ba8346..0e2eb35c2 100755 --- a/examples/F90/grib_get_keys.sh +++ b/examples/F90/grib_get_keys.sh @@ -9,4 +9,4 @@ . ./include.ctest.sh -${examples_dir}/eccodes_f_grib_get_keys > /dev/null +${examples_dir}/eccodes_f_grib_get_keys From 3eaef920ba81642c7f3438830c1cb4d9db9aa7c1 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Aug 2023 22:18:44 +0100 Subject: [PATCH 242/372] Testing: Increase coverage --- tests/gts_compare.sh | 10 +++++++--- tests/metar_compare.sh | 21 +++++++++++++-------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/tests/gts_compare.sh b/tests/gts_compare.sh index 77f0e2754..0928aa3bb 100755 --- a/tests/gts_compare.sh +++ b/tests/gts_compare.sh @@ -35,7 +35,7 @@ fBufrInput2=${label}".bufr.input2" gts_file="EGRR20150317121020_00493212.DAT" echo "Test: comparing the same files" >> $fLog echo "file: $gts_file" >> $fLog -${tools_dir}//gts_compare $gts_file $gts_file +${tools_dir}/gts_compare $gts_file $gts_file #---------------------------------------------------- # Test: comparing two different files @@ -46,18 +46,22 @@ cat > $fRules<&2 exit 1 fi +# The -d option should have created these two files +[ -f error1_1.gts ] +[ -f error2_1.gts ] +rm -f error1_1.gts error2_1.gts #---------------------------------------------------- # Test: comparing with and without the -b switch #---------------------------------------------------- -${tools_dir}//gts_compare -b GG $gts_file $fGtsTmp >> $fLog +${tools_dir}/gts_compare -b GG $gts_file $fGtsTmp >> $fLog #Clean up rm -f $fLog $fGtsTmp $fRules diff --git a/tests/metar_compare.sh b/tests/metar_compare.sh index ee016bd9f..0122cd75a 100755 --- a/tests/metar_compare.sh +++ b/tests/metar_compare.sh @@ -10,20 +10,18 @@ . ./include.ctest.sh -#set -x - -#Enter data dir +# Enter data dir cd ${data_dir}/metar -#Define a common label for all the tmp files +# Define a common label for all the tmp files label="metar_compare_test" -#Create log file +# Create log file fLog=${label}".log" rm -f $fLog touch $fLog -#Define tmp METAR file +# Define tmp METAR file fMetarTmp=${label}".metar.tmp" #---------------------------------------------------- @@ -39,7 +37,7 @@ ${tools_dir}/metar_compare $metar_file $metar_file #---------------------------------------------------- sed -e 's:^METAR VECC 022350Z 00000KT 1600 BR NSC 15/13 Q1013 NOSIG:METAR VECC 022349Z 00000KT 1600 BR NSC 15/13 Q1013 NOSIG:' < metar.txt > $fMetarTmp set +e -${tools_dir}/metar_compare $metar_file $fMetarTmp +${tools_dir}/metar_compare -v -d $metar_file $fMetarTmp status=$? set -e if [ $status -eq 0 ]; then @@ -47,10 +45,17 @@ if [ $status -eq 0 ]; then exit 1 fi +# The -d option should have created these two files +[ -f error1_1.metar ] +[ -f error2_1.metar ] +[ -f error1_2.metar ] +[ -f error2_2.metar ] +rm -f error1_1.metar error2_1.metar error1_2.metar error2_2.metar + #---------------------------------------------------- # Test: comparing with and without the -b switch #---------------------------------------------------- -# ${tools_dir}/metar_compare -b GG $metar_file $fMetarTmp >> $fLog +${tools_dir}/metar_compare -b minute,theMessage $metar_file $fMetarTmp #Clean up rm -f $fLog $fMetarTmp From d34ac136e137a3d2009e026fa6240b70da324cc3 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 23 Aug 2023 22:19:07 +0100 Subject: [PATCH 243/372] Refactoring --- src/grib_accessor_class.cc | 5 +--- src/grib_api_internal.h | 43 +++++++------------------------ src/grib_buffer.cc | 10 +++---- src/grib_context.cc | 2 +- src/grib_handle.cc | 24 ++++++++--------- src/grib_index.cc | 2 ++ src/grib_io.cc | 4 +-- src/grib_util.cc | 4 +-- src/grib_value.cc | 4 +-- tools/bufr_compare.cc | 4 +-- tools/grib_compare.cc | 4 +-- tools/grib_options.cc | 2 +- tools/gts_compare.cc | 53 +++----------------------------------- tools/metar_compare.cc | 4 +-- 14 files changed, 48 insertions(+), 117 deletions(-) diff --git a/src/grib_accessor_class.cc b/src/grib_accessor_class.cc index 127f1ec7d..06da7e830 100644 --- a/src/grib_accessor_class.cc +++ b/src/grib_accessor_class.cc @@ -355,11 +355,10 @@ int grib_get_block_length(grib_section* s, size_t* l) *l = s->length; return GRIB_SUCCESS; -// TODO: Because grib_pack_long takes a SIGNED value, we may have problems +// TODO(masn): Because grib_pack_long takes a SIGNED value, we may have problems // 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) // { @@ -367,7 +366,6 @@ int grib_get_block_length(grib_section* s, size_t* l) // return GRIB_SUCCESS; // } // } - // // empty block // if(s->block->first == NULL) { // *l = 0; @@ -380,7 +378,6 @@ int grib_get_block_length(grib_section* s, size_t* l) // if(s->aclength) { // size_t len = 1; // long plen = *l; - // int ret = grib_pack_long(s->aclength, &plen, &len); // if(ret != GRIB_SUCCESS) // ; diff --git a/src/grib_api_internal.h b/src/grib_api_internal.h index 0ae6ccccf..bf6b3694d 100644 --- a/src/grib_api_internal.h +++ b/src/grib_api_internal.h @@ -204,31 +204,22 @@ extern int pthread_mutexattr_settype(pthread_mutexattr_t* attr, int type); #include "grib_api.h" -#define GRIB_UNKNOWN_VALUE -9999.999 -#define GRIB_KEY_UNDEF "undef" - -#define GRIB_HANDLE_BIG_ECMWF_GRIB1 1 - #define MAX_ACCESSOR_ATTRIBUTES 20 #define MAX_FILE_HANDLES_WITH_MULTI 10 #define ACCESSORS_ARRAY_SIZE 5000 #define MAX_NUM_CONCEPTS 2000 #define MAX_NUM_HASH_ARRAY 2000 -#define GRIB_NAMESPACE 10 +#define CODES_NAMESPACE 10 #define MAX_NAMESPACE_LEN 64 -#define GRIB_MY_BUFFER 0 -#define GRIB_USER_BUFFER 1 +#define CODES_MY_BUFFER 0 +#define CODES_USER_BUFFER 1 -#define GRIB_REAL_MODE4 4 -#define GRIB_REAL_MODE8 8 +#define CODES_REAL_MODE8 8 #define MAX_NUM_SECTIONS 12 -#define GRIB_DISPOSABLE_MEMORY 0 -#define GRIB_LONG_LASTING_MEMORY 1 - #define GRIB_LOG_PERROR (1 << 10) #define GRIB_HASH_ARRAY_TYPE_UNKNOWN 0 @@ -236,17 +227,17 @@ extern int pthread_mutexattr_settype(pthread_mutexattr_t* attr, int type); #define GRIB_HASH_ARRAY_TYPE_DOUBLE 2 #define GRIB_HASH_ARRAY_TYPE_STRING 3 -#define CODES_GRIB 1 -#define CODES_BUFR 2 +#define CODES_GRIB 1 +#define CODES_BUFR 2 #define CODES_METAR 3 -#define CODES_GTS 4 +#define CODES_GTS 4 #define CODES_BUFR_UNPACK_STRUCTURE 0 -#define CODES_BUFR_UNPACK_FLAT 1 -#define CODES_BUFR_NEW_DATA 2 +#define CODES_BUFR_UNPACK_FLAT 1 +#define CODES_BUFR_NEW_DATA 2 #define MAX_SMART_TABLE_COLUMNS 20 -#define MAX_CODETABLE_ENTRIES 65536 +#define MAX_CODETABLE_ENTRIES 65536 /* ACCESSOR COMPARE FLAGS */ #define GRIB_COMPARE_NAMES (1 << 0) @@ -327,7 +318,6 @@ typedef void (*accessor_resize_proc)(grib_accessor*, size_t); typedef grib_accessor* (*accessor_next_proc)(grib_accessor*, int); typedef grib_section* (*accessor_sub_section_proc)(grib_accessor*); - typedef int (*accessor_pack_missing_proc)(grib_accessor*); typedef int (*accessor_pack_is_missing_proc)(grib_accessor*); typedef int (*accessor_pack_long_proc)(grib_accessor*, const long*, size_t* len); @@ -363,7 +353,6 @@ typedef int (*grib_binop_string_proc)(char*, char*); typedef struct second_order_packed second_order_packed; typedef void grib_expression_visit_proc(void* udata, grib_expression* e); - struct grib_key_value_list { const char* name; @@ -378,7 +367,6 @@ struct grib_key_value_list grib_key_value_list* next; }; - struct second_order_packed { unsigned long nbits_per_widths; @@ -403,9 +391,7 @@ struct grib_packer grib_unpack_proc unpack; /** < unpacking procedure */ }; - /* --------------- */ - typedef struct grib_loader grib_loader; typedef int (*grib_loader_init_accessor_proc)(grib_loader*, grib_accessor*, grib_arguments*); typedef int (*grib_loader_lookup_long_proc)(grib_context*, grib_loader*, const char* name, long* value); @@ -451,7 +437,6 @@ struct grib_accessors_list grib_accessors_list* last; }; - typedef int (*action_create_accessors_handle_proc)(grib_section* p, grib_action* a, grib_loader* h); typedef int (*action_notify_change_proc)(grib_action* a, grib_accessor* observer, grib_accessor* observed); @@ -490,7 +475,6 @@ struct grib_action_class action_execute_proc execute; }; - /** * a buffer * Structure containing the data of a message @@ -590,7 +574,6 @@ struct grib_section size_t padding; }; - struct grib_iterator_class { grib_iterator_class** super; @@ -625,10 +608,6 @@ struct grib_nearest_class }; /* --------------- */ -/* --------------- */ -typedef void (*search_all_callback_proc)(grib_accessor*, void* data); -/* --------------- */ - typedef int (*dumper_init_proc)(grib_dumper*); typedef void (*dumper_dump_proc)(grib_dumper*, grib_accessor*, const char* comment); typedef void (*dumper_dump_section_proc)(grib_dumper*, grib_accessor*, grib_block_of_accessors* block); @@ -713,7 +692,6 @@ typedef struct grib_trie_with_rank_list grib_trie_with_rank_list; typedef struct grib_trie_with_rank grib_trie_with_rank; typedef struct grib_itrie grib_itrie; - /* Dynamic array of strings */ struct grib_sarray { @@ -850,7 +828,6 @@ struct codes_condition double rightDouble; }; - void codes_assertion_failed(const char* message, const char* file, int line); #define MAX_SET_VALUES 10 diff --git a/src/grib_buffer.cc b/src/grib_buffer.cc index 581a66239..370cafc13 100644 --- a/src/grib_buffer.cc +++ b/src/grib_buffer.cc @@ -16,13 +16,13 @@ void grib_get_buffer_ownership(const grib_context* c, grib_buffer* b) { unsigned char* newdata; - if (b->property == GRIB_MY_BUFFER) + if (b->property == CODES_MY_BUFFER) return; newdata = (unsigned char*)grib_context_malloc(c, b->length); memcpy(newdata, b->data, b->length); b->data = newdata; - b->property = GRIB_MY_BUFFER; + b->property = CODES_MY_BUFFER; } grib_buffer* grib_create_growable_buffer(const grib_context* c) @@ -34,7 +34,7 @@ grib_buffer* grib_create_growable_buffer(const grib_context* c) return NULL; } - b->property = GRIB_MY_BUFFER; + b->property = CODES_MY_BUFFER; b->length = 10240; b->ulength = 0; b->data = (unsigned char*)grib_context_malloc_clear(c, b->length); @@ -58,7 +58,7 @@ grib_buffer* grib_new_buffer(const grib_context* c, const unsigned char* data, s return NULL; } - b->property = GRIB_USER_BUFFER; + b->property = CODES_USER_BUFFER; b->length = buflen; b->ulength = buflen; b->ulength_bits = buflen * 8; @@ -69,7 +69,7 @@ grib_buffer* grib_new_buffer(const grib_context* c, const unsigned char* data, s void grib_buffer_delete(const grib_context* c, grib_buffer* b) { - if (b->property == GRIB_MY_BUFFER) + if (b->property == CODES_MY_BUFFER) grib_context_free(c, b->data); b->length = 0; b->ulength = 0; diff --git a/src/grib_context.cc b/src/grib_context.cc index 72b47150d..8f52633eb 100644 --- a/src/grib_context.cc +++ b/src/grib_context.cc @@ -292,7 +292,7 @@ static grib_context default_grib_context = { 0, /* grib_concept_path */ 0, /* grib_reader */ 0, /* user data */ - GRIB_REAL_MODE8, /* real mode for fortran */ + CODES_REAL_MODE8, /* real mode for fortran */ #if MANAGE_MEM &grib_transient_free, /* free_mem */ diff --git a/src/grib_handle.cc b/src/grib_handle.cc index 34708513e..be5cdecda 100644 --- a/src/grib_handle.cc +++ b/src/grib_handle.cc @@ -196,7 +196,7 @@ static grib_handle* grib_handle_create(grib_handle* gl, grib_context* c, const v return NULL; } - gl->buffer->property = GRIB_USER_BUFFER; + gl->buffer->property = CODES_USER_BUFFER; next = gl->context->grib_reader->first->root; while (next) { @@ -401,7 +401,7 @@ grib_handle* grib_handle_new_from_message_copy(grib_context* c, const void* data memcpy(copy, data, size); g = grib_handle_new_from_message(c, copy, size); - g->buffer->property = GRIB_MY_BUFFER; + g->buffer->property = CODES_MY_BUFFER; return g; } @@ -421,7 +421,7 @@ grib_handle* grib_handle_new_from_partial_message_copy(grib_context* c, const vo memcpy(copy, data, size); g = grib_handle_new_from_partial_message(c, copy, size); - g->buffer->property = GRIB_MY_BUFFER; + g->buffer->property = CODES_MY_BUFFER; return g; } @@ -607,7 +607,7 @@ static grib_handle* grib_handle_new_multi(grib_context* c, unsigned char** data, return NULL; } - gl->buffer->property = GRIB_MY_BUFFER; + gl->buffer->property = CODES_MY_BUFFER; grib_context_increment_handle_file_count(c); grib_context_increment_handle_total_count(c); @@ -764,7 +764,7 @@ static grib_handle* grib_handle_new_from_file_multi(grib_context* c, FILE* f, in } gl->offset = gm->offset; - gl->buffer->property = GRIB_MY_BUFFER; + gl->buffer->property = CODES_MY_BUFFER; grib_context_increment_handle_file_count(c); grib_context_increment_handle_total_count(c); @@ -844,7 +844,7 @@ grib_handle* gts_new_from_file(grib_context* c, FILE* f, int* error) } gl->offset = offset; - gl->buffer->property = GRIB_MY_BUFFER; + gl->buffer->property = CODES_MY_BUFFER; gl->product_kind = PRODUCT_GTS; grib_context_increment_handle_file_count(c); grib_context_increment_handle_total_count(c); @@ -885,7 +885,7 @@ grib_handle* taf_new_from_file(grib_context* c, FILE* f, int* error) } gl->offset = offset; - gl->buffer->property = GRIB_MY_BUFFER; + gl->buffer->property = CODES_MY_BUFFER; gl->product_kind = PRODUCT_TAF; grib_context_increment_handle_file_count(c); grib_context_increment_handle_total_count(c); @@ -926,7 +926,7 @@ grib_handle* metar_new_from_file(grib_context* c, FILE* f, int* error) } gl->offset = offset; - gl->buffer->property = GRIB_MY_BUFFER; + gl->buffer->property = CODES_MY_BUFFER; gl->product_kind = PRODUCT_METAR; grib_context_increment_handle_file_count(c); grib_context_increment_handle_total_count(c); @@ -994,7 +994,7 @@ grib_handle* bufr_new_from_file(grib_context* c, FILE* f, int* error) } gl->offset = offset; - gl->buffer->property = GRIB_MY_BUFFER; + gl->buffer->property = CODES_MY_BUFFER; gl->product_kind = PRODUCT_BUFR; grib_context_increment_handle_file_count(c); grib_context_increment_handle_total_count(c); @@ -1046,7 +1046,7 @@ grib_handle* any_new_from_file(grib_context* c, FILE* f, int* error) } gl->offset = offset; - gl->buffer->property = GRIB_MY_BUFFER; + gl->buffer->property = CODES_MY_BUFFER; gl->product_kind = PRODUCT_ANY; grib_context_increment_handle_file_count(c); grib_context_increment_handle_total_count(c); @@ -1119,7 +1119,7 @@ static grib_handle* grib_handle_new_from_file_no_multi(grib_context* c, FILE* f, } gl->offset = offset; - gl->buffer->property = GRIB_MY_BUFFER; + gl->buffer->property = CODES_MY_BUFFER; grib_context_increment_handle_file_count(c); grib_context_increment_handle_total_count(c); @@ -1415,7 +1415,7 @@ int grib_get_message_headers(grib_handle* h, const void** msg, size_t* size) // grib_handle_delete(h); // return NULL; // } -// h->buffer->property = GRIB_USER_BUFFER; +// h->buffer->property = CODES_USER_BUFFER; // h->header_mode = 1; // return h; // } diff --git a/src/grib_index.cc b/src/grib_index.cc index 57efa359e..ca6e0defc 100644 --- a/src/grib_index.cc +++ b/src/grib_index.cc @@ -16,6 +16,8 @@ #define NULL_MARKER 0 #define NOT_NULL_MARKER 255 +#define GRIB_KEY_UNDEF "undef" + /* #if GRIB_PTHREADS */ // static pthread_once_t once = PTHREAD_ONCE_INIT; // static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; diff --git a/src/grib_io.cc b/src/grib_io.cc index d92f3565e..760b7245d 100644 --- a/src/grib_io.cc +++ b/src/grib_io.cc @@ -180,7 +180,7 @@ static int read_GRIB(reader* r, int no_alloc) if (!tmp) return GRIB_OUT_OF_MEMORY; buf = grib_new_buffer(c, tmp, buflen); - buf->property = GRIB_MY_BUFFER; + buf->property = CODES_MY_BUFFER; tmp[i++] = 'G'; tmp[i++] = 'R'; @@ -721,7 +721,7 @@ static int read_BUFR(reader* r, int no_alloc) if (!tmp) return GRIB_OUT_OF_MEMORY; buf = grib_new_buffer(c, tmp, buflen); - buf->property = GRIB_MY_BUFFER; + buf->property = CODES_MY_BUFFER; r->offset = r->tell(r->read_data) - 4; tmp[i++] = 'B'; diff --git a/src/grib_util.cc b/src/grib_util.cc index edfd3eb33..7393f094e 100644 --- a/src/grib_util.cc +++ b/src/grib_util.cc @@ -114,7 +114,7 @@ static grib_handle* grib_sections_copy_internal(grib_handle* hfrom, grib_handle* h = grib_handle_new_from_message(hfrom->context, buffer, totalLength); /*to allow free of buffer*/ - h->buffer->property = GRIB_MY_BUFFER; + h->buffer->property = CODES_MY_BUFFER; switch (edition) { case 1: @@ -1810,7 +1810,7 @@ int parse_keyval_string(const char* grib_tool, if (*p == ':') { values[i].type = grib_type_to_int(*(p + 1)); if (*(p + 1) == 'n') - values[i].type = GRIB_NAMESPACE; + values[i].type = CODES_NAMESPACE; *p = '\0'; p++; } diff --git a/src/grib_value.cc b/src/grib_value.cc index 0626b029a..6cfd76a3c 100644 --- a/src/grib_value.cc +++ b/src/grib_value.cc @@ -1623,7 +1623,7 @@ static int grib_get_key_value(grib_handle* h, grib_key_value_list* kv) err = grib_get_bytes(h, kv->name, (unsigned char*)kv->string_value, &size); kv->error = err; break; - case GRIB_NAMESPACE: + case CODES_NAMESPACE: iter = grib_keys_iterator_new(h, 0, kv->name); list = (grib_key_value_list*)grib_context_malloc_clear(h->context, sizeof(grib_key_value_list)); kv->namespace_value = list; @@ -1672,7 +1672,7 @@ void grib_key_value_list_delete(grib_context* c, grib_key_value_list* kvl) grib_key_value_list* p = NULL; while (next) { p = next->next; - if (next->type == GRIB_NAMESPACE) + if (next->type == CODES_NAMESPACE) grib_key_value_list_delete(c, next->namespace_value); grib_clean_key_value(c, next); diff --git a/tools/bufr_compare.cc b/tools/bufr_compare.cc index 8d6c38dd5..2c032a176 100644 --- a/tools/bufr_compare.cc +++ b/tools/bufr_compare.cc @@ -1344,7 +1344,7 @@ static int compare_handles(grib_handle* handle1, grib_handle* handle2, grib_runt for (i = 0; i < options->compare_count; i++) { if (blocklisted(options->compare[i].name)) continue; - if (options->compare[i].type == GRIB_NAMESPACE) { + if (options->compare[i].type == CODES_NAMESPACE) { iter = grib_keys_iterator_new(handle1, 0, options->compare[i].name); if (!iter) { grib_context_log(handle1->context, GRIB_LOG_ERROR, "unable to get iterator"); @@ -1406,7 +1406,7 @@ static int compare_handles(grib_handle* handle1, grib_handle* handle2, grib_runt for (i = 0; i < options->compare_count; i++) { if (blocklisted(name)) continue; - if (options->compare[i].type == GRIB_NAMESPACE) { + if (options->compare[i].type == CODES_NAMESPACE) { iter = grib_keys_iterator_new(handle1, 0, options->compare[i].name); if (!iter) { grib_context_log(handle1->context, GRIB_LOG_ERROR, diff --git a/tools/grib_compare.cc b/tools/grib_compare.cc index dbcb8ed7e..81ad647bc 100644 --- a/tools/grib_compare.cc +++ b/tools/grib_compare.cc @@ -1207,7 +1207,7 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option for (i = 0; i < options->compare_count; i++) { if (blocklisted(options->compare[i].name)) continue; - if (options->compare[i].type == GRIB_NAMESPACE) { + if (options->compare[i].type == CODES_NAMESPACE) { int num_keys_in_namespace = 0; iter = grib_keys_iterator_new(h1, 0, options->compare[i].name); if (!iter) { @@ -1265,7 +1265,7 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option for (i = 0; i < options->compare_count; i++) { if (blocklisted(options->compare[i].name)) continue; - if (options->compare[i].type == GRIB_NAMESPACE) { + if (options->compare[i].type == CODES_NAMESPACE) { iter = grib_keys_iterator_new(h1, 0, options->compare[i].name); if (!iter) { printf("ERROR: unable to get iterator for %s\n", options->compare[i].name); diff --git a/tools/grib_options.cc b/tools/grib_options.cc index 78e82d1d8..475f22fdf 100644 --- a/tools/grib_options.cc +++ b/tools/grib_options.cc @@ -386,7 +386,7 @@ int grib_process_runtime_options(grib_context* context, int argc, char** argv, g if (grib_options_on("e")) { for (i = 0; i < names_count; i++) { options->compare[i + options->compare_count].name = names[i]; - options->compare[i + options->compare_count].type = GRIB_NAMESPACE; + options->compare[i + options->compare_count].type = CODES_NAMESPACE; } options->compare_count += names_count; } diff --git a/tools/gts_compare.cc b/tools/gts_compare.cc index 047839d4a..192f314a8 100644 --- a/tools/gts_compare.cc +++ b/tools/gts_compare.cc @@ -79,7 +79,6 @@ int lastPrint = 0; int force = 0; double maxAbsoluteError = 1e-19; int onlyListed = 1; -int headerMode = 0; int morein1 = 0; int morein2 = 0; int listFromCommandLine = 0; @@ -185,11 +184,6 @@ int grib_tool_init(grib_runtime_options* options) else onlyListed = 1; - if (grib_options_on("H")) - headerMode = 1; - else - headerMode = 0; - if (grib_options_on("H") && grib_options_on("c:")) { printf("Error: -H and -c options are incompatible. Choose one of the two please.\n"); exit(1); @@ -730,8 +724,8 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option grib_keys_iterator* iter = NULL; const char* name = NULL; - /* mask only if no -c option or headerMode (-H)*/ - if (blocklist && (!listFromCommandLine || headerMode)) { + /* mask only if no -c option */ + if (blocklist && !listFromCommandLine) { grib_string_list* nextb = blocklist; while (nextb) { grib_clear(h1, nextb->value); @@ -740,50 +734,11 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option } } - if (headerMode) { - const void *msg1 = NULL, *msg2 = NULL; - size_t size1 = 0, size2 = 0; - grib_handle *h11, *h22; - GRIB_CHECK_NOLINE(grib_get_message_headers(h1, &msg1, &size1), 0); - GRIB_CHECK_NOLINE(grib_get_message_headers(h2, &msg2, &size2), 0); - if (size1 == size2 && !memcmp(msg1, msg2, size1)) - return 0; - - err = 0; - h11 = grib_handle_new_from_partial_message(h1->context, msg1, size1); - h22 = grib_handle_new_from_partial_message(h1->context, msg2, size2); - - iter = grib_keys_iterator_new(h11, - GRIB_KEYS_ITERATOR_SKIP_COMPUTED, NULL); - - if (!iter) { - printf("ERROR: unable to get iterator\n"); - exit(1); - } - - while (grib_keys_iterator_next(iter)) { - name = grib_keys_iterator_get_name(iter); - /*printf("----- comparing %s\n",name);*/ - - if (blocklisted(name)) - continue; - if (compare_values(options, h11, h22, name, GRIB_TYPE_UNDEFINED)) { - err++; - write_messages(h11, h22); - } - } - - grib_keys_iterator_delete(iter); - grib_handle_delete(h11); - grib_handle_delete(h22); - return err; - } - if (listFromCommandLine && onlyListed) { for (i = 0; i < options->compare_count; i++) { if (blocklisted((char*)options->compare[i].name)) continue; - if (options->compare[i].type == GRIB_NAMESPACE) { + if (options->compare[i].type == CODES_NAMESPACE) { iter = grib_keys_iterator_new(h1, 0, options->compare[i].name); if (!iter) { printf("ERROR: unable to get iterator\n"); @@ -844,7 +799,7 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option for (i = 0; i < options->compare_count; i++) { if (blocklisted(name)) continue; - if (options->compare[i].type == GRIB_NAMESPACE) { + if (options->compare[i].type == CODES_NAMESPACE) { iter = grib_keys_iterator_new(h1, 0, options->compare[i].name); if (!iter) { printf("ERROR: unable to get iterator for %s\n", options->compare[i].name); diff --git a/tools/metar_compare.cc b/tools/metar_compare.cc index 4b1a8ee46..149c462be 100644 --- a/tools/metar_compare.cc +++ b/tools/metar_compare.cc @@ -919,7 +919,7 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option for (i = 0; i < options->compare_count; i++) { if (blocklisted((char*)options->compare[i].name)) continue; - if (options->compare[i].type == GRIB_NAMESPACE) { + if (options->compare[i].type == CODES_NAMESPACE) { iter = grib_keys_iterator_new(h1, 0, options->compare[i].name); if (!iter) { printf("ERROR: unable to get iterator\n"); @@ -960,7 +960,7 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option for (i = 0; i < options->compare_count; i++) { if (blocklisted(name)) continue; - if (options->compare[i].type == GRIB_NAMESPACE) { + if (options->compare[i].type == CODES_NAMESPACE) { iter = grib_keys_iterator_new(h1, 0, options->compare[i].name); if (!iter) { printf("ERROR: unable to get iterator for %s\n", options->compare[i].name); From 2a4ae5d4c8a05762a643e1bef7f36fa1637277d0 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 10:35:26 +0100 Subject: [PATCH 244/372] Testing: Fix for Windows --- tests/metar_compare.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/metar_compare.sh b/tests/metar_compare.sh index 0122cd75a..a42b84a92 100755 --- a/tests/metar_compare.sh +++ b/tests/metar_compare.sh @@ -45,11 +45,9 @@ if [ $status -eq 0 ]; then exit 1 fi -# The -d option should have created these two files +# The -d option should have created these files [ -f error1_1.metar ] [ -f error2_1.metar ] -[ -f error1_2.metar ] -[ -f error2_2.metar ] rm -f error1_1.metar error2_1.metar error1_2.metar error2_2.metar #---------------------------------------------------- From 917d59531ce4291557464d5b7cd7e605b8c8bddb Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 11:34:30 +0100 Subject: [PATCH 245/372] Tools: Fix blocklisting --- tools/bufr_compare.cc | 12 ------------ tools/grib_compare.cc | 19 +++++++++---------- tools/gts_compare.cc | 17 ++--------------- tools/metar_compare.cc | 17 ++--------------- 4 files changed, 13 insertions(+), 52 deletions(-) diff --git a/tools/bufr_compare.cc b/tools/bufr_compare.cc index 2c032a176..712f76d57 100644 --- a/tools/bufr_compare.cc +++ b/tools/bufr_compare.cc @@ -1328,18 +1328,6 @@ static int compare_handles(grib_handle* handle1, grib_handle* handle2, grib_runt grib_keys_iterator* iter = NULL; const char* name = NULL; - /* mask only if no -c option or headerMode (-H)*/ - if (blocklist && (!listFromCommandLine || headerMode)) { - /* See ECC-245, GRIB-573, GRIB-915: Do not change handles in memory */ - /* - grib_string_list* nextb=blocklist; - while (nextb) { - grib_clear(handle1,nextb->value); - grib_clear(handle2,nextb->value); - nextb=nextb->next; - }*/ - } - if (listFromCommandLine && onlyListed) { for (i = 0; i < options->compare_count; i++) { if (blocklisted(options->compare[i].name)) diff --git a/tools/grib_compare.cc b/tools/grib_compare.cc index 81ad647bc..cc155a864 100644 --- a/tools/grib_compare.cc +++ b/tools/grib_compare.cc @@ -1143,16 +1143,15 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option grib_keys_iterator* iter = NULL; grib_context* context = handle1->context; - /* mask only if no -c option or headerMode (-H)*/ - if (blocklist && (!listFromCommandLine || headerMode)) { - /* See ECC-245, GRIB-573, GRIB-915: Do not change handles in memory */ - /* grib_string_list* nextb=blocklist; - while (nextb) { - grib_clear(h1,nextb->value); - grib_clear(h2,nextb->value); - nextb=nextb->next; - } */ - } + //if (blocklist && (!listFromCommandLine || headerMode)) { + // See ECC-245, GRIB-573, GRIB-915: Do not change handles in memory! + // grib_string_list* nextb=blocklist; + // while (nextb) { + // grib_clear(h1,nextb->value); + // grib_clear(h2,nextb->value); + // nextb=nextb->next; + // } + //} if (headerMode) { // An alternative implementation: diff --git a/tools/gts_compare.cc b/tools/gts_compare.cc index 192f314a8..c17e25c3d 100644 --- a/tools/gts_compare.cc +++ b/tools/gts_compare.cc @@ -264,10 +264,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) int err = 0; count++; - if (options->random) - global_handle = grib_fieldset_next_handle(options->idx, &err); - else - global_handle = gts_handle_new_from_file_x(h->context, options->infile_extra->file, options->mode, 0, &err); + global_handle = gts_handle_new_from_file_x(h->context, options->infile_extra->file, options->mode, 0, &err); if (!global_handle || err != GRIB_SUCCESS) { morein2++; @@ -290,7 +287,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { int err = 0; - if (!options->through_index && !options->random) { + if (!options->through_index) { global_handle = gts_new_from_file(h->context, options->infile_extra->file, &err); if (!global_handle || err != GRIB_SUCCESS) @@ -724,16 +721,6 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option grib_keys_iterator* iter = NULL; const char* name = NULL; - /* mask only if no -c option */ - if (blocklist && !listFromCommandLine) { - grib_string_list* nextb = blocklist; - while (nextb) { - grib_clear(h1, nextb->value); - grib_clear(h2, nextb->value); - nextb = nextb->next; - } - } - if (listFromCommandLine && onlyListed) { for (i = 0; i < options->compare_count; i++) { if (blocklisted((char*)options->compare[i].name)) diff --git a/tools/metar_compare.cc b/tools/metar_compare.cc index 149c462be..4a9024483 100644 --- a/tools/metar_compare.cc +++ b/tools/metar_compare.cc @@ -332,10 +332,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) int err = 0; count++; - if (options->random) - global_handle = grib_fieldset_next_handle(options->idx, &err); - else - global_handle = metar_handle_new_from_file_x(h->context, options->infile_extra->file, options->mode, 0, &err); + global_handle = metar_handle_new_from_file_x(h->context, options->infile_extra->file, options->mode, 0, &err); if (!global_handle || err != GRIB_SUCCESS) { morein2++; @@ -358,7 +355,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { int err = 0; - if (!options->through_index && !options->random) { + if (!options->through_index) { global_handle = metar_new_from_file(h->context, options->infile_extra->file, &err); if (!global_handle || err != GRIB_SUCCESS) @@ -905,16 +902,6 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option grib_keys_iterator* iter = NULL; const char* name = NULL; - /* mask only if no -c option (-H)*/ - if (blocklist && !listFromCommandLine) { - grib_string_list* nextb = blocklist; - while (nextb) { - grib_clear(h1, nextb->value); - grib_clear(h2, nextb->value); - nextb = nextb->next; - } - } - if (listFromCommandLine && onlyListed) { for (i = 0; i < options->compare_count; i++) { if (blocklisted((char*)options->compare[i].name)) From 15eeed49f15b525a23e084f4e9426a912c7539c0 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 11:34:46 +0100 Subject: [PATCH 246/372] Dead code removal --- src/eccodes_prototypes.h | 1 - src/grib_value.cc | 35 ++++++++++++++++------------------- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 6cbe12193..2d53a28ab 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -1158,7 +1158,6 @@ int grib_set_string(grib_handle* h, const char* name, const char* val, size_t* l int grib_set_string_array(grib_handle* h, const char* name, const char** val, size_t length); int grib_set_bytes_internal(grib_handle* h, const char* name, const unsigned char* val, size_t* length); int grib_set_bytes(grib_handle* h, const char* name, const unsigned char* val, size_t* length); -int grib_clear(grib_handle* h, const char* name); int grib_set_missing(grib_handle* h, const char* name); int grib_is_missing_long(grib_accessor* a, long x); int grib_is_missing_double(grib_accessor* a, double x); diff --git a/src/grib_value.cc b/src/grib_value.cc index 6cfd76a3c..bd4421a13 100644 --- a/src/grib_value.cc +++ b/src/grib_value.cc @@ -537,25 +537,22 @@ int grib_set_bytes(grib_handle* h, const char* name, const unsigned char* val, s return GRIB_NOT_FOUND; } -int grib_clear(grib_handle* h, const char* name) -{ - int ret = 0; - grib_accessor* a = NULL; - - a = grib_find_accessor(h, name); - - if (a) { - if (a->length == 0) - return 0; - if ((ret = grib_pack_zero(a)) != GRIB_SUCCESS) - grib_context_log(h->context, GRIB_LOG_ERROR, "unable to clear %s (%s)", - name, grib_get_error_message(ret)); - return ret; - } - - /*grib_context_log(h->context,GRIB_LOG_ERROR,"unable to find accessor %s",name);*/ - return GRIB_NOT_FOUND; -} +// int grib_clear(grib_handle* h, const char* name) +// { +// int ret = 0; +// grib_accessor* a = NULL; +// a = grib_find_accessor(h, name); +// if (a) { +// if (a->length == 0) +// return 0; +// if ((ret = grib_pack_zero(a)) != GRIB_SUCCESS) +// grib_context_log(h->context, GRIB_LOG_ERROR, "unable to clear %s (%s)", +// name, grib_get_error_message(ret)); +// return ret; +// } +// /*grib_context_log(h->context,GRIB_LOG_ERROR,"unable to find accessor %s",name);*/ +// return GRIB_NOT_FOUND; +// } int grib_set_missing(grib_handle* h, const char* name) { From 71437ad8a2dd79d1d113a2b88b59a184ee7058fc Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 11:35:23 +0100 Subject: [PATCH 247/372] Testing: blocklists --- tests/gts_compare.sh | 21 +++++++++++---------- tests/metar_compare.sh | 7 +++++++ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/tests/gts_compare.sh b/tests/gts_compare.sh index 0928aa3bb..88d3d899c 100755 --- a/tests/gts_compare.sh +++ b/tests/gts_compare.sh @@ -10,24 +10,18 @@ . ./include.ctest.sh -#set -x - -#Enter data dir +# Enter data dir cd ${data_dir}/gts -#Define a common label for all the tmp files +# Define a common label for all the tmp files label="gts_compare_test" -#Create log file fLog=${label}".log" rm -f $fLog touch $fLog -#Define tmp GTS file fGtsTmp=${label}".gts.tmp" fRules=${label}".filt" -fBufrInput1=${label}".bufr.input1" -fBufrInput2=${label}".bufr.input2" #---------------------------------------------------- # Test: comparing same files @@ -61,7 +55,14 @@ rm -f error1_1.gts error2_1.gts #---------------------------------------------------- # Test: comparing with and without the -b switch #---------------------------------------------------- -${tools_dir}/gts_compare -b GG $gts_file $fGtsTmp >> $fLog +# Add wrong blocklist. Should still fail +set +e +${tools_dir}/gts_compare -b CCCC $gts_file $fGtsTmp +status=$? +set -e +[ $status -eq 1 ] +# Add correct blocklist +${tools_dir}/gts_compare -b GG $gts_file $fGtsTmp -#Clean up +# Clean up rm -f $fLog $fGtsTmp $fRules diff --git a/tests/metar_compare.sh b/tests/metar_compare.sh index a42b84a92..dd662dab7 100755 --- a/tests/metar_compare.sh +++ b/tests/metar_compare.sh @@ -53,6 +53,13 @@ rm -f error1_1.metar error2_1.metar error1_2.metar error2_2.metar #---------------------------------------------------- # Test: comparing with and without the -b switch #---------------------------------------------------- +# Add wrong blocklist. Should still fail +set +e +${tools_dir}/metar_compare -b CCCC $metar_file $fMetarTmp +status=$? +set -e +[ $status -eq 1 ] +# Add correct blocklist ${tools_dir}/metar_compare -b minute,theMessage $metar_file $fMetarTmp #Clean up From 516c7c3f62394e87e42c30ccf38fcaea4bcd13dc Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 13:00:47 +0100 Subject: [PATCH 248/372] Testing: Fix for Windows --- tests/grib_ecc-1560.sh | 1 + tests/metar_compare.sh | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/tests/grib_ecc-1560.sh b/tests/grib_ecc-1560.sh index d2d1de9d5..55495daa9 100755 --- a/tests/grib_ecc-1560.sh +++ b/tests/grib_ecc-1560.sh @@ -63,3 +63,4 @@ grib_check_key_equals $tempGrib scaledValueOfFirstFixedSurface 3456 # Clean up rm -f $temp_PDTN08_Grib $temp_PDTN11_Grib $tempGrib +rm -f $temp_PDTN00_Grib diff --git a/tests/metar_compare.sh b/tests/metar_compare.sh index dd662dab7..321dcc220 100755 --- a/tests/metar_compare.sh +++ b/tests/metar_compare.sh @@ -46,21 +46,21 @@ if [ $status -eq 0 ]; then fi # The -d option should have created these files -[ -f error1_1.metar ] -[ -f error2_1.metar ] rm -f error1_1.metar error2_1.metar error1_2.metar error2_2.metar #---------------------------------------------------- # Test: comparing with and without the -b switch #---------------------------------------------------- -# Add wrong blocklist. Should still fail -set +e -${tools_dir}/metar_compare -b CCCC $metar_file $fMetarTmp -status=$? -set -e -[ $status -eq 1 ] -# Add correct blocklist -${tools_dir}/metar_compare -b minute,theMessage $metar_file $fMetarTmp +if [ $ECCODES_ON_WINDOWS -eq 0 ]; then + # Add wrong blocklist. Should still fail + set +e + ${tools_dir}/metar_compare -b CCCC $metar_file $fMetarTmp + status=$? + set -e + [ $status -eq 1 ] + # Add correct blocklist + ${tools_dir}/metar_compare -b minute,theMessage $metar_file $fMetarTmp +fi -#Clean up +# Clean up rm -f $fLog $fMetarTmp From e81e3ed65f4ef0e508fef10f7973d0779f6ff2e4 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 13:06:09 +0100 Subject: [PATCH 249/372] ECC-1672: Tools: Add '-d' option for grib_compare --- tests/grib_compare.sh | 14 +++++++++ tools/grib_compare.cc | 66 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 73 insertions(+), 7 deletions(-) diff --git a/tests/grib_compare.sh b/tests/grib_compare.sh index 40ab45380..e07f844af 100755 --- a/tests/grib_compare.sh +++ b/tests/grib_compare.sh @@ -46,6 +46,20 @@ cat temp.$label.3 temp.$label.2 temp.$label.1 > temp.$label.321 # Compare files in which the messages are not in the same order ${tools_dir}/grib_compare -r temp.$label.213 temp.$label.321 +# Make a change in the data values of 2nd file +${tools_dir}/grib_set -s scaleValuesBy=1.1 temp.$label.2 temp.$label.2.changed +cat temp.$label.2 temp.$label.1 temp.$label.3 > temp.$label.213 +cat temp.$label.3 temp.$label.2.changed temp.$label.1 > temp.$label.321 +set +e +${tools_dir}/grib_compare -d -r temp.$label.213 temp.$label.321 +status=$? +set -e +[ $status -eq 1 ] + +cmp temp.$label.2.changed error2_1.grib +cmp temp.$label.2 error1_1.grib +rm -f error1_1.grib error2_1.grib +rm -f temp.$label.2.changed rm -f temp.$label.1 temp.$label.2 temp.$label.3 temp.$label.213 temp.$label.321 # ---------------------------------------------- diff --git a/tools/grib_compare.cc b/tools/grib_compare.cc index cc155a864..800c3eca6 100644 --- a/tools/grib_compare.cc +++ b/tools/grib_compare.cc @@ -14,6 +14,7 @@ grib_option grib_options[] = { /* {id, args, help}, on, command_line, value*/ { "r", 0, "Compare files in which the messages are not in the same order. This option is time expensive.\n", 0, 1, 0 }, { "b:", 0, 0, 0, 1, 0 }, + { "d", 0, "Write different messages on files.\n", 0, 1, 0 }, { "e", 0, "Edition independent compare. It is used to compare GRIB edition 1 and 2.\n", 0, 1, 0 }, { "2", 0, "Enable two-way comparison.\n", 0, 1, 0 }, { "c:", 0, 0, 0, 1, 0 }, @@ -64,7 +65,6 @@ static double global_tolerance = 0; static int packingCompare = 0; static grib_string_list* blocklist = 0; static int compareAbsolute = 1; - static int error = 0; static int count = 0; static int lastPrint = 0; @@ -87,6 +87,8 @@ static int listFromCommandLine = 0; static int editionIndependent = 0; static int verbose = 0; static double tolerance_factor = 1; +static int write_error = 0; +static int write_count = 0; static grib_handle* handle1 = NULL; static int global_counter = 0; @@ -152,6 +154,42 @@ static double compare_double_relative(const double* a, const double* b, double t return relativeError > tolerance ? relativeError : 0; } +static void write_message(grib_handle* h, const char* str) +{ + const void* m; + size_t s; + char fname[1024] = {0,}; + FILE* fh; + + grib_get_message(h, &m, &s); + snprintf(fname, sizeof(fname), "%s_%d.grib", str, write_count); + + fh = fopen(fname, "w"); + if (!fh) { + grib_context_log(h->context, (GRIB_LOG_ERROR) | (GRIB_LOG_PERROR), + "Error opening %s", fname); + exit(GRIB_IO_PROBLEM); + } + + if (fwrite(m, 1, s, fh) != s) { + grib_context_log(h->context, (GRIB_LOG_ERROR) | (GRIB_LOG_PERROR), + "Error writing to %s", fname); + exit(GRIB_IO_PROBLEM); + } + + fclose(fh); +} + +static void write_messages(grib_handle* handle1, grib_handle* handle2) +{ + if (!write_error) + return; + write_count++; + + write_message(handle1, "error1"); + write_message(handle2, "error2"); +} + static int blocklisted(const char* name) { grib_string_list* b = blocklist; @@ -212,6 +250,11 @@ int grib_tool_init(grib_runtime_options* options) else two_way = 0; + if (grib_options_on("d")) + write_error = 1; + else + write_error = 0; + verbose = grib_options_on("v"); listFromCommandLine = 0; @@ -460,6 +503,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* hand if (compare_handles(handle2, handle1, options)) { error++; + write_messages(handle2, handle1); if (!force) exit(1); } @@ -481,6 +525,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* hand if (compare_handles(handle1, handle2, options)) { error++; + write_messages(handle1, handle2); if (!two_way) { /* If two_way mode: Don't exit yet. Show further differences */ if (!force) exit(1); @@ -491,6 +536,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* hand handles_swapped = 1; if (compare_handles(handle2, handle1, options)) { error++; + write_messages(handle2, handle1); if (!force) exit(1); } else { @@ -1192,8 +1238,9 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option if (blocklisted(name)) continue; - if (compare_values(options, h11, h22, name, GRIB_TYPE_UNDEFINED)) + if (compare_values(options, h11, h22, name, GRIB_TYPE_UNDEFINED)) { err++; + } } grib_keys_iterator_delete(iter); @@ -1219,8 +1266,9 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option if (blocklisted(name)) continue; - if (compare_values(options, h1, h2, name, GRIB_TYPE_UNDEFINED)) + if (compare_values(options, h1, h2, name, GRIB_TYPE_UNDEFINED)) { err++; + } } grib_keys_iterator_delete(iter); if (num_keys_in_namespace == 0 && !editionIndependent) { @@ -1228,8 +1276,9 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option } } else { - if (compare_values(options, h1, h2, options->compare[i].name, options->compare[i].type)) + if (compare_values(options, h1, h2, options->compare[i].name, options->compare[i].type)) { err++; + } } } } @@ -1254,8 +1303,9 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option if (blocklisted(name)) continue; - if (compare_values(options, h1, h2, name, GRIB_TYPE_UNDEFINED)) + if (compare_values(options, h1, h2, name, GRIB_TYPE_UNDEFINED)) { err++; + } } grib_keys_iterator_delete(iter); @@ -1276,14 +1326,16 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option if (blocklisted(name)) continue; - if (compare_values(options, h1, h2, name, GRIB_TYPE_UNDEFINED)) + if (compare_values(options, h1, h2, name, GRIB_TYPE_UNDEFINED)) { err++; + } } grib_keys_iterator_delete(iter); } else { - if (compare_values(options, h1, h2, options->compare[i].name, options->compare[i].type)) + if (compare_values(options, h1, h2, options->compare[i].name, options->compare[i].type)) { err++; + } } } } From 3b9fa85700de31dd709b41af7ff7a4aaadfdd809 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 13:17:59 +0100 Subject: [PATCH 250/372] Testing: Fix grib_compare test --- tests/grib_compare.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/grib_compare.sh b/tests/grib_compare.sh index e07f844af..59b194b26 100755 --- a/tests/grib_compare.sh +++ b/tests/grib_compare.sh @@ -36,7 +36,7 @@ ${tools_dir}/grib_compare -b indicatorOfParameter,paramId,shortName $infile $out # ---------------------------------------- # Test the -r switch # ---------------------------------------- -infile=${data_dir}/v.grib2 +infile=${data_dir}/tigge_cf_ecmwf.grib2 for i in 1 2 3; do ${tools_dir}/grib_copy -wcount=$i $infile temp.$label.$i done From 5cf9ab5af3bc8df33c707b97397d8d0088cabaf0 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 13:35:25 +0100 Subject: [PATCH 251/372] Refactoring --- src/grib_geography.cc | 1954 +---------------------------------------- 1 file changed, 2 insertions(+), 1952 deletions(-) diff --git a/src/grib_geography.cc b/src/grib_geography.cc index dd0f2ec98..d70945d32 100644 --- a/src/grib_geography.cc +++ b/src/grib_geography.cc @@ -91,1955 +91,10 @@ static void gauss_first_guess(long trunc, double* vals) } } -/* Performance: return the precomputed latitudes for N=1280 */ -/* The provided 'lats' array should have allocated 2*N elements */ -static int get_precomputed_latitudes_N1280(double* lats) -{ - lats[0]=89.946187715665616; - lats[1]=89.876478353332288; - lats[2]=89.806357319542244; - lats[3]=89.736143271609578; - lats[4]=89.6658939412157; - lats[5]=89.595627537554492; - lats[6]=89.525351592371393; - lats[7]=89.45506977912261; - lats[8]=89.3847841013921; - lats[9]=89.314495744374256; - lats[10]=89.24420545380525; - lats[11]=89.173913722284126; - lats[12]=89.103620888238879; - lats[13]=89.033327191845927; - lats[14]=88.96303280826325; - lats[15]=88.892737868230952; - lats[16]=88.822442471310097; - lats[17]=88.752146694650691; - lats[18]=88.681850598961759; - lats[19]=88.611554232668382; - lats[20]=88.541257634868515; - lats[21]=88.470960837474877; - lats[22]=88.40066386679355; - lats[23]=88.330366744702559; - lats[24]=88.26006948954614; - lats[25]=88.189772116820762; - lats[26]=88.119474639706425; - lats[27]=88.049177069484486; - lats[28]=87.978879415867283; - lats[29]=87.908581687261687; - lats[30]=87.838283890981543; - lats[31]=87.767986033419561; - lats[32]=87.697688120188062; - lats[33]=87.627390156234085; - lats[34]=87.557092145935584; - lats[35]=87.486794093180748; - lats[36]=87.416496001434894; - lats[37]=87.346197873795816; - lats[38]=87.275899713041966; - lats[39]=87.205601521672108; - lats[40]=87.135303301939786; - lats[41]=87.065005055882821; - lats[42]=86.994706785348129; - lats[43]=86.924408492014166; - lats[44]=86.854110177408927; - lats[45]=86.783811842927179; - lats[46]=86.713513489844246; - lats[47]=86.643215119328573; - lats[48]=86.572916732453024; - lats[49]=86.502618330203831; - lats[50]=86.432319913489792; - lats[51]=86.362021483149363; - lats[52]=86.291723039957418; - lats[53]=86.221424584631109; - lats[54]=86.151126117835304; - lats[55]=86.080827640187209; - lats[56]=86.010529152260403; - lats[57]=85.940230654588888; - lats[58]=85.869932147670127; - lats[59]=85.799633631968391; - lats[60]=85.729335107917464; - lats[61]=85.659036575922883; - lats[62]=85.588738036364362; - lats[63]=85.518439489597966; - lats[64]=85.448140935957483; - lats[65]=85.377842375756586; - lats[66]=85.307543809290152; - lats[67]=85.237245236835548; - lats[68]=85.16694665865414; - lats[69]=85.09664807499216; - lats[70]=85.026349486081983; - lats[71]=84.95605089214304; - lats[72]=84.885752293382765; - lats[73]=84.81545368999717; - lats[74]=84.745155082171991; - lats[75]=84.674856470082915; - lats[76]=84.604557853896708; - lats[77]=84.534259233771479; - lats[78]=84.463960609857125; - lats[79]=84.393661982296322; - lats[80]=84.323363351224444; - lats[81]=84.253064716770425; - lats[82]=84.18276607905679; - lats[83]=84.112467438200326; - lats[84]=84.042168794312317; - lats[85]=83.971870147498763; - lats[86]=83.901571497860914; - lats[87]=83.831272845495249; - lats[88]=83.760974190494011; - lats[89]=83.690675532945292; - lats[90]=83.620376872933264; - lats[91]=83.550078210538487; - lats[92]=83.479779545838113; - lats[93]=83.409480878905782; - lats[94]=83.339182209812321; - lats[95]=83.268883538625232; - lats[96]=83.198584865409657; - lats[97]=83.128286190227698; - lats[98]=83.057987513139125; - lats[99]=82.987688834201322; - lats[100]=82.917390153469313; - lats[101]=82.84709147099602; - lats[102]=82.77679278683226; - lats[103]=82.706494101026948; - lats[104]=82.63619541362705; - lats[105]=82.56589672467787; - lats[106]=82.495598034222837; - lats[107]=82.425299342304029; - lats[108]=82.355000648961692; - lats[109]=82.284701954234833; - lats[110]=82.214403258160871; - lats[111]=82.144104560776; - lats[112]=82.073805862115165; - lats[113]=82.003507162211946; - lats[114]=81.933208461098829; - lats[115]=81.862909758807191; - lats[116]=81.792611055367345; - lats[117]=81.722312350808508; - lats[118]=81.652013645158945; - lats[119]=81.581714938445955; - lats[120]=81.511416230696042; - lats[121]=81.441117521934686; - lats[122]=81.370818812186627; - lats[123]=81.300520101475826; - lats[124]=81.230221389825374; - lats[125]=81.159922677257711; - lats[126]=81.089623963794551; - lats[127]=81.019325249456955; - lats[128]=80.949026534265244; - lats[129]=80.878727818239184; - lats[130]=80.808429101397948; - lats[131]=80.73813038376008; - lats[132]=80.667831665343556; - lats[133]=80.59753294616587; - lats[134]=80.527234226243991; - lats[135]=80.456935505594302; - lats[136]=80.386636784232863; - lats[137]=80.316338062175078; - lats[138]=80.246039339436052; - lats[139]=80.175740616030438; - lats[140]=80.105441891972376; - lats[141]=80.035143167275749; - lats[142]=79.9648444419539; - lats[143]=79.894545716019948; - lats[144]=79.824246989486554; - lats[145]=79.753948262366038; - lats[146]=79.683649534670437; - lats[147]=79.61335080641139; - lats[148]=79.543052077600308; - lats[149]=79.472753348248219; - lats[150]=79.402454618365894; - lats[151]=79.332155887963822; - lats[152]=79.261857157052191; - lats[153]=79.191558425640977; - lats[154]=79.121259693739859; - lats[155]=79.050960961358285; - lats[156]=78.980662228505423; - lats[157]=78.910363495190211; - lats[158]=78.840064761421445; - lats[159]=78.769766027207638; - lats[160]=78.699467292557102; - lats[161]=78.629168557477882; - lats[162]=78.558869821977908; - lats[163]=78.488571086064923; - lats[164]=78.418272349746417; - lats[165]=78.347973613029708; - lats[166]=78.277674875922045; - lats[167]=78.207376138430348; - lats[168]=78.137077400561424; - lats[169]=78.066778662322022; - lats[170]=77.996479923718596; - lats[171]=77.926181184757539; - lats[172]=77.855882445445019; - lats[173]=77.785583705787161; - lats[174]=77.71528496578982; - lats[175]=77.644986225458879; - lats[176]=77.574687484799924; - lats[177]=77.504388743818524; - lats[178]=77.434090002520122; - lats[179]=77.363791260909963; - lats[180]=77.293492518993247; - lats[181]=77.22319377677502; - lats[182]=77.15289503426024; - lats[183]=77.082596291453768; - lats[184]=77.012297548360323; - lats[185]=76.941998804984564; - lats[186]=76.871700061330955; - lats[187]=76.801401317404; - lats[188]=76.731102573208048; - lats[189]=76.660803828747362; - lats[190]=76.59050508402602; - lats[191]=76.520206339048215; - lats[192]=76.449907593817869; - lats[193]=76.379608848338933; - lats[194]=76.3093101026152; - lats[195]=76.239011356650423; - lats[196]=76.16871261044831; - lats[197]=76.098413864012443; - lats[198]=76.028115117346374; - lats[199]=75.957816370453543; - lats[200]=75.887517623337317; - lats[201]=75.81721887600105; - lats[202]=75.746920128447996; - lats[203]=75.67662138068134; - lats[204]=75.60632263270422; - lats[205]=75.536023884519707; - lats[206]=75.465725136130786; - lats[207]=75.395426387540439; - lats[208]=75.325127638751567; - lats[209]=75.254828889766983; - lats[210]=75.184530140589501; - lats[211]=75.114231391221821; - lats[212]=75.043932641666672; - lats[213]=74.973633891926625; - lats[214]=74.903335142004323; - lats[215]=74.833036391902269; - lats[216]=74.762737641622991; - lats[217]=74.692438891168877; - lats[218]=74.622140140542356; - lats[219]=74.551841389745761; - lats[220]=74.481542638781434; - lats[221]=74.411243887651622; - lats[222]=74.340945136358584; - lats[223]=74.270646384904481; - lats[224]=74.200347633291472; - lats[225]=74.13004888152166; - lats[226]=74.059750129597163; - lats[227]=73.98945137751997; - lats[228]=73.919152625292114; - lats[229]=73.848853872915541; - lats[230]=73.778555120392184; - lats[231]=73.70825636772399; - lats[232]=73.637957614912779; - lats[233]=73.567658861960396; - lats[234]=73.497360108868662; - lats[235]=73.427061355639339; - lats[236]=73.356762602274188; - lats[237]=73.2864638487749; - lats[238]=73.216165095143182; - lats[239]=73.145866341380668; - lats[240]=73.075567587489019; - lats[241]=73.005268833469799; - lats[242]=72.934970079324657; - lats[243]=72.864671325055056; - lats[244]=72.794372570662574; - lats[245]=72.724073816148703; - lats[246]=72.653775061514935; - lats[247]=72.583476306762691; - lats[248]=72.513177551893421; - lats[249]=72.442878796908545; - lats[250]=72.3725800418094; - lats[251]=72.302281286597392; - lats[252]=72.231982531273843; - lats[253]=72.161683775840089; - lats[254]=72.091385020297409; - lats[255]=72.02108626464711; - lats[256]=71.950787508890414; - lats[257]=71.880488753028587; - lats[258]=71.810189997062835; - lats[259]=71.739891240994368; - lats[260]=71.669592484824364; - lats[261]=71.599293728553988; - lats[262]=71.528994972184378; - lats[263]=71.458696215716685; - lats[264]=71.388397459152031; - lats[265]=71.318098702491469; - lats[266]=71.247799945736105; - lats[267]=71.177501188887007; - lats[268]=71.107202431945211; - lats[269]=71.036903674911756; - lats[270]=70.966604917787635; - lats[271]=70.896306160573886; - lats[272]=70.826007403271475; - lats[273]=70.755708645881384; - lats[274]=70.685409888404578; - lats[275]=70.615111130841967; - lats[276]=70.544812373194532; - lats[277]=70.474513615463138; - lats[278]=70.404214857648739; - lats[279]=70.333916099752187; - lats[280]=70.263617341774406; - lats[281]=70.193318583716191; - lats[282]=70.123019825578467; - lats[283]=70.052721067362043; - lats[284]=69.982422309067744; - lats[285]=69.912123550696421; - lats[286]=69.841824792248843; - lats[287]=69.771526033725834; - lats[288]=69.701227275128161; - lats[289]=69.630928516456592; - lats[290]=69.560629757711908; - lats[291]=69.490330998894862; - lats[292]=69.420032240006194; - lats[293]=69.349733481046613; - lats[294]=69.279434722016902; - lats[295]=69.209135962917699; - lats[296]=69.138837203749759; - lats[297]=69.068538444513763; - lats[298]=68.998239685210365; - lats[299]=68.927940925840304; - lats[300]=68.85764216640419; - lats[301]=68.787343406902693; - lats[302]=68.717044647336493; - lats[303]=68.646745887706189; - lats[304]=68.576447128012447; - lats[305]=68.506148368255865; - lats[306]=68.435849608437067; - lats[307]=68.365550848556666; - lats[308]=68.295252088615257; - lats[309]=68.224953328613438; - lats[310]=68.154654568551791; - lats[311]=68.084355808430871; - lats[312]=68.014057048251274; - lats[313]=67.943758288013555; - lats[314]=67.873459527718282; - lats[315]=67.803160767365966; - lats[316]=67.732862006957205; - lats[317]=67.662563246492482; - lats[318]=67.592264485972336; - lats[319]=67.521965725397308; - lats[320]=67.451666964767895; - lats[321]=67.381368204084609; - lats[322]=67.311069443347961; - lats[323]=67.240770682558434; - lats[324]=67.170471921716526; - lats[325]=67.100173160822706; - lats[326]=67.029874399877471; - lats[327]=66.95957563888129; - lats[328]=66.889276877834618; - lats[329]=66.818978116737924; - lats[330]=66.748679355591662; - lats[331]=66.678380594396273; - lats[332]=66.608081833152212; - lats[333]=66.537783071859891; - lats[334]=66.467484310519808; - lats[335]=66.397185549132331; - lats[336]=66.326886787697887; - lats[337]=66.256588026216932; - lats[338]=66.186289264689833; - lats[339]=66.115990503117033; - lats[340]=66.045691741498899; - lats[341]=65.975392979835888; - lats[342]=65.905094218128355; - lats[343]=65.834795456376696; - lats[344]=65.764496694581283; - lats[345]=65.694197932742526; - lats[346]=65.623899170860767; - lats[347]=65.553600408936404; - lats[348]=65.483301646969792; - lats[349]=65.413002884961315; - lats[350]=65.342704122911286; - lats[351]=65.272405360820116; - lats[352]=65.202106598688133; - lats[353]=65.131807836515677; - lats[354]=65.061509074303089; - lats[355]=64.991210312050711; - lats[356]=64.920911549758912; - lats[357]=64.850612787427963; - lats[358]=64.780314025058246; - lats[359]=64.710015262650074; - lats[360]=64.639716500203733; - lats[361]=64.569417737719576; - lats[362]=64.499118975197902; - lats[363]=64.428820212639039; - lats[364]=64.358521450043284; - lats[365]=64.288222687410922; - lats[366]=64.21792392474228; - lats[367]=64.147625162037642; - lats[368]=64.07732639929732; - lats[369]=64.00702763652157; - lats[370]=63.93672887371072; - lats[371]=63.866430110865004; - lats[372]=63.796131347984762; - lats[373]=63.725832585070251; - lats[374]=63.655533822121711; - lats[375]=63.585235059139464; - lats[376]=63.514936296123757; - lats[377]=63.444637533074854; - lats[378]=63.374338769993031; - lats[379]=63.304040006878537; - lats[380]=63.23374124373165; - lats[381]=63.163442480552604; - lats[382]=63.093143717341647; - lats[383]=63.022844954099064; - lats[384]=62.952546190825068; - lats[385]=62.882247427519928; - lats[386]=62.811948664183866; - lats[387]=62.741649900817137; - lats[388]=62.67135113741999; - lats[389]=62.60105237399263; - lats[390]=62.530753610535321; - lats[391]=62.460454847048261; - lats[392]=62.3901560835317; - lats[393]=62.319857319985871; - lats[394]=62.249558556410982; - lats[395]=62.179259792807258; - lats[396]=62.108961029174914; - lats[397]=62.038662265514176; - lats[398]=61.968363501825259; - lats[399]=61.898064738108381; - lats[400]=61.827765974363729; - lats[401]=61.757467210591535; - lats[402]=61.687168446791986; - lats[403]=61.616869682965287; - lats[404]=61.546570919111666; - lats[405]=61.476272155231321; - lats[406]=61.405973391324409; - lats[407]=61.335674627391185; - lats[408]=61.265375863431785; - lats[409]=61.195077099446451; - lats[410]=61.124778335435344; - lats[411]=61.054479571398652; - lats[412]=60.984180807336578; - lats[413]=60.913882043249295; - lats[414]=60.843583279137007; - lats[415]=60.773284514999872; - lats[416]=60.702985750838074; - lats[417]=60.632686986651805; - lats[418]=60.562388222441243; - lats[419]=60.492089458206543; - lats[420]=60.421790693947884; - lats[421]=60.35149192966545; - lats[422]=60.28119316535939; - lats[423]=60.21089440102989; - lats[424]=60.140595636677112; - lats[425]=60.070296872301235; - lats[426]=59.999998107902378; - lats[427]=59.929699343480763; - lats[428]=59.859400579036503; - lats[429]=59.78910181456979; - lats[430]=59.718803050080759; - lats[431]=59.64850428556958; - lats[432]=59.578205521036402; - lats[433]=59.507906756481383; - lats[434]=59.43760799190467; - lats[435]=59.3673092273064; - lats[436]=59.29701046268675; - lats[437]=59.226711698045854; - lats[438]=59.156412933383855; - lats[439]=59.086114168700909; - lats[440]=59.015815403997145; - lats[441]=58.945516639272725; - lats[442]=58.875217874527763; - lats[443]=58.804919109762423; - lats[444]=58.73462034497684; - lats[445]=58.664321580171141; - lats[446]=58.594022815345468; - lats[447]=58.523724050499972; - lats[448]=58.453425285634758; - lats[449]=58.383126520749968; - lats[450]=58.312827755845746; - lats[451]=58.242528990922203; - lats[452]=58.172230225979497; - lats[453]=58.101931461017728; - lats[454]=58.031632696037022; - lats[455]=57.961333931037537; - lats[456]=57.891035166019364; - lats[457]=57.820736400982646; - lats[458]=57.75043763592749; - lats[459]=57.680138870854037; - lats[460]=57.60984010576238; - lats[461]=57.539541340652676; - lats[462]=57.469242575525016; - lats[463]=57.398943810379521; - lats[464]=57.328645045216312; - lats[465]=57.258346280035504; - lats[466]=57.188047514837208; - lats[467]=57.117748749621541; - lats[468]=57.047449984388614; - lats[469]=56.977151219138541; - lats[470]=56.90685245387143; - lats[471]=56.836553688587379; - lats[472]=56.766254923286517; - lats[473]=56.695956157968951; - lats[474]=56.625657392634771; - lats[475]=56.555358627284086; - lats[476]=56.485059861917016; - lats[477]=56.41476109653366; - lats[478]=56.34446233113411; - lats[479]=56.274163565718467; - lats[480]=56.203864800286865; - lats[481]=56.133566034839362; - lats[482]=56.063267269376091; - lats[483]=55.992968503897131; - lats[484]=55.922669738402583; - lats[485]=55.852370972892551; - lats[486]=55.782072207367136; - lats[487]=55.711773441826416; - lats[488]=55.641474676270505; - lats[489]=55.571175910699488; - lats[490]=55.500877145113449; - lats[491]=55.430578379512511; - lats[492]=55.360279613896743; - lats[493]=55.289980848266232; - lats[494]=55.219682082621084; - lats[495]=55.149383316961377; - lats[496]=55.07908455128721; - lats[497]=55.008785785598668; - lats[498]=54.938487019895831; - lats[499]=54.868188254178797; - lats[500]=54.797889488447652; - lats[501]=54.727590722702473; - lats[502]=54.657291956943347; - lats[503]=54.586993191170357; - lats[504]=54.516694425383605; - lats[505]=54.446395659583146; - lats[506]=54.376096893769081; - lats[507]=54.305798127941479; - lats[508]=54.235499362100448; - lats[509]=54.165200596246031; - lats[510]=54.094901830378333; - lats[511]=54.024603064497434; - lats[512]=53.954304298603383; - lats[513]=53.884005532696307; - lats[514]=53.813706766776235; - lats[515]=53.743408000843282; - lats[516]=53.673109234897495; - lats[517]=53.602810468938962; - lats[518]=53.53251170296776; - lats[519]=53.462212936983953; - lats[520]=53.391914170987633; - lats[521]=53.321615404978871; - lats[522]=53.251316638957725; - lats[523]=53.181017872924265; - lats[524]=53.110719106878584; - lats[525]=53.040420340820731; - lats[526]=52.970121574750792; - lats[527]=52.899822808668837; - lats[528]=52.829524042574917; - lats[529]=52.759225276469131; - lats[530]=52.688926510351514; - lats[531]=52.618627744222159; - lats[532]=52.548328978081123; - lats[533]=52.478030211928477; - lats[534]=52.407731445764284; - lats[535]=52.337432679588609; - lats[536]=52.26713391340153; - lats[537]=52.196835147203096; - lats[538]=52.126536380993372; - lats[539]=52.056237614772435; - lats[540]=51.985938848540336; - lats[541]=51.915640082297152; - lats[542]=51.845341316042933; - lats[543]=51.775042549777737; - lats[544]=51.704743783501634; - lats[545]=51.634445017214695; - lats[546]=51.56414625091697; - lats[547]=51.493847484608516; - lats[548]=51.423548718289396; - lats[549]=51.353249951959683; - lats[550]=51.282951185619417; - lats[551]=51.21265241926865; - lats[552]=51.14235365290746; - lats[553]=51.072054886535909; - lats[554]=51.001756120154049; - lats[555]=50.931457353761914; - lats[556]=50.86115858735959; - lats[557]=50.790859820947119; - lats[558]=50.720561054524559; - lats[559]=50.650262288091959; - lats[560]=50.579963521649397; - lats[561]=50.509664755196901; - lats[562]=50.439365988734544; - lats[563]=50.369067222262359; - lats[564]=50.298768455780426; - lats[565]=50.228469689288779; - lats[566]=50.158170922787484; - lats[567]=50.087872156276575; - lats[568]=50.017573389756123; - lats[569]=49.947274623226157; - lats[570]=49.876975856686762; - lats[571]=49.80667709013796; - lats[572]=49.736378323579807; - lats[573]=49.66607955701236; - lats[574]=49.595780790435676; - lats[575]=49.525482023849783; - lats[576]=49.455183257254745; - lats[577]=49.384884490650613; - lats[578]=49.314585724037435; - lats[579]=49.244286957415234; - lats[580]=49.173988190784094; - lats[581]=49.103689424144044; - lats[582]=49.03339065749514; - lats[583]=48.963091890837418; - lats[584]=48.892793124170929; - lats[585]=48.822494357495721; - lats[586]=48.752195590811837; - lats[587]=48.681896824119335; - lats[588]=48.611598057418242; - lats[589]=48.541299290708608; - lats[590]=48.47100052399049; - lats[591]=48.400701757263917; - lats[592]=48.330402990528938; - lats[593]=48.260104223785596; - lats[594]=48.189805457033941; - lats[595]=48.119506690274015; - lats[596]=48.049207923505868; - lats[597]=47.978909156729507; - lats[598]=47.908610389945018; - lats[599]=47.838311623152421; - lats[600]=47.76801285635176; - lats[601]=47.697714089543084; - lats[602]=47.627415322726435; - lats[603]=47.557116555901828; - lats[604]=47.486817789069342; - lats[605]=47.416519022228997; - lats[606]=47.346220255380835; - lats[607]=47.275921488524894; - lats[608]=47.205622721661214; - lats[609]=47.13532395478984; - lats[610]=47.065025187910805; - lats[611]=46.994726421024154; - lats[612]=46.924427654129929; - lats[613]=46.85412888722815; - lats[614]=46.783830120318882; - lats[615]=46.713531353402139; - lats[616]=46.643232586477971; - lats[617]=46.572933819546414; - lats[618]=46.502635052607502; - lats[619]=46.432336285661272; - lats[620]=46.362037518707766; - lats[621]=46.291738751747012; - lats[622]=46.221439984779053; - lats[623]=46.151141217803925; - lats[624]=46.080842450821663; - lats[625]=46.01054368383231; - lats[626]=45.94024491683588; - lats[627]=45.869946149832437; - lats[628]=45.799647382821995; - lats[629]=45.729348615804589; - lats[630]=45.659049848780263; - lats[631]=45.588751081749038; - lats[632]=45.51845231471097; - lats[633]=45.448153547666081; - lats[634]=45.377854780614399; - lats[635]=45.30755601355596; - lats[636]=45.237257246490813; - lats[637]=45.166958479418959; - lats[638]=45.096659712340461; - lats[639]=45.026360945255341; - lats[640]=44.956062178163634; - lats[641]=44.885763411065362; - lats[642]=44.81546464396056; - lats[643]=44.745165876849271; - lats[644]=44.674867109731515; - lats[645]=44.604568342607337; - lats[646]=44.534269575476756; - lats[647]=44.463970808339802; - lats[648]=44.39367204119651; - lats[649]=44.323373274046915; - lats[650]=44.253074506891046; - lats[651]=44.182775739728925; - lats[652]=44.112476972560586; - lats[653]=44.042178205386072; - lats[654]=43.971879438205391; - lats[655]=43.9015806710186; - lats[656]=43.831281903825705; - lats[657]=43.760983136626741; - lats[658]=43.690684369421732; - lats[659]=43.620385602210717; - lats[660]=43.550086834993728; - lats[661]=43.479788067770777; - lats[662]=43.409489300541907; - lats[663]=43.339190533307139; - lats[664]=43.26889176606651; - lats[665]=43.19859299882004; - lats[666]=43.128294231567757; - lats[667]=43.057995464309691; - lats[668]=42.987696697045862; - lats[669]=42.917397929776307; - lats[670]=42.847099162501053; - lats[671]=42.776800395220121; - lats[672]=42.706501627933541; - lats[673]=42.63620286064134; - lats[674]=42.565904093343548; - lats[675]=42.495605326040177; - lats[676]=42.425306558731272; - lats[677]=42.355007791416853; - lats[678]=42.284709024096927; - lats[679]=42.214410256771551; - lats[680]=42.144111489440725; - lats[681]=42.073812722104492; - lats[682]=42.003513954762873; - lats[683]=41.933215187415882; - lats[684]=41.862916420063563; - lats[685]=41.792617652705921; - lats[686]=41.722318885343; - lats[687]=41.6520201179748; - lats[688]=41.581721350601363; - lats[689]=41.511422583222718; - lats[690]=41.441123815838885; - lats[691]=41.370825048449873; - lats[692]=41.300526281055724; - lats[693]=41.230227513656445; - lats[694]=41.159928746252085; - lats[695]=41.089629978842645; - lats[696]=41.01933121142816; - lats[697]=40.949032444008644; - lats[698]=40.878733676584126; - lats[699]=40.808434909154634; - lats[700]=40.738136141720176; - lats[701]=40.667837374280786; - lats[702]=40.597538606836487; - lats[703]=40.527239839387299; - lats[704]=40.456941071933244; - lats[705]=40.386642304474343; - lats[706]=40.316343537010617; - lats[707]=40.246044769542102; - lats[708]=40.175746002068806; - lats[709]=40.105447234590748; - lats[710]=40.035148467107952; - lats[711]=39.964849699620437; - lats[712]=39.894550932128247; - lats[713]=39.824252164631375; - lats[714]=39.753953397129855; - lats[715]=39.683654629623703; - lats[716]=39.613355862112947; - lats[717]=39.543057094597607; - lats[718]=39.472758327077692; - lats[719]=39.402459559553229; - lats[720]=39.332160792024254; - lats[721]=39.261862024490775; - lats[722]=39.191563256952804; - lats[723]=39.121264489410365; - lats[724]=39.050965721863491; - lats[725]=38.980666954312184; - lats[726]=38.910368186756479; - lats[727]=38.840069419196389; - lats[728]=38.769770651631937; - lats[729]=38.699471884063136; - lats[730]=38.629173116490001; - lats[731]=38.558874348912568; - lats[732]=38.488575581330842; - lats[733]=38.418276813744846; - lats[734]=38.347978046154608; - lats[735]=38.277679278560143; - lats[736]=38.20738051096145; - lats[737]=38.137081743358586; - lats[738]=38.066782975751536; - lats[739]=37.99648420814033; - lats[740]=37.926185440524989; - lats[741]=37.855886672905527; - lats[742]=37.785587905281965; - lats[743]=37.715289137654317; - lats[744]=37.644990370022605; - lats[745]=37.574691602386856; - lats[746]=37.504392834747065; - lats[747]=37.434094067103274; - lats[748]=37.363795299455489; - lats[749]=37.293496531803719; - lats[750]=37.223197764147997; - lats[751]=37.152898996488332; - lats[752]=37.082600228824752; - lats[753]=37.012301461157264; - lats[754]=36.942002693485883; - lats[755]=36.871703925810628; - lats[756]=36.801405158131523; - lats[757]=36.731106390448581; - lats[758]=36.660807622761808; - lats[759]=36.590508855071242; - lats[760]=36.520210087376888; - lats[761]=36.449911319678755; - lats[762]=36.379612551976876; - lats[763]=36.309313784271254; - lats[764]=36.239015016561908; - lats[765]=36.16871624884886; - lats[766]=36.098417481132117; - lats[767]=36.028118713411708; - lats[768]=35.957819945687639; - lats[769]=35.887521177959933; - lats[770]=35.817222410228595; - lats[771]=35.746923642493655; - lats[772]=35.676624874755113; - lats[773]=35.606326107012997; - lats[774]=35.536027339267314; - lats[775]=35.465728571518085; - lats[776]=35.395429803765317; - lats[777]=35.325131036009047; - lats[778]=35.254832268249267; - lats[779]=35.184533500486005; - lats[780]=35.114234732719261; - lats[781]=35.043935964949064; - lats[782]=34.973637197175435; - lats[783]=34.903338429398374; - lats[784]=34.833039661617903; - lats[785]=34.762740893834028; - lats[786]=34.692442126046771; - lats[787]=34.622143358256153; - lats[788]=34.551844590462188; - lats[789]=34.481545822664863; - lats[790]=34.411247054864234; - lats[791]=34.340948287060286; - lats[792]=34.270649519253041; - lats[793]=34.200350751442521; - lats[794]=34.130051983628725; - lats[795]=34.059753215811682; - lats[796]=33.989454447991392; - lats[797]=33.919155680167876; - lats[798]=33.848856912341155; - lats[799]=33.778558144511237; - lats[800]=33.708259376678136; - lats[801]=33.637960608841851; - lats[802]=33.567661841002426; - lats[803]=33.497363073159853; - lats[804]=33.42706430531414; - lats[805]=33.356765537465314; - lats[806]=33.286466769613391; - lats[807]=33.216168001758369; - lats[808]=33.145869233900278; - lats[809]=33.075570466039117; - lats[810]=33.005271698174909; - lats[811]=32.934972930307666; - lats[812]=32.864674162437396; - lats[813]=32.794375394564113; - lats[814]=32.724076626687825; - lats[815]=32.653777858808567; - lats[816]=32.583479090926325; - lats[817]=32.513180323041112; - lats[818]=32.442881555152965; - lats[819]=32.372582787261891; - lats[820]=32.302284019367875; - lats[821]=32.231985251470959; - lats[822]=32.161686483571145; - lats[823]=32.091387715668439; - lats[824]=32.021088947762863; - lats[825]=31.950790179854422; - lats[826]=31.880491411943137; - lats[827]=31.810192644029012; - lats[828]=31.739893876112063; - lats[829]=31.669595108192297; - lats[830]=31.599296340269738; - lats[831]=31.528997572344384; - lats[832]=31.458698804416255; - lats[833]=31.388400036485361; - lats[834]=31.318101268551715; - lats[835]=31.247802500615318; - lats[836]=31.177503732676204; - lats[837]=31.107204964734358; - lats[838]=31.036906196789811; - lats[839]=30.966607428842572; - lats[840]=30.896308660892647; - lats[841]=30.826009892940046; - lats[842]=30.755711124984781; - lats[843]=30.685412357026873; - lats[844]=30.615113589066322; - lats[845]=30.544814821103138; - lats[846]=30.47451605313735; - lats[847]=30.404217285168947; - lats[848]=30.333918517197947; - lats[849]=30.263619749224372; - lats[850]=30.19332098124822; - lats[851]=30.123022213269511; - lats[852]=30.052723445288244; - lats[853]=29.98242467730444; - lats[854]=29.91212590931811; - lats[855]=29.841827141329258; - lats[856]=29.771528373337894; - lats[857]=29.701229605344039; - lats[858]=29.630930837347698; - lats[859]=29.560632069348884; - lats[860]=29.490333301347597; - lats[861]=29.420034533343859; - lats[862]=29.349735765337677; - lats[863]=29.279436997329057; - lats[864]=29.209138229318015; - lats[865]=29.138839461304556; - lats[866]=29.068540693288696; - lats[867]=28.998241925270449; - lats[868]=28.927943157249814; - lats[869]=28.857644389226806; - lats[870]=28.787345621201432; - lats[871]=28.717046853173709; - lats[872]=28.646748085143642; - lats[873]=28.576449317111244; - lats[874]=28.506150549076519; - lats[875]=28.435851781039485; - lats[876]=28.365553013000145; - lats[877]=28.29525424495851; - lats[878]=28.224955476914594; - lats[879]=28.154656708868405; - lats[880]=28.084357940819952; - lats[881]=28.014059172769244; - lats[882]=27.94376040471629; - lats[883]=27.873461636661098; - lats[884]=27.803162868603682; - lats[885]=27.732864100544052; - lats[886]=27.662565332482213; - lats[887]=27.592266564418171; - lats[888]=27.521967796351948; - lats[889]=27.451669028283543; - lats[890]=27.381370260212968; - lats[891]=27.311071492140236; - lats[892]=27.240772724065348; - lats[893]=27.170473955988321; - lats[894]=27.100175187909159; - lats[895]=27.029876419827872; - lats[896]=26.959577651744471; - lats[897]=26.889278883658971; - lats[898]=26.818980115571364; - lats[899]=26.748681347481678; - lats[900]=26.678382579389908; - lats[901]=26.608083811296069; - lats[902]=26.53778504320017; - lats[903]=26.467486275102218; - lats[904]=26.397187507002222; - lats[905]=26.326888738900195; - lats[906]=26.256589970796135; - lats[907]=26.186291202690064; - lats[908]=26.115992434581983; - lats[909]=26.045693666471902; - lats[910]=25.975394898359827; - lats[911]=25.90509613024577; - lats[912]=25.834797362129745; - lats[913]=25.764498594011751; - lats[914]=25.694199825891793; - lats[915]=25.623901057769892; - lats[916]=25.553602289646051; - lats[917]=25.483303521520277; - lats[918]=25.413004753392578; - lats[919]=25.342705985262967; - lats[920]=25.272407217131445; - lats[921]=25.202108448998025; - lats[922]=25.13180968086272; - lats[923]=25.061510912725527; - lats[924]=24.991212144586456; - lats[925]=24.920913376445526; - lats[926]=24.850614608302738; - lats[927]=24.780315840158096; - lats[928]=24.710017072011613; - lats[929]=24.639718303863294; - lats[930]=24.569419535713152; - lats[931]=24.499120767561195; - lats[932]=24.428821999407425; - lats[933]=24.358523231251851; - lats[934]=24.288224463094483; - lats[935]=24.217925694935328; - lats[936]=24.1476269267744; - lats[937]=24.077328158611696; - lats[938]=24.007029390447226; - lats[939]=23.936730622281004; - lats[940]=23.866431854113038; - lats[941]=23.796133085943328; - lats[942]=23.725834317771888; - lats[943]=23.655535549598721; - lats[944]=23.585236781423838; - lats[945]=23.514938013247242; - lats[946]=23.444639245068949; - lats[947]=23.374340476888957; - lats[948]=23.304041708707278; - lats[949]=23.233742940523921; - lats[950]=23.163444172338895; - lats[951]=23.0931454041522; - lats[952]=23.022846635963852; - lats[953]=22.952547867773848; - lats[954]=22.882249099582204; - lats[955]=22.811950331388925; - lats[956]=22.741651563194019; - lats[957]=22.671352794997489; - lats[958]=22.60105402679935; - lats[959]=22.530755258599601; - lats[960]=22.460456490398254; - lats[961]=22.390157722195315; - lats[962]=22.319858953990789; - lats[963]=22.249560185784691; - lats[964]=22.179261417577013; - lats[965]=22.108962649367779; - lats[966]=22.038663881156989; - lats[967]=21.968365112944642; - lats[968]=21.898066344730758; - lats[969]=21.827767576515338; - lats[970]=21.757468808298391; - lats[971]=21.687170040079913; - lats[972]=21.616871271859928; - lats[973]=21.546572503638437; - lats[974]=21.47627373541544; - lats[975]=21.40597496719095; - lats[976]=21.335676198964972; - lats[977]=21.265377430737512; - lats[978]=21.195078662508585; - lats[979]=21.124779894278181; - lats[980]=21.054481126046323; - lats[981]=20.984182357813012; - lats[982]=20.913883589578251; - lats[983]=20.843584821342048; - lats[984]=20.773286053104417; - lats[985]=20.702987284865355; - lats[986]=20.632688516624874; - lats[987]=20.562389748382977; - lats[988]=20.492090980139672; - lats[989]=20.421792211894967; - lats[990]=20.35149344364887; - lats[991]=20.28119467540138; - lats[992]=20.210895907152516; - lats[993]=20.140597138902272; - lats[994]=20.070298370650661; - lats[995]=19.999999602397686; - lats[996]=19.929700834143357; - lats[997]=19.859402065887682; - lats[998]=19.789103297630657; - lats[999]=19.718804529372303; - lats[1000]=19.648505761112613; - lats[1001]=19.578206992851602; - lats[1002]=19.507908224589269; - lats[1003]=19.437609456325632; - lats[1004]=19.367310688060684; - lats[1005]=19.297011919794439; - lats[1006]=19.226713151526898; - lats[1007]=19.15641438325807; - lats[1008]=19.086115614987968; - lats[1009]=19.015816846716586; - lats[1010]=18.945518078443939; - lats[1011]=18.875219310170031; - lats[1012]=18.804920541894862; - lats[1013]=18.734621773618446; - lats[1014]=18.664323005340787; - lats[1015]=18.594024237061891; - lats[1016]=18.523725468781763; - lats[1017]=18.453426700500408; - lats[1018]=18.383127932217832; - lats[1019]=18.312829163934047; - lats[1020]=18.242530395649048; - lats[1021]=18.172231627362851; - lats[1022]=18.101932859075458; - lats[1023]=18.031634090786874; - lats[1024]=17.96133532249711; - lats[1025]=17.89103655420616; - lats[1026]=17.820737785914044; - lats[1027]=17.75043901762076; - lats[1028]=17.680140249326314; - lats[1029]=17.60984148103071; - lats[1030]=17.539542712733962; - lats[1031]=17.469243944436066; - lats[1032]=17.39894517613704; - lats[1033]=17.328646407836878; - lats[1034]=17.258347639535586; - lats[1035]=17.188048871233182; - lats[1036]=17.117750102929655; - lats[1037]=17.04745133462502; - lats[1038]=16.977152566319283; - lats[1039]=16.906853798012452; - lats[1040]=16.836555029704527; - lats[1041]=16.766256261395515; - lats[1042]=16.69595749308542; - lats[1043]=16.625658724774254; - lats[1044]=16.555359956462013; - lats[1045]=16.485061188148713; - lats[1046]=16.41476241983435; - lats[1047]=16.344463651518936; - lats[1048]=16.274164883202477; - lats[1049]=16.203866114884974; - lats[1050]=16.133567346566434; - lats[1051]=16.063268578246863; - lats[1052]=15.992969809926265; - lats[1053]=15.922671041604652; - lats[1054]=15.852372273282016; - lats[1055]=15.78207350495838; - lats[1056]=15.711774736633735; - lats[1057]=15.641475968308091; - lats[1058]=15.571177199981456; - lats[1059]=15.500878431653829; - lats[1060]=15.430579663325226; - lats[1061]=15.360280894995643; - lats[1062]=15.289982126665089; - lats[1063]=15.219683358333569; - lats[1064]=15.149384590001089; - lats[1065]=15.07908582166765; - lats[1066]=15.008787053333259; - lats[1067]=14.938488284997929; - lats[1068]=14.868189516661655; - lats[1069]=14.797890748324447; - lats[1070]=14.727591979986309; - lats[1071]=14.657293211647247; - lats[1072]=14.586994443307265; - lats[1073]=14.516695674966371; - lats[1074]=14.446396906624567; - lats[1075]=14.376098138281863; - lats[1076]=14.305799369938256; - lats[1077]=14.23550060159376; - lats[1078]=14.165201833248371; - lats[1079]=14.0949030649021; - lats[1080]=14.024604296554955; - lats[1081]=13.954305528206934; - lats[1082]=13.884006759858046; - lats[1083]=13.813707991508297; - lats[1084]=13.743409223157688; - lats[1085]=13.673110454806226; - lats[1086]=13.602811686453919; - lats[1087]=13.532512918100766; - lats[1088]=13.46221414974678; - lats[1089]=13.391915381391959; - lats[1090]=13.32161661303631; - lats[1091]=13.251317844679837; - lats[1092]=13.181019076322551; - lats[1093]=13.110720307964451; - lats[1094]=13.040421539605545; - lats[1095]=12.970122771245832; - lats[1096]=12.899824002885323; - lats[1097]=12.829525234524022; - lats[1098]=12.759226466161934; - lats[1099]=12.688927697799061; - lats[1100]=12.618628929435411; - lats[1101]=12.548330161070988; - lats[1102]=12.478031392705796; - lats[1103]=12.407732624339841; - lats[1104]=12.337433855973126; - lats[1105]=12.267135087605659; - lats[1106]=12.196836319237443; - lats[1107]=12.126537550868482; - lats[1108]=12.056238782498781; - lats[1109]=11.985940014128348; - lats[1110]=11.915641245757183; - lats[1111]=11.845342477385294; - lats[1112]=11.775043709012685; - lats[1113]=11.704744940639358; - lats[1114]=11.634446172265324; - lats[1115]=11.564147403890583; - lats[1116]=11.493848635515141; - lats[1117]=11.423549867139002; - lats[1118]=11.35325109876217; - lats[1119]=11.282952330384653; - lats[1120]=11.212653562006453; - lats[1121]=11.142354793627575; - lats[1122]=11.072056025248026; - lats[1123]=11.001757256867807; - lats[1124]=10.931458488486923; - lats[1125]=10.861159720105382; - lats[1126]=10.790860951723188; - lats[1127]=10.720562183340341; - lats[1128]=10.65026341495685; - lats[1129]=10.579964646572719; - lats[1130]=10.509665878187954; - lats[1131]=10.439367109802557; - lats[1132]=10.369068341416533; - lats[1133]=10.298769573029887; - lats[1134]=10.228470804642624; - lats[1135]=10.158172036254747; - lats[1136]=10.087873267866264; - lats[1137]=10.017574499477174; - lats[1138]=9.9472757310874869; - lats[1139]=9.8769769626972046; - lats[1140]=9.8066781943063344; - lats[1141]=9.7363794259148779; - lats[1142]=9.6660806575228388; - lats[1143]=9.5957818891302242; - lats[1144]=9.5254831207370376; - lats[1145]=9.4551843523432826; - lats[1146]=9.3848855839489662; - lats[1147]=9.3145868155540921; - lats[1148]=9.2442880471586619; - lats[1149]=9.1739892787626829; - lats[1150]=9.1036905103661585; - lats[1151]=9.0333917419690941; - lats[1152]=8.963092973571495; - lats[1153]=8.8927942051733631; - lats[1154]=8.8224954367747017; - lats[1155]=8.7521966683755217; - lats[1156]=8.6818978999758194; - lats[1157]=8.6115991315756055; - lats[1158]=8.5413003631748801; - lats[1159]=8.4710015947736537; - lats[1160]=8.4007028263719228; - lats[1161]=8.3304040579696963; - lats[1162]=8.2601052895669778; - lats[1163]=8.1898065211637725; - lats[1164]=8.1195077527600841; - lats[1165]=8.049208984355916; - lats[1166]=7.9789102159512737; - lats[1167]=7.9086114475461606; - lats[1168]=7.8383126791405831; - lats[1169]=7.7680139107345463; - lats[1170]=7.6977151423280494; - lats[1171]=7.6274163739210996; - lats[1172]=7.557117605513703; - lats[1173]=7.4868188371058624; - lats[1174]=7.4165200686975803; - lats[1175]=7.3462213002888648; - lats[1176]=7.2759225318797176; - lats[1177]=7.2056237634701441; - lats[1178]=7.1353249950601469; - lats[1179]=7.0650262266497315; - lats[1180]=6.994727458238903; - lats[1181]=6.924428689827665; - lats[1182]=6.8541299214160212; - lats[1183]=6.7838311530039768; - lats[1184]=6.7135323845915353; - lats[1185]=6.6432336161787013; - lats[1186]=6.5729348477654792; - lats[1187]=6.5026360793518734; - lats[1188]=6.4323373109378874; - lats[1189]=6.3620385425235257; - lats[1190]=6.2917397741087928; - lats[1191]=6.2214410056936931; - lats[1192]=6.151142237278231; - lats[1193]=6.0808434688624091; - lats[1194]=6.0105447004462347; - lats[1195]=5.9402459320297085; - lats[1196]=5.869947163612836; - lats[1197]=5.7996483951956233; - lats[1198]=5.729349626778073; - lats[1199]=5.6590508583601888; - lats[1200]=5.5887520899419751; - lats[1201]=5.5184533215234373; - lats[1202]=5.4481545531045787; - lats[1203]=5.3778557846854023; - lats[1204]=5.3075570162659149; - lats[1205]=5.2372582478461194; - lats[1206]=5.1669594794260192; - lats[1207]=5.0966607110056197; - lats[1208]=5.0263619425849244; - lats[1209]=4.9560631741639369; - lats[1210]=4.8857644057426626; - lats[1211]=4.8154656373211049; - lats[1212]=4.7451668688992683; - lats[1213]=4.6748681004771564; - lats[1214]=4.6045693320547736; - lats[1215]=4.5342705636321252; - lats[1216]=4.4639717952092139; - lats[1217]=4.3936730267860451; - lats[1218]=4.3233742583626205; - lats[1219]=4.2530754899389471; - lats[1220]=4.1827767215150269; - lats[1221]=4.1124779530908659; - lats[1222]=4.0421791846664661; - lats[1223]=3.9718804162418326; - lats[1224]=3.90158164781697; - lats[1225]=3.8312828793918823; - lats[1226]=3.7609841109665734; - lats[1227]=3.6906853425410477; - lats[1228]=3.6203865741153085; - lats[1229]=3.5500878056893601; - lats[1230]=3.4797890372632065; - lats[1231]=3.4094902688368531; - lats[1232]=3.339191500410303; - lats[1233]=3.2688927319835597; - lats[1234]=3.1985939635566285; - lats[1235]=3.1282951951295126; - lats[1236]=3.0579964267022164; - lats[1237]=2.9876976582747439; - lats[1238]=2.9173988898470999; - lats[1239]=2.8471001214192873; - lats[1240]=2.7768013529913107; - lats[1241]=2.7065025845631743; - lats[1242]=2.6362038161348824; - lats[1243]=2.5659050477064382; - lats[1244]=2.4956062792778466; - lats[1245]=2.4253075108491116; - lats[1246]=2.3550087424202366; - lats[1247]=2.2847099739912267; - lats[1248]=2.2144112055620848; - lats[1249]=2.1441124371328155; - lats[1250]=2.0738136687034232; - lats[1251]=2.0035149002739114; - lats[1252]=1.9332161318442849; - lats[1253]=1.8629173634145471; - lats[1254]=1.792618594984702; - lats[1255]=1.7223198265547539; - lats[1256]=1.6520210581247066; - lats[1257]=1.5817222896945646; - lats[1258]=1.5114235212643317; - lats[1259]=1.4411247528340119; - lats[1260]=1.3708259844036093; - lats[1261]=1.300527215973128; - lats[1262]=1.2302284475425722; - lats[1263]=1.1599296791119456; - lats[1264]=1.0896309106812523; - lats[1265]=1.0193321422504964; - lats[1266]=0.949033373819682; - lats[1267]=0.87873460538881287; - lats[1268]=0.80843583695789356; - lats[1269]=0.73813706852692773; - lats[1270]=0.66783830009591949; - lats[1271]=0.59753953166487306; - lats[1272]=0.52724076323379232; - lats[1273]=0.45694199480268116; - lats[1274]=0.3866432263715438; - lats[1275]=0.31634445794038429; - lats[1276]=0.24604568950920663; - lats[1277]=0.17574692107801482; - lats[1278]=0.10544815264681295; - lats[1279]=0.035149384215604956; - - const size_t ilast = 2559; - for(size_t i=ilast; i>ilast/2; --i) { - lats[i] = -lats[ilast-i]; - } - - return GRIB_SUCCESS; -} - -/* Performance: return the precomputed latitudes for N=640 */ -/* The provided 'lats' array should have allocated 2*N elements */ -static int get_precomputed_latitudes_N640(double* lats) -{ - lats[0] = 89.892396445590066; - lats[1] = 89.753004943174034; - lats[2] = 89.612790258599077; - lats[3] = 89.472389582061126; - lats[4] = 89.331918354381827; - lats[5] = 89.191412986832432; - lats[6] = 89.050888539966436; - lats[7] = 88.91035235926023; - lats[8] = 88.76980845110036; - lats[9] = 88.629259185411627; - lats[10] = 88.488706053376362; - lats[11] = 88.348150039999084; - lats[12] = 88.207591822004105; - lats[13] = 88.067031879650926; - lats[14] = 87.926470563186442; - lats[15] = 87.785908134040668; - lats[16] = 87.645344791295628; - lats[17] = 87.504780689222315; - lats[18] = 87.364215949214667; - lats[19] = 87.223650668104085; - lats[20] = 87.083084924070917; - lats[21] = 86.942518780928566; - lats[22] = 86.801952291278369; - lats[23] = 86.661385498868242; - lats[24] = 86.520818440379529; - lats[25] = 86.380251146798656; - lats[26] = 86.239683644481104; - lats[27] = 86.0991159559849; - lats[28] = 85.958548100730781; - lats[29] = 85.817980095529578; - lats[30] = 85.677411955006008; - lats[31] = 85.536843691942948; - lats[32] = 85.396275317562669; - lats[33] = 85.255706841757572; - lats[34] = 85.115138273281829; - lats[35] = 84.974569619910426; - lats[36] = 84.834000888572191; - lats[37] = 84.693432085462035; - lats[38] = 84.552863216135577; - lats[39] = 84.412294285589354; - lats[40] = 84.271725298329656; - lats[41] = 84.131156258431133; - lats[42] = 83.990587169587158; - lats[43] = 83.850018035153667; - lats[44] = 83.709448858186462; - lats[45] = 83.568879641474325; - lats[46] = 83.428310387567549; - lats[47] = 83.287741098802584; - lats[48] = 83.147171777324388; - lats[49] = 83.006602425105484; - lats[50] = 82.866033043962815; - lats[51] = 82.725463635573107; - lats[52] = 82.584894201485696; - lats[53] = 82.444324743134914; - lats[54] = 82.303755261850071; - lats[55] = 82.163185758865239; - lats[56] = 82.022616235327504; - lats[57] = 81.882046692304485; - lats[58] = 81.741477130791196; - lats[59] = 81.600907551715878; - lats[60] = 81.460337955945846; - lats[61] = 81.319768344292086; - lats[62] = 81.179198717514012; - lats[63] = 81.038629076323318; - lats[64] = 80.898059421387785; - lats[65] = 80.757489753334553; - lats[66] = 80.616920072753146; - lats[67] = 80.47635038019834; - lats[68] = 80.335780676192584; - lats[69] = 80.195210961228469; - lats[70] = 80.054641235770603; - lats[71] = 79.914071500257819; - lats[72] = 79.773501755104689; - lats[73] = 79.632932000703448; - lats[74] = 79.492362237425226; - lats[75] = 79.351792465621628; - lats[76] = 79.211222685625927; - lats[77] = 79.070652897754229; - lats[78] = 78.930083102306568; - lats[79] = 78.789513299567957; - lats[80] = 78.648943489809355; - lats[81] = 78.508373673288318; - lats[82] = 78.367803850250056; - lats[83] = 78.227234020928066; - lats[84] = 78.086664185544819; - lats[85] = 77.946094344312371; - lats[86] = 77.805524497433041; - lats[87] = 77.664954645099883; - lats[88] = 77.524384787497311; - lats[89] = 77.383814924801513; - lats[90] = 77.243245057180829; - lats[91] = 77.102675184796354; - lats[92] = 76.962105307802219; - lats[93] = 76.821535426345932; - lats[94] = 76.680965540568806; - lats[95] = 76.540395650606285; - lats[96] = 76.399825756588143; - lats[97] = 76.259255858638895; - lats[98] = 76.118685956877997; - lats[99] = 75.978116051420102; - lats[100] = 75.837546142375359; - lats[101] = 75.69697622984954; - lats[102] = 75.556406313944308; - lats[103] = 75.41583639475742; - lats[104] = 75.275266472382896; - lats[105] = 75.134696546911186; - lats[106] = 74.994126618429377; - lats[107] = 74.853556687021296; - lats[108] = 74.712986752767719; - lats[109] = 74.57241681574645; - lats[110] = 74.431846876032495; - lats[111] = 74.291276933698185; - lats[112] = 74.150706988813226; - lats[113] = 74.010137041445006; - lats[114] = 73.869567091658411; - lats[115] = 73.728997139516167; - lats[116] = 73.588427185078871; - lats[117] = 73.447857228405013; - lats[118] = 73.307287269551111; - lats[119] = 73.166717308571819; - lats[120] = 73.026147345520002; - lats[121] = 72.885577380446747; - lats[122] = 72.745007413401481; - lats[123] = 72.604437444432065; - lats[124] = 72.463867473584784; - lats[125] = 72.323297500904502; - lats[126] = 72.182727526434604; - lats[127] = 72.042157550217183; - lats[128] = 71.901587572292982; - lats[129] = 71.761017592701492; - lats[130] = 71.620447611481026; - lats[131] = 71.47987762866866; - lats[132] = 71.339307644300462; - lats[133] = 71.198737658411332; - lats[134] = 71.058167671035164; - lats[135] = 70.917597682204899; - lats[136] = 70.777027691952398; - lats[137] = 70.636457700308753; - lats[138] = 70.495887707304007; - lats[139] = 70.355317712967462; - lats[140] = 70.214747717327526; - lats[141] = 70.074177720411782; - lats[142] = 69.933607722247146; - lats[143] = 69.793037722859665; - lats[144] = 69.65246772227475; - lats[145] = 69.511897720517084; - lats[146] = 69.37132771761064; - lats[147] = 69.230757713578825; - lats[148] = 69.090187708444333; - lats[149] = 68.949617702229318; - lats[150] = 68.809047694955296; - lats[151] = 68.668477686643286; - lats[152] = 68.52790767731365; - lats[153] = 68.387337666986312; - lats[154] = 68.246767655680657; - lats[155] = 68.106197643415527; - lats[156] = 67.965627630209354; - lats[157] = 67.825057616080073; - lats[158] = 67.684487601045149; - lats[159] = 67.543917585121662; - lats[160] = 67.403347568326168; - lats[161] = 67.262777550674912; - lats[162] = 67.122207532183722; - lats[163] = 66.981637512867991; - lats[164] = 66.841067492742795; - lats[165] = 66.700497471822814; - lats[166] = 66.559927450122359; - lats[167] = 66.41935742765547; - lats[168] = 66.278787404435761; - lats[169] = 66.138217380476604; - lats[170] = 65.997647355791017; - lats[171] = 65.85707733039176; - lats[172] = 65.716507304291198; - lats[173] = 65.575937277501538; - lats[174] = 65.435367250034616; - lats[175] = 65.294797221902016; - lats[176] = 65.154227193115119; - lats[177] = 65.013657163684968; - lats[178] = 64.873087133622406; - lats[179] = 64.732517102938033; - lats[180] = 64.591947071642196; - lats[181] = 64.451377039745026; - lats[182] = 64.310807007256443; - lats[183] = 64.170236974186125; - lats[184] = 64.029666940543564; - lats[185] = 63.889096906338061; - lats[186] = 63.748526871578648; - lats[187] = 63.607956836274255; - lats[188] = 63.467386800433559; - lats[189] = 63.326816764065093; - lats[190] = 63.186246727177178; - lats[191] = 63.045676689778013; - lats[192] = 62.905106651875542; - lats[193] = 62.764536613477638; - lats[194] = 62.62396657459194; - lats[195] = 62.483396535225978; - lats[196] = 62.342826495387122; - lats[197] = 62.202256455082583; - lats[198] = 62.061686414319418; - lats[199] = 61.921116373104539; - lats[200] = 61.780546331444761; - lats[201] = 61.639976289346727; - lats[202] = 61.499406246816953; - lats[203] = 61.358836203861841; - lats[204] = 61.21826616048768; - lats[205] = 61.077696116700601; - lats[206] = 60.937126072506608; - lats[207] = 60.796556027911663; - lats[208] = 60.655985982921543; - lats[209] = 60.515415937541938; - lats[210] = 60.374845891778421; - lats[211] = 60.234275845636503; - lats[212] = 60.093705799121537; - lats[213] = 59.953135752238794; - lats[214] = 59.812565704993467; - lats[215] = 59.671995657390596; - lats[216] = 59.531425609435225; - lats[217] = 59.390855561132213; - lats[218] = 59.250285512486386; - lats[219] = 59.10971546350244; - lats[220] = 58.96914541418505; - lats[221] = 58.828575364538722; - lats[222] = 58.688005314567938; - lats[223] = 58.547435264277105; - lats[224] = 58.406865213670514; - lats[225] = 58.266295162752428; - lats[226] = 58.125725111526968; - lats[227] = 57.985155059998249; - lats[228] = 57.844585008170284; - lats[229] = 57.704014956047033; - lats[230] = 57.563444903632337; - lats[231] = 57.422874850930043; - lats[232] = 57.282304797943887; - lats[233] = 57.141734744677549; - lats[234] = 57.001164691134662; - lats[235] = 56.860594637318769; - lats[236] = 56.720024583233375; - lats[237] = 56.579454528881925; - lats[238] = 56.438884474267795; - lats[239] = 56.29831441939433; - lats[240] = 56.157744364264779; - lats[241] = 56.017174308882367; - lats[242] = 55.876604253250278; - lats[243] = 55.736034197371588; - lats[244] = 55.595464141249401; - lats[245] = 55.45489408488671; - lats[246] = 55.314324028286471; - lats[247] = 55.173753971451625; - lats[248] = 55.033183914385013; - lats[249] = 54.892613857089486; - lats[250] = 54.752043799567822; - lats[251] = 54.611473741822735; - lats[252] = 54.470903683856939; - lats[253] = 54.330333625673063; - lats[254] = 54.189763567273758; - lats[255] = 54.049193508661538; - lats[256] = 53.90862344983897; - lats[257] = 53.768053390808532; - lats[258] = 53.627483331572677; - lats[259] = 53.486913272133812; - lats[260] = 53.346343212494332; - lats[261] = 53.205773152656562; - lats[262] = 53.065203092622802; - lats[263] = 52.924633032395342; - lats[264] = 52.784062971976404; - lats[265] = 52.643492911368206; - lats[266] = 52.502922850572908; - lats[267] = 52.362352789592649; - lats[268] = 52.221782728429538; - lats[269] = 52.081212667085637; - lats[270] = 51.940642605563028; - lats[271] = 51.800072543863692; - lats[272] = 51.659502481989627; - lats[273] = 51.518932419942786; - lats[274] = 51.378362357725095; - lats[275] = 51.237792295338465; - lats[276] = 51.097222232784773; - lats[277] = 50.956652170065858; - lats[278] = 50.81608210718354; - lats[279] = 50.675512044139623; - lats[280] = 50.534941980935862; - lats[281] = 50.39437191757402; - lats[282] = 50.253801854055808; - lats[283] = 50.113231790382912; - lats[284] = 49.972661726557028; - lats[285] = 49.832091662579785; - lats[286] = 49.691521598452823; - lats[287] = 49.550951534177734; - lats[288] = 49.410381469756118; - lats[289] = 49.269811405189529; - lats[290] = 49.129241340479489; - lats[291] = 48.988671275627539; - lats[292] = 48.848101210635171; - lats[293] = 48.707531145503857; - lats[294] = 48.56696108023506; - lats[295] = 48.42639101483023; - lats[296] = 48.285820949290759; - lats[297] = 48.145250883618075; - lats[298] = 48.004680817813544; - lats[299] = 47.864110751878535; - lats[300] = 47.723540685814392; - lats[301] = 47.582970619622444; - lats[302] = 47.442400553303997; - lats[303] = 47.301830486860368; - lats[304] = 47.161260420292813; - lats[305] = 47.020690353602596; - lats[306] = 46.880120286790955; - lats[307] = 46.73955021985914; - lats[308] = 46.598980152808338; - lats[309] = 46.458410085639763; - lats[310] = 46.317840018354602; - lats[311] = 46.177269950954006; - lats[312] = 46.036699883439134; - lats[313] = 45.896129815811136; - lats[314] = 45.755559748071114; - lats[315] = 45.614989680220205; - lats[316] = 45.474419612259481; - lats[317] = 45.333849544190024; - lats[318] = 45.193279476012933; - lats[319] = 45.052709407729239; - lats[320] = 44.912139339339987; - lats[321] = 44.771569270846214; - lats[322] = 44.630999202248923; - lats[323] = 44.490429133549149; - lats[324] = 44.349859064747854; - lats[325] = 44.209288995846045; - lats[326] = 44.068718926844674; - lats[327] = 43.928148857744716; - lats[328] = 43.787578788547094; - lats[329] = 43.64700871925276; - lats[330] = 43.506438649862638; - lats[331] = 43.365868580377636; - lats[332] = 43.225298510798666; - lats[333] = 43.0847284411266; - lats[334] = 42.944158371362349; - lats[335] = 42.803588301506764; - lats[336] = 42.663018231560706; - lats[337] = 42.522448161525034; - lats[338] = 42.381878091400594; - lats[339] = 42.241308021188203; - lats[340] = 42.100737950888686; - lats[341] = 41.960167880502873; - lats[342] = 41.819597810031553; - lats[343] = 41.679027739475522; - lats[344] = 41.538457668835562; - lats[345] = 41.397887598112455; - lats[346] = 41.257317527306981; - lats[347] = 41.116747456419873; - lats[348] = 40.976177385451912; - lats[349] = 40.835607314403816; - lats[350] = 40.695037243276325; - lats[351] = 40.554467172070169; - lats[352] = 40.41389710078608; - lats[353] = 40.273327029424742; - lats[354] = 40.132756957986885; - lats[355] = 39.992186886473185; - lats[356] = 39.851616814884331; - lats[357] = 39.711046743220997; - lats[358] = 39.570476671483874; - lats[359] = 39.429906599673615; - lats[360] = 39.289336527790894; - lats[361] = 39.148766455836338; - lats[362] = 39.008196383810613; - lats[363] = 38.867626311714339; - lats[364] = 38.727056239548169; - lats[365] = 38.5864861673127; - lats[366] = 38.44591609500857; - lats[367] = 38.305346022636385; - lats[368] = 38.164775950196741; - lats[369] = 38.02420587769025; - lats[370] = 37.883635805117493; - lats[371] = 37.743065732479067; - lats[372] = 37.602495659775542; - lats[373] = 37.461925587007492; - lats[374] = 37.321355514175501; - lats[375] = 37.180785441280122; - lats[376] = 37.040215368321896; - lats[377] = 36.899645295301404; - lats[378] = 36.759075222219167; - lats[379] = 36.618505149075737; - lats[380] = 36.477935075871656; - lats[381] = 36.33736500260742; - lats[382] = 36.196794929283605; - lats[383] = 36.056224855900687; - lats[384] = 35.9156547824592; - lats[385] = 35.775084708959632; - lats[386] = 35.634514635402525; - lats[387] = 35.493944561788332; - lats[388] = 35.353374488117588; - lats[389] = 35.21280441439076; - lats[390] = 35.072234340608333; - lats[391] = 34.931664266770788; - lats[392] = 34.79109419287861; - lats[393] = 34.650524118932253; - lats[394] = 34.509954044932208; - lats[395] = 34.369383970878907; - lats[396] = 34.228813896772813; - lats[397] = 34.088243822614395; - lats[398] = 33.9476737484041; - lats[399] = 33.807103674142361; - lats[400] = 33.66653359982962; - lats[401] = 33.525963525466317; - lats[402] = 33.385393451052892; - lats[403] = 33.244823376589757; - lats[404] = 33.104253302077339; - lats[405] = 32.963683227516071; - lats[406] = 32.823113152906366; - lats[407] = 32.682543078248621; - lats[408] = 32.541973003543255; - lats[409] = 32.401402928790681; - lats[410] = 32.260832853991289; - lats[411] = 32.120262779145477; - lats[412] = 31.979692704253651; - lats[413] = 31.839122629316183; - lats[414] = 31.698552554333489; - lats[415] = 31.55798247930592; - lats[416] = 31.417412404233875; - lats[417] = 31.276842329117731; - lats[418] = 31.136272253957859; - lats[419] = 30.99570217875463; - lats[420] = 30.855132103508407; - lats[421] = 30.71456202821955; - lats[422] = 30.573991952888438; - lats[423] = 30.433421877515418; - lats[424] = 30.292851802100841; - lats[425] = 30.152281726645064; - lats[426] = 30.011711651148435; - lats[427] = 29.87114157561129; - lats[428] = 29.730571500033992; - lats[429] = 29.590001424416862; - lats[430] = 29.449431348760253; - lats[431] = 29.308861273064483; - lats[432] = 29.168291197329893; - lats[433] = 29.027721121556816; - lats[434] = 28.887151045745565; - lats[435] = 28.746580969896474; - lats[436] = 28.606010894009859; - lats[437] = 28.465440818086037; - lats[438] = 28.324870742125327; - lats[439] = 28.184300666128038; - lats[440] = 28.043730590094491; - lats[441] = 27.903160514024975; - lats[442] = 27.762590437919812; - lats[443] = 27.622020361779295; - lats[444] = 27.481450285603731; - lats[445] = 27.340880209393415; - lats[446] = 27.200310133148644; - lats[447] = 27.05974005686971; - lats[448] = 26.919169980556905; - lats[449] = 26.778599904210516; - lats[450] = 26.638029827830831; - lats[451] = 26.497459751418134; - lats[452] = 26.356889674972713; - lats[453] = 26.216319598494842; - lats[454] = 26.075749521984797; - lats[455] = 25.935179445442859; - lats[456] = 25.794609368869299; - lats[457] = 25.654039292264386; - lats[458] = 25.513469215628398; - lats[459] = 25.3728991389616; - lats[460] = 25.232329062264245; - lats[461] = 25.091758985536615; - lats[462] = 24.951188908778963; - lats[463] = 24.810618831991551; - lats[464] = 24.670048755174633; - lats[465] = 24.529478678328466; - lats[466] = 24.388908601453309; - lats[467] = 24.248338524549407; - lats[468] = 24.107768447617016; - lats[469] = 23.96719837065638; - lats[470] = 23.826628293667756; - lats[471] = 23.686058216651375; - lats[472] = 23.545488139607492; - lats[473] = 23.404918062536346; - lats[474] = 23.264347985438178; - lats[475] = 23.123777908313219; - lats[476] = 22.98320783116171; - lats[477] = 22.84263775398389; - lats[478] = 22.70206767677999; - lats[479] = 22.561497599550243; - lats[480] = 22.420927522294875; - lats[481] = 22.280357445014126; - lats[482] = 22.139787367708202; - lats[483] = 21.999217290377352; - lats[484] = 21.858647213021786; - lats[485] = 21.718077135641735; - lats[486] = 21.577507058237412; - lats[487] = 21.436936980809044; - lats[488] = 21.296366903356844; - lats[489] = 21.155796825881037; - lats[490] = 21.015226748381831; - lats[491] = 20.874656670859444; - lats[492] = 20.734086593314085; - lats[493] = 20.593516515745968; - lats[494] = 20.452946438155308; - lats[495] = 20.312376360542309; - lats[496] = 20.171806282907177; - lats[497] = 20.031236205250121; - lats[498] = 19.890666127571347; - lats[499] = 19.750096049871054; - lats[500] = 19.609525972149449; - lats[501] = 19.468955894406733; - lats[502] = 19.328385816643106; - lats[503] = 19.187815738858767; - lats[504] = 19.04724566105391; - lats[505] = 18.906675583228736; - lats[506] = 18.766105505383443; - lats[507] = 18.625535427518219; - lats[508] = 18.484965349633256; - lats[509] = 18.344395271728757; - lats[510] = 18.203825193804899; - lats[511] = 18.063255115861882; - lats[512] = 17.922685037899889; - lats[513] = 17.782114959919113; - lats[514] = 17.641544881919739; - lats[515] = 17.500974803901951; - lats[516] = 17.360404725865926; - lats[517] = 17.219834647811862; - lats[518] = 17.079264569739937; - lats[519] = 16.938694491650331; - lats[520] = 16.798124413543224; - lats[521] = 16.657554335418794; - lats[522] = 16.516984257277226; - lats[523] = 16.376414179118694; - lats[524] = 16.235844100943371; - lats[525] = 16.09527402275144; - lats[526] = 15.954703944543072; - lats[527] = 15.814133866318445; - lats[528] = 15.673563788077727; - lats[529] = 15.532993709821094; - lats[530] = 15.392423631548718; - lats[531] = 15.251853553260768; - lats[532] = 15.111283474957411; - lats[533] = 14.970713396638821; - lats[534] = 14.830143318305167; - lats[535] = 14.689573239956617; - lats[536] = 14.549003161593328; - lats[537] = 14.408433083215476; - lats[538] = 14.267863004823225; - lats[539] = 14.127292926416734; - lats[540] = 13.986722847996173; - lats[541] = 13.8461527695617; - lats[542] = 13.705582691113481; - lats[543] = 13.565012612651675; - lats[544] = 13.424442534176441; - lats[545] = 13.283872455687943; - lats[546] = 13.143302377186339; - lats[547] = 13.002732298671786; - lats[548] = 12.862162220144443; - lats[549] = 12.72159214160447; - lats[550] = 12.58102206305202; - lats[551] = 12.440451984487247; - lats[552] = 12.299881905910311; - lats[553] = 12.159311827321366; - lats[554] = 12.018741748720567; - lats[555] = 11.878171670108063; - lats[556] = 11.73760159148401; - lats[557] = 11.597031512848561; - lats[558] = 11.456461434201868; - lats[559] = 11.315891355544077; - lats[560] = 11.175321276875344; - lats[561] = 11.034751198195819; - lats[562] = 10.894181119505649; - lats[563] = 10.753611040804984; - lats[564] = 10.613040962093971; - lats[565] = 10.472470883372759; - lats[566] = 10.331900804641496; - lats[567] = 10.191330725900327; - lats[568] = 10.050760647149401; - lats[569] = 9.9101905683888614; - lats[570] = 9.7696204896188554; - lats[571] = 9.6290504108395272; - lats[572] = 9.4884803320510205; - lats[573] = 9.3479102532534792; - lats[574] = 9.2073401744470491; - lats[575] = 9.0667700956318686; - lats[576] = 8.9262000168080871; - lats[577] = 8.7856299379758411; - lats[578] = 8.645059859135273; - lats[579] = 8.5044897802865282; - lats[580] = 8.3639197014297419; - lats[581] = 8.223349622565058; - lats[582] = 8.0827795436926184; - lats[583] = 7.9422094648125583; - lats[584] = 7.8016393859250206; - lats[585] = 7.661069307030143; - lats[586] = 7.5204992281280649; - lats[587] = 7.3799291492189223; - lats[588] = 7.2393590703028563; - lats[589] = 7.098788991380002; - lats[590] = 6.9582189124504987; - lats[591] = 6.8176488335144816; - lats[592] = 6.6770787545720891; - lats[593] = 6.5365086756234554; - lats[594] = 6.3959385966687181; - lats[595] = 6.2553685177080123; - lats[596] = 6.1147984387414738; - lats[597] = 5.9742283597692367; - lats[598] = 5.833658280791437; - lats[599] = 5.6930882018082087; - lats[600] = 5.5525181228196869; - lats[601] = 5.4119480438260039; - lats[602] = 5.2713779648272956; - lats[603] = 5.1308078858236934; - lats[604] = 4.9902378068153324; - lats[605] = 4.8496677278023448; - lats[606] = 4.7090976487848639; - lats[607] = 4.5685275697630221; - lats[608] = 4.4279574907369508; - lats[609] = 4.2873874117067841; - lats[610] = 4.1468173326726534; - lats[611] = 4.0062472536346903; - lats[612] = 3.8656771745930261; - lats[613] = 3.7251070955477918; - lats[614] = 3.5845370164991213; - lats[615] = 3.4439669374471427; - lats[616] = 3.3033968583919884; - lats[617] = 3.1628267793337885; - lats[618] = 3.0222567002726746; - lats[619] = 2.8816866212087762; - lats[620] = 2.7411165421422243; - lats[621] = 2.6005464630731496; - lats[622] = 2.4599763840016813; - lats[623] = 2.3194063049279499; - lats[624] = 2.1788362258520855; - lats[625] = 2.0382661467742174; - lats[626] = 1.8976960676944756; - lats[627] = 1.7571259886129893; - lats[628] = 1.6165559095298885; - lats[629] = 1.4759858304453026; - lats[630] = 1.3354157513593612; - lats[631] = 1.194845672272193; - lats[632] = 1.0542755931839276; - lats[633] = 0.91370551409469447; - lats[634] = 0.77313543500462234; - lats[635] = 0.63256535591384055; - lats[636] = 0.49199527682247807; - lats[637] = 0.351425197730664; - lats[638] = 0.21085511863852741; - lats[639] = 0.070285039546197275; - const size_t ilast = 1279; - for(size_t i=ilast; i>ilast/2; --i) { - lats[i] = -lats[ilast-i]; - } - - return GRIB_SUCCESS; -} - /* 'trunc' is the Gaussian number (or order) */ /* i.e. Number of parallels between a pole and the equator. */ /* The provided 'lats' array should have allocated 2*trunc elements */ -static int ecc_grib_get_gaussian_latitudes(long trunc, double* lats) +static int compute_gaussian_latitudes(long trunc, double* lats) { long jlat, iter, legi; double rad2deg, convval, root, legfonc = 0; @@ -2098,12 +153,7 @@ int grib_get_gaussian_latitudes(long trunc, double* lats) { if (trunc <= 0) return GRIB_GEOCALCULUS_PROBLEM; - if (trunc == 1280) - return get_precomputed_latitudes_N1280(lats); - if (trunc == 640) - return get_precomputed_latitudes_N640(lats); - else - return ecc_grib_get_gaussian_latitudes(trunc, lats); + return compute_gaussian_latitudes(trunc, lats); } /* Boolean return type: 1 if the reduced gaussian field is global, 0 for sub area */ From 8fa6b580be5c0a4f090782817de856e44e2f7ade Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 15:15:53 +0100 Subject: [PATCH 252/372] Testing: Geoiterator for jPointsAreConsecutive --- tests/grib_grid_lamb_az_eq_area.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/grib_grid_lamb_az_eq_area.sh b/tests/grib_grid_lamb_az_eq_area.sh index b2675b597..abd4e1afb 100755 --- a/tests/grib_grid_lamb_az_eq_area.sh +++ b/tests/grib_grid_lamb_az_eq_area.sh @@ -61,6 +61,8 @@ grib_check_key_equals $GRIB_OUTFILE xDirectionGridLengthInMetres,yDirectionGridL # Nearest ${tools_dir}/grib_ls -l 67,-33,1 $GRIB_OUTFILE +# jPointsAreConsecutive +${tools_dir}/grib_get_data -s jPointsAreConsecutive=1 $GRIB_OUTFILE > $DATA_OUTFILE # Oblate spheroid # -------------------- @@ -89,7 +91,7 @@ EOF rm -f "$GRIB_OUTFILE" ${tools_dir}/grib_filter -o $GRIB_OUTFILE $FILTER_FILE $GRIB_INFILE -${tools_dir}/grib_get_data $GRIB_OUTFILE +${tools_dir}/grib_get_data $GRIB_OUTFILE > $DATA_OUTFILE # Clean up From d336cfca4c08ed8e9b9577cd1e947862ce0c0157 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 15:58:48 +0100 Subject: [PATCH 253/372] Squeeze in HEALPix through the backdoor --- src/eccodes.h | 1 + src/grib_api.h | 3 ++- src/grib_util.cc | 37 +++++++++++++++++++++++++++---------- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/eccodes.h b/src/eccodes.h index e2ddb6588..d890438f2 100644 --- a/src/eccodes.h +++ b/src/eccodes.h @@ -1403,6 +1403,7 @@ int codes_check_message_footer(const void* bytes, size_t length, ProductKind pro #define CODES_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA #define CODES_UTIL_GRID_SPEC_LAMBERT_CONFORMAL GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL #define CODES_UTIL_GRID_SPEC_UNSTRUCTURED GRIB_UTIL_GRID_SPEC_UNSTRUCTURED +#define CODES_UTIL_GRID_SPEC_HEALPIX GRIB_UTIL_GRID_SPEC_HEALPIX #define CODES_UTIL_PACKING_TYPE_SAME_AS_INPUT GRIB_UTIL_PACKING_TYPE_SAME_AS_INPUT #define CODES_UTIL_PACKING_TYPE_SPECTRAL_COMPLEX GRIB_UTIL_PACKING_TYPE_SPECTRAL_COMPLEX diff --git a/src/grib_api.h b/src/grib_api.h index 6b0f82b4e..9a3e46ffc 100644 --- a/src/grib_api.h +++ b/src/grib_api.h @@ -1402,6 +1402,7 @@ int grib_get_message_size(const grib_handle* h, size_t* size); #define GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA 10 #define GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL 11 #define GRIB_UTIL_GRID_SPEC_UNSTRUCTURED 12 +#define GRIB_UTIL_GRID_SPEC_HEALPIX 13 typedef struct grib_util_grid_spec { @@ -1431,7 +1432,7 @@ typedef struct grib_util_grid_spec long iScansNegatively; long jScansPositively; - /* Gaussian number */ + /* Gaussian number or HEALPIX Nside */ long N; /* Bitmap */ diff --git a/src/grib_util.cc b/src/grib_util.cc index 7393f094e..8b66ae503 100644 --- a/src/grib_util.cc +++ b/src/grib_util.cc @@ -766,6 +766,19 @@ static int check_handle_against_spec(grib_handle* handle, const long edition, } #endif +static bool grid_type_is_supported_in_edition(const int spec_grid_type, const long edition) +{ + if (edition == 1) { + if (spec_grid_type == GRIB_UTIL_GRID_SPEC_UNSTRUCTURED || + spec_grid_type == GRIB_UTIL_GRID_SPEC_HEALPIX || + spec_grid_type == GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA) + { + return false; + } + } + return true; +} + static const char* get_grid_type_name(const int spec_grid_type) { if (spec_grid_type == GRIB_UTIL_GRID_SPEC_REGULAR_LL) @@ -801,6 +814,9 @@ static const char* get_grid_type_name(const int spec_grid_type) if (spec_grid_type == GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL) return "lambert"; + if (spec_grid_type == GRIB_UTIL_GRID_SPEC_HEALPIX) + return "healpix"; + if (spec_grid_type == GRIB_UTIL_GRID_SPEC_UNSTRUCTURED) return "unstructured_grid"; @@ -868,6 +884,7 @@ static int get_grib_sample_name(grib_handle* h, long editionNumber, case GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA: case GRIB_UTIL_GRID_SPEC_UNSTRUCTURED: case GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL: + case GRIB_UTIL_GRID_SPEC_HEALPIX: snprintf(sample_name, sample_name_len, "GRIB%ld", editionNumber); break; default: @@ -1006,16 +1023,11 @@ grib_handle* grib_util_set_spec(grib_handle* h, goto cleanup; } - if (spec->grid_type == GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA || - spec->grid_type == GRIB_UTIL_GRID_SPEC_UNSTRUCTURED) { - if (editionNumber == 1) { /* These grid types are not available in edition 1 */ - if (h->context->debug == -1) - fprintf(stderr, - "ECCODES DEBUG grib_util: '%s' specified " - "but input is GRIB1. Output must be a higher edition!\n", - grid_type); - convertEditionEarlier = 1; - } + if (!grid_type_is_supported_in_edition(spec->grid_type, editionNumber)) { + fprintf(stderr, "ECCODES WARNING %s: '%s' specified " + "but input is GRIB edition %ld. Output must be a higher edition!\n", + __func__, grid_type, editionNumber); + convertEditionEarlier = 1; } h_sample = grib_handle_new_from_samples(NULL, sample_name); @@ -1155,6 +1167,11 @@ grib_handle* grib_util_set_spec(grib_handle* h, // should be 'double' and not integer. WMO GRIB2 uses millimetres! // TODO(masn): Add other keys like Latin1, LoV etc break; + case GRIB_UTIL_GRID_SPEC_HEALPIX: + COPY_SPEC_LONG(bitmapPresent); + if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue); + COPY_SPEC_LONG(N); // Nside + break; case GRIB_UTIL_GRID_SPEC_REDUCED_GG: case GRIB_UTIL_GRID_SPEC_REDUCED_ROTATED_GG: From 7c061545bddd72231f586d25abc5ee67661d63db Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 16:27:09 +0100 Subject: [PATCH 254/372] Squeeze in HEALPix through the backdoor --- definitions/grib2/section.3.def | 1 + definitions/grib2/template.3.150.def | 7 ++++ definitions/grib2/template.3.healpix.def | 47 ++++++++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 definitions/grib2/template.3.150.def create mode 100644 definitions/grib2/template.3.healpix.def diff --git a/definitions/grib2/section.3.def b/definitions/grib2/section.3.def index ad06e8a1f..d8ce26e6f 100644 --- a/definitions/grib2/section.3.def +++ b/definitions/grib2/section.3.def @@ -110,6 +110,7 @@ concept gridType { "lambert_bf" = { gridDefinitionTemplateNumber=63; PLPresent=0; } "mercator_bf" = { gridDefinitionTemplateNumber=61; PLPresent=0; } "polar_stereographic_bf" = { gridDefinitionTemplateNumber=62; PLPresent=0; } + "healpix" = { gridDefinitionTemplateNumber=150; PLPresent=0; } "ncep_32769" = { centre=7; gridDefinitionTemplateNumber=32769; PLPresent=0; } diff --git a/definitions/grib2/template.3.150.def b/definitions/grib2/template.3.150.def new file mode 100644 index 000000000..ea9f76811 --- /dev/null +++ b/definitions/grib2/template.3.150.def @@ -0,0 +1,7 @@ +# TEMPLATE 3.150 - The HEALPix grid +# See https://healpix.jpl.nasa.gov/pdf/intro.pdf + +include "grib2/template.3.shape_of_the_earth.def"; +include "grib2/template.3.resolution_flags.def"; +include "grib2/template.3.healpix.def"; + diff --git a/definitions/grib2/template.3.healpix.def b/definitions/grib2/template.3.healpix.def new file mode 100644 index 000000000..0975a039b --- /dev/null +++ b/definitions/grib2/template.3.healpix.def @@ -0,0 +1,47 @@ +# (C) Copyright 2005- ECMWF. + +# See https://healpix.jpl.nasa.gov/pdf/intro.pdf + +constant isGridded = one; + +# Number of grid points along one side of one of the 12 base resolution pixels (>=1) +# The number of data points should be = 12 * Nside * Nside +unsigned[4] Nside : edition_specific,dump; +alias N = Nside; +alias numberOfPointsAlongASide = Nside; +alias geography.Nside = Nside; + +# Longitude of the centre line of the first rhomboid +unsigned[4] longitudeOfFirstGridPoint : edition_specific,dump; +alias Lo = longitudeOfFirstGridPoint; +alias geography.longitudeOfFirstGridPoint = longitudeOfFirstGridPoint; + +# Position of the points. Default = Grid points at centres of shape +codetable[1] gridPointPosition ('3.8.table',masterDir,localDir) = 4 : edition_specific,dump; +alias geography.gridPointPosition = gridPointPosition; + +# Ordering convention of points. Default = ring +codetable[1] ordering ('3.12.table',masterDir,localDir) = 0 : edition_specific,dump; +concept orderingConvention(unknown) { + "ring" = { ordering = 0; } + "nested" = { ordering = 1; } +} : dump; +alias geography.pointsOrdering = orderingConvention; + +flags[1] scanningMode 'grib2/tables/[tablesVersion]/3.13.table'; +flagbit iScansNegatively(scanningMode,7) : dump; # WMO bit 1 +flagbit jScansPositively(scanningMode,6) : dump; # WMO bit 2 +transient iScansPositively = !iScansNegatively : constraint; +transient jScansNegatively = !jScansPositively : constraint; + +iterator healpix(numberOfPoints,missingValue,values,Nside,orderingConvention); +nearest healpix(values,radius,Nx,Ny); + +meta latLonValues latlonvalues(values); +alias latitudeLongitudeValues=latLonValues; +meta latitudes latitudes(values,0); +meta longitudes longitudes(values,0); +meta distinctLatitudes latitudes(values,1); +meta distinctLongitudes longitudes(values,1); + +meta gridName sprintf("H%d", N) : no_copy; From 9b3056571b626cd369b83e32f3301887dde77029 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 17:01:03 +0100 Subject: [PATCH 255/372] Testing: Increase coverage --- tests/grib_compare.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/grib_compare.sh b/tests/grib_compare.sh index 59b194b26..d83228e2c 100755 --- a/tests/grib_compare.sh +++ b/tests/grib_compare.sh @@ -16,6 +16,21 @@ REDIRECT=/dev/null outfile=temp.$label.grib rm -f $outfile +# Use of -a/-c +set +e +infile1=$ECCODES_SAMPLES_PATH/reduced_gg_pl_32_grib2.tmpl +infile2=$ECCODES_SAMPLES_PATH/reduced_gg_pl_48_grib2.tmpl +${tools_dir}/grib_compare -a -c longitudeOfLastGridPoint $infile1 $infile2 +status=$? +set -e +[ $status -eq 1 ] + + +# Use of -c namespace +infile1=$ECCODES_SAMPLES_PATH/reduced_gg_pl_32_grib2.tmpl +${tools_dir}/grib_set -s year=2019 $infile1 $outfile +${tools_dir}/grib_compare -c data:n $infile1 $outfile + # Header (meta-data) keys infile=$ECCODES_SAMPLES_PATH/reduced_gg_pl_32_grib2.tmpl From 21a37f25f54fef3903d793d646f0630f9e28b4ad Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 17:32:37 +0100 Subject: [PATCH 256/372] Testing: Increase coverage --- tests/bufr_copy.sh | 12 ++++++++++++ tests/bufr_dump_data.sh | 24 ++++++++++++++++++++++-- tests/bufr_ls.sh | 12 ++++++++++++ tests/grib_copy.sh | 18 +++++++++++++++--- 4 files changed, 61 insertions(+), 5 deletions(-) diff --git a/tests/bufr_copy.sh b/tests/bufr_copy.sh index e2dcffcbc..eb3b877fb 100755 --- a/tests/bufr_copy.sh +++ b/tests/bufr_copy.sh @@ -98,6 +98,18 @@ ${tools_dir}/bufr_copy -s unpack=1 -w stormIdentifier=none $fBufrInput $fBufrTmp [ ! -f "$fBufrTmp" ] +#------------------------------------------------------------------- +echo "Test: corner cases ..." +#------------------------------------------------------------------- +echo BUFR > $fBufrTmp +set +e +${tools_dir}/bufr_copy $fBufrTmp /dev/null > $fLog 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -w "unreadable message" $fLog + + # Clean up #----------- rm -f $fLog $fBufrTmp diff --git a/tests/bufr_dump_data.sh b/tests/bufr_dump_data.sh index 1eacbb1f8..4f8594755 100755 --- a/tests/bufr_dump_data.sh +++ b/tests/bufr_dump_data.sh @@ -13,8 +13,8 @@ # Define a common label for all the tmp files label="bufr_dump_data_test" -fLog=${label}".log" -fJsonTmp=${label}".json.tmp" +fLog=temp.$label.log +fJsonTmp=temp.$label.json if [ $HAVE_MEMFS -eq 1 ]; then unset ECCODES_DEFINITION_PATH @@ -58,6 +58,26 @@ grep -q "parsing include file" $fLog unset ECCODES_DEBUG unset ECCODES_LOG_STREAM +# This one should fail +file=${data_dir}/bufr/vos308014_v3_26.bufr +set +e +${tools_dir}/bufr_dump -ja $file +status=$? +set -e +[ $status -ne 0 ] + +set +e +${tools_dir}/bufr_dump $file +status=$? +set -e +[ $status -ne 0 ] + +set +e +${tools_dir}/bufr_dump -p $file +status=$? +set -e +[ $status -ne 0 ] + #============================================== # Testing a malformed bufr file (see ECC-110) #============================================== diff --git a/tests/bufr_ls.sh b/tests/bufr_ls.sh index 2d8e2d157..2879ed36f 100755 --- a/tests/bufr_ls.sh +++ b/tests/bufr_ls.sh @@ -64,6 +64,18 @@ ${tools_dir}/bufr_ls -s satelliteID=313 -p satelliteID aaen_55.bufr > $fTmp grep -q "313" $fTmp +# ------------------------ +# Test corner cases +# ------------------------ +echo BUFR > $fTmp +set +e +${tools_dir}/bufr_ls $fTmp > $fLog 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -w "unreadable message" $fLog + + # Clean up rm -f $fLog $res_ls rm -f $fTmp diff --git a/tests/grib_copy.sh b/tests/grib_copy.sh index c66fcef61..09b0c50f1 100755 --- a/tests/grib_copy.sh +++ b/tests/grib_copy.sh @@ -15,7 +15,8 @@ cd ${data_dir} # Define a common label for all the tmp files label="grib_copy_test" -temp=${label}".grib.tmp" +temp=temp.$label.grib +fLog=temp.$label.log echo "Test: The -g option..." # ----------------------------------- @@ -49,7 +50,7 @@ echo "Test: ECC-1086 invalid message ..." # This file is 179 bytes long. We chop the last byte to create # an invalid GRIB message (Final 7777 is 777) input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl -badGrib=${label}".bad.grib" +badGrib=temp.$label.bad.grib head -c 178 $input > $badGrib set +e ${tools_dir}/grib_copy $badGrib /dev/null # Only the bad GRIB @@ -89,6 +90,17 @@ status=$? set -e [ $status -ne 0 ] +#------------------------------------------------------------------- +echo "Test: corner cases ..." +#------------------------------------------------------------------- +echo GRIB > $badGrib +set +e +${tools_dir}/grib_copy $badGrib /dev/null > $fLog 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -w "unreadable message" $fLog + #${tools_dir}/grib_copy -w count=1 -X 57143 $input $temp #Last msg #r1=`${tools_dir}/grib_get -w count=37 -n ls $input` @@ -107,4 +119,4 @@ set -e # Clean up #----------- -rm -f $temp $badGrib $combinedGrib +rm -f $temp $badGrib $combinedGrib $fLog From 5b06296dcebd4fc705abe739f1e600cb18b7164c Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 17:59:02 +0100 Subject: [PATCH 257/372] Testing: Increase coverage --- tests/grib_ls.sh | 12 ++++++++++++ tests/grib_set.sh | 25 +++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/tests/grib_ls.sh b/tests/grib_ls.sh index 7d884608c..3329ae48c 100755 --- a/tests/grib_ls.sh +++ b/tests/grib_ls.sh @@ -40,6 +40,7 @@ ${tools_dir}/grib_ls -l 0,0,1 $infile >> $tempLog ${tools_dir}/grib_get -l 0,0,1 $infile >> $tempLog ${tools_dir}/grib_get -p count,step $infile >> $tempLog ${tools_dir}/grib_get -P count $infile >> $tempLog +${tools_dir}/grib_get -i 0 $infile files=" reduced_gaussian_lsm.grib1 reduced_gaussian_model_level.grib1 @@ -207,5 +208,16 @@ grib_check_key_equals $file 'expver:d' 1 grib_check_key_equals $file 'expver:s' '0001' +${tools_dir}/grib_ls -j -l0,0 -p referenceValue:d $data_dir/sample.grib2 +${tools_dir}/grib_ls -j -l0,0 -p referenceValue:i $data_dir/sample.grib2 + +set +e +${tools_dir}/grib_ls -l0,0,666 $data_dir/sample.grib2 > $tempText 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Wrong mode given" $tempText + + # Clean up rm -f $temp1 $temp2 $tempText $tempLog diff --git a/tests/grib_set.sh b/tests/grib_set.sh index 45ddc4fb0..8e448c8d9 100755 --- a/tests/grib_set.sh +++ b/tests/grib_set.sh @@ -18,6 +18,8 @@ temp=temp.grib_set.out rm -f $outfile +${tools_dir}/grib_set -V + ${tools_dir}/grib_set -v -p levtype,centre,levtype,centre:l -s levtype=pl,centre=80 $infile $outfile >$REDIRECT levtype=`${tools_dir}/grib_get -p levtype $outfile` @@ -85,6 +87,17 @@ set -e [ $status -ne 0 ] grep -q "Trying to encode a negative value of -1 for key of type unsigned" $temp +# Bad value for -d +# ---------------- +input=${data_dir}/reduced_gaussian_sub_area.grib2 +set +e +${tools_dir}/grib_set -d hello $input $outfile 2>$temp +status=$? +set -e +[ $status -ne 0 ] +grep -q "Invalid number" $temp + + # ECC-1605: Out-of-bounds value for signed keys # ---------------------------------------------------- if [ $ECCODES_ON_WINDOWS -eq 0 ]; then @@ -196,5 +209,17 @@ count=`${tools_dir}/grib_count $outfile` grib_check_key_equals $outfile shortName '2t' +# ------------------------ +# Unreadable message +# ------------------------ +echo GRIB > $outfile +set +e +${tools_dir}/grib_set -s edition=2 $outfile /dev/null > $temp 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "unreadable message" $temp + + # Clean up rm -f $outfile $temp From 1ea5190f115f705695defc98e1819469bb7b832f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 21:16:53 +0100 Subject: [PATCH 258/372] Testing: Key iterator with skip --- tests/CMakeLists.txt | 2 ++ tests/grib_keys_iter_skip.cc | 59 ++++++++++++++++++++++++++++++++++++ tests/grib_keys_iter_skip.sh | 25 +++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 tests/grib_keys_iter_skip.cc create mode 100755 tests/grib_keys_iter_skip.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b75b0331a..dfa32c9dc 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -21,6 +21,7 @@ list(APPEND test_c_bins unit_tests bufr_keys_iter grib_keys_iter + grib_keys_iter_skip grib_geo_iter gauss_sub grib_nearest_test @@ -187,6 +188,7 @@ if( HAVE_BUILD_TOOLS ) bufr_change_edition bufr_keys_iter grib_keys_iter + grib_keys_iter_skip grib_geo_iter bufr_get_element bufr_wmo_tables diff --git a/tests/grib_keys_iter_skip.cc b/tests/grib_keys_iter_skip.cc new file mode 100644 index 000000000..54d5d1c79 --- /dev/null +++ b/tests/grib_keys_iter_skip.cc @@ -0,0 +1,59 @@ +/* + * (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 +#include +#include + +#include "grib_api_internal.h" + +int main(int argc, char* argv[]) +{ + grib_handle* h = NULL; + int err = 0; + + Assert(argc == 2); + const char* fname = argv[1]; + FILE* f = fopen(fname, "rb"); + Assert(f); + + unsigned long flags[] = { + GRIB_KEYS_ITERATOR_SKIP_READ_ONLY, + GRIB_KEYS_ITERATOR_SKIP_OPTIONAL, + GRIB_KEYS_ITERATOR_SKIP_EDITION_SPECIFIC, + GRIB_KEYS_ITERATOR_SKIP_CODED, + GRIB_KEYS_ITERATOR_SKIP_COMPUTED, + GRIB_KEYS_ITERATOR_SKIP_DUPLICATES, + GRIB_KEYS_ITERATOR_SKIP_FUNCTION + }; + const unsigned long N = sizeof(flags)/sizeof(unsigned long); + + while ((h = grib_handle_new_from_file(0, f, &err)) != NULL) { + + for (unsigned long i=0; i 0); + ++count; + } + grib_keys_iterator_delete(kiter); + printf("File=%s: Flag=%lu, count=%zu\n", fname, flags[i], count); + } + + grib_handle_delete(h); + } + + fclose(f); + return 0; +} diff --git a/tests/grib_keys_iter_skip.sh b/tests/grib_keys_iter_skip.sh new file mode 100755 index 000000000..4b5e6fb28 --- /dev/null +++ b/tests/grib_keys_iter_skip.sh @@ -0,0 +1,25 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +label="grib_keys_iter_skip_test" + +gribs=" + row.grib + grid_ieee.grib + reduced_gaussian_model_level.grib1 + sample.grib2 + gfs.c255.grib2 +" +for f in $gribs; do + g=$data_dir/$f + ${test_dir}/grib_keys_iter_skip $g +done From 0f92bd80d598416b8e06c356a020646690770de8 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 22:52:33 +0100 Subject: [PATCH 259/372] Tools: Fix write_messages --- .../grib_accessor_class_data_apply_gdsnotpresent.cc | 0 tools/bufr_compare.cc | 11 +++-------- 2 files changed, 3 insertions(+), 8 deletions(-) rename src/{ => deprecated}/grib_accessor_class_data_apply_gdsnotpresent.cc (100%) diff --git a/src/grib_accessor_class_data_apply_gdsnotpresent.cc b/src/deprecated/grib_accessor_class_data_apply_gdsnotpresent.cc similarity index 100% rename from src/grib_accessor_class_data_apply_gdsnotpresent.cc rename to src/deprecated/grib_accessor_class_data_apply_gdsnotpresent.cc diff --git a/tools/bufr_compare.cc b/tools/bufr_compare.cc index 712f76d57..94da7ba2a 100644 --- a/tools/bufr_compare.cc +++ b/tools/bufr_compare.cc @@ -458,6 +458,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) if (compare_handles(h, global_handle, options)) { error++; + write_messages(h, global_handle); if (!force) exit(1); } @@ -479,6 +480,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) if (compare_handles(global_handle, h, options)) { error++; + write_messages(global_handle, h); if (!two_way) { /* If two_way mode: Don't exit yet. Show further differences */ if (!force) @@ -492,6 +494,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) printf(" Swapping handles (two-way mode)\n"); if (compare_handles(h, global_handle, options)) { error++; + write_messages(h, global_handle); if (!force) exit(1); } @@ -1205,7 +1208,6 @@ static int compare_attributes(grib_handle* handle1, grib_handle* handle2, grib_r if (compare_attribute(handle1, handle2, options, aa, prefix, err)) { (*err)++; - write_messages(handle1, handle2); ret = 1; } @@ -1225,7 +1227,6 @@ static int compare_attribute(grib_handle* handle1, grib_handle* handle2, grib_ru snprintf(fullname, fullnameMaxLen, "%s->%s", prefix, a->name); if (compare_values(options, handle1, handle2, fullname, GRIB_TYPE_UNDEFINED)) { (*err)++; - write_messages(handle1, handle2); ret = 1; } /* Recurse if this key has children */ @@ -1303,13 +1304,11 @@ static int compare_all_dump_keys(grib_handle* handle1, grib_handle* handle2, gri /* Compare the key itself */ if (compare_values(options, handle1, handle2, prefix, GRIB_TYPE_UNDEFINED)) { (*pErr)++; - write_messages(handle1, handle2); ret = 1; } /* Now compare the key attributes (if any) */ if (compare_attributes(handle1, handle2, options, xa, prefix, pErr)) { (*pErr)++; - write_messages(handle1, handle2); ret = 1; } if (dofree) @@ -1346,7 +1345,6 @@ static int compare_handles(grib_handle* handle1, grib_handle* handle2, grib_runt continue; if (compare_values(options, handle1, handle2, name, GRIB_TYPE_UNDEFINED)) { err++; - write_messages(handle1, handle2); } } grib_keys_iterator_delete(iter); @@ -1354,7 +1352,6 @@ static int compare_handles(grib_handle* handle1, grib_handle* handle2, grib_runt else { if (compare_values(options, handle1, handle2, options->compare[i].name, options->compare[i].type)) err++; - write_messages(handle1, handle2); } } } @@ -1409,7 +1406,6 @@ static int compare_handles(grib_handle* handle1, grib_handle* handle2, grib_runt continue; if (compare_values(options, handle1, handle2, name, GRIB_TYPE_UNDEFINED)) { err++; - write_messages(handle1, handle2); if (compare_all_dump_keys(handle1, handle2, options, &err)) { err++; } @@ -1420,7 +1416,6 @@ static int compare_handles(grib_handle* handle1, grib_handle* handle2, grib_runt else { if (compare_values(options, handle1, handle2, options->compare[i].name, options->compare[i].type)) { err++; - write_messages(handle1, handle2); if (compare_all_dump_keys(handle1, handle2, options, &err)) { err++; } From f6b9b26b748ab63c1aa4fdeda0fb13929ba5d4b4 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 24 Aug 2023 22:53:01 +0100 Subject: [PATCH 260/372] Dead code removal --- src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 1 - src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - src/grib_accessor_classes_hash.cc | 869 ++++++++++++++-------------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 7 files changed, 426 insertions(+), 450 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b24e15e2c..a50f3d45c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -210,7 +210,6 @@ list( APPEND eccodes_src_files grib_accessor_class_data_complex_packing.cc grib_accessor_class_data_g1complex_packing.cc grib_accessor_class_gds_not_present_bitmap.cc - grib_accessor_class_data_apply_gdsnotpresent.cc grib_accessor_class_gds_is_present.cc grib_accessor_class_select_step_template.cc grib_accessor_class_local_definition.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index ba5b95f12..56fde1eed 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -46,7 +46,6 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |---grib_accessor_class_data_apply_bitmap |---grib_accessor_class_data_apply_boustrophedonic |---grib_accessor_class_data_apply_boustrophedonic_bitmap - |---grib_accessor_class_data_apply_gdsnotpresent |---grib_accessor_class_data_secondary_bitmap |-----grib_accessor_class_data_g1secondary_bitmap |-----grib_accessor_class_data_g2secondary_bitmap diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 2d53a28ab..a1337895f 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -604,8 +604,6 @@ bufr_descriptors_array* grib_accessor_class_expanded_descriptors_get_expanded(gr /* grib_accessor_class_gds_not_present_bitmap.cc*/ -/* grib_accessor_class_data_apply_gdsnotpresent.cc*/ - /* grib_accessor_class_gds_is_present.cc*/ /* grib_accessor_class_select_step_template.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index 463456661..ed11b44b9 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -35,7 +35,6 @@ extern grib_accessor_class* grib_accessor_class_count_total; extern grib_accessor_class* grib_accessor_class_data_apply_bitmap; extern grib_accessor_class* grib_accessor_class_data_apply_boustrophedonic; extern grib_accessor_class* grib_accessor_class_data_apply_boustrophedonic_bitmap; -extern grib_accessor_class* grib_accessor_class_data_apply_gdsnotpresent; extern grib_accessor_class* grib_accessor_class_data_ccsds_packing; extern grib_accessor_class* grib_accessor_class_data_complex_packing; extern grib_accessor_class* grib_accessor_class_data_dummy_field; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index 644473820..982e09544 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,12 +37,12 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 207 +#define TOTAL_KEYWORDS 206 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 -#define MAX_HASH_VALUE 581 -/* maximum key range = 581, duplicates = 0 */ +#define MAX_HASH_VALUE 475 +/* maximum key range = 475, duplicates = 0 */ #ifdef __GNUC__ @@ -55,32 +55,32 @@ static unsigned int grib_accessor_classes_get_id (const char *str, size_t len) { static const unsigned short asso_values[] = { - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 0, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 4, 60, - 29, 3, 9, 582, 12, 582, 1, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 2, 582, 2, 121, 135, - 1, 2, 105, 25, 219, 0, 3, 2, 113, 184, - 21, 64, 3, 582, 113, 8, 37, 87, 132, 0, - 4, 3, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582 + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 0, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 1, 49, + 23, 29, 3, 476, 7, 476, 1, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 0, 476, 0, 125, 127, + 0, 0, 131, 24, 148, 1, 0, 22, 108, 161, + 13, 51, 6, 476, 93, 1, 40, 71, 192, 8, + 1, 47, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476 }; unsigned int hval = len; @@ -116,525 +116,508 @@ static const struct accessor_class_hash classes[] = {""}, #line 9 "accessor_class_list.gperf" {" "}, - {""}, {""}, {""}, {""}, {""}, {""}, -#line 157 "accessor_class_list.gperf" - {"pad", &grib_accessor_class_pad}, -#line 76 "accessor_class_list.gperf" - {"dirty", &grib_accessor_class_dirty}, - {""}, {""}, -#line 180 "accessor_class_list.gperf" + {""}, {""}, {""}, {""}, +#line 179 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, - {""}, -#line 183 "accessor_class_list.gperf" - {"spd", &grib_accessor_class_spd}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, -#line 177 "accessor_class_list.gperf" +#line 176 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 67 "accessor_class_list.gperf" +#line 156 "accessor_class_list.gperf" + {"pad", &grib_accessor_class_pad}, +#line 182 "accessor_class_list.gperf" + {"spd", &grib_accessor_class_spd}, + {""}, {""}, {""}, +#line 177 "accessor_class_list.gperf" + {"signed_bits", &grib_accessor_class_signed_bits}, + {""}, +#line 66 "accessor_class_list.gperf" {"data_raw_packing", &grib_accessor_class_data_raw_packing}, -#line 73 "accessor_class_list.gperf" + {""}, {""}, {""}, +#line 72 "accessor_class_list.gperf" {"data_simple_packing", &grib_accessor_class_data_simple_packing}, +#line 68 "accessor_class_list.gperf" + {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, +#line 170 "accessor_class_list.gperf" + {"section", &grib_accessor_class_section}, #line 43 "accessor_class_list.gperf" {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, {""}, -#line 69 "accessor_class_list.gperf" - {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 113 "accessor_class_list.gperf" - {"gen", &grib_accessor_class_gen}, -#line 178 "accessor_class_list.gperf" - {"signed_bits", &grib_accessor_class_signed_bits}, -#line 75 "accessor_class_list.gperf" +#line 74 "accessor_class_list.gperf" {"dictionary", &grib_accessor_class_dictionary}, -#line 65 "accessor_class_list.gperf" - {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, -#line 46 "accessor_class_list.gperf" - {"data_apply_gdsnotpresent", &grib_accessor_class_data_apply_gdsnotpresent}, {""}, +#line 112 "accessor_class_list.gperf" + {"gen", &grib_accessor_class_gen}, +#line 64 "accessor_class_list.gperf" + {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, +#line 65 "accessor_class_list.gperf" + {"data_png_packing", &grib_accessor_class_data_png_packing}, +#line 172 "accessor_class_list.gperf" + {"section_padding", &grib_accessor_class_section_padding}, +#line 173 "accessor_class_list.gperf" + {"section_pointer", &grib_accessor_class_section_pointer}, #line 44 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, -#line 158 "accessor_class_list.gperf" - {"padding", &grib_accessor_class_padding}, -#line 171 "accessor_class_list.gperf" - {"section", &grib_accessor_class_section}, - {""}, {""}, -#line 192 "accessor_class_list.gperf" - {"time", &grib_accessor_class_time}, {""}, +#line 80 "accessor_class_list.gperf" + {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, + {""}, {""}, {""}, +#line 157 "accessor_class_list.gperf" + {"padding", &grib_accessor_class_padding}, #line 45 "accessor_class_list.gperf" {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, -#line 66 "accessor_class_list.gperf" - {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 156 "accessor_class_list.gperf" - {"packing_type", &grib_accessor_class_packing_type}, -#line 174 "accessor_class_list.gperf" - {"section_pointer", &grib_accessor_class_section_pointer}, -#line 173 "accessor_class_list.gperf" - {"section_padding", &grib_accessor_class_section_padding}, - {""}, {""}, -#line 111 "accessor_class_list.gperf" +#line 110 "accessor_class_list.gperf" {"gds_is_present", &grib_accessor_class_gds_is_present}, -#line 81 "accessor_class_list.gperf" - {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, - {""}, {""}, -#line 114 "accessor_class_list.gperf" - {"getenv", &grib_accessor_class_getenv}, - {""}, -#line 58 "accessor_class_list.gperf" - {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, -#line 62 "accessor_class_list.gperf" - {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, -#line 63 "accessor_class_list.gperf" - {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, -#line 60 "accessor_class_list.gperf" - {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, -#line 105 "accessor_class_list.gperf" - {"g2grid", &grib_accessor_class_g2grid}, - {""}, -#line 170 "accessor_class_list.gperf" +#line 169 "accessor_class_list.gperf" {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 99 "accessor_class_list.gperf" - {"g2_eps", &grib_accessor_class_g2_eps}, - {""}, {""}, -#line 172 "accessor_class_list.gperf" +#line 171 "accessor_class_list.gperf" {"section_length", &grib_accessor_class_section_length}, - {""}, {""}, -#line 144 "accessor_class_list.gperf" - {"nearest", &grib_accessor_class_nearest}, - {""}, {""}, {""}, +#line 113 "accessor_class_list.gperf" + {"getenv", &grib_accessor_class_getenv}, +#line 57 "accessor_class_list.gperf" + {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, +#line 191 "accessor_class_list.gperf" + {"time", &grib_accessor_class_time}, + {""}, +#line 61 "accessor_class_list.gperf" + {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, + {""}, +#line 155 "accessor_class_list.gperf" + {"packing_type", &grib_accessor_class_packing_type}, +#line 62 "accessor_class_list.gperf" + {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, +#line 59 "accessor_class_list.gperf" + {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, + {""}, +#line 75 "accessor_class_list.gperf" + {"dirty", &grib_accessor_class_dirty}, #line 104 "accessor_class_list.gperf" + {"g2grid", &grib_accessor_class_g2grid}, + {""}, {""}, {""}, +#line 103 "accessor_class_list.gperf" {"g2end_step", &grib_accessor_class_g2end_step}, -#line 159 "accessor_class_list.gperf" +#line 98 "accessor_class_list.gperf" + {"g2_eps", &grib_accessor_class_g2_eps}, +#line 143 "accessor_class_list.gperf" + {"nearest", &grib_accessor_class_nearest}, + {""}, +#line 158 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, {""}, {""}, -#line 64 "accessor_class_list.gperf" - {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, - {""}, {""}, -#line 108 "accessor_class_list.gperf" +#line 107 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, -#line 189 "accessor_class_list.gperf" + {""}, {""}, +#line 188 "accessor_class_list.gperf" {"step_in_units", &grib_accessor_class_step_in_units}, - {""}, {""}, {""}, {""}, {""}, {""}, -#line 56 "accessor_class_list.gperf" - {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, -#line 57 "accessor_class_list.gperf" - {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, -#line 50 "accessor_class_list.gperf" - {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 48 "accessor_class_list.gperf" - {"data_complex_packing", &grib_accessor_class_data_complex_packing}, -#line 186 "accessor_class_list.gperf" - {"statistics", &grib_accessor_class_statistics}, -#line 205 "accessor_class_list.gperf" - {"uint8", &grib_accessor_class_uint8}, +#line 63 "accessor_class_list.gperf" + {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, {""}, -#line 109 "accessor_class_list.gperf" - {"g2step_range", &grib_accessor_class_g2step_range}, -#line 201 "accessor_class_list.gperf" - {"uint32", &grib_accessor_class_uint32}, -#line 103 "accessor_class_list.gperf" - {"g2date", &grib_accessor_class_g2date}, -#line 190 "accessor_class_list.gperf" +#line 47 "accessor_class_list.gperf" + {"data_complex_packing", &grib_accessor_class_data_complex_packing}, + {""}, +#line 55 "accessor_class_list.gperf" + {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, + {""}, +#line 189 "accessor_class_list.gperf" {"sum", &grib_accessor_class_sum}, -#line 145 "accessor_class_list.gperf" +#line 56 "accessor_class_list.gperf" + {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, +#line 49 "accessor_class_list.gperf" + {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, +#line 204 "accessor_class_list.gperf" + {"uint8", &grib_accessor_class_uint8}, +#line 144 "accessor_class_list.gperf" {"non_alpha", &grib_accessor_class_non_alpha}, {""}, -#line 101 "accessor_class_list.gperf" - {"g2bitmap", &grib_accessor_class_g2bitmap}, - {""}, -#line 187 "accessor_class_list.gperf" - {"statistics_spectral", &grib_accessor_class_statistics_spectral}, -#line 127 "accessor_class_list.gperf" +#line 126 "accessor_class_list.gperf" {"julian_day", &grib_accessor_class_julian_day}, -#line 203 "accessor_class_list.gperf" +#line 125 "accessor_class_list.gperf" + {"julian_date", &grib_accessor_class_julian_date}, +#line 108 "accessor_class_list.gperf" + {"g2step_range", &grib_accessor_class_g2step_range}, + {""}, +#line 202 "accessor_class_list.gperf" {"uint64", &grib_accessor_class_uint64}, {""}, -#line 126 "accessor_class_list.gperf" - {"julian_date", &grib_accessor_class_julian_date}, -#line 112 "accessor_class_list.gperf" - {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, - {""}, -#line 49 "accessor_class_list.gperf" +#line 48 "accessor_class_list.gperf" {"data_dummy_field", &grib_accessor_class_data_dummy_field}, -#line 125 "accessor_class_list.gperf" - {"iterator", &grib_accessor_class_iterator}, - {""}, {""}, -#line 84 "accessor_class_list.gperf" + {""}, {""}, {""}, +#line 83 "accessor_class_list.gperf" {"g1_message_length", &grib_accessor_class_g1_message_length}, - {""}, {""}, -#line 68 "accessor_class_list.gperf" +#line 185 "accessor_class_list.gperf" + {"statistics", &grib_accessor_class_statistics}, +#line 102 "accessor_class_list.gperf" + {"g2date", &grib_accessor_class_g2date}, +#line 67 "accessor_class_list.gperf" {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, -#line 164 "accessor_class_list.gperf" +#line 100 "accessor_class_list.gperf" + {"g2bitmap", &grib_accessor_class_g2bitmap}, +#line 163 "accessor_class_list.gperf" {"raw", &grib_accessor_class_raw}, - {""}, {""}, -#line 61 "accessor_class_list.gperf" +#line 60 "accessor_class_list.gperf" {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, -#line 59 "accessor_class_list.gperf" +#line 58 "accessor_class_list.gperf" {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, +#line 111 "accessor_class_list.gperf" + {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, +#line 124 "accessor_class_list.gperf" + {"iterator", &grib_accessor_class_iterator}, +#line 186 "accessor_class_list.gperf" + {"statistics_spectral", &grib_accessor_class_statistics_spectral}, + {""}, {""}, {""}, {""}, +#line 146 "accessor_class_list.gperf" + {"number_of_points", &grib_accessor_class_number_of_points}, +#line 200 "accessor_class_list.gperf" + {"uint32", &grib_accessor_class_uint32}, +#line 96 "accessor_class_list.gperf" + {"g2_aerosol", &grib_accessor_class_g2_aerosol}, +#line 94 "accessor_class_list.gperf" + {"g1step_range", &grib_accessor_class_g1step_range}, + {""}, {""}, +#line 164 "accessor_class_list.gperf" + {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, {""}, +#line 193 "accessor_class_list.gperf" + {"to_integer", &grib_accessor_class_to_integer}, +#line 147 "accessor_class_list.gperf" + {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, +#line 207 "accessor_class_list.gperf" + {"unsigned", &grib_accessor_class_unsigned}, + {""}, {""}, +#line 86 "accessor_class_list.gperf" + {"g1date", &grib_accessor_class_g1date}, + {""}, +#line 85 "accessor_class_list.gperf" + {"g1bitmap", &grib_accessor_class_g1bitmap}, +#line 208 "accessor_class_list.gperf" + {"unsigned_bits", &grib_accessor_class_unsigned_bits}, +#line 54 "accessor_class_list.gperf" + {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, + {""}, +#line 205 "accessor_class_list.gperf" + {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, + {""}, +#line 198 "accessor_class_list.gperf" + {"uint16", &grib_accessor_class_uint16}, +#line 115 "accessor_class_list.gperf" + {"group", &grib_accessor_class_group}, #line 13 "accessor_class_list.gperf" {"bit", &grib_accessor_class_bit}, #line 15 "accessor_class_list.gperf" {"bits", &grib_accessor_class_bits}, -#line 95 "accessor_class_list.gperf" - {"g1step_range", &grib_accessor_class_g1step_range}, - {""}, -#line 87 "accessor_class_list.gperf" - {"g1date", &grib_accessor_class_g1date}, +#line 187 "accessor_class_list.gperf" + {"step_human_readable", &grib_accessor_class_step_human_readable}, #line 14 "accessor_class_list.gperf" {"bitmap", &grib_accessor_class_bitmap}, -#line 97 "accessor_class_list.gperf" - {"g2_aerosol", &grib_accessor_class_g2_aerosol}, -#line 147 "accessor_class_list.gperf" - {"number_of_points", &grib_accessor_class_number_of_points}, -#line 86 "accessor_class_list.gperf" - {"g1bitmap", &grib_accessor_class_g1bitmap}, - {""}, -#line 194 "accessor_class_list.gperf" - {"to_integer", &grib_accessor_class_to_integer}, - {""}, -#line 165 "accessor_class_list.gperf" - {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, -#line 29 "accessor_class_list.gperf" - {"bytes", &grib_accessor_class_bytes}, - {""}, {""}, -#line 148 "accessor_class_list.gperf" - {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, +#line 167 "accessor_class_list.gperf" + {"scale", &grib_accessor_class_scale}, +#line 84 "accessor_class_list.gperf" + {"g1_section4_length", &grib_accessor_class_g1_section4_length}, +#line 52 "accessor_class_list.gperf" + {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, +#line 109 "accessor_class_list.gperf" + {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, +#line 197 "accessor_class_list.gperf" + {"trim", &grib_accessor_class_trim}, +#line 53 "accessor_class_list.gperf" + {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, +#line 203 "accessor_class_list.gperf" + {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, #line 16 "accessor_class_list.gperf" {"bits_per_value", &grib_accessor_class_bits_per_value}, -#line 212 "accessor_class_list.gperf" - {"values", &grib_accessor_class_values}, -#line 208 "accessor_class_list.gperf" - {"unsigned", &grib_accessor_class_unsigned}, -#line 185 "accessor_class_list.gperf" - {"sprintf", &grib_accessor_class_sprintf}, -#line 179 "accessor_class_list.gperf" - {"simple_packing_error", &grib_accessor_class_simple_packing_error}, -#line 116 "accessor_class_list.gperf" - {"group", &grib_accessor_class_group}, -#line 195 "accessor_class_list.gperf" +#line 194 "accessor_class_list.gperf" {"to_string", &grib_accessor_class_to_string}, -#line 209 "accessor_class_list.gperf" - {"unsigned_bits", &grib_accessor_class_unsigned_bits}, -#line 202 "accessor_class_list.gperf" - {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, -#line 168 "accessor_class_list.gperf" - {"scale", &grib_accessor_class_scale}, -#line 85 "accessor_class_list.gperf" - {"g1_section4_length", &grib_accessor_class_g1_section4_length}, -#line 55 "accessor_class_list.gperf" - {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, -#line 199 "accessor_class_list.gperf" - {"uint16", &grib_accessor_class_uint16}, -#line 198 "accessor_class_list.gperf" - {"trim", &grib_accessor_class_trim}, -#line 188 "accessor_class_list.gperf" - {"step_human_readable", &grib_accessor_class_step_human_readable}, -#line 206 "accessor_class_list.gperf" - {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, - {""}, -#line 204 "accessor_class_list.gperf" - {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, - {""}, -#line 47 "accessor_class_list.gperf" - {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, -#line 79 "accessor_class_list.gperf" - {"element", &grib_accessor_class_element}, -#line 130 "accessor_class_list.gperf" - {"latitudes", &grib_accessor_class_latitudes}, -#line 106 "accessor_class_list.gperf" - {"g2latlon", &grib_accessor_class_g2latlon}, -#line 53 "accessor_class_list.gperf" - {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, -#line 115 "accessor_class_list.gperf" - {"global_gaussian", &grib_accessor_class_global_gaussian}, - {""}, -#line 54 "accessor_class_list.gperf" - {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, -#line 110 "accessor_class_list.gperf" - {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, -#line 196 "accessor_class_list.gperf" - {"transient", &grib_accessor_class_transient}, -#line 175 "accessor_class_list.gperf" - {"select_step_template", &grib_accessor_class_select_step_template}, -#line 51 "accessor_class_list.gperf" +#line 50 "accessor_class_list.gperf" {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, -#line 161 "accessor_class_list.gperf" - {"padtomultiple", &grib_accessor_class_padtomultiple}, -#line 52 "accessor_class_list.gperf" +#line 195 "accessor_class_list.gperf" + {"transient", &grib_accessor_class_transient}, +#line 51 "accessor_class_list.gperf" {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, - {""}, -#line 176 "accessor_class_list.gperf" - {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, -#line 162 "accessor_class_list.gperf" - {"position", &grib_accessor_class_position}, -#line 197 "accessor_class_list.gperf" - {"transient_darray", &grib_accessor_class_transient_darray}, - {""}, {""}, -#line 121 "accessor_class_list.gperf" - {"ieeefloat", &grib_accessor_class_ieeefloat}, -#line 135 "accessor_class_list.gperf" - {"long", &grib_accessor_class_long}, -#line 184 "accessor_class_list.gperf" - {"spectral_truncation", &grib_accessor_class_spectral_truncation}, -#line 167 "accessor_class_list.gperf" +#line 46 "accessor_class_list.gperf" + {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, +#line 105 "accessor_class_list.gperf" + {"g2latlon", &grib_accessor_class_g2latlon}, +#line 160 "accessor_class_list.gperf" + {"padtomultiple", &grib_accessor_class_padtomultiple}, +#line 114 "accessor_class_list.gperf" + {"global_gaussian", &grib_accessor_class_global_gaussian}, +#line 166 "accessor_class_list.gperf" {"round", &grib_accessor_class_round}, -#line 78 "accessor_class_list.gperf" - {"double", &grib_accessor_class_double}, -#line 211 "accessor_class_list.gperf" - {"validity_time", &grib_accessor_class_validity_time}, -#line 153 "accessor_class_list.gperf" - {"offset_file", &grib_accessor_class_offset_file}, -#line 210 "accessor_class_list.gperf" - {"validity_date", &grib_accessor_class_validity_date}, -#line 141 "accessor_class_list.gperf" - {"md5", &grib_accessor_class_md5}, - {""}, {""}, -#line 163 "accessor_class_list.gperf" - {"proj_string", &grib_accessor_class_proj_string}, - {""}, {""}, {""}, -#line 77 "accessor_class_list.gperf" - {"divdouble", &grib_accessor_class_divdouble}, -#line 89 "accessor_class_list.gperf" - {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, -#line 142 "accessor_class_list.gperf" - {"message", &grib_accessor_class_message}, -#line 128 "accessor_class_list.gperf" - {"ksec1expver", &grib_accessor_class_ksec1expver}, +#line 196 "accessor_class_list.gperf" + {"transient_darray", &grib_accessor_class_transient_darray}, {""}, -#line 139 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" + {"simple_packing_error", &grib_accessor_class_simple_packing_error}, +#line 175 "accessor_class_list.gperf" + {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, +#line 174 "accessor_class_list.gperf" + {"select_step_template", &grib_accessor_class_select_step_template}, +#line 78 "accessor_class_list.gperf" + {"element", &grib_accessor_class_element}, +#line 161 "accessor_class_list.gperf" + {"position", &grib_accessor_class_position}, +#line 129 "accessor_class_list.gperf" + {"latitudes", &grib_accessor_class_latitudes}, +#line 184 "accessor_class_list.gperf" + {"sprintf", &grib_accessor_class_sprintf}, +#line 183 "accessor_class_list.gperf" + {"spectral_truncation", &grib_accessor_class_spectral_truncation}, +#line 214 "accessor_class_list.gperf" + {"when", &grib_accessor_class_when}, +#line 201 "accessor_class_list.gperf" + {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, +#line 88 "accessor_class_list.gperf" + {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, +#line 134 "accessor_class_list.gperf" + {"long", &grib_accessor_class_long}, +#line 140 "accessor_class_list.gperf" + {"md5", &grib_accessor_class_md5}, +#line 77 "accessor_class_list.gperf" + {"double", &grib_accessor_class_double}, + {""}, {""}, +#line 141 "accessor_class_list.gperf" + {"message", &grib_accessor_class_message}, + {""}, +#line 70 "accessor_class_list.gperf" + {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, +#line 138 "accessor_class_list.gperf" {"mars_param", &grib_accessor_class_mars_param}, -#line 100 "accessor_class_list.gperf" + {""}, {""}, +#line 162 "accessor_class_list.gperf" + {"proj_string", &grib_accessor_class_proj_string}, +#line 71 "accessor_class_list.gperf" + {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, +#line 190 "accessor_class_list.gperf" + {"suppressed", &grib_accessor_class_suppressed}, +#line 127 "accessor_class_list.gperf" + {"ksec1expver", &grib_accessor_class_ksec1expver}, +#line 29 "accessor_class_list.gperf" + {"bytes", &grib_accessor_class_bytes}, +#line 142 "accessor_class_list.gperf" + {"message_copy", &grib_accessor_class_message_copy}, + {""}, +#line 199 "accessor_class_list.gperf" + {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, +#line 89 "accessor_class_list.gperf" + {"g1fcperiod", &grib_accessor_class_g1fcperiod}, + {""}, {""}, {""}, +#line 76 "accessor_class_list.gperf" + {"divdouble", &grib_accessor_class_divdouble}, + {""}, {""}, +#line 99 "accessor_class_list.gperf" {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, {""}, {""}, -#line 214 "accessor_class_list.gperf" - {"vector", &grib_accessor_class_vector}, -#line 143 "accessor_class_list.gperf" - {"message_copy", &grib_accessor_class_message_copy}, -#line 200 "accessor_class_list.gperf" - {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, - {""}, {""}, {""}, -#line 160 "accessor_class_list.gperf" - {"padtoeven", &grib_accessor_class_padtoeven}, -#line 90 "accessor_class_list.gperf" - {"g1fcperiod", &grib_accessor_class_g1fcperiod}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, -#line 102 "accessor_class_list.gperf" +#line 120 "accessor_class_list.gperf" + {"ieeefloat", &grib_accessor_class_ieeefloat}, +#line 152 "accessor_class_list.gperf" + {"offset_file", &grib_accessor_class_offset_file}, + {""}, {""}, +#line 101 "accessor_class_list.gperf" {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, -#line 215 "accessor_class_list.gperf" - {"when", &grib_accessor_class_when}, - {""}, {""}, -#line 191 "accessor_class_list.gperf" - {"suppressed", &grib_accessor_class_suppressed}, + {""}, +#line 211 "accessor_class_list.gperf" + {"values", &grib_accessor_class_values}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 139 "accessor_class_list.gperf" + {"mars_step", &grib_accessor_class_mars_step}, #line 19 "accessor_class_list.gperf" {"bufr_data_array", &grib_accessor_class_bufr_data_array}, -#line 122 "accessor_class_list.gperf" - {"ifs_param", &grib_accessor_class_ifs_param}, + {""}, #line 20 "accessor_class_list.gperf" {"bufr_data_element", &grib_accessor_class_bufr_data_element}, + {""}, {""}, {""}, #line 26 "accessor_class_list.gperf" {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, -#line 129 "accessor_class_list.gperf" - {"label", &grib_accessor_class_label}, -#line 140 "accessor_class_list.gperf" - {"mars_step", &grib_accessor_class_mars_step}, {""}, {""}, {""}, -#line 17 "accessor_class_list.gperf" - {"blob", &grib_accessor_class_blob}, - {""}, +#line 128 "accessor_class_list.gperf" + {"label", &grib_accessor_class_label}, +#line 116 "accessor_class_list.gperf" + {"gts_header", &grib_accessor_class_gts_header}, #line 28 "accessor_class_list.gperf" {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, {""}, -#line 155 "accessor_class_list.gperf" - {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, -#line 71 "accessor_class_list.gperf" - {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, -#line 120 "accessor_class_list.gperf" - {"ibmfloat", &grib_accessor_class_ibmfloat}, #line 38 "accessor_class_list.gperf" {"concept", &grib_accessor_class_concept}, -#line 133 "accessor_class_list.gperf" - {"library_version", &grib_accessor_class_library_version}, - {""}, -#line 72 "accessor_class_list.gperf" - {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, - {""}, -#line 83 "accessor_class_list.gperf" - {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, - {""}, {""}, {""}, -#line 18 "accessor_class_list.gperf" - {"budgdate", &grib_accessor_class_budgdate}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 145 "accessor_class_list.gperf" + {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, {""}, {""}, -#line 213 "accessor_class_list.gperf" - {"variable", &grib_accessor_class_variable}, - {""}, {""}, -#line 149 "accessor_class_list.gperf" - {"number_of_values", &grib_accessor_class_number_of_values}, - {""}, {""}, {""}, {""}, +#line 137 "accessor_class_list.gperf" + {"lookup", &grib_accessor_class_lookup}, +#line 17 "accessor_class_list.gperf" + {"blob", &grib_accessor_class_blob}, + {""}, #line 39 "accessor_class_list.gperf" {"constant", &grib_accessor_class_constant}, -#line 80 "accessor_class_list.gperf" - {"evaluate", &grib_accessor_class_evaluate}, - {""}, {""}, -#line 146 "accessor_class_list.gperf" - {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, -#line 138 "accessor_class_list.gperf" - {"lookup", &grib_accessor_class_lookup}, -#line 152 "accessor_class_list.gperf" - {"octet_number", &grib_accessor_class_octet_number}, - {""}, -#line 154 "accessor_class_list.gperf" - {"offset_values", &grib_accessor_class_offset_values}, -#line 137 "accessor_class_list.gperf" +#line 121 "accessor_class_list.gperf" + {"ifs_param", &grib_accessor_class_ifs_param}, +#line 136 "accessor_class_list.gperf" {"longitudes", &grib_accessor_class_longitudes}, -#line 124 "accessor_class_list.gperf" - {"int64_little_endian", &grib_accessor_class_int64_little_endian}, +#line 119 "accessor_class_list.gperf" + {"ibmfloat", &grib_accessor_class_ibmfloat}, +#line 151 "accessor_class_list.gperf" + {"octet_number", &grib_accessor_class_octet_number}, +#line 18 "accessor_class_list.gperf" + {"budgdate", &grib_accessor_class_budgdate}, +#line 209 "accessor_class_list.gperf" + {"validity_date", &grib_accessor_class_validity_date}, +#line 210 "accessor_class_list.gperf" + {"validity_time", &grib_accessor_class_validity_time}, +#line 91 "accessor_class_list.gperf" + {"g1monthlydate", &grib_accessor_class_g1monthlydate}, {""}, -#line 150 "accessor_class_list.gperf" - {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, -#line 123 "accessor_class_list.gperf" - {"int16_little_endian", &grib_accessor_class_int16_little_endian}, -#line 181 "accessor_class_list.gperf" - {"smart_table", &grib_accessor_class_smart_table}, - {""}, {""}, {""}, {""}, {""}, {""}, -#line 182 "accessor_class_list.gperf" - {"smart_table_column", &grib_accessor_class_smart_table_column}, - {""}, {""}, {""}, -#line 27 "accessor_class_list.gperf" - {"bufr_string_values", &grib_accessor_class_bufr_string_values}, -#line 169 "accessor_class_list.gperf" - {"scale_values", &grib_accessor_class_scale_values}, +#line 213 "accessor_class_list.gperf" + {"vector", &grib_accessor_class_vector}, {""}, #line 117 "accessor_class_list.gperf" - {"gts_header", &grib_accessor_class_gts_header}, + {"hash_array", &grib_accessor_class_hash_array}, +#line 123 "accessor_class_list.gperf" + {"int64_little_endian", &grib_accessor_class_int64_little_endian}, +#line 180 "accessor_class_list.gperf" + {"smart_table", &grib_accessor_class_smart_table}, + {""}, {""}, +#line 122 "accessor_class_list.gperf" + {"int16_little_endian", &grib_accessor_class_int16_little_endian}, {""}, -#line 193 "accessor_class_list.gperf" - {"to_double", &grib_accessor_class_to_double}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 136 "accessor_class_list.gperf" +#line 159 "accessor_class_list.gperf" + {"padtoeven", &grib_accessor_class_padtoeven}, + {""}, +#line 181 "accessor_class_list.gperf" + {"smart_table_column", &grib_accessor_class_smart_table_column}, + {""}, {""}, +#line 135 "accessor_class_list.gperf" {"long_vector", &grib_accessor_class_long_vector}, -#line 107 "accessor_class_list.gperf" - {"g2level", &grib_accessor_class_g2level}, - {""}, {""}, {""}, -#line 131 "accessor_class_list.gperf" +#line 132 "accessor_class_list.gperf" + {"library_version", &grib_accessor_class_library_version}, +#line 82 "accessor_class_list.gperf" + {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, +#line 153 "accessor_class_list.gperf" + {"offset_values", &grib_accessor_class_offset_values}, + {""}, +#line 130 "accessor_class_list.gperf" {"latlon_increment", &grib_accessor_class_latlon_increment}, +#line 118 "accessor_class_list.gperf" + {"headers_only", &grib_accessor_class_headers_only}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 192 "accessor_class_list.gperf" + {"to_double", &grib_accessor_class_to_double}, + {""}, +#line 27 "accessor_class_list.gperf" + {"bufr_string_values", &grib_accessor_class_bufr_string_values}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 154 "accessor_class_list.gperf" + {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, +#line 73 "accessor_class_list.gperf" + {"decimal_precision", &grib_accessor_class_decimal_precision}, + {""}, {""}, +#line 69 "accessor_class_list.gperf" + {"data_sh_packed", &grib_accessor_class_data_sh_packed}, + {""}, {""}, +#line 148 "accessor_class_list.gperf" + {"number_of_values", &grib_accessor_class_number_of_values}, {""}, {""}, {""}, +#line 133 "accessor_class_list.gperf" + {"local_definition", &grib_accessor_class_local_definition}, + {""}, {""}, +#line 25 "accessor_class_list.gperf" + {"bufr_group", &grib_accessor_class_bufr_group}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 212 "accessor_class_list.gperf" + {"variable", &grib_accessor_class_variable}, +#line 149 "accessor_class_list.gperf" + {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, + {""}, +#line 79 "accessor_class_list.gperf" + {"evaluate", &grib_accessor_class_evaluate}, + {""}, {""}, {""}, {""}, {""}, #line 34 "accessor_class_list.gperf" {"codeflag", &grib_accessor_class_codeflag}, {""}, {""}, {""}, {""}, -#line 74 "accessor_class_list.gperf" - {"decimal_precision", &grib_accessor_class_decimal_precision}, - {""}, {""}, {""}, {""}, {""}, -#line 132 "accessor_class_list.gperf" - {"latlonvalues", &grib_accessor_class_latlonvalues}, - {""}, {""}, -#line 134 "accessor_class_list.gperf" - {"local_definition", &grib_accessor_class_local_definition}, +#line 206 "accessor_class_list.gperf" + {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, {""}, {""}, {""}, {""}, -#line 25 "accessor_class_list.gperf" - {"bufr_group", &grib_accessor_class_bufr_group}, - {""}, {""}, #line 33 "accessor_class_list.gperf" {"closest_date", &grib_accessor_class_closest_date}, - {""}, {""}, {""}, -#line 92 "accessor_class_list.gperf" - {"g1monthlydate", &grib_accessor_class_g1monthlydate}, - {""}, {""}, {""}, {""}, {""}, -#line 118 "accessor_class_list.gperf" - {"hash_array", &grib_accessor_class_hash_array}, - {""}, {""}, {""}, {""}, -#line 40 "accessor_class_list.gperf" - {"count_file", &grib_accessor_class_count_file}, - {""}, {""}, {""}, {""}, -#line 119 "accessor_class_list.gperf" - {"headers_only", &grib_accessor_class_headers_only}, - {""}, -#line 96 "accessor_class_list.gperf" - {"g1verificationdate", &grib_accessor_class_g1verificationdate}, - {""}, {""}, {""}, {""}, -#line 21 "accessor_class_list.gperf" - {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, - {""}, {""}, -#line 35 "accessor_class_list.gperf" - {"codetable", &grib_accessor_class_codetable}, - {""}, {""}, -#line 24 "accessor_class_list.gperf" - {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, - {""}, {""}, {""}, -#line 70 "accessor_class_list.gperf" - {"data_sh_packed", &grib_accessor_class_data_sh_packed}, -#line 22 "accessor_class_list.gperf" - {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, - {""}, -#line 207 "accessor_class_list.gperf" - {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, - {""}, -#line 23 "accessor_class_list.gperf" - {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 82 "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}, - {""}, {""}, {""}, {""}, -#line 88 "accessor_class_list.gperf" - {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, - {""}, {""}, {""}, -#line 42 "accessor_class_list.gperf" - {"count_total", &grib_accessor_class_count_total}, - {""}, {""}, {""}, {""}, -#line 166 "accessor_class_list.gperf" - {"reference_value_error", &grib_accessor_class_reference_value_error}, - {""}, {""}, {""}, {""}, {""}, {""}, -#line 36 "accessor_class_list.gperf" - {"codetable_title", &grib_accessor_class_codetable_title}, -#line 94 "accessor_class_list.gperf" - {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, -#line 93 "accessor_class_list.gperf" - {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, {""}, {""}, #line 30 "accessor_class_list.gperf" {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 168 "accessor_class_list.gperf" + {"scale_values", &grib_accessor_class_scale_values}, {""}, {""}, {""}, +#line 21 "accessor_class_list.gperf" + {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, #line 31 "accessor_class_list.gperf" {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, - {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 87 "accessor_class_list.gperf" + {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, + {""}, {""}, +#line 24 "accessor_class_list.gperf" + {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, +#line 150 "accessor_class_list.gperf" + {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, + {""}, {""}, {""}, +#line 22 "accessor_class_list.gperf" + {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, + {""}, {""}, +#line 35 "accessor_class_list.gperf" + {"codetable", &grib_accessor_class_codetable}, +#line 23 "accessor_class_list.gperf" + {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, +#line 106 "accessor_class_list.gperf" + {"g2level", &grib_accessor_class_g2level}, +#line 95 "accessor_class_list.gperf" + {"g1verificationdate", &grib_accessor_class_g1verificationdate}, + {""}, {""}, {""}, +#line 40 "accessor_class_list.gperf" + {"count_file", &grib_accessor_class_count_file}, +#line 11 "accessor_class_list.gperf" + {"abstract_vector", &grib_accessor_class_abstract_vector}, + {""}, {""}, +#line 131 "accessor_class_list.gperf" + {"latlonvalues", &grib_accessor_class_latlonvalues}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 42 "accessor_class_list.gperf" + {"count_total", &grib_accessor_class_count_total}, + {""}, {""}, {""}, +#line 81 "accessor_class_list.gperf" + {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, #line 41 "accessor_class_list.gperf" {"count_missing", &grib_accessor_class_count_missing}, - {""}, {""}, {""}, {""}, {""}, {""}, -#line 151 "accessor_class_list.gperf" - {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, + {""}, {""}, {""}, {""}, +#line 36 "accessor_class_list.gperf" + {"codetable_title", &grib_accessor_class_codetable_title}, +#line 93 "accessor_class_list.gperf" + {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, +#line 92 "accessor_class_list.gperf" + {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 165 "accessor_class_list.gperf" + {"reference_value_error", &grib_accessor_class_reference_value_error}, +#line 32 "accessor_class_list.gperf" + {"check_internal_version", &grib_accessor_class_check_internal_version}, + {""}, {""}, #line 10 "accessor_class_list.gperf" {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, #line 37 "accessor_class_list.gperf" {"codetable_units", &grib_accessor_class_codetable_units}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, -#line 32 "accessor_class_list.gperf" - {"check_internal_version", &grib_accessor_class_check_internal_version}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, -#line 91 "accessor_class_list.gperf" - {"g1forecastmonth", &grib_accessor_class_g1forecastmonth}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 98 "accessor_class_list.gperf" +#line 90 "accessor_class_list.gperf" + {"g1forecastmonth", &grib_accessor_class_g1forecastmonth}, + {""}, {""}, {""}, {""}, {""}, +#line 97 "accessor_class_list.gperf" {"g2_chemical", &grib_accessor_class_g2_chemical} }; diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index de2515884..a2fd78272 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -35,7 +35,6 @@ { "data_apply_bitmap", &grib_accessor_class_data_apply_bitmap, }, { "data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic, }, { "data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap, }, -{ "data_apply_gdsnotpresent", &grib_accessor_class_data_apply_gdsnotpresent, }, { "data_ccsds_packing", &grib_accessor_class_data_ccsds_packing, }, { "data_complex_packing", &grib_accessor_class_data_complex_packing, }, { "data_dummy_field", &grib_accessor_class_data_dummy_field, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index e20db5b11..1454a7c9b 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -36,7 +36,6 @@ count_total, &grib_accessor_class_count_total data_apply_bitmap, &grib_accessor_class_data_apply_bitmap data_apply_boustrophedonic, &grib_accessor_class_data_apply_boustrophedonic data_apply_boustrophedonic_bitmap, &grib_accessor_class_data_apply_boustrophedonic_bitmap -data_apply_gdsnotpresent, &grib_accessor_class_data_apply_gdsnotpresent data_ccsds_packing, &grib_accessor_class_data_ccsds_packing data_complex_packing, &grib_accessor_class_data_complex_packing data_dummy_field, &grib_accessor_class_data_dummy_field From 26c9dc736ef8e0200f11927ef1a4138dc884cdd7 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 25 Aug 2023 18:43:28 +0100 Subject: [PATCH 261/372] Dead code removal --- fortran/grib_fortran.c | 195 ++++++++++++++---------------- fortran/grib_fortran_prototypes.h | 24 ++-- 2 files changed, 100 insertions(+), 119 deletions(-) diff --git a/fortran/grib_fortran.c b/fortran/grib_fortran.c index 5b8f6be73..751f28460 100644 --- a/fortran/grib_fortran.c +++ b/fortran/grib_fortran.c @@ -164,7 +164,7 @@ static l_grib_handle* handle_set = NULL; static l_grib_index* index_set = NULL; static l_grib_multi_handle* multi_handle_set = NULL; static l_grib_file* file_set = NULL; -static l_grib_iterator* iterator_set = NULL; +/*static l_grib_iterator* iterator_set = NULL;*/ static l_grib_keys_iterator* keys_iterator_set = NULL; static l_bufr_keys_iterator* bufr_keys_iterator_set = NULL; static grib_oarray* binary_messages = NULL; @@ -474,55 +474,6 @@ static void push_multi_handle(grib_multi_handle *h,int *gid) return; } -static int _push_iterator(grib_iterator *i) -{ - l_grib_iterator* current = iterator_set; - l_grib_iterator* previous = iterator_set; - l_grib_iterator* the_new = NULL; - int myindex = 1; - - if(!iterator_set){ - iterator_set = (l_grib_iterator*)malloc(sizeof(l_grib_iterator)); - Assert(iterator_set); - iterator_set->id = myindex; - iterator_set->i = i; - iterator_set->next = NULL; - return myindex; - } - - while(current){ - if(current->id < 0){ - current->id = -(current->id); - current->i = i; - return current->id; - } - else{ - myindex++; - previous = current; - current = current->next; - } - } - - the_new = (l_grib_iterator*)malloc(sizeof(l_grib_iterator)); - Assert(the_new); - the_new->id = myindex; - the_new->i = i; - the_new->next = current; - previous->next = the_new; - - return myindex; -} - -static int push_iterator(grib_iterator *i) -{ - int ret=0; - GRIB_MUTEX_INIT_ONCE(&once,&init); - GRIB_MUTEX_LOCK(&iterator_mutex); - ret=_push_iterator(i); - GRIB_MUTEX_UNLOCK(&iterator_mutex); - return ret; -} - static int _push_keys_iterator(grib_keys_iterator *i) { l_grib_keys_iterator* current = keys_iterator_set; @@ -700,27 +651,6 @@ static FILE* get_file(int file_id) return NULL; } -static grib_iterator* _get_iterator(int iterator_id) -{ - l_grib_iterator* current = iterator_set; - - while(current){ - if(current->id == iterator_id) return current->i; - current = current->next; - } - return NULL; -} - -static grib_iterator* get_iterator(int iterator_id) -{ - grib_iterator* i=NULL; - GRIB_MUTEX_INIT_ONCE(&once,&init); - GRIB_MUTEX_LOCK(&iterator_mutex); - i=_get_iterator(iterator_id); - GRIB_MUTEX_UNLOCK(&iterator_mutex); - return i; -} - static grib_keys_iterator* _get_keys_iterator(int keys_iterator_id) { l_grib_keys_iterator* current = keys_iterator_set; @@ -865,30 +795,6 @@ static int clear_multi_handle(int multi_handle_id) return ret; } -static int _clear_iterator(int iterator_id) -{ - l_grib_iterator* current = iterator_set; - - while(current){ - if(current->id == iterator_id){ - current->id = -(current->id); - return grib_iterator_delete(current->i); - } - current = current->next; - } - return GRIB_INVALID_ITERATOR; -} - -static int clear_iterator(int iterator_id) -{ - int ret=0; - GRIB_MUTEX_INIT_ONCE(&once,&init); - GRIB_MUTEX_LOCK(&iterator_mutex); - ret=_clear_iterator(iterator_id); - GRIB_MUTEX_UNLOCK(&iterator_mutex); - return ret; -} - static int _clear_keys_iterator(int keys_iterator_id) { l_grib_keys_iterator* current = keys_iterator_set; @@ -1143,8 +1049,96 @@ int grib_f_multi_support_off(){ return grib_f_multi_support_off_(); } - /*****************************************************************************/ +#ifdef FORTRAN_GEOITERATOR_SUPPORT +static int _push_iterator(grib_iterator *i) +{ + l_grib_iterator* current = iterator_set; + l_grib_iterator* previous = iterator_set; + l_grib_iterator* the_new = NULL; + int myindex = 1; + + if(!iterator_set){ + iterator_set = (l_grib_iterator*)malloc(sizeof(l_grib_iterator)); + Assert(iterator_set); + iterator_set->id = myindex; + iterator_set->i = i; + iterator_set->next = NULL; + return myindex; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->i = i; + return current->id; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + + the_new = (l_grib_iterator*)malloc(sizeof(l_grib_iterator)); + Assert(the_new); + the_new->id = myindex; + the_new->i = i; + the_new->next = current; + previous->next = the_new; + + return myindex; +} +static int push_iterator(grib_iterator *i) +{ + int ret=0; + GRIB_MUTEX_INIT_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&iterator_mutex); + ret=_push_iterator(i); + GRIB_MUTEX_UNLOCK(&iterator_mutex); + return ret; +} +static grib_iterator* _get_iterator(int iterator_id) +{ + l_grib_iterator* current = iterator_set; + + while(current){ + if(current->id == iterator_id) return current->i; + current = current->next; + } + return NULL; +} +static grib_iterator* get_iterator(int iterator_id) +{ + grib_iterator* i=NULL; + GRIB_MUTEX_INIT_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&iterator_mutex); + i=_get_iterator(iterator_id); + GRIB_MUTEX_UNLOCK(&iterator_mutex); + return i; +} +static int _clear_iterator(int iterator_id) +{ + l_grib_iterator* current = iterator_set; + + while(current){ + if(current->id == iterator_id){ + current->id = -(current->id); + return grib_iterator_delete(current->i); + } + current = current->next; + } + return GRIB_INVALID_ITERATOR; +} +static int clear_iterator(int iterator_id) +{ + int ret=0; + GRIB_MUTEX_INIT_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&iterator_mutex); + ret=_clear_iterator(iterator_id); + GRIB_MUTEX_UNLOCK(&iterator_mutex); + return ret; +} static int _grib_f_iterator_new_(int* gid,int* iterid,int* mode) { int err=0; grib_handle* h; @@ -1176,32 +1170,29 @@ int grib_f_iterator_new__(int* gid,int* iterid,int* mode) { int grib_f_iterator_new(int* gid,int* iterid,int* mode) { return grib_f_iterator_new_(gid,iterid,mode); } - /*****************************************************************************/ int grib_f_iterator_next_(int* iterid,double* lat,double* lon,double* value) { grib_iterator* iter=get_iterator(*iterid); if (!iter) return GRIB_INVALID_ITERATOR; return grib_iterator_next(iter,lat,lon,value); } - int grib_f_iterator_next__(int* iterid,double* lat,double* lon,double* value) { return grib_f_iterator_next_(iterid,lat,lon,value); } int grib_f_iterator_next(int* iterid,double* lat,double* lon,double* value) { return grib_f_iterator_next_(iterid,lat,lon,value); } - /*****************************************************************************/ int grib_f_iterator_delete_(int* iterid) { return clear_iterator(*iterid); } - int grib_f_iterator_delete__(int* iterid) { return grib_f_iterator_delete_(iterid); } int grib_f_iterator_delete(int* iterid) { return grib_f_iterator_delete_(iterid); } +#endif /*FORTRAN_GEOITERATOR_SUPPORT*/ /*****************************************************************************/ static int _grib_f_keys_iterator_new_(int* gid,int* iterid,char* name_space,int len) { @@ -1230,7 +1221,6 @@ int grib_f_keys_iterator_new_(int* gid,int* iterid,char* name_space,int len) { GRIB_MUTEX_UNLOCK(&keys_iterator_mutex) return ret; } - int grib_f_keys_iterator_new__(int* gid,int* iterid,char* name_space,int len) { return grib_f_keys_iterator_new_(gid,iterid,name_space,len); } @@ -1405,7 +1395,7 @@ int grib_f_keys_iterator_rewind(int* kiter) { return grib_f_keys_iterator_rewind_(kiter); } -/*BUFR keys iterator*/ +/* BUFR keys iterator */ /*****************************************************************************/ static int _codes_f_bufr_keys_iterator_new_(int* gid,int* iterid) { int err=0; @@ -1503,7 +1493,6 @@ int codes_f_bufr_keys_iterator_delete(int* iterid) { return codes_f_bufr_keys_iterator_delete_(iterid); } - /*****************************************************************************/ int grib_f_new_from_message_(int* gid, void* buffer , size_t* bufsize){ grib_handle *h = NULL; diff --git a/fortran/grib_fortran_prototypes.h b/fortran/grib_fortran_prototypes.h index 32920c521..f0267cc79 100644 --- a/fortran/grib_fortran_prototypes.h +++ b/fortran/grib_fortran_prototypes.h @@ -40,16 +40,8 @@ int grib_f_multi_support_on(void); int grib_f_multi_support_off_(void); int grib_f_multi_support_off__(void); int grib_f_multi_support_off(void); -int grib_f_iterator_new_(int *gid, int *iterid, int *mode); -int grib_f_iterator_new__(int *gid, int *iterid, int *mode); -int grib_f_iterator_new(int *gid, int *iterid, int *mode); -int grib_f_iterator_next_(int *iterid, double *lat, double *lon, double *value); -int grib_f_iterator_next__(int *iterid, double *lat, double *lon, double *value); -int grib_f_iterator_next(int *iterid, double *lat, double *lon, double *value); -int grib_f_iterator_delete_(int *iterid); -int grib_f_iterator_delete__(int *iterid); -int grib_f_iterator_delete(int *iterid); +/* GRIB keys iterator */ int grib_f_keys_iterator_new_(int *gid, int *iterid, char *name_space, int len); int grib_f_keys_iterator_new__(int *gid, int *iterid, char *name_space, int len); int grib_f_keys_iterator_new(int *gid, int *iterid, char *name_space, int len); @@ -59,8 +51,14 @@ int grib_f_keys_iterator_next(int *iterid); int grib_f_keys_iterator_delete_(int *iterid); int grib_f_keys_iterator_delete__(int *iterid); int grib_f_keys_iterator_delete(int *iterid); +int grib_f_keys_iterator_get_name_(int *iterid, char *name, int len); +int grib_f_keys_iterator_get_name__(int *kiter, char *name, int len); +int grib_f_keys_iterator_get_name(int *kiter, char *name, int len); +int grib_f_keys_iterator_rewind_(int *kiter); +int grib_f_keys_iterator_rewind__(int *kiter); +int grib_f_keys_iterator_rewind(int *kiter); -/*BUFR keys iterator*/ +/* BUFR keys iterator */ int codes_f_bufr_keys_iterator_new_(int *gid, int *iterid); int codes_f_bufr_keys_iterator_new__(int *gid, int *iterid); int codes_f_bufr_keys_iterator_new(int *gid, int *iterid); @@ -101,12 +99,6 @@ int grib_f_skip_read_only(int *iterid); int grib_f_skip_function_(int *iterid); int grib_f_skip_function__(int *iterid); int grib_f_skip_function(int *iterid); -int grib_f_keys_iterator_get_name_(int *iterid, char *name, int len); -int grib_f_keys_iterator_get_name__(int *kiter, char *name, int len); -int grib_f_keys_iterator_get_name(int *kiter, char *name, int len); -int grib_f_keys_iterator_rewind_(int *kiter); -int grib_f_keys_iterator_rewind__(int *kiter); -int grib_f_keys_iterator_rewind(int *kiter); int grib_f_new_from_message_(int *gid, void *buffer, size_t *bufsize); int grib_f_new_from_message__(int *gid, void *buffer, size_t *bufsize); int grib_f_new_from_message(int *gid, void *buffer, size_t *bufsize); From c87a7496d6e164cf3c339241756571bb3435cfaa Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 25 Aug 2023 18:44:07 +0100 Subject: [PATCH 262/372] Examples: cleanup --- examples/F90/grib_multi.f90 | 12 +++++++----- examples/F90/grib_multi.sh | 8 +++++--- examples/F90/grib_precision.f90 | 2 +- examples/F90/grib_set_keys.f90 | 2 +- examples/F90/multi_fortran.f90 | 16 ++++++++++------ examples/F90/precision_fortran.f90 | 2 +- examples/F90/set_fortran.f90 | 2 +- 7 files changed, 26 insertions(+), 18 deletions(-) diff --git a/examples/F90/grib_multi.f90 b/examples/F90/grib_multi.f90 index 96b168391..c18b005fe 100644 --- a/examples/F90/grib_multi.f90 +++ b/examples/F90/grib_multi.f90 @@ -16,27 +16,29 @@ program multi use eccodes implicit none - integer :: iret + integer :: iret, counter integer(kind=4) :: step integer :: ifile, igrib call codes_open_file(ifile, '../../data/multi_created.grib2', 'r') - ! turn on support for multi-field messages */ - call codes_grib_multi_support_on() + ! Turn off support for multi-field messages + call codes_grib_multi_support_off() - ! turn off support for multi-field messages */ - !call codes_grib_multi_support_off() + ! Turn on support for multi-field messages + call codes_grib_multi_support_on() ! Loop on all the messages in a file write (*, *) 'step' do while (.true.) call codes_grib_new_from_file(ifile, igrib, iret) if (iret == CODES_END_OF_FILE) exit + counter = counter + 1 call codes_get(igrib, 'step', step) write (*, '(i3)') step end do call codes_close_file(ifile) + !write(*,*) 'Message count =', counter end program multi diff --git a/examples/F90/grib_multi.sh b/examples/F90/grib_multi.sh index b90c94b5a..0ba6ed54b 100755 --- a/examples/F90/grib_multi.sh +++ b/examples/F90/grib_multi.sh @@ -9,6 +9,8 @@ . ./include.ctest.sh -${examples_dir}/eccodes_f_grib_multi > multi.out -diff multi.out ${data_dir}/multi.ok -rm -f multi.out +temp='temp.eccodes_f_grib_multi.txt' + +${examples_dir}/eccodes_f_grib_multi > $temp +diff $temp ${data_dir}/multi.ok +rm -f $temp diff --git a/examples/F90/grib_precision.f90 b/examples/F90/grib_precision.f90 index 93ee42519..165b805fd 100644 --- a/examples/F90/grib_precision.f90 +++ b/examples/F90/grib_precision.f90 @@ -41,7 +41,7 @@ program precision allocate (values1(size1), stat=iret) allocate (values2(size1), stat=iret) - ! get data values before changing the packing parameters*/ + ! get data values before changing the packing parameters call codes_get(igrib, "values", values1) ! setting decimal precision=2 means that 2 decimal digits diff --git a/examples/F90/grib_set_keys.f90 b/examples/F90/grib_set_keys.f90 index bbcd5eabe..dcc4aceee 100644 --- a/examples/F90/grib_set_keys.f90 +++ b/examples/F90/grib_set_keys.f90 @@ -30,7 +30,7 @@ program set call codes_set(igrib, 'dataDate', date1) call codes_set(igrib, 'type', marsType) - ! set centre as a integer */ + ! set centre as a integer call codes_set(igrib, 'centre', centre) ! check if it is correct in the actual GRIB message diff --git a/examples/F90/multi_fortran.f90 b/examples/F90/multi_fortran.f90 index 41515fec9..423fb1fb1 100644 --- a/examples/F90/multi_fortran.f90 +++ b/examples/F90/multi_fortran.f90 @@ -17,23 +17,25 @@ program multi use eccodes implicit none - integer :: iret + integer :: iret integer(kind=4) :: parameterCategory, parameterNumber, discipline - integer :: ifile, igrib + integer :: ifile, igrib, counter call codes_open_file(ifile, '../../data/multi.grib2', 'r') - ! Turn on support for multi-field messages */ - call codes_grib_multi_support_on() + ! Turn off support for multi-field messages + call codes_grib_multi_support_off() - ! Turn off support for multi-field messages */ - !call codes_grib_multi_support_off() + ! Turn on support for multi-field messages + call codes_grib_multi_support_on() call codes_grib_new_from_file(ifile, igrib) ! Loop on all the messages in a file. do while (igrib .ne. -1) + counter = counter + 1 + ! get as a integer*4 call codes_get(igrib, 'discipline', discipline) write (*, *) 'discipline=', discipline @@ -63,4 +65,6 @@ program multi end do call codes_close_file(ifile) + write(*,*) 'Message count =',counter + end program multi diff --git a/examples/F90/precision_fortran.f90 b/examples/F90/precision_fortran.f90 index 1a66f7cd8..33429c481 100644 --- a/examples/F90/precision_fortran.f90 +++ b/examples/F90/precision_fortran.f90 @@ -40,7 +40,7 @@ program precision allocate (values1(size), stat=iret) allocate (values2(size), stat=iret) - ! get data values before changing the packing parameters*/ + ! get data values before changing the packing parameters call codes_get(igrib, "values", values1) ! setting decimal precision=2 means that 2 decimal digits diff --git a/examples/F90/set_fortran.f90 b/examples/F90/set_fortran.f90 index 7e3f4ad2f..582677b5b 100644 --- a/examples/F90/set_fortran.f90 +++ b/examples/F90/set_fortran.f90 @@ -33,7 +33,7 @@ program set ! igrib is the grib id to be used in subsequent calls call codes_grib_new_from_file(infile, igrib) - ! set centre as a long */ + ! set centre as a long centre = 80 call codes_set(igrib, 'centre', centre) From 354b25566d71dc5a07f77c1a87546d608997b991 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 25 Aug 2023 19:11:07 +0100 Subject: [PATCH 263/372] Dead code removal --- src/eccodes_prototypes.h | 1 - src/grib_parse_utils.cc | 36 ++++++++++++++++-------------------- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index a1337895f..6465e27ae 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -1115,7 +1115,6 @@ int grib_yyerror(const char* msg); void grib_parser_include(const char* included_fname); grib_concept_value* grib_parse_concept_file(grib_context* gc, const char* filename); grib_hash_array_value* grib_parse_hash_array_file(grib_context* gc, const char* filename); -grib_rule* grib_parse_rules_file(grib_context* gc, const char* filename); grib_action* grib_parse_file(grib_context* gc, const char* filename); int grib_type_to_int(char id); diff --git a/src/grib_parse_utils.cc b/src/grib_parse_utils.cc index bbebf7df6..db8897930 100644 --- a/src/grib_parse_utils.cc +++ b/src/grib_parse_utils.cc @@ -804,26 +804,22 @@ grib_hash_array_value* grib_parse_hash_array_file(grib_context* gc, const char* } } -grib_rule* grib_parse_rules_file(grib_context* gc, const char* filename) -{ - if (!gc) - gc = grib_context_get_default(); - - GRIB_MUTEX_INIT_ONCE(&once, &init); - GRIB_MUTEX_LOCK(&mutex_rules); - - gc = gc ? gc : grib_context_get_default(); - grib_parser_context = gc; - - if (parse(gc, filename) == 0) { - GRIB_MUTEX_UNLOCK(&mutex_rules); - return grib_parser_rules; - } - else { - GRIB_MUTEX_UNLOCK(&mutex_rules); - return NULL; - } -} +// grib_rule* grib_parse_rules_file(grib_context* gc, const char* filename) +// { +// if (!gc) gc = grib_context_get_default(); +// GRIB_MUTEX_INIT_ONCE(&once, &init); +// GRIB_MUTEX_LOCK(&mutex_rules); +// gc = gc ? gc : grib_context_get_default(); +// grib_parser_context = gc; +// if (parse(gc, filename) == 0) { +// GRIB_MUTEX_UNLOCK(&mutex_rules); +// return grib_parser_rules; +// } +// else { +// GRIB_MUTEX_UNLOCK(&mutex_rules); +// return NULL; +// } +// } grib_action* grib_parse_file(grib_context* gc, const char* filename) { From 82a87be436ab53fe0b7d41f5abce55475ddacd79 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 25 Aug 2023 19:15:45 +0100 Subject: [PATCH 264/372] Testing: rules --- tests/grib_filter.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/grib_filter.sh b/tests/grib_filter.sh index eb30597c2..aa86fdd55 100755 --- a/tests/grib_filter.sh +++ b/tests/grib_filter.sh @@ -339,10 +339,19 @@ cat >$tempFilt < $tempOut -cat $tempOut grep -q "case 1" $tempOut grep -q "case 2" $tempOut +# Rules +cat >$tempFilt < $tempOut +cat $tempOut + # Clean up rm -f $tempGrib $tempFilt $tempOut $tempRef From d6ae6cfcf0305d6202e73ab2be6aa7a34ff2c457 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 26 Aug 2023 13:52:06 +0100 Subject: [PATCH 265/372] Testing: Increase coverage --- tests/grib_iterator.sh | 6 ++++++ tests/grib_mars_keys1.sh | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/tests/grib_iterator.sh b/tests/grib_iterator.sh index 1c63056cb..4b8eec5f7 100755 --- a/tests/grib_iterator.sh +++ b/tests/grib_iterator.sh @@ -65,5 +65,11 @@ set +e grep -q "Grid description is wrong or inconsistent" $tempText +${tools_dir}/grib_ls -s Ni=missing -j -p latLonValues $data_dir/sample.grib2 > $tempText 2>&1 +cat $tempText +grep -q "Key Ni cannot be 'missing' for a regular grid" $tempText +grep -q "latlonvalues: Unable to create iterator" $tempText + + # Clean up rm -f $tempText $tempGrib diff --git a/tests/grib_mars_keys1.sh b/tests/grib_mars_keys1.sh index b1be74ea9..d13d880fd 100755 --- a/tests/grib_mars_keys1.sh +++ b/tests/grib_mars_keys1.sh @@ -21,6 +21,16 @@ types_table=$ECCODES_DEFINITION_PATH/mars/type.table classes_table=$ECCODES_DEFINITION_PATH/mars/class.table streams_table=$ECCODES_DEFINITION_PATH/mars/stream.table +# Set as integers +${tools_dir}/grib_set -s mars.type=11 $grib2_sample $tempGrib +grib_check_key_equals $tempGrib type pf + +${tools_dir}/grib_set -s mars.class=11 $grib2_sample $tempGrib +grib_check_key_equals $tempGrib class en + +${tools_dir}/grib_set -s mars.stream=1033 $grib2_sample $tempGrib +grib_check_key_equals $tempGrib stream enfh + # Check basic mars namespace keys # -------------------------------- ${tools_dir}/grib_ls -jm $grib2_sample > $tempOut @@ -103,5 +113,5 @@ for t in $mars_types; do grib_check_key_equals $tempGrib "mars.type:i" $t done - +# Clean up rm -f $tempGrib $tempOut $tempRef From 4348d1c641e80bb6a67e536948f236c9ea85f17f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 26 Aug 2023 15:17:33 +0100 Subject: [PATCH 266/372] Testing: Increase coverage --- src/grib_io.cc | 20 ++++++++++---------- tests/CMakeLists.txt | 1 + tests/taf.sh | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 10 deletions(-) create mode 100755 tests/taf.sh diff --git a/src/grib_io.cc b/src/grib_io.cc index 760b7245d..ce8d2aa65 100644 --- a/src/grib_io.cc +++ b/src/grib_io.cc @@ -1008,7 +1008,7 @@ static int read_any_taf(reader* r) int err = 0; unsigned char* buffer = NULL; unsigned long magic = 0; - unsigned long start = 0x54414620; + unsigned long start = 0x54414620; // 4 chars: TAF plus a space unsigned char tmp[1000] = {0,}; /* Should be enough */ size_t message_size = 0; size_t already_read = 0; @@ -1020,10 +1020,10 @@ static int read_any_taf(reader* r) magic &= 0xffffffff; if (magic == start) { - tmp[i++] = 0x54; - tmp[i++] = 0x41; - tmp[i++] = 0x46; - tmp[i++] = 0x20; + tmp[i++] = 0x54; //T + tmp[i++] = 0x41; //A + tmp[i++] = 0x46; //F + tmp[i++] = 0x20; //space r->offset = r->tell(r->read_data) - 4; @@ -1056,7 +1056,7 @@ static int read_any_metar(reader* r) int err = 0; unsigned char* buffer = NULL; unsigned long magic = 0; - unsigned long start = 0x4d455441; + unsigned long start = 0x4d455441; // 4 chars: META unsigned char tmp[32] = {0,}; /* Should be enough */ size_t message_size = 0; size_t already_read = 0; @@ -1071,10 +1071,10 @@ static int read_any_metar(reader* r) if (r->read(r->read_data, &c, 1, &err) != 1 || err != 0) break; if (c == 'R') { - tmp[i++] = 0x4d; - tmp[i++] = 0x45; - tmp[i++] = 0x54; - tmp[i++] = 0x41; + tmp[i++] = 0x4d; // M + tmp[i++] = 0x45; // E + tmp[i++] = 0x54; // T + tmp[i++] = 0x41; // A tmp[i++] = 'R'; r->offset = r->tell(r->read_data) - 4; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index dfa32c9dc..2e478eefc 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -238,6 +238,7 @@ if( HAVE_BUILD_TOOLS ) gts_count gts_compare wrap + taf pseudo_diag metar_ls metar_get diff --git a/tests/taf.sh b/tests/taf.sh new file mode 100755 index 000000000..adc758361 --- /dev/null +++ b/tests/taf.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Tests for TAF (Terminal Aerodrome Forecast) + +. ./include.ctest.sh + +label="taf_test" +tempTaf=temp.$label.taf +tempOut=temp.$label.out +tempTxt=temp.$label.txt +tempRef=temp.$label.ref + +cat >$tempTaf< Date: Sat, 26 Aug 2023 19:33:15 +0100 Subject: [PATCH 267/372] Testing: Increase coverage --- tests/codes_split_file.sh | 14 +++++++++++++- tests/grib_dump.sh | 10 ++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/tests/codes_split_file.sh b/tests/codes_split_file.sh index 86077999a..f21b5ae92 100755 --- a/tests/codes_split_file.sh +++ b/tests/codes_split_file.sh @@ -24,7 +24,7 @@ cd $temp_dir # ----------------------------- cp ${data_dir}/mixed.grib ./ input=mixed.grib -${tools_dir}/codes_split_file 3 $input +${tools_dir}/codes_split_file -v 3 $input # There should now be 3 new files. Make sure they are valid ${tools_dir}/grib_ls mixed.grib_001 ${tools_dir}/grib_ls mixed.grib_002 @@ -74,6 +74,18 @@ status=$? set -e [ $status -eq 1 ] +set +e +${tools_dir}/codes_split_file 9 /dev/null +status=$? +set -e +[ $status -eq 1 ] + +set +e +${tools_dir}/codes_split_file 0 $input +status=$? +set -e +[ $status -eq 1 ] + # Clean up cd $test_dir diff --git a/tests/grib_dump.sh b/tests/grib_dump.sh index 7b45501db..7dabcfaf4 100755 --- a/tests/grib_dump.sh +++ b/tests/grib_dump.sh @@ -98,4 +98,14 @@ if [ $HAVE_JPEG -eq 0 ]; then set -e fi +# Use -s option +file=$data_dir/sample.grib2 +${tools_dir}/grib_dump -s year=1909 $file > $temp 2>&1 +grep -q "dataDate = 19090206" $temp + +# Skip handle +${tools_dir}/grib_dump -w count=4 $file > $temp 2>&1 + + +# Clean up rm -f $temp From fd2a0fdea0499848963e2dbec100beac4c378f64 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 26 Aug 2023 20:22:39 +0100 Subject: [PATCH 268/372] Fix broken Windows build --- tests/codes_split_file.sh | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/codes_split_file.sh b/tests/codes_split_file.sh index f21b5ae92..c634c8a6c 100755 --- a/tests/codes_split_file.sh +++ b/tests/codes_split_file.sh @@ -74,11 +74,13 @@ status=$? set -e [ $status -eq 1 ] -set +e -${tools_dir}/codes_split_file 9 /dev/null -status=$? -set -e -[ $status -eq 1 ] +if [ $ECCODES_ON_WINDOWS -eq 0 ]; then + set +e + ${tools_dir}/codes_split_file 9 /dev/null + status=$? + set -e + [ $status -eq 1 ] +fi set +e ${tools_dir}/codes_split_file 0 $input @@ -86,7 +88,6 @@ status=$? set -e [ $status -eq 1 ] - # Clean up cd $test_dir rm -fr $temp_dir From fd254f1564ad367a09dd2c5c84122ee01109f8de Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 26 Aug 2023 20:22:51 +0100 Subject: [PATCH 269/372] Dead code removal --- tools/grib_get_data.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tools/grib_get_data.cc b/tools/grib_get_data.cc index 5682e3875..83b87421d 100644 --- a/tools/grib_get_data.cc +++ b/tools/grib_get_data.cc @@ -15,7 +15,6 @@ static grib_values* get_key_values(grib_runtime_options* options, grib_handle* h grib_option grib_options[] = { /* {id, args, help}, on, command_line, value */ - { "q", 0, 0, 1, 0, 0 }, { "S", 0, 0, 1, 0, 0 }, { "M", 0, 0, 0, 1, 0 }, { "m:", "missingValue", @@ -183,8 +182,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) exit(1); } if (size != (size_t)numberOfPoints) { - if (!grib_options_on("q")) - fprintf(stderr, "ERROR: Wrong number of points %ld\n", numberOfPoints); + fprintf(stderr, "ERROR: Wrong number of points %ld\n", numberOfPoints); if (grib_options_on("f")) exit(1); } From d96bf925e0ac3591cdb1b38c8d046851f241be18 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 27 Aug 2023 11:54:05 +0100 Subject: [PATCH 270/372] Testing --- tests/codes_split_file.sh | 8 -------- tests/grib_ls.sh | 8 ++++++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/codes_split_file.sh b/tests/codes_split_file.sh index c634c8a6c..641739a55 100755 --- a/tests/codes_split_file.sh +++ b/tests/codes_split_file.sh @@ -74,14 +74,6 @@ status=$? set -e [ $status -eq 1 ] -if [ $ECCODES_ON_WINDOWS -eq 0 ]; then - set +e - ${tools_dir}/codes_split_file 9 /dev/null - status=$? - set -e - [ $status -eq 1 ] -fi - set +e ${tools_dir}/codes_split_file 0 $input status=$? diff --git a/tests/grib_ls.sh b/tests/grib_ls.sh index 3329ae48c..f702c0747 100755 --- a/tests/grib_ls.sh +++ b/tests/grib_ls.sh @@ -115,6 +115,14 @@ echo "ECC-278: grib_ls -n namespace..." ${tools_dir}/grib_ls -n geography $ECCODES_SAMPLES_PATH/reduced_ll_sfc_grib2.tmpl ${tools_dir}/grib_ls -n data $sample_g1 +set +e +${tools_dir}/grib_ls -n nosuchnamespace $sample_g1 > $tempText 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "does not contain any key" $tempText + + # Angle subdivisions grib_check_key_equals $sample_g1 angleSubdivisions 1000 grib_check_key_equals $sample_g2 angleSubdivisions 1000000 From 9ec652d21c1552ee6990f92d00d2890eaa0727f6 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 27 Aug 2023 13:31:21 +0100 Subject: [PATCH 271/372] Testing: JPEG encoding, error cases --- definitions/grib2/template.5.40.def | 6 ++-- ...ib_accessor_class_data_jpeg2000_packing.cc | 36 ++++++++++++------- tests/grib_jpeg.sh | 22 ++++++++++++ tools/codes_split_file.cc | 23 ++++-------- 4 files changed, 55 insertions(+), 32 deletions(-) diff --git a/definitions/grib2/template.5.40.def b/definitions/grib2/template.5.40.def index a6bf95337..3b2f33ef0 100644 --- a/definitions/grib2/template.5.40.def +++ b/definitions/grib2/template.5.40.def @@ -5,8 +5,8 @@ include "grib2/template.5.packing.def"; include "grib2/template.5.original_values.def"; -codetable[1] typeOfCompressionUsed ('5.40.table',masterDir,localDir) ; +codetable[1] typeOfCompressionUsed ('5.40.table',masterDir,localDir) ; -# Octets 23 Target compression ratio, M:1 (with respect to the bit-depth specified in octet 20), -# when octet 22 indicates Lossy Compression. Otherwise, set to missing. +# Target compression ratio, M:1 (with respect to the bit-depth specified in octet 20), +# when typeOfCompressionUsed indicates Lossy Compression. Otherwise, set to missing. unsigned[1] targetCompressionRatio = 255; diff --git a/src/grib_accessor_class_data_jpeg2000_packing.cc b/src/grib_accessor_class_data_jpeg2000_packing.cc index 7349def3e..66d6f6767 100644 --- a/src/grib_accessor_class_data_jpeg2000_packing.cc +++ b/src/grib_accessor_class_data_jpeg2000_packing.cc @@ -178,7 +178,7 @@ static void init(grib_accessor* a, const long v, grib_arguments* args) } } - if (a->context->debug == -1) { + if (a->context->debug) { switch (self->jpeg_lib) { case 0: fprintf(stderr, "ECCODES DEBUG jpeg2000_packing: jpeg_lib not set!\n"); @@ -347,6 +347,7 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) double units_factor = 1.0; double units_bias = 0.0; double* val = (double*)cval; + const char* cclass_name = a->cclass->name; self->dirty = 1; @@ -387,8 +388,7 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) case GRIB_SUCCESS: break; default: - grib_context_log(a->context, GRIB_LOG_ERROR, - "grib_accessor_class_data_jpeg2000_packing pack_double: unable to compute packing parameters"); + grib_context_log(a->context, GRIB_LOG_ERROR, "%s %s: Unable to compute packing parameters", cclass_name, __func__); return ret; } @@ -453,9 +453,8 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) if (width * height != *len) { grib_context_log(a->context, GRIB_LOG_ERROR, - "grib_accessor_class_data_jpeg2000_packing pack_double: width=%ld height=%ld len=%ld." - " width*height should equal len!", - (long)width, (long)height, (long)*len); + "%s %s: width=%ld height=%ld len=%zu. width*height should equal len!", + cclass_name, __func__, width, height, *len); /* ECC-802: We cannot bomb out here as the user might have changed Ni/Nj and the packingType * but has not yet submitted the new data values. So len will be out of sync! * So issue a warning but proceed. @@ -466,12 +465,23 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) } switch (type_of_compression_used) { - case 0: - Assert(target_compression_ratio == 255); + case 0: // Lossless + if (target_compression_ratio != 255) { + grib_context_log(a->context, GRIB_LOG_ERROR, + "%s %s: When %s=0 (Lossless), %s must be set to 255", + cclass_name, __func__, self->type_of_compression_used, self->target_compression_ratio); + return GRIB_ENCODING_ERROR; + } helper.compression = 0; break; - case 1: + case 1: // Lossy + if (target_compression_ratio == 255 || target_compression_ratio == 0) { + grib_context_log(a->context, GRIB_LOG_ERROR, + "%s %s: When %s=1 (Lossy), %s must be specified", + cclass_name, __func__, self->type_of_compression_used, self->target_compression_ratio); + return GRIB_ENCODING_ERROR; + } Assert(target_compression_ratio != 255); Assert(target_compression_ratio != 0); helper.compression = target_compression_ratio; @@ -490,8 +500,8 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) if (bits_per_value == 0) { const long bits_per_value_adjusted = 1; grib_context_log(a->context, GRIB_LOG_DEBUG, - "grib_accessor_class_data_jpeg2000_packing(%s) : bits per value was zero, changed to %d", - self->jpeg_lib == OPENJPEG_LIB ? "openjpeg" : "jasper", bits_per_value_adjusted); + "%s (%s) : bits per value was zero, changed to %ld", + cclass_name, self->jpeg_lib == OPENJPEG_LIB ? "openjpeg" : "jasper", bits_per_value_adjusted); bits_per_value = bits_per_value_adjusted; } helper.bits_per_value = bits_per_value; @@ -517,8 +527,8 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) if (helper.jpeg_length > simple_packing_size) grib_context_log(a->context, GRIB_LOG_WARNING, - "grib_accessor_data_jpeg2000_packing(%s) : jpeg data (%ld) larger than input data (%ld)", - self->jpeg_lib == OPENJPEG_LIB ? "openjpeg" : "jasper", + "%s (%s) : jpeg data (%ld) larger than input data (%ld)", + cclass_name, self->jpeg_lib == OPENJPEG_LIB ? "openjpeg" : "jasper", helper.jpeg_length, simple_packing_size); Assert(helper.jpeg_length <= helper.buffer_size); diff --git a/tests/grib_jpeg.sh b/tests/grib_jpeg.sh index e6c2485da..56a6b86bf 100755 --- a/tests/grib_jpeg.sh +++ b/tests/grib_jpeg.sh @@ -129,6 +129,28 @@ ${tools_dir}/grib_set -d1 ${data_dir}/jpeg.grib2 $tempGrib grib_check_key_equals $tempGrib isConstant 1 ${tools_dir}/grib_ls -n statistics $tempGrib +ECCODES_DEBUG=-1 ${tools_dir}/grib_ls -n statistics $data_dir/jpeg.grib2 +${tools_dir}/grib_set -r -s unitsBias=2,unitsFactor=3 $data_dir/jpeg.grib2 $tempGrib + +# typeOfCompressionUsed and targetCompressionRatio +set +e +${tools_dir}/grib_set -r -s typeOfCompressionUsed=1,targetCompressionRatio=255 $data_dir/jpeg.grib2 $tempGrib +status=$? +set -e +[ $status -ne 0 ] + +set +e +${tools_dir}/grib_set -r -s typeOfCompressionUsed=1,targetCompressionRatio=0 $data_dir/jpeg.grib2 $tempGrib +status=$? +set -e +[ $status -ne 0 ] + +set +e +${tools_dir}/grib_set -r -s typeOfCompressionUsed=0,targetCompressionRatio=1 $data_dir/jpeg.grib2 $tempGrib +status=$? +set -e +[ $status -ne 0 ] + # Clean up rm -f $tempFilt $tempGrib diff --git a/tools/codes_split_file.cc b/tools/codes_split_file.cc index 8896053c1..384904602 100644 --- a/tools/codes_split_file.cc +++ b/tools/codes_split_file.cc @@ -32,21 +32,15 @@ static void usage(const char* prog) static int split_file(FILE* in, const char* filename, const int nchunks, unsigned long* count) { void* mesg = NULL; - FILE* out; size_t size = 0, read_size = 0, insize = 0, chunk_size, msg_size = 0, num_msg = 0; - size_t ofilenameMaxLen = 0; off_t offset = 0; - int err = GRIB_SUCCESS; - int i; - char* ofilename; + int err = GRIB_SUCCESS, i = 0; grib_context* c = grib_context_get_default(); - - if (!in) - return 1; + assert(in); /* name of output file */ - ofilenameMaxLen = strlen(filename) + 10; - ofilename = (char*)calloc(1, ofilenameMaxLen); + size_t ofilenameMaxLen = strlen(filename) + 10; + char* ofilename = (char*)calloc(1, ofilenameMaxLen); fseeko(in, 0, SEEK_END); insize = ftello(in); @@ -61,7 +55,7 @@ static int split_file(FILE* in, const char* filename, const int nchunks, unsigne i = 1; snprintf(ofilename, ofilenameMaxLen, OUTPUT_FILENAME_FORMAT, filename, i); - out = fopen(ofilename, "w"); + FILE* out = fopen(ofilename, "w"); if (!out) { perror(ofilename); free(ofilename); @@ -71,7 +65,6 @@ static int split_file(FILE* in, const char* filename, const int nchunks, unsigne while (err != GRIB_END_OF_FILE) { mesg = wmo_read_any_from_file_malloc(in, 0, &size, &offset, &err); num_msg++; - /*printf("=1=%d\t%d\t%d\n",*count,size,insize);*/ if (mesg != NULL && err == 0) { if (fwrite(mesg, 1, size, out) != size) { perror(ofilename); @@ -115,8 +108,6 @@ static int split_file(FILE* in, const char* filename, const int nchunks, unsigne int main(int argc, char* argv[]) { - FILE* infh = NULL; - char* filename; int i, status = 0; int err = 0, nchunks = 0; unsigned long count = 0; @@ -140,12 +131,12 @@ int main(int argc, char* argv[]) } i++; - filename = argv[i]; + const char* filename = argv[i]; if (path_is_directory(filename)) { fprintf(stderr, "ERROR: %s: Is a directory\n", filename); return 1; } - infh = fopen(filename, "rb"); + FILE* infh = fopen(filename, "rb"); if (!infh) { perror(filename); return 1; From a9a4b2e749555841897839b1c8aec517a275cfd6 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 27 Aug 2023 13:37:24 +0100 Subject: [PATCH 272/372] Testing: JPEG encoding dump option --- tests/grib_jpeg.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/grib_jpeg.sh b/tests/grib_jpeg.sh index 56a6b86bf..dfe8a8f61 100755 --- a/tests/grib_jpeg.sh +++ b/tests/grib_jpeg.sh @@ -151,6 +151,10 @@ status=$? set -e [ $status -ne 0 ] +tempDump=temp.$label.jpg +ECCODES_GRIB_DUMP_JPG_FILE=$tempDump ${tools_dir}/grib_copy -r $data_dir/jpeg.grib2 $tempGrib +[ -f $tempDump ] +rm -f $tempDump # Clean up rm -f $tempFilt $tempGrib From 59dfea6dfa1d77ab2707fc6cb8c37ebb8da9463a Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 27 Aug 2023 13:51:02 +0100 Subject: [PATCH 273/372] Dead code removal: int16 little endian --- src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 1 - ...grib_accessor_class_int16_little_endian.cc | 0 src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - src/grib_accessor_classes_hash.cc | 210 +++++++++--------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 8 files changed, 103 insertions(+), 114 deletions(-) rename src/{ => deprecated}/grib_accessor_class_int16_little_endian.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a50f3d45c..d4f8576ea 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -357,7 +357,6 @@ list( APPEND eccodes_src_files grib_yacc.h md5.h md5.cc - grib_accessor_class_int16_little_endian.cc grib_accessor_class_int64_little_endian.cc grib_accessor_class_uint16.cc grib_accessor_class_uint16_little_endian.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index 56fde1eed..85cf1bb74 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -89,7 +89,6 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |---grib_accessor_class_hash_array |---grib_accessor_class_headers_only |---grib_accessor_class_ifs_param - |---grib_accessor_class_int16_little_endian |---grib_accessor_class_int64_little_endian |---grib_accessor_class_iterator |---grib_accessor_class_label diff --git a/src/grib_accessor_class_int16_little_endian.cc b/src/deprecated/grib_accessor_class_int16_little_endian.cc similarity index 100% rename from src/grib_accessor_class_int16_little_endian.cc rename to src/deprecated/grib_accessor_class_int16_little_endian.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 6465e27ae..dd0c148af 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -408,8 +408,6 @@ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd); /* grib_accessor_class_ifs_param.cc*/ -/* grib_accessor_class_int16_little_endian.cc*/ - /* grib_accessor_class_int64_little_endian.cc*/ /* grib_accessor_class_uint16.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index ed11b44b9..e8423e816 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -112,7 +112,6 @@ extern grib_accessor_class* grib_accessor_class_headers_only; extern grib_accessor_class* grib_accessor_class_ibmfloat; extern grib_accessor_class* grib_accessor_class_ieeefloat; extern grib_accessor_class* grib_accessor_class_ifs_param; -extern grib_accessor_class* grib_accessor_class_int16_little_endian; extern grib_accessor_class* grib_accessor_class_int64_little_endian; extern grib_accessor_class* grib_accessor_class_iterator; extern grib_accessor_class* grib_accessor_class_julian_date; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index 982e09544..fbb64f48d 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,7 +37,7 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 206 +#define TOTAL_KEYWORDS 205 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 @@ -60,7 +60,7 @@ static unsigned int grib_accessor_classes_get_id (const char *str, size_t len) 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 0, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 1, 49, - 23, 29, 3, 476, 7, 476, 1, 476, 476, 476, + 23, 29, 8, 476, 2, 476, 1, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, @@ -117,18 +117,18 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, -#line 179 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, -#line 176 "accessor_class_list.gperf" +#line 175 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, -#line 156 "accessor_class_list.gperf" +#line 155 "accessor_class_list.gperf" {"pad", &grib_accessor_class_pad}, -#line 182 "accessor_class_list.gperf" +#line 181 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, {""}, {""}, {""}, -#line 177 "accessor_class_list.gperf" +#line 176 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, {""}, #line 66 "accessor_class_list.gperf" @@ -138,7 +138,7 @@ static const struct accessor_class_hash classes[] = {"data_simple_packing", &grib_accessor_class_data_simple_packing}, #line 68 "accessor_class_list.gperf" {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 170 "accessor_class_list.gperf" +#line 169 "accessor_class_list.gperf" {"section", &grib_accessor_class_section}, #line 43 "accessor_class_list.gperf" {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, @@ -152,9 +152,9 @@ static const struct accessor_class_hash classes[] = {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, #line 65 "accessor_class_list.gperf" {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 172 "accessor_class_list.gperf" +#line 171 "accessor_class_list.gperf" {"section_padding", &grib_accessor_class_section_padding}, -#line 173 "accessor_class_list.gperf" +#line 172 "accessor_class_list.gperf" {"section_pointer", &grib_accessor_class_section_pointer}, #line 44 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, @@ -162,27 +162,27 @@ static const struct accessor_class_hash classes[] = #line 80 "accessor_class_list.gperf" {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, {""}, {""}, {""}, -#line 157 "accessor_class_list.gperf" +#line 156 "accessor_class_list.gperf" {"padding", &grib_accessor_class_padding}, #line 45 "accessor_class_list.gperf" {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, #line 110 "accessor_class_list.gperf" {"gds_is_present", &grib_accessor_class_gds_is_present}, -#line 169 "accessor_class_list.gperf" +#line 168 "accessor_class_list.gperf" {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 171 "accessor_class_list.gperf" +#line 170 "accessor_class_list.gperf" {"section_length", &grib_accessor_class_section_length}, #line 113 "accessor_class_list.gperf" {"getenv", &grib_accessor_class_getenv}, #line 57 "accessor_class_list.gperf" {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, -#line 191 "accessor_class_list.gperf" +#line 190 "accessor_class_list.gperf" {"time", &grib_accessor_class_time}, {""}, #line 61 "accessor_class_list.gperf" {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, {""}, -#line 155 "accessor_class_list.gperf" +#line 154 "accessor_class_list.gperf" {"packing_type", &grib_accessor_class_packing_type}, #line 62 "accessor_class_list.gperf" {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, @@ -198,16 +198,16 @@ static const struct accessor_class_hash classes[] = {"g2end_step", &grib_accessor_class_g2end_step}, #line 98 "accessor_class_list.gperf" {"g2_eps", &grib_accessor_class_g2_eps}, -#line 143 "accessor_class_list.gperf" +#line 142 "accessor_class_list.gperf" {"nearest", &grib_accessor_class_nearest}, {""}, -#line 158 "accessor_class_list.gperf" +#line 157 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, {""}, {""}, #line 107 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, {""}, {""}, -#line 188 "accessor_class_list.gperf" +#line 187 "accessor_class_list.gperf" {"step_in_units", &grib_accessor_class_step_in_units}, #line 63 "accessor_class_list.gperf" {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, @@ -218,33 +218,31 @@ static const struct accessor_class_hash classes[] = #line 55 "accessor_class_list.gperf" {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, {""}, -#line 189 "accessor_class_list.gperf" +#line 188 "accessor_class_list.gperf" {"sum", &grib_accessor_class_sum}, #line 56 "accessor_class_list.gperf" {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, #line 49 "accessor_class_list.gperf" {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 204 "accessor_class_list.gperf" +#line 203 "accessor_class_list.gperf" {"uint8", &grib_accessor_class_uint8}, -#line 144 "accessor_class_list.gperf" +#line 143 "accessor_class_list.gperf" {"non_alpha", &grib_accessor_class_non_alpha}, - {""}, -#line 126 "accessor_class_list.gperf" - {"julian_day", &grib_accessor_class_julian_day}, +#line 201 "accessor_class_list.gperf" + {"uint64", &grib_accessor_class_uint64}, #line 125 "accessor_class_list.gperf" + {"julian_day", &grib_accessor_class_julian_day}, +#line 124 "accessor_class_list.gperf" {"julian_date", &grib_accessor_class_julian_date}, #line 108 "accessor_class_list.gperf" {"g2step_range", &grib_accessor_class_g2step_range}, - {""}, -#line 202 "accessor_class_list.gperf" - {"uint64", &grib_accessor_class_uint64}, - {""}, + {""}, {""}, {""}, #line 48 "accessor_class_list.gperf" {"data_dummy_field", &grib_accessor_class_data_dummy_field}, {""}, {""}, {""}, #line 83 "accessor_class_list.gperf" {"g1_message_length", &grib_accessor_class_g1_message_length}, -#line 185 "accessor_class_list.gperf" +#line 184 "accessor_class_list.gperf" {"statistics", &grib_accessor_class_statistics}, #line 102 "accessor_class_list.gperf" {"g2date", &grib_accessor_class_g2date}, @@ -252,7 +250,7 @@ static const struct accessor_class_hash classes[] = {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, #line 100 "accessor_class_list.gperf" {"g2bitmap", &grib_accessor_class_g2bitmap}, -#line 163 "accessor_class_list.gperf" +#line 162 "accessor_class_list.gperf" {"raw", &grib_accessor_class_raw}, #line 60 "accessor_class_list.gperf" {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, @@ -260,28 +258,28 @@ static const struct accessor_class_hash classes[] = {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, #line 111 "accessor_class_list.gperf" {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, -#line 124 "accessor_class_list.gperf" +#line 123 "accessor_class_list.gperf" {"iterator", &grib_accessor_class_iterator}, -#line 186 "accessor_class_list.gperf" +#line 185 "accessor_class_list.gperf" {"statistics_spectral", &grib_accessor_class_statistics_spectral}, {""}, {""}, {""}, {""}, -#line 146 "accessor_class_list.gperf" +#line 145 "accessor_class_list.gperf" {"number_of_points", &grib_accessor_class_number_of_points}, -#line 200 "accessor_class_list.gperf" +#line 199 "accessor_class_list.gperf" {"uint32", &grib_accessor_class_uint32}, #line 96 "accessor_class_list.gperf" {"g2_aerosol", &grib_accessor_class_g2_aerosol}, #line 94 "accessor_class_list.gperf" {"g1step_range", &grib_accessor_class_g1step_range}, {""}, {""}, -#line 164 "accessor_class_list.gperf" +#line 163 "accessor_class_list.gperf" {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, {""}, -#line 193 "accessor_class_list.gperf" +#line 192 "accessor_class_list.gperf" {"to_integer", &grib_accessor_class_to_integer}, -#line 147 "accessor_class_list.gperf" +#line 146 "accessor_class_list.gperf" {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, -#line 207 "accessor_class_list.gperf" +#line 206 "accessor_class_list.gperf" {"unsigned", &grib_accessor_class_unsigned}, {""}, {""}, #line 86 "accessor_class_list.gperf" @@ -289,15 +287,15 @@ static const struct accessor_class_hash classes[] = {""}, #line 85 "accessor_class_list.gperf" {"g1bitmap", &grib_accessor_class_g1bitmap}, -#line 208 "accessor_class_list.gperf" +#line 207 "accessor_class_list.gperf" {"unsigned_bits", &grib_accessor_class_unsigned_bits}, #line 54 "accessor_class_list.gperf" {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, {""}, -#line 205 "accessor_class_list.gperf" +#line 204 "accessor_class_list.gperf" {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, {""}, -#line 198 "accessor_class_list.gperf" +#line 197 "accessor_class_list.gperf" {"uint16", &grib_accessor_class_uint16}, #line 115 "accessor_class_list.gperf" {"group", &grib_accessor_class_group}, @@ -305,31 +303,31 @@ static const struct accessor_class_hash classes[] = {"bit", &grib_accessor_class_bit}, #line 15 "accessor_class_list.gperf" {"bits", &grib_accessor_class_bits}, -#line 187 "accessor_class_list.gperf" +#line 186 "accessor_class_list.gperf" {"step_human_readable", &grib_accessor_class_step_human_readable}, #line 14 "accessor_class_list.gperf" {"bitmap", &grib_accessor_class_bitmap}, -#line 167 "accessor_class_list.gperf" +#line 166 "accessor_class_list.gperf" {"scale", &grib_accessor_class_scale}, -#line 84 "accessor_class_list.gperf" - {"g1_section4_length", &grib_accessor_class_g1_section4_length}, +#line 202 "accessor_class_list.gperf" + {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, #line 52 "accessor_class_list.gperf" {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, #line 109 "accessor_class_list.gperf" {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, -#line 197 "accessor_class_list.gperf" +#line 196 "accessor_class_list.gperf" {"trim", &grib_accessor_class_trim}, #line 53 "accessor_class_list.gperf" {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, -#line 203 "accessor_class_list.gperf" - {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, +#line 84 "accessor_class_list.gperf" + {"g1_section4_length", &grib_accessor_class_g1_section4_length}, #line 16 "accessor_class_list.gperf" {"bits_per_value", &grib_accessor_class_bits_per_value}, -#line 194 "accessor_class_list.gperf" +#line 193 "accessor_class_list.gperf" {"to_string", &grib_accessor_class_to_string}, #line 50 "accessor_class_list.gperf" {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, -#line 195 "accessor_class_list.gperf" +#line 194 "accessor_class_list.gperf" {"transient", &grib_accessor_class_transient}, #line 51 "accessor_class_list.gperf" {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, @@ -337,66 +335,66 @@ static const struct accessor_class_hash classes[] = {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, #line 105 "accessor_class_list.gperf" {"g2latlon", &grib_accessor_class_g2latlon}, -#line 160 "accessor_class_list.gperf" +#line 159 "accessor_class_list.gperf" {"padtomultiple", &grib_accessor_class_padtomultiple}, #line 114 "accessor_class_list.gperf" {"global_gaussian", &grib_accessor_class_global_gaussian}, -#line 166 "accessor_class_list.gperf" +#line 165 "accessor_class_list.gperf" {"round", &grib_accessor_class_round}, -#line 196 "accessor_class_list.gperf" +#line 195 "accessor_class_list.gperf" {"transient_darray", &grib_accessor_class_transient_darray}, {""}, -#line 178 "accessor_class_list.gperf" +#line 177 "accessor_class_list.gperf" {"simple_packing_error", &grib_accessor_class_simple_packing_error}, -#line 175 "accessor_class_list.gperf" - {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, #line 174 "accessor_class_list.gperf" + {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, +#line 173 "accessor_class_list.gperf" {"select_step_template", &grib_accessor_class_select_step_template}, #line 78 "accessor_class_list.gperf" {"element", &grib_accessor_class_element}, -#line 161 "accessor_class_list.gperf" +#line 160 "accessor_class_list.gperf" {"position", &grib_accessor_class_position}, -#line 129 "accessor_class_list.gperf" +#line 128 "accessor_class_list.gperf" {"latitudes", &grib_accessor_class_latitudes}, -#line 184 "accessor_class_list.gperf" - {"sprintf", &grib_accessor_class_sprintf}, #line 183 "accessor_class_list.gperf" + {"sprintf", &grib_accessor_class_sprintf}, +#line 182 "accessor_class_list.gperf" {"spectral_truncation", &grib_accessor_class_spectral_truncation}, -#line 214 "accessor_class_list.gperf" +#line 213 "accessor_class_list.gperf" {"when", &grib_accessor_class_when}, -#line 201 "accessor_class_list.gperf" +#line 200 "accessor_class_list.gperf" {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, #line 88 "accessor_class_list.gperf" {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, -#line 134 "accessor_class_list.gperf" +#line 133 "accessor_class_list.gperf" {"long", &grib_accessor_class_long}, -#line 140 "accessor_class_list.gperf" +#line 139 "accessor_class_list.gperf" {"md5", &grib_accessor_class_md5}, #line 77 "accessor_class_list.gperf" {"double", &grib_accessor_class_double}, {""}, {""}, -#line 141 "accessor_class_list.gperf" +#line 140 "accessor_class_list.gperf" {"message", &grib_accessor_class_message}, {""}, #line 70 "accessor_class_list.gperf" {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, -#line 138 "accessor_class_list.gperf" +#line 137 "accessor_class_list.gperf" {"mars_param", &grib_accessor_class_mars_param}, {""}, {""}, -#line 162 "accessor_class_list.gperf" +#line 161 "accessor_class_list.gperf" {"proj_string", &grib_accessor_class_proj_string}, #line 71 "accessor_class_list.gperf" {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, -#line 190 "accessor_class_list.gperf" +#line 189 "accessor_class_list.gperf" {"suppressed", &grib_accessor_class_suppressed}, -#line 127 "accessor_class_list.gperf" +#line 126 "accessor_class_list.gperf" {"ksec1expver", &grib_accessor_class_ksec1expver}, #line 29 "accessor_class_list.gperf" {"bytes", &grib_accessor_class_bytes}, -#line 142 "accessor_class_list.gperf" +#line 141 "accessor_class_list.gperf" {"message_copy", &grib_accessor_class_message_copy}, {""}, -#line 199 "accessor_class_list.gperf" +#line 198 "accessor_class_list.gperf" {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, #line 89 "accessor_class_list.gperf" {"g1fcperiod", &grib_accessor_class_g1fcperiod}, @@ -409,17 +407,17 @@ static const struct accessor_class_hash classes[] = {""}, {""}, #line 120 "accessor_class_list.gperf" {"ieeefloat", &grib_accessor_class_ieeefloat}, -#line 152 "accessor_class_list.gperf" +#line 151 "accessor_class_list.gperf" {"offset_file", &grib_accessor_class_offset_file}, {""}, {""}, #line 101 "accessor_class_list.gperf" {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, {""}, -#line 211 "accessor_class_list.gperf" +#line 210 "accessor_class_list.gperf" {"values", &grib_accessor_class_values}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 139 "accessor_class_list.gperf" +#line 138 "accessor_class_list.gperf" {"mars_step", &grib_accessor_class_mars_step}, #line 19 "accessor_class_list.gperf" {"bufr_data_array", &grib_accessor_class_bufr_data_array}, @@ -430,7 +428,7 @@ static const struct accessor_class_hash classes[] = #line 26 "accessor_class_list.gperf" {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, {""}, {""}, {""}, -#line 128 "accessor_class_list.gperf" +#line 127 "accessor_class_list.gperf" {"label", &grib_accessor_class_label}, #line 116 "accessor_class_list.gperf" {"gts_header", &grib_accessor_class_gts_header}, @@ -440,10 +438,10 @@ static const struct accessor_class_hash classes[] = #line 38 "accessor_class_list.gperf" {"concept", &grib_accessor_class_concept}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 145 "accessor_class_list.gperf" +#line 144 "accessor_class_list.gperf" {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, {""}, {""}, -#line 137 "accessor_class_list.gperf" +#line 136 "accessor_class_list.gperf" {"lookup", &grib_accessor_class_lookup}, #line 17 "accessor_class_list.gperf" {"blob", &grib_accessor_class_blob}, @@ -452,61 +450,59 @@ static const struct accessor_class_hash classes[] = {"constant", &grib_accessor_class_constant}, #line 121 "accessor_class_list.gperf" {"ifs_param", &grib_accessor_class_ifs_param}, -#line 136 "accessor_class_list.gperf" +#line 135 "accessor_class_list.gperf" {"longitudes", &grib_accessor_class_longitudes}, #line 119 "accessor_class_list.gperf" {"ibmfloat", &grib_accessor_class_ibmfloat}, -#line 151 "accessor_class_list.gperf" +#line 150 "accessor_class_list.gperf" {"octet_number", &grib_accessor_class_octet_number}, #line 18 "accessor_class_list.gperf" {"budgdate", &grib_accessor_class_budgdate}, -#line 209 "accessor_class_list.gperf" +#line 208 "accessor_class_list.gperf" {"validity_date", &grib_accessor_class_validity_date}, -#line 210 "accessor_class_list.gperf" +#line 209 "accessor_class_list.gperf" {"validity_time", &grib_accessor_class_validity_time}, #line 91 "accessor_class_list.gperf" {"g1monthlydate", &grib_accessor_class_g1monthlydate}, {""}, -#line 213 "accessor_class_list.gperf" +#line 212 "accessor_class_list.gperf" {"vector", &grib_accessor_class_vector}, {""}, #line 117 "accessor_class_list.gperf" {"hash_array", &grib_accessor_class_hash_array}, -#line 123 "accessor_class_list.gperf" - {"int64_little_endian", &grib_accessor_class_int64_little_endian}, -#line 180 "accessor_class_list.gperf" - {"smart_table", &grib_accessor_class_smart_table}, - {""}, {""}, -#line 122 "accessor_class_list.gperf" - {"int16_little_endian", &grib_accessor_class_int16_little_endian}, {""}, -#line 159 "accessor_class_list.gperf" +#line 179 "accessor_class_list.gperf" + {"smart_table", &grib_accessor_class_smart_table}, + {""}, {""}, {""}, +#line 122 "accessor_class_list.gperf" + {"int64_little_endian", &grib_accessor_class_int64_little_endian}, +#line 158 "accessor_class_list.gperf" {"padtoeven", &grib_accessor_class_padtoeven}, {""}, -#line 181 "accessor_class_list.gperf" +#line 180 "accessor_class_list.gperf" {"smart_table_column", &grib_accessor_class_smart_table_column}, {""}, {""}, -#line 135 "accessor_class_list.gperf" +#line 134 "accessor_class_list.gperf" {"long_vector", &grib_accessor_class_long_vector}, -#line 132 "accessor_class_list.gperf" +#line 131 "accessor_class_list.gperf" {"library_version", &grib_accessor_class_library_version}, #line 82 "accessor_class_list.gperf" {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, -#line 153 "accessor_class_list.gperf" +#line 152 "accessor_class_list.gperf" {"offset_values", &grib_accessor_class_offset_values}, {""}, -#line 130 "accessor_class_list.gperf" +#line 129 "accessor_class_list.gperf" {"latlon_increment", &grib_accessor_class_latlon_increment}, #line 118 "accessor_class_list.gperf" {"headers_only", &grib_accessor_class_headers_only}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 192 "accessor_class_list.gperf" +#line 191 "accessor_class_list.gperf" {"to_double", &grib_accessor_class_to_double}, {""}, #line 27 "accessor_class_list.gperf" {"bufr_string_values", &grib_accessor_class_bufr_string_values}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 154 "accessor_class_list.gperf" +#line 153 "accessor_class_list.gperf" {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, #line 73 "accessor_class_list.gperf" {"decimal_precision", &grib_accessor_class_decimal_precision}, @@ -514,18 +510,18 @@ static const struct accessor_class_hash classes[] = #line 69 "accessor_class_list.gperf" {"data_sh_packed", &grib_accessor_class_data_sh_packed}, {""}, {""}, -#line 148 "accessor_class_list.gperf" +#line 147 "accessor_class_list.gperf" {"number_of_values", &grib_accessor_class_number_of_values}, {""}, {""}, {""}, -#line 133 "accessor_class_list.gperf" +#line 132 "accessor_class_list.gperf" {"local_definition", &grib_accessor_class_local_definition}, {""}, {""}, #line 25 "accessor_class_list.gperf" {"bufr_group", &grib_accessor_class_bufr_group}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 212 "accessor_class_list.gperf" +#line 211 "accessor_class_list.gperf" {"variable", &grib_accessor_class_variable}, -#line 149 "accessor_class_list.gperf" +#line 148 "accessor_class_list.gperf" {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, {""}, #line 79 "accessor_class_list.gperf" @@ -534,7 +530,7 @@ static const struct accessor_class_hash classes[] = #line 34 "accessor_class_list.gperf" {"codeflag", &grib_accessor_class_codeflag}, {""}, {""}, {""}, {""}, -#line 206 "accessor_class_list.gperf" +#line 205 "accessor_class_list.gperf" {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, {""}, {""}, {""}, {""}, #line 33 "accessor_class_list.gperf" @@ -543,7 +539,7 @@ static const struct accessor_class_hash classes[] = #line 30 "accessor_class_list.gperf" {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, {""}, -#line 168 "accessor_class_list.gperf" +#line 167 "accessor_class_list.gperf" {"scale_values", &grib_accessor_class_scale_values}, {""}, {""}, {""}, #line 21 "accessor_class_list.gperf" @@ -556,7 +552,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, #line 24 "accessor_class_list.gperf" {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, -#line 150 "accessor_class_list.gperf" +#line 149 "accessor_class_list.gperf" {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, {""}, {""}, {""}, #line 22 "accessor_class_list.gperf" @@ -576,7 +572,7 @@ static const struct accessor_class_hash classes[] = #line 11 "accessor_class_list.gperf" {"abstract_vector", &grib_accessor_class_abstract_vector}, {""}, {""}, -#line 131 "accessor_class_list.gperf" +#line 130 "accessor_class_list.gperf" {"latlonvalues", &grib_accessor_class_latlonvalues}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -598,7 +594,7 @@ static const struct accessor_class_hash classes[] = {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 165 "accessor_class_list.gperf" +#line 164 "accessor_class_list.gperf" {"reference_value_error", &grib_accessor_class_reference_value_error}, #line 32 "accessor_class_list.gperf" {"check_internal_version", &grib_accessor_class_check_internal_version}, @@ -621,7 +617,7 @@ static const struct accessor_class_hash classes[] = {"g2_chemical", &grib_accessor_class_g2_chemical} }; -static const struct accessor_class_hash* grib_accessor_classes_hash (const char *str, size_t len) +static const struct accessor_class_hash* grib_accessor_classes_hash(const char *str, size_t len) { unsigned int key = grib_accessor_classes_get_id (str, len); diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index a2fd78272..114886b0c 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -111,7 +111,6 @@ { "ibmfloat", &grib_accessor_class_ibmfloat, }, { "ieeefloat", &grib_accessor_class_ieeefloat, }, { "ifs_param", &grib_accessor_class_ifs_param, }, -{ "int16_little_endian", &grib_accessor_class_int16_little_endian, }, { "int64_little_endian", &grib_accessor_class_int64_little_endian, }, { "iterator", &grib_accessor_class_iterator, }, { "julian_date", &grib_accessor_class_julian_date, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index 1454a7c9b..08cb2a7b4 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -112,7 +112,6 @@ headers_only, &grib_accessor_class_headers_only ibmfloat, &grib_accessor_class_ibmfloat ieeefloat, &grib_accessor_class_ieeefloat ifs_param, &grib_accessor_class_ifs_param -int16_little_endian, &grib_accessor_class_int16_little_endian int64_little_endian, &grib_accessor_class_int64_little_endian iterator, &grib_accessor_class_iterator julian_date, &grib_accessor_class_julian_date From ba0330bc0502ee00f41cf61634a32011655b4456 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 27 Aug 2023 17:25:38 +0100 Subject: [PATCH 274/372] Testing: Increase coverage --- tests/grib_filter.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/grib_filter.sh b/tests/grib_filter.sh index aa86fdd55..7ab488853 100755 --- a/tests/grib_filter.sh +++ b/tests/grib_filter.sh @@ -350,9 +350,18 @@ cat >$tempFilt < $tempOut -cat $tempOut +cat >$tempFilt < $tempOut +status=$? +set -e +[ $status -ne 0 ] +grep "Assertion failure" $tempOut + # Clean up rm -f $tempGrib $tempFilt $tempOut $tempRef rm -f ${data_dir}/formatint.rules ${data_dir}/binop.rules From dc2af1ff9cef5580423c340920543700753daabd Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 27 Aug 2023 17:26:06 +0100 Subject: [PATCH 275/372] Error messages --- src/action_class_write.cc | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/action_class_write.cc b/src/action_class_write.cc index a8c010ed3..6b18a90d6 100644 --- a/src/action_class_write.cc +++ b/src/action_class_write.cc @@ -8,9 +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 @@ -114,7 +111,7 @@ static int execute(grib_action* act, grib_handle* h) grib_file* of = NULL; if ((err = grib_get_message(h, &buffer, &size)) != GRIB_SUCCESS) { - grib_context_log(act->context, GRIB_LOG_ERROR, "unable to get message\n"); + grib_context_log(act->context, GRIB_LOG_ERROR, "unable to get message"); return err; } @@ -141,21 +138,22 @@ static int execute(grib_action* act, grib_handle* h) of = grib_file_open(filename, "w", &err); if (!of || !of->handle) { - grib_context_log(act->context, GRIB_LOG_ERROR, "unable to open file %s\n", filename); + grib_context_log(act->context, GRIB_LOG_ERROR, "Unable to open file '%s' for %s", + filename, (a->append ? "appending":"writing")); return GRIB_IO_PROBLEM; } if (h->gts_header) { if (fwrite(h->gts_header, 1, h->gts_header_len, of->handle) != h->gts_header_len) { grib_context_log(act->context, (GRIB_LOG_ERROR) | (GRIB_LOG_PERROR), - "Error writing GTS header to %s", filename); + "Error writing GTS header to '%s'", filename); return GRIB_IO_PROBLEM; } } if (fwrite(buffer, 1, size, of->handle) != size) { grib_context_log(act->context, (GRIB_LOG_ERROR) | (GRIB_LOG_PERROR), - "Error writing to %s", filename); + "Error writing to '%s'", filename); return GRIB_IO_PROBLEM; } @@ -186,7 +184,7 @@ static int execute(grib_action* act, grib_handle* h) grib_file_close(filename, 0, &err); if (err != GRIB_SUCCESS) { - grib_context_log(act->context, GRIB_LOG_ERROR, "unable to write message\n"); + grib_context_log(act->context, GRIB_LOG_ERROR, "Unable to write message"); return err; } From 989b1a01f31a659818a72d57d2169f99554cfdf6 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 27 Aug 2023 17:26:22 +0100 Subject: [PATCH 276/372] Dead code removal --- src/eccodes_prototypes.h | 4 - src/grib_filepool.cc | 231 +++++++++++++++++---------------------- 2 files changed, 103 insertions(+), 132 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index dd0c148af..b8d462d4f 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -947,15 +947,11 @@ grib_handle* grib_fieldset_retrieve(grib_fieldset* set, int i, int* err); /* grib_filepool.cc*/ void grib_file_pool_clean(void); grib_file* grib_file_pool_get_files(void); -int grib_file_pool_read(grib_context* c, FILE* fh); -int grib_file_pool_write(FILE* fh); grib_file* grib_file_open(const char* filename, const char* mode, int* err); void grib_file_pool_delete_file(grib_file* file); void grib_file_close(const char* filename, int force, int* err); void grib_file_close_all(int* err); grib_file* grib_get_file(const char* filename, int* err); -grib_file* grib_find_file(short id); -grib_file* grib_file_new(grib_context* c, const char* name, int* err); void grib_file_delete(grib_file* file); /* grib_geography.cc*/ diff --git a/src/grib_filepool.cc b/src/grib_filepool.cc index 4ba9a2432..2282fe3eb 100644 --- a/src/grib_filepool.cc +++ b/src/grib_filepool.cc @@ -41,6 +41,8 @@ static void init() static short next_id = 0; +static grib_file* grib_file_new(grib_context* c, const char* name, int* err); + /* Note: A fast cut-down version of strcmp which does NOT return -1 */ /* 0 means input strings are equal and 1 means not equal */ GRIB_INLINE static int grib_inline_strcmp(const char* a, const char* b) @@ -78,115 +80,95 @@ void grib_file_pool_clean() } } -static void grib_file_pool_change_id() -{ - grib_file* file; +// static void grib_file_pool_change_id() +// { +// grib_file* file; +// if (!file_pool.first) +// return; +// file = file_pool.first; +// while (file) { +// file->id += 1000; +// file = file->next; +// } +// } - if (!file_pool.first) - return; +// static grib_file* grib_read_file(grib_context* c, FILE* fh, int* err) +// { +// short marker = 0; +// short id = 0; +// grib_file* file; +// *err = grib_read_short(fh, &marker); +// if (!marker) +// return NULL; +// file = (grib_file*)grib_context_malloc_clear(c, sizeof(grib_file)); +// file->buffer = 0; +// file->name = grib_read_string(c, fh, err); +// if (*err) +// return NULL; +// *err = grib_read_short(fh, &id); +// file->id = id; +// if (*err) +// return NULL; +// file->next = grib_read_file(c, fh, err); +// if (*err) +// return NULL; +// return file; +// } - file = file_pool.first; - while (file) { - file->id += 1000; - file = file->next; - } -} - -static grib_file* grib_read_file(grib_context* c, FILE* fh, int* err) -{ - short marker = 0; - short id = 0; - grib_file* file; - *err = grib_read_short(fh, &marker); - if (!marker) - return NULL; - - file = (grib_file*)grib_context_malloc_clear(c, sizeof(grib_file)); - file->buffer = 0; - file->name = grib_read_string(c, fh, err); - if (*err) - return NULL; - - *err = grib_read_short(fh, &id); - file->id = id; - if (*err) - return NULL; - - file->next = grib_read_file(c, fh, err); - if (*err) - return NULL; - - return file; -} - -static int grib_write_file(FILE* fh, grib_file* file) -{ - int err = 0; - - if (!file) - return grib_write_null_marker(fh); - - err = grib_write_not_null_marker(fh); - if (err) - return err; - - err = grib_write_string(fh, file->name); - if (err) - return err; - - err = grib_write_short(fh, (short)file->id); - if (err) - return err; - - return grib_write_file(fh, file->next); -} +// static int grib_write_file(FILE* fh, grib_file* file) +// { +// int err = 0; +// if (!file) +// return grib_write_null_marker(fh); +// err = grib_write_not_null_marker(fh); +// if (err) +// return err; +// err = grib_write_string(fh, file->name); +// if (err) +// return err; +// err = grib_write_short(fh, (short)file->id); +// if (err) +// return err; +// return grib_write_file(fh, file->next); +// } grib_file* grib_file_pool_get_files() { return file_pool.first; } -int grib_file_pool_read(grib_context* c, FILE* fh) -{ - int err = 0; - short marker = 0; - grib_file* file; +// int grib_file_pool_read(grib_context* c, FILE* fh) +// { +// int err = 0; +// short marker = 0; +// grib_file* file; +// if (!c) c = grib_context_get_default(); +// err = grib_read_short(fh, &marker); +// if (!marker) { +// grib_context_log(c, GRIB_LOG_ERROR, +// "Unable to find file information in index file"); +// return GRIB_INVALID_FILE; +// } +// grib_file_pool_change_id(); +// file = file_pool.first; +// while (file->next) +// file = file->next; +// file->next = grib_read_file(c, fh, &err); +// if (err) +// return err; +// return GRIB_SUCCESS; +// } - if (!c) - c = grib_context_get_default(); - - err = grib_read_short(fh, &marker); - if (!marker) { - grib_context_log(c, GRIB_LOG_ERROR, - "Unable to find file information in index file\n"); - return GRIB_INVALID_FILE; - } - - grib_file_pool_change_id(); - file = file_pool.first; - - while (file->next) - file = file->next; - - file->next = grib_read_file(c, fh, &err); - if (err) - return err; - - return GRIB_SUCCESS; -} - -int grib_file_pool_write(FILE* fh) -{ - int err = 0; - if (!file_pool.first) - return grib_write_null_marker(fh); - - err = grib_write_not_null_marker(fh); - if (err) - return err; - - return grib_write_file(fh, file_pool.first); -} +// int grib_file_pool_write(FILE* fh) +// { +// int err = 0; +// if (!file_pool.first) +// return grib_write_null_marker(fh); +// err = grib_write_not_null_marker(fh); +// if (err) +// return err; +// return grib_write_file(fh, file_pool.first); +// } grib_file* grib_file_open(const char* filename, const char* mode, int* err) { @@ -244,7 +226,7 @@ grib_file* grib_file_open(const char* filename, const char* mode, int* err) } if (!file->handle) { - grib_context_log(file->context, GRIB_LOG_PERROR, "grib_file_open: cannot open file %s", file->name); + grib_context_log(file->context, GRIB_LOG_PERROR, "%s: Cannot open file '%s'", __func__, file->name); *err = GRIB_IO_PROBLEM; GRIB_MUTEX_UNLOCK(&mutex1); return NULL; @@ -254,7 +236,7 @@ grib_file* grib_file_open(const char* filename, const char* mode, int* err) if (file_pool.context->io_buffer_size) { #ifdef POSIX_MEMALIGN if (posix_memalign((void**)&(file->buffer), sysconf(_SC_PAGESIZE), file_pool.context->io_buffer_size)) { - grib_context_log(file->context, GRIB_LOG_FATAL, "posix_memalign unable to allocate io_buffer\n"); + grib_context_log(file->context, GRIB_LOG_FATAL, "posix_memalign unable to allocate io_buffer"); } #else file->buffer = (char*)malloc(file_pool.context->io_buffer_size); @@ -378,35 +360,28 @@ grib_file* grib_get_file(const char* filename, int* err) return file; } -grib_file* grib_find_file(short id) +// grib_file* grib_find_file(short id) +// { +// grib_file* file = NULL; +// if (file_pool.current->name && id == file_pool.current->id) { +// return file_pool.current; +// } +// file = file_pool.first; +// while (file) { +// if (id == file->id) +// break; +// file = file->next; +// } +// return file; +// } + +static grib_file* grib_file_new(grib_context* c, const char* name, int* err) { - grib_file* file = NULL; - - if (file_pool.current->name && id == file_pool.current->id) { - return file_pool.current; - } - - file = file_pool.first; - while (file) { - if (id == file->id) - break; - file = file->next; - } - - return file; -} - -grib_file* grib_file_new(grib_context* c, const char* name, int* err) -{ - grib_file* file; - - if (!c) - c = grib_context_get_default(); - - file = (grib_file*)grib_context_malloc_clear(c, sizeof(grib_file)); + if (!c) c = grib_context_get_default(); + grib_file* file = (grib_file*)grib_context_malloc_clear(c, sizeof(grib_file)); if (!file) { - grib_context_log(c, GRIB_LOG_ERROR, "grib_file_new: unable to allocate memory"); + grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate memory", __func__); *err = GRIB_OUT_OF_MEMORY; return NULL; } From d7bf7f9fa5c3af7e0749f801773ed579d0807c75 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 28 Aug 2023 13:40:32 +0100 Subject: [PATCH 277/372] Replace Asserts with proper error messages and exit codes --- definitions/grib1/3.82.table | 2 +- fortran/eccodes_f90_int.f90 | 2 +- fortran/eccodes_f90_long_int.f90 | 2 +- fortran/eccodes_f90_tail.f90 | 8 ++-- fortran/grib_f90_int.f90 | 2 +- fortran/grib_f90_long_int.f90 | 2 +- fortran/grib_f90_tail.f90 | 8 ++-- ...rib_accessor_class_data_complex_packing.cc | 29 +++++++-------- src/grib_accessor_class_data_sh_packed.cc | 37 +++++++------------ 9 files changed, 40 insertions(+), 52 deletions(-) diff --git a/definitions/grib1/3.82.table b/definitions/grib1/3.82.table index b50e3bfef..29e0e2320 100644 --- a/definitions/grib1/3.82.table +++ b/definitions/grib1/3.82.table @@ -4,7 +4,7 @@ ## created: 6 Oct 2011 ## modified: 13 May 2013 ## -# CODE TABLE 3 Fixed levels or layers for wich the data are included +# CODE TABLE 3 Fixed levels or layers for which the data are included 0 0 Reserved 1 surf Surface (of the Earth, which includes sea surface) 2 bcld Cloud base level diff --git a/fortran/eccodes_f90_int.f90 b/fortran/eccodes_f90_int.f90 index 5202aa4f7..83caa7881 100644 --- a/fortran/eccodes_f90_int.f90 +++ b/fortran/eccodes_f90_int.f90 @@ -16,7 +16,7 @@ !> \b Examples: \ref grib_index.f90 "grib_index.f90" !> !> @param indexid id of an index created from a file. The index must have been created with the key in argument. - !> @param key key for wich the values are returned + !> @param key key for which the values are returned !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. !> @param status CODES_SUCCESS if OK, integer value on error interface codes_index_get diff --git a/fortran/eccodes_f90_long_int.f90 b/fortran/eccodes_f90_long_int.f90 index 5399b54be..c124bfae9 100644 --- a/fortran/eccodes_f90_long_int.f90 +++ b/fortran/eccodes_f90_long_int.f90 @@ -16,7 +16,7 @@ !> \b Examples: \ref grib_index.f90 "grib_index.f90" !> !> @param indexid id of an index created from a file. The index must have been created with the key in argument. - !> @param key key for wich the values are returned + !> @param key key for which the values are returned !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. !> @param status CODES_SUCCESS if OK, integer value on error interface codes_index_get diff --git a/fortran/eccodes_f90_tail.f90 b/fortran/eccodes_f90_tail.f90 index 7dfdd952a..faf4e7e36 100644 --- a/fortran/eccodes_f90_tail.f90 +++ b/fortran/eccodes_f90_tail.f90 @@ -121,7 +121,7 @@ !> \b Examples: \ref grib_index.f90 "grib_index.f90" !> !> @param indexid id of an index created from a file. The index must have been created with the key in argument. - !> @param key key for wich the values are returned + !> @param key key for which the values are returned !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. !> @param status CODES_SUCCESS if OK, integer value on error subroutine codes_index_get_int(indexid, key, values, status) @@ -143,7 +143,7 @@ !> \b Examples: \ref grib_index.f90 "grib_index.f90" !> !> @param indexid id of an index created from a file. The index must have been created with the key in argument. - !> @param key key for wich the values are returned + !> @param key key for which the values are returned !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. !> @param status CODES_SUCCESS if OK, integer value on error subroutine codes_index_get_long(indexid, key, values, status) @@ -165,7 +165,7 @@ !> \b Examples: \ref grib_index.f90 "grib_index.f90" !> !> @param indexid id of an index created from a file. The index must have been created with the key in argument. - !> @param key key for wich the values are returned + !> @param key key for which the values are returned !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. !> @param status CODES_SUCCESS if OK, integer value on error subroutine codes_index_get_real8(indexid, key, values, status) @@ -189,7 +189,7 @@ !> \b Examples: \ref grib_index.f90 "grib_index.f90" !> !> @param indexid id of an index created from a file. The index must have been created with the key in argument. - !> @param key key for wich the values are returned + !> @param key key for which the values are returned !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. !> @param status CODES_SUCCESS if OK, integer value on error subroutine codes_index_get_string(indexid, key, values, status) diff --git a/fortran/grib_f90_int.f90 b/fortran/grib_f90_int.f90 index d474cfa8e..d5fdb45f3 100644 --- a/fortran/grib_f90_int.f90 +++ b/fortran/grib_f90_int.f90 @@ -16,7 +16,7 @@ !> \b Examples: \ref grib_index.f90 "grib_index.f90" !> !> @param indexid id of an index created from a file. The index must have been created with the key in argument. - !> @param key key for wich the values are returned + !> @param key key for which the values are returned !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. !> @param status GRIB_SUCCESS if OK, integer value on error interface grib_index_get diff --git a/fortran/grib_f90_long_int.f90 b/fortran/grib_f90_long_int.f90 index 9cd98a352..1d7e53afb 100644 --- a/fortran/grib_f90_long_int.f90 +++ b/fortran/grib_f90_long_int.f90 @@ -16,7 +16,7 @@ !> \b Examples: \ref grib_index.f90 "grib_index.f90" !> !> @param indexid id of an index created from a file. The index must have been created with the key in argument. - !> @param key key for wich the values are returned + !> @param key key for which the values are returned !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. !> @param status GRIB_SUCCESS if OK, integer value on error interface grib_index_get diff --git a/fortran/grib_f90_tail.f90 b/fortran/grib_f90_tail.f90 index 0f8b19103..600e621a5 100644 --- a/fortran/grib_f90_tail.f90 +++ b/fortran/grib_f90_tail.f90 @@ -154,7 +154,7 @@ !> \b Examples: \ref grib_index.f90 "grib_index.f90" !> !> @param indexid ID of an index created from a file. The index must have been created with the key in argument. - !> @param key key for wich the values are returned + !> @param key key for which the values are returned !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. !> @param status GRIB_SUCCESS if OK, integer value on error subroutine grib_index_get_int(indexid, key, values, status) @@ -184,7 +184,7 @@ !> \b Examples: \ref grib_index.f90 "grib_index.f90" !> !> @param indexid ID of an index created from a file. The index must have been created with the key in argument. - !> @param key key for wich the values are returned + !> @param key key for which the values are returned !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. !> @param status GRIB_SUCCESS if OK, integer value on error subroutine grib_index_get_long(indexid, key, values, status) @@ -214,7 +214,7 @@ !> \b Examples: \ref grib_index.f90 "grib_index.f90" !> !> @param indexid id of an index created from a file. The index must have been created with the key in argument. - !> @param key key for wich the values are returned + !> @param key key for which the values are returned !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. !> @param status GRIB_SUCCESS if OK, integer value on error subroutine grib_index_get_real8(indexid, key, values, status) @@ -246,7 +246,7 @@ !> \b Examples: \ref grib_index.f90 "grib_index.f90" !> !> @param indexid id of an index created from a file. The index must have been created with the key in argument. - !> @param key key for wich the values are returned + !> @param key key for which the values are returned !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. !> @param status GRIB_SUCCESS if OK, integer value on error subroutine grib_index_get_string(indexid, key, values, status) diff --git a/src/grib_accessor_class_data_complex_packing.cc b/src/grib_accessor_class_data_complex_packing.cc index f10640b6e..95612de5a 100644 --- a/src/grib_accessor_class_data_complex_packing.cc +++ b/src/grib_accessor_class_data_complex_packing.cc @@ -168,13 +168,11 @@ static void init(grib_accessor* a, const long v, grib_arguments* args) static int value_count(grib_accessor* a, long* count) { grib_accessor_data_complex_packing* self = (grib_accessor_data_complex_packing*)a; - int ret = 0; - grib_handle* gh = grib_handle_of_accessor(a); - + int ret = 0; + grib_handle* gh = grib_handle_of_accessor(a); long pen_j = 0; long pen_k = 0; long pen_m = 0; - *count = 0; if (a->length == 0) @@ -188,15 +186,16 @@ static int value_count(grib_accessor* a, long* count) return ret; if (pen_j != pen_k || pen_j != pen_m) { - grib_context_log(a->context, GRIB_LOG_ERROR, "pen_j=%ld, pen_k=%ld, pen_m=%ld\n", pen_j, pen_k, pen_m); - Assert((pen_j == pen_k) && (pen_j == pen_m)); + grib_context_log(a->context, GRIB_LOG_ERROR, "Invalid pentagonal resolution parameters"); + grib_context_log(a->context, GRIB_LOG_ERROR, "pen_j=%ld, pen_k=%ld, pen_m=%ld", pen_j, pen_k, pen_m); + return GRIB_DECODING_ERROR; } *count = (pen_j + 1) * (pen_j + 2); return ret; } -static double calculate_pfactor(grib_context* ctx, const double* spectralField, long fieldTruncation, long subsetTruncation) +static double calculate_pfactor(const grib_context* ctx, const double* spectralField, long fieldTruncation, long subsetTruncation) { /*long n_vals = ((fieldTruncation+1)*(fieldTruncation+2));*/ long loop, index, m, n = 0; @@ -416,10 +415,10 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) return GRIB_NOT_IMPLEMENTED; } - Assert(sub_j == sub_k); - Assert(sub_j == sub_m); - Assert(pen_j == pen_k); - Assert(pen_j == pen_m); + if (sub_j != sub_k || sub_j != sub_m || pen_j != pen_k || pen_j != pen_m) { + grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Invalid pentagonal resolution parameters", cclass_name); + return GRIB_ENCODING_ERROR; + } n_vals = (pen_j + 1) * (pen_j + 2); @@ -790,10 +789,10 @@ static int unpack(grib_accessor* a, T* val, size_t* len) return GRIB_NOT_IMPLEMENTED; } - Assert(sub_j == sub_k); - Assert(sub_j == sub_m); - Assert(pen_j == pen_k); - Assert(pen_j == pen_m); + if (sub_j != sub_k || sub_j != sub_m || pen_j != pen_k || pen_j != pen_m) { + grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Invalid pentagonal resolution parameters", cclass_name); + return GRIB_DECODING_ERROR; + } buf = (unsigned char*)gh->buffer->data; diff --git a/src/grib_accessor_class_data_sh_packed.cc b/src/grib_accessor_class_data_sh_packed.cc index 6944c7a0a..a02d60275 100644 --- a/src/grib_accessor_class_data_sh_packed.cc +++ b/src/grib_accessor_class_data_sh_packed.cc @@ -164,8 +164,9 @@ static void init(grib_accessor* a, const long v, grib_arguments* args) static int value_count(grib_accessor* a, long* count) { grib_accessor_data_sh_packed* self = (grib_accessor_data_sh_packed*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int ret = 0; + grib_handle* hand = grib_handle_of_accessor(a); + int ret = 0; + const char* cclass_name = a->cclass->name; long sub_j = 0; long sub_k = 0; @@ -189,8 +190,9 @@ static int value_count(grib_accessor* a, long* count) return ret; if (pen_j != pen_k || pen_j != pen_m) { - grib_context_log(a->context, GRIB_LOG_ERROR, "pen_j=%ld, pen_k=%ld, pen_m=%ld\n", pen_j, pen_k, pen_m); - Assert((pen_j == pen_k) && (pen_j == pen_m)); + grib_context_log(a->context, GRIB_LOG_ERROR, "%s: pen_j=%ld, pen_k=%ld, pen_m=%ld\n", + cclass_name, pen_j, pen_k, pen_m); + return GRIB_DECODING_ERROR; } *count = (pen_j + 1) * (pen_j + 2) - (sub_j + 1) * (sub_j + 2); return ret; @@ -200,20 +202,13 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) { grib_accessor_data_sh_packed* self = (grib_accessor_data_sh_packed*)a; - size_t i = 0; - int ret = GRIB_SUCCESS; - long hcount = 0; - long lcount = 0; - long hpos = 0; - long lup = 0; - long mmax = 0; - long n_vals = 0; + size_t i = 0; + int ret = GRIB_SUCCESS; + long hcount = 0, lcount = 0, hpos = 0, lup = 0, mmax = 0, n_vals = 0; double* scals = NULL; /* double *pscals=NULL; */ - double s = 0; - double d = 0; - double laplacianOperator = 0; + double s = 0, d = 0, laplacianOperator = 0; unsigned char* buf = NULL; unsigned char* hres = NULL; unsigned char* lres = NULL; @@ -223,22 +218,16 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) long maxv = 0; long GRIBEX_sh_bug_present = 0; long ieee_floats = 0; - long offsetdata = 0; long bits_per_value = 0; double reference_value = 0; long binary_scale_factor = 0; long decimal_scale_factor = 0; - long sub_j = 0; - long sub_k = 0; - long sub_m = 0; - long pen_j = 0; - long pen_k = 0; - long pen_m = 0; + long sub_j = 0, sub_k = 0, sub_m = 0, pen_j = 0, pen_k = 0, pen_m = 0; double operat = 0; - int bytes; + int bytes = 0; int err = 0; decode_float_proc decode_float = NULL; @@ -326,7 +315,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) d = codes_power(-decimal_scale_factor, 10); scals = (double*)grib_context_malloc(a->context, maxv * sizeof(double)); - Assert(scals); + if(!scals) return GRIB_OUT_OF_MEMORY; scals[0] = 0; for (i = 1; i < maxv; i++) { From c76004c3ea2b3f32bf4c99d58c7995a95e3dc77e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 28 Aug 2023 15:12:18 +0100 Subject: [PATCH 278/372] Dead code removal --- src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 1 - ...rib_accessor_class_uint16_little_endian.cc | 0 src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - ...ib_accessor_class_data_g22order_packing.cc | 44 +- src/grib_accessor_classes_hash.cc | 737 +++++++++--------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 9 files changed, 380 insertions(+), 408 deletions(-) rename src/{ => deprecated}/grib_accessor_class_uint16_little_endian.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d4f8576ea..7011e4175 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -359,7 +359,6 @@ list( APPEND eccodes_src_files md5.cc grib_accessor_class_int64_little_endian.cc grib_accessor_class_uint16.cc - grib_accessor_class_uint16_little_endian.cc grib_accessor_class_uint32.cc grib_accessor_class_uint32_little_endian.cc grib_accessor_class_uint64.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index 85cf1bb74..5ff2efe03 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -171,7 +171,6 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |---grib_accessor_class_to_string |---grib_accessor_class_transient_darray |---grib_accessor_class_uint16 - |---grib_accessor_class_uint16_little_endian |---grib_accessor_class_uint32 |---grib_accessor_class_uint32_little_endian |---grib_accessor_class_uint64 diff --git a/src/grib_accessor_class_uint16_little_endian.cc b/src/deprecated/grib_accessor_class_uint16_little_endian.cc similarity index 100% rename from src/grib_accessor_class_uint16_little_endian.cc rename to src/deprecated/grib_accessor_class_uint16_little_endian.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index b8d462d4f..3f2371fb5 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -412,8 +412,6 @@ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd); /* grib_accessor_class_uint16.cc*/ -/* grib_accessor_class_uint16_little_endian.cc*/ - /* grib_accessor_class_uint32.cc*/ /* grib_accessor_class_uint32_little_endian.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index e8423e816..90f9e3619 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -188,7 +188,6 @@ extern grib_accessor_class* grib_accessor_class_transient; extern grib_accessor_class* grib_accessor_class_transient_darray; extern grib_accessor_class* grib_accessor_class_trim; extern grib_accessor_class* grib_accessor_class_uint16; -extern grib_accessor_class* grib_accessor_class_uint16_little_endian; extern grib_accessor_class* grib_accessor_class_uint32; extern grib_accessor_class* grib_accessor_class_uint32_little_endian; extern grib_accessor_class* grib_accessor_class_uint64; diff --git a/src/grib_accessor_class_data_g22order_packing.cc b/src/grib_accessor_class_data_g22order_packing.cc index 84f32b3e3..af462d667 100644 --- a/src/grib_accessor_class_data_g22order_packing.cc +++ b/src/grib_accessor_class_data_g22order_packing.cc @@ -1168,57 +1168,33 @@ static void merge_j(struct section* h, int ref_bits, int width_bits, int has_und static int pack_double(grib_accessor* a, const double* val, size_t* len) { - unsigned char* sec7; grib_accessor_data_g22order_packing* self = reinterpret_cast(a); grib_handle* gh = grib_handle_of_accessor(a); const char* cclass_name = a->cclass->name; int err = 0; - long bits_per_value = 0; - // double reference_value = 0; // long nvals_per_group = 0; // long nbits_per_group_val = 0; - long binary_scale_factor; - long decimal_scale_factor; - long optimize_scale_factor; - long typeOfOriginalFieldValues; + long binary_scale_factor, decimal_scale_factor, optimize_scale_factor, typeOfOriginalFieldValues; // long groupSplittingMethodUsed, numberOfGroupsOfDataValues, referenceForGroupWidths; - long missingValueManagementUsed; - long primaryMissingValueSubstitute; - long secondaryMissingValueSubstitute; - long numberOfBitsUsedForTheGroupWidths; - long numberOfBitsUsedForTheScaledGroupLengths; - long orderOfSpatialDifferencing; - long numberOfOctetsExtraDescriptors; + long missingValueManagementUsed, primaryMissingValueSubstitute, secondaryMissingValueSubstitute; + long numberOfBitsUsedForTheGroupWidths, numberOfBitsUsedForTheScaledGroupLengths, orderOfSpatialDifferencing; + long numberOfOctetsExtraDescriptors, bits_per_value = 0, bitmap_present = 0; - int dec_scale; - int bin_scale; - int wanted_bits; - int max_bits; - int use_bitmap; - - int j, j0, k, *v, binary_scale, nbits, has_undef, extra_0, extra_1; - size_t i, ii; - int vmn, vmx, vbits; + int dec_scale, bin_scale, wanted_bits, max_bits, use_bitmap, + j, j0, k, *v, binary_scale, nbits, has_undef, extra_0, extra_1, vmn, vmx, vbits; // Sections - double max_val, min_val, ref, frange, dec_factor, scale; - double mn, mx; + double max_val, min_val, ref, frange, dec_factor, scale, mn, mx; struct section start, *list, *list_backup, *s; // Group - int ngroups, grefmx, glenmn, glenmx, gwidmn, gwidmx, len_last; - int size_sec7; + int ngroups, grefmx, glenmn, glenmx, gwidmn, gwidmx, len_last, size_sec7; int *refs, *lens, *widths, *itmp, *itmp2; - // int est_group_width = 12; int est_group_width = 6; - size_t ndef = 0; - size_t nndata = 0; - size_t nstruct; - - long bitmap_present = 0; + size_t ndef = 0, nndata = 0, nstruct, i, ii; int LEN_SEC_MAX = 127; int LEN_BITS = 7; @@ -1796,7 +1772,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) } size_sec7 += (k >> 3) + ((k & 7) ? 1 : 0); - sec7 = reinterpret_cast(grib_context_malloc(a->context, size_sec7)); + unsigned char* sec7 = reinterpret_cast(grib_context_malloc(a->context, size_sec7)); if (sec7 == NULL) { grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: unable to allocate %d bytes", cclass_name, size_sec7); return GRIB_OUT_OF_MEMORY; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index fbb64f48d..a62745117 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,12 +37,12 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 205 +#define TOTAL_KEYWORDS 204 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 -#define MAX_HASH_VALUE 475 -/* maximum key range = 475, duplicates = 0 */ +#define MAX_HASH_VALUE 506 +/* maximum key range = 506, duplicates = 0 */ #ifdef __GNUC__ @@ -55,32 +55,32 @@ static unsigned int grib_accessor_classes_get_id (const char *str, size_t len) { static const unsigned short asso_values[] = { - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 0, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 1, 49, - 23, 29, 8, 476, 2, 476, 1, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 0, 476, 0, 125, 127, - 0, 0, 131, 24, 148, 1, 0, 22, 108, 161, - 13, 51, 6, 476, 93, 1, 40, 71, 192, 8, - 1, 47, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476 + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 0, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 1, 145, + 23, 6, 5, 507, 4, 507, 1, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 0, 507, 0, 69, 84, + 0, 0, 161, 24, 187, 1, 8, 9, 87, 102, + 13, 51, 6, 507, 118, 1, 40, 59, 171, 0, + 4, 6, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507 }; unsigned int hval = len; @@ -127,7 +127,10 @@ static const struct accessor_class_hash classes[] = {"pad", &grib_accessor_class_pad}, #line 181 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, - {""}, {""}, {""}, + {""}, +#line 75 "accessor_class_list.gperf" + {"dirty", &grib_accessor_class_dirty}, + {""}, #line 176 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, {""}, @@ -158,10 +161,9 @@ static const struct accessor_class_hash classes[] = {"section_pointer", &grib_accessor_class_section_pointer}, #line 44 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, - {""}, + {""}, {""}, {""}, {""}, #line 80 "accessor_class_list.gperf" {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, - {""}, {""}, {""}, #line 156 "accessor_class_list.gperf" {"padding", &grib_accessor_class_padding}, #line 45 "accessor_class_list.gperf" @@ -188,9 +190,7 @@ static const struct accessor_class_hash classes[] = {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, #line 59 "accessor_class_list.gperf" {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, - {""}, -#line 75 "accessor_class_list.gperf" - {"dirty", &grib_accessor_class_dirty}, + {""}, {""}, #line 104 "accessor_class_list.gperf" {"g2grid", &grib_accessor_class_g2grid}, {""}, {""}, {""}, @@ -203,55 +203,60 @@ static const struct accessor_class_hash classes[] = {""}, #line 157 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, - {""}, {""}, +#line 188 "accessor_class_list.gperf" + {"sum", &grib_accessor_class_sum}, + {""}, #line 107 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, - {""}, {""}, +#line 202 "accessor_class_list.gperf" + {"uint8", &grib_accessor_class_uint8}, + {""}, #line 187 "accessor_class_list.gperf" {"step_in_units", &grib_accessor_class_step_in_units}, #line 63 "accessor_class_list.gperf" {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, - {""}, +#line 200 "accessor_class_list.gperf" + {"uint64", &grib_accessor_class_uint64}, #line 47 "accessor_class_list.gperf" {"data_complex_packing", &grib_accessor_class_data_complex_packing}, - {""}, -#line 55 "accessor_class_list.gperf" - {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, - {""}, -#line 188 "accessor_class_list.gperf" - {"sum", &grib_accessor_class_sum}, -#line 56 "accessor_class_list.gperf" - {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, -#line 49 "accessor_class_list.gperf" - {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 203 "accessor_class_list.gperf" - {"uint8", &grib_accessor_class_uint8}, -#line 143 "accessor_class_list.gperf" - {"non_alpha", &grib_accessor_class_non_alpha}, -#line 201 "accessor_class_list.gperf" - {"uint64", &grib_accessor_class_uint64}, +#line 198 "accessor_class_list.gperf" + {"uint32", &grib_accessor_class_uint32}, +#line 13 "accessor_class_list.gperf" + {"bit", &grib_accessor_class_bit}, +#line 15 "accessor_class_list.gperf" + {"bits", &grib_accessor_class_bits}, +#line 48 "accessor_class_list.gperf" + {"data_dummy_field", &grib_accessor_class_data_dummy_field}, +#line 14 "accessor_class_list.gperf" + {"bitmap", &grib_accessor_class_bitmap}, #line 125 "accessor_class_list.gperf" {"julian_day", &grib_accessor_class_julian_day}, #line 124 "accessor_class_list.gperf" {"julian_date", &grib_accessor_class_julian_date}, +#line 143 "accessor_class_list.gperf" + {"non_alpha", &grib_accessor_class_non_alpha}, + {""}, +#line 29 "accessor_class_list.gperf" + {"bytes", &grib_accessor_class_bytes}, +#line 67 "accessor_class_list.gperf" + {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, #line 108 "accessor_class_list.gperf" {"g2step_range", &grib_accessor_class_g2step_range}, - {""}, {""}, {""}, -#line 48 "accessor_class_list.gperf" - {"data_dummy_field", &grib_accessor_class_data_dummy_field}, - {""}, {""}, {""}, -#line 83 "accessor_class_list.gperf" - {"g1_message_length", &grib_accessor_class_g1_message_length}, +#line 16 "accessor_class_list.gperf" + {"bits_per_value", &grib_accessor_class_bits_per_value}, + {""}, {""}, {""}, {""}, {""}, +#line 166 "accessor_class_list.gperf" + {"scale", &grib_accessor_class_scale}, + {""}, #line 184 "accessor_class_list.gperf" {"statistics", &grib_accessor_class_statistics}, #line 102 "accessor_class_list.gperf" {"g2date", &grib_accessor_class_g2date}, -#line 67 "accessor_class_list.gperf" - {"data_run_length_packing", &grib_accessor_class_data_run_length_packing}, +#line 145 "accessor_class_list.gperf" + {"number_of_points", &grib_accessor_class_number_of_points}, #line 100 "accessor_class_list.gperf" {"g2bitmap", &grib_accessor_class_g2bitmap}, -#line 162 "accessor_class_list.gperf" - {"raw", &grib_accessor_class_raw}, + {""}, #line 60 "accessor_class_list.gperf" {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, #line 58 "accessor_class_list.gperf" @@ -262,359 +267,357 @@ static const struct accessor_class_hash classes[] = {"iterator", &grib_accessor_class_iterator}, #line 185 "accessor_class_list.gperf" {"statistics_spectral", &grib_accessor_class_statistics_spectral}, - {""}, {""}, {""}, {""}, -#line 145 "accessor_class_list.gperf" - {"number_of_points", &grib_accessor_class_number_of_points}, -#line 199 "accessor_class_list.gperf" - {"uint32", &grib_accessor_class_uint32}, -#line 96 "accessor_class_list.gperf" - {"g2_aerosol", &grib_accessor_class_g2_aerosol}, -#line 94 "accessor_class_list.gperf" - {"g1step_range", &grib_accessor_class_g1step_range}, - {""}, {""}, -#line 163 "accessor_class_list.gperf" - {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, - {""}, -#line 192 "accessor_class_list.gperf" - {"to_integer", &grib_accessor_class_to_integer}, +#line 46 "accessor_class_list.gperf" + {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, #line 146 "accessor_class_list.gperf" {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, -#line 206 "accessor_class_list.gperf" +#line 205 "accessor_class_list.gperf" {"unsigned", &grib_accessor_class_unsigned}, +#line 139 "accessor_class_list.gperf" + {"md5", &grib_accessor_class_md5}, {""}, {""}, +#line 96 "accessor_class_list.gperf" + {"g2_aerosol", &grib_accessor_class_g2_aerosol}, +#line 140 "accessor_class_list.gperf" + {"message", &grib_accessor_class_message}, +#line 206 "accessor_class_list.gperf" + {"unsigned_bits", &grib_accessor_class_unsigned_bits}, +#line 173 "accessor_class_list.gperf" + {"select_step_template", &grib_accessor_class_select_step_template}, +#line 137 "accessor_class_list.gperf" + {"mars_param", &grib_accessor_class_mars_param}, +#line 203 "accessor_class_list.gperf" + {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, +#line 192 "accessor_class_list.gperf" + {"to_integer", &grib_accessor_class_to_integer}, + {""}, {""}, {""}, +#line 177 "accessor_class_list.gperf" + {"simple_packing_error", &grib_accessor_class_simple_packing_error}, +#line 186 "accessor_class_list.gperf" + {"step_human_readable", &grib_accessor_class_step_human_readable}, +#line 141 "accessor_class_list.gperf" + {"message_copy", &grib_accessor_class_message_copy}, +#line 162 "accessor_class_list.gperf" + {"raw", &grib_accessor_class_raw}, + {""}, {""}, +#line 201 "accessor_class_list.gperf" + {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, + {""}, +#line 199 "accessor_class_list.gperf" + {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, +#line 114 "accessor_class_list.gperf" + {"global_gaussian", &grib_accessor_class_global_gaussian}, + {""}, {""}, +#line 76 "accessor_class_list.gperf" + {"divdouble", &grib_accessor_class_divdouble}, + {""}, +#line 174 "accessor_class_list.gperf" + {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, +#line 99 "accessor_class_list.gperf" + {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, +#line 78 "accessor_class_list.gperf" + {"element", &grib_accessor_class_element}, +#line 159 "accessor_class_list.gperf" + {"padtomultiple", &grib_accessor_class_padtomultiple}, +#line 128 "accessor_class_list.gperf" + {"latitudes", &grib_accessor_class_latitudes}, +#line 163 "accessor_class_list.gperf" + {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, + {""}, {""}, {""}, +#line 193 "accessor_class_list.gperf" + {"to_string", &grib_accessor_class_to_string}, +#line 133 "accessor_class_list.gperf" + {"long", &grib_accessor_class_long}, +#line 19 "accessor_class_list.gperf" + {"bufr_data_array", &grib_accessor_class_bufr_data_array}, +#line 77 "accessor_class_list.gperf" + {"double", &grib_accessor_class_double}, +#line 20 "accessor_class_list.gperf" + {"bufr_data_element", &grib_accessor_class_bufr_data_element}, +#line 105 "accessor_class_list.gperf" + {"g2latlon", &grib_accessor_class_g2latlon}, + {""}, {""}, +#line 26 "accessor_class_list.gperf" + {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, + {""}, +#line 138 "accessor_class_list.gperf" + {"mars_step", &grib_accessor_class_mars_step}, + {""}, +#line 115 "accessor_class_list.gperf" + {"group", &grib_accessor_class_group}, + {""}, +#line 28 "accessor_class_list.gperf" + {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, +#line 160 "accessor_class_list.gperf" + {"position", &grib_accessor_class_position}, + {""}, {""}, {""}, +#line 17 "accessor_class_list.gperf" + {"blob", &grib_accessor_class_blob}, +#line 109 "accessor_class_list.gperf" + {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, +#line 196 "accessor_class_list.gperf" + {"trim", &grib_accessor_class_trim}, + {""}, {""}, +#line 119 "accessor_class_list.gperf" + {"ibmfloat", &grib_accessor_class_ibmfloat}, + {""}, {""}, +#line 194 "accessor_class_list.gperf" + {"transient", &grib_accessor_class_transient}, +#line 55 "accessor_class_list.gperf" + {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, + {""}, {""}, +#line 56 "accessor_class_list.gperf" + {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, +#line 49 "accessor_class_list.gperf" + {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, +#line 165 "accessor_class_list.gperf" + {"round", &grib_accessor_class_round}, +#line 195 "accessor_class_list.gperf" + {"transient_darray", &grib_accessor_class_transient_darray}, +#line 18 "accessor_class_list.gperf" + {"budgdate", &grib_accessor_class_budgdate}, +#line 209 "accessor_class_list.gperf" + {"values", &grib_accessor_class_values}, +#line 144 "accessor_class_list.gperf" + {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, +#line 127 "accessor_class_list.gperf" + {"label", &grib_accessor_class_label}, + {""}, {""}, +#line 38 "accessor_class_list.gperf" + {"concept", &grib_accessor_class_concept}, + {""}, +#line 182 "accessor_class_list.gperf" + {"spectral_truncation", &grib_accessor_class_spectral_truncation}, + {""}, {""}, +#line 83 "accessor_class_list.gperf" + {"g1_message_length", &grib_accessor_class_g1_message_length}, +#line 183 "accessor_class_list.gperf" + {"sprintf", &grib_accessor_class_sprintf}, +#line 189 "accessor_class_list.gperf" + {"suppressed", &grib_accessor_class_suppressed}, + {""}, +#line 212 "accessor_class_list.gperf" + {"when", &grib_accessor_class_when}, + {""}, {""}, +#line 179 "accessor_class_list.gperf" + {"smart_table", &grib_accessor_class_smart_table}, + {""}, +#line 39 "accessor_class_list.gperf" + {"constant", &grib_accessor_class_constant}, + {""}, {""}, +#line 161 "accessor_class_list.gperf" + {"proj_string", &grib_accessor_class_proj_string}, +#line 150 "accessor_class_list.gperf" + {"octet_number", &grib_accessor_class_octet_number}, +#line 180 "accessor_class_list.gperf" + {"smart_table_column", &grib_accessor_class_smart_table_column}, + {""}, +#line 136 "accessor_class_list.gperf" + {"lookup", &grib_accessor_class_lookup}, + {""}, +#line 94 "accessor_class_list.gperf" + {"g1step_range", &grib_accessor_class_g1step_range}, +#line 73 "accessor_class_list.gperf" + {"decimal_precision", &grib_accessor_class_decimal_precision}, + {""}, +#line 135 "accessor_class_list.gperf" + {"longitudes", &grib_accessor_class_longitudes}, +#line 70 "accessor_class_list.gperf" + {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, +#line 27 "accessor_class_list.gperf" + {"bufr_string_values", &grib_accessor_class_bufr_string_values}, +#line 197 "accessor_class_list.gperf" + {"uint16", &grib_accessor_class_uint16}, +#line 122 "accessor_class_list.gperf" + {"int64_little_endian", &grib_accessor_class_int64_little_endian}, + {""}, +#line 71 "accessor_class_list.gperf" + {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, #line 86 "accessor_class_list.gperf" {"g1date", &grib_accessor_class_g1date}, {""}, #line 85 "accessor_class_list.gperf" {"g1bitmap", &grib_accessor_class_g1bitmap}, -#line 207 "accessor_class_list.gperf" - {"unsigned_bits", &grib_accessor_class_unsigned_bits}, + {""}, #line 54 "accessor_class_list.gperf" {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, - {""}, -#line 204 "accessor_class_list.gperf" - {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, - {""}, -#line 197 "accessor_class_list.gperf" - {"uint16", &grib_accessor_class_uint16}, -#line 115 "accessor_class_list.gperf" - {"group", &grib_accessor_class_group}, -#line 13 "accessor_class_list.gperf" - {"bit", &grib_accessor_class_bit}, -#line 15 "accessor_class_list.gperf" - {"bits", &grib_accessor_class_bits}, -#line 186 "accessor_class_list.gperf" - {"step_human_readable", &grib_accessor_class_step_human_readable}, -#line 14 "accessor_class_list.gperf" - {"bitmap", &grib_accessor_class_bitmap}, -#line 166 "accessor_class_list.gperf" - {"scale", &grib_accessor_class_scale}, -#line 202 "accessor_class_list.gperf" - {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, -#line 52 "accessor_class_list.gperf" - {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, -#line 109 "accessor_class_list.gperf" - {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, -#line 196 "accessor_class_list.gperf" - {"trim", &grib_accessor_class_trim}, -#line 53 "accessor_class_list.gperf" - {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, -#line 84 "accessor_class_list.gperf" - {"g1_section4_length", &grib_accessor_class_g1_section4_length}, -#line 16 "accessor_class_list.gperf" - {"bits_per_value", &grib_accessor_class_bits_per_value}, -#line 193 "accessor_class_list.gperf" - {"to_string", &grib_accessor_class_to_string}, -#line 50 "accessor_class_list.gperf" - {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, -#line 194 "accessor_class_list.gperf" - {"transient", &grib_accessor_class_transient}, -#line 51 "accessor_class_list.gperf" - {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, -#line 46 "accessor_class_list.gperf" - {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, -#line 105 "accessor_class_list.gperf" - {"g2latlon", &grib_accessor_class_g2latlon}, -#line 159 "accessor_class_list.gperf" - {"padtomultiple", &grib_accessor_class_padtomultiple}, -#line 114 "accessor_class_list.gperf" - {"global_gaussian", &grib_accessor_class_global_gaussian}, -#line 165 "accessor_class_list.gperf" - {"round", &grib_accessor_class_round}, -#line 195 "accessor_class_list.gperf" - {"transient_darray", &grib_accessor_class_transient_darray}, - {""}, -#line 177 "accessor_class_list.gperf" - {"simple_packing_error", &grib_accessor_class_simple_packing_error}, -#line 174 "accessor_class_list.gperf" - {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, -#line 173 "accessor_class_list.gperf" - {"select_step_template", &grib_accessor_class_select_step_template}, -#line 78 "accessor_class_list.gperf" - {"element", &grib_accessor_class_element}, -#line 160 "accessor_class_list.gperf" - {"position", &grib_accessor_class_position}, -#line 128 "accessor_class_list.gperf" - {"latitudes", &grib_accessor_class_latitudes}, -#line 183 "accessor_class_list.gperf" - {"sprintf", &grib_accessor_class_sprintf}, -#line 182 "accessor_class_list.gperf" - {"spectral_truncation", &grib_accessor_class_spectral_truncation}, -#line 213 "accessor_class_list.gperf" - {"when", &grib_accessor_class_when}, -#line 200 "accessor_class_list.gperf" - {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, -#line 88 "accessor_class_list.gperf" - {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, -#line 133 "accessor_class_list.gperf" - {"long", &grib_accessor_class_long}, -#line 139 "accessor_class_list.gperf" - {"md5", &grib_accessor_class_md5}, -#line 77 "accessor_class_list.gperf" - {"double", &grib_accessor_class_double}, - {""}, {""}, -#line 140 "accessor_class_list.gperf" - {"message", &grib_accessor_class_message}, - {""}, -#line 70 "accessor_class_list.gperf" - {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, -#line 137 "accessor_class_list.gperf" - {"mars_param", &grib_accessor_class_mars_param}, - {""}, {""}, -#line 161 "accessor_class_list.gperf" - {"proj_string", &grib_accessor_class_proj_string}, -#line 71 "accessor_class_list.gperf" - {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, -#line 189 "accessor_class_list.gperf" - {"suppressed", &grib_accessor_class_suppressed}, -#line 126 "accessor_class_list.gperf" - {"ksec1expver", &grib_accessor_class_ksec1expver}, -#line 29 "accessor_class_list.gperf" - {"bytes", &grib_accessor_class_bytes}, -#line 141 "accessor_class_list.gperf" - {"message_copy", &grib_accessor_class_message_copy}, - {""}, -#line 198 "accessor_class_list.gperf" - {"uint16_little_endian", &grib_accessor_class_uint16_little_endian}, -#line 89 "accessor_class_list.gperf" - {"g1fcperiod", &grib_accessor_class_g1fcperiod}, - {""}, {""}, {""}, -#line 76 "accessor_class_list.gperf" - {"divdouble", &grib_accessor_class_divdouble}, - {""}, {""}, -#line 99 "accessor_class_list.gperf" - {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, - {""}, {""}, +#line 191 "accessor_class_list.gperf" + {"to_double", &grib_accessor_class_to_double}, +#line 101 "accessor_class_list.gperf" + {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, #line 120 "accessor_class_list.gperf" {"ieeefloat", &grib_accessor_class_ieeefloat}, #line 151 "accessor_class_list.gperf" {"offset_file", &grib_accessor_class_offset_file}, - {""}, {""}, -#line 101 "accessor_class_list.gperf" - {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, - {""}, -#line 210 "accessor_class_list.gperf" - {"values", &grib_accessor_class_values}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, -#line 138 "accessor_class_list.gperf" - {"mars_step", &grib_accessor_class_mars_step}, -#line 19 "accessor_class_list.gperf" - {"bufr_data_array", &grib_accessor_class_bufr_data_array}, - {""}, -#line 20 "accessor_class_list.gperf" - {"bufr_data_element", &grib_accessor_class_bufr_data_element}, - {""}, {""}, {""}, -#line 26 "accessor_class_list.gperf" - {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, - {""}, {""}, {""}, -#line 127 "accessor_class_list.gperf" - {"label", &grib_accessor_class_label}, -#line 116 "accessor_class_list.gperf" - {"gts_header", &grib_accessor_class_gts_header}, -#line 28 "accessor_class_list.gperf" - {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, - {""}, -#line 38 "accessor_class_list.gperf" - {"concept", &grib_accessor_class_concept}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 144 "accessor_class_list.gperf" - {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, - {""}, {""}, -#line 136 "accessor_class_list.gperf" - {"lookup", &grib_accessor_class_lookup}, -#line 17 "accessor_class_list.gperf" - {"blob", &grib_accessor_class_blob}, - {""}, -#line 39 "accessor_class_list.gperf" - {"constant", &grib_accessor_class_constant}, -#line 121 "accessor_class_list.gperf" - {"ifs_param", &grib_accessor_class_ifs_param}, -#line 135 "accessor_class_list.gperf" - {"longitudes", &grib_accessor_class_longitudes}, -#line 119 "accessor_class_list.gperf" - {"ibmfloat", &grib_accessor_class_ibmfloat}, -#line 150 "accessor_class_list.gperf" - {"octet_number", &grib_accessor_class_octet_number}, -#line 18 "accessor_class_list.gperf" - {"budgdate", &grib_accessor_class_budgdate}, -#line 208 "accessor_class_list.gperf" +#line 207 "accessor_class_list.gperf" {"validity_date", &grib_accessor_class_validity_date}, -#line 209 "accessor_class_list.gperf" +#line 208 "accessor_class_list.gperf" {"validity_time", &grib_accessor_class_validity_time}, -#line 91 "accessor_class_list.gperf" - {"g1monthlydate", &grib_accessor_class_g1monthlydate}, {""}, -#line 212 "accessor_class_list.gperf" - {"vector", &grib_accessor_class_vector}, - {""}, -#line 117 "accessor_class_list.gperf" - {"hash_array", &grib_accessor_class_hash_array}, - {""}, -#line 179 "accessor_class_list.gperf" - {"smart_table", &grib_accessor_class_smart_table}, - {""}, {""}, {""}, -#line 122 "accessor_class_list.gperf" - {"int64_little_endian", &grib_accessor_class_int64_little_endian}, -#line 158 "accessor_class_list.gperf" - {"padtoeven", &grib_accessor_class_padtoeven}, - {""}, -#line 180 "accessor_class_list.gperf" - {"smart_table_column", &grib_accessor_class_smart_table_column}, - {""}, {""}, -#line 134 "accessor_class_list.gperf" - {"long_vector", &grib_accessor_class_long_vector}, #line 131 "accessor_class_list.gperf" {"library_version", &grib_accessor_class_library_version}, -#line 82 "accessor_class_list.gperf" - {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, -#line 152 "accessor_class_list.gperf" - {"offset_values", &grib_accessor_class_offset_values}, +#line 211 "accessor_class_list.gperf" + {"vector", &grib_accessor_class_vector}, + {""}, {""}, +#line 52 "accessor_class_list.gperf" + {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, +#line 84 "accessor_class_list.gperf" + {"g1_section4_length", &grib_accessor_class_g1_section4_length}, {""}, -#line 129 "accessor_class_list.gperf" - {"latlon_increment", &grib_accessor_class_latlon_increment}, -#line 118 "accessor_class_list.gperf" - {"headers_only", &grib_accessor_class_headers_only}, - {""}, {""}, {""}, {""}, {""}, {""}, -#line 191 "accessor_class_list.gperf" - {"to_double", &grib_accessor_class_to_double}, +#line 53 "accessor_class_list.gperf" + {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, {""}, -#line 27 "accessor_class_list.gperf" - {"bufr_string_values", &grib_accessor_class_bufr_string_values}, - {""}, {""}, {""}, {""}, {""}, {""}, +#line 24 "accessor_class_list.gperf" + {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, +#line 158 "accessor_class_list.gperf" + {"padtoeven", &grib_accessor_class_padtoeven}, +#line 50 "accessor_class_list.gperf" + {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, + {""}, +#line 51 "accessor_class_list.gperf" + {"data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing}, +#line 22 "accessor_class_list.gperf" + {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, + {""}, {""}, {""}, +#line 23 "accessor_class_list.gperf" + {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, + {""}, +#line 21 "accessor_class_list.gperf" + {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, + {""}, {""}, {""}, {""}, #line 153 "accessor_class_list.gperf" {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, -#line 73 "accessor_class_list.gperf" - {"decimal_precision", &grib_accessor_class_decimal_precision}, - {""}, {""}, -#line 69 "accessor_class_list.gperf" - {"data_sh_packed", &grib_accessor_class_data_sh_packed}, - {""}, {""}, -#line 147 "accessor_class_list.gperf" - {"number_of_values", &grib_accessor_class_number_of_values}, - {""}, {""}, {""}, +#line 35 "accessor_class_list.gperf" + {"codetable", &grib_accessor_class_codetable}, #line 132 "accessor_class_list.gperf" {"local_definition", &grib_accessor_class_local_definition}, - {""}, {""}, + {""}, #line 25 "accessor_class_list.gperf" {"bufr_group", &grib_accessor_class_bufr_group}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 211 "accessor_class_list.gperf" + {""}, +#line 88 "accessor_class_list.gperf" + {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, +#line 147 "accessor_class_list.gperf" + {"number_of_values", &grib_accessor_class_number_of_values}, + {""}, +#line 116 "accessor_class_list.gperf" + {"gts_header", &grib_accessor_class_gts_header}, + {""}, +#line 33 "accessor_class_list.gperf" + {"closest_date", &grib_accessor_class_closest_date}, + {""}, {""}, +#line 210 "accessor_class_list.gperf" {"variable", &grib_accessor_class_variable}, +#line 134 "accessor_class_list.gperf" + {"long_vector", &grib_accessor_class_long_vector}, +#line 167 "accessor_class_list.gperf" + {"scale_values", &grib_accessor_class_scale_values}, + {""}, {""}, {""}, +#line 129 "accessor_class_list.gperf" + {"latlon_increment", &grib_accessor_class_latlon_increment}, + {""}, {""}, {""}, #line 148 "accessor_class_list.gperf" {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, {""}, #line 79 "accessor_class_list.gperf" {"evaluate", &grib_accessor_class_evaluate}, {""}, {""}, {""}, {""}, {""}, -#line 34 "accessor_class_list.gperf" - {"codeflag", &grib_accessor_class_codeflag}, - {""}, {""}, {""}, {""}, -#line 205 "accessor_class_list.gperf" - {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, - {""}, {""}, {""}, {""}, -#line 33 "accessor_class_list.gperf" - {"closest_date", &grib_accessor_class_closest_date}, - {""}, {""}, -#line 30 "accessor_class_list.gperf" - {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, - {""}, -#line 167 "accessor_class_list.gperf" - {"scale_values", &grib_accessor_class_scale_values}, - {""}, {""}, {""}, -#line 21 "accessor_class_list.gperf" - {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, -#line 31 "accessor_class_list.gperf" - {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, - {""}, {""}, {""}, -#line 87 "accessor_class_list.gperf" - {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, - {""}, {""}, -#line 24 "accessor_class_list.gperf" - {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, -#line 149 "accessor_class_list.gperf" - {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, - {""}, {""}, {""}, -#line 22 "accessor_class_list.gperf" - {"bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets}, - {""}, {""}, -#line 35 "accessor_class_list.gperf" - {"codetable", &grib_accessor_class_codetable}, -#line 23 "accessor_class_list.gperf" - {"bufr_extract_datetime_subsets", &grib_accessor_class_bufr_extract_datetime_subsets}, -#line 106 "accessor_class_list.gperf" - {"g2level", &grib_accessor_class_g2level}, -#line 95 "accessor_class_list.gperf" - {"g1verificationdate", &grib_accessor_class_g1verificationdate}, - {""}, {""}, {""}, -#line 40 "accessor_class_list.gperf" - {"count_file", &grib_accessor_class_count_file}, +#line 152 "accessor_class_list.gperf" + {"offset_values", &grib_accessor_class_offset_values}, +#line 69 "accessor_class_list.gperf" + {"data_sh_packed", &grib_accessor_class_data_sh_packed}, #line 11 "accessor_class_list.gperf" {"abstract_vector", &grib_accessor_class_abstract_vector}, - {""}, {""}, -#line 130 "accessor_class_list.gperf" - {"latlonvalues", &grib_accessor_class_latlonvalues}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, -#line 42 "accessor_class_list.gperf" - {"count_total", &grib_accessor_class_count_total}, - {""}, {""}, {""}, -#line 81 "accessor_class_list.gperf" - {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 118 "accessor_class_list.gperf" + {"headers_only", &grib_accessor_class_headers_only}, +#line 126 "accessor_class_list.gperf" + {"ksec1expver", &grib_accessor_class_ksec1expver}, {""}, {""}, #line 41 "accessor_class_list.gperf" {"count_missing", &grib_accessor_class_count_missing}, - {""}, {""}, {""}, {""}, +#line 204 "accessor_class_list.gperf" + {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, + {""}, {""}, +#line 121 "accessor_class_list.gperf" + {"ifs_param", &grib_accessor_class_ifs_param}, + {""}, {""}, {""}, #line 36 "accessor_class_list.gperf" {"codetable_title", &grib_accessor_class_codetable_title}, + {""}, {""}, {""}, +#line 89 "accessor_class_list.gperf" + {"g1fcperiod", &grib_accessor_class_g1fcperiod}, +#line 34 "accessor_class_list.gperf" + {"codeflag", &grib_accessor_class_codeflag}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 106 "accessor_class_list.gperf" + {"g2level", &grib_accessor_class_g2level}, +#line 42 "accessor_class_list.gperf" + {"count_total", &grib_accessor_class_count_total}, + {""}, +#line 117 "accessor_class_list.gperf" + {"hash_array", &grib_accessor_class_hash_array}, + {""}, {""}, +#line 37 "accessor_class_list.gperf" + {"codetable_units", &grib_accessor_class_codetable_units}, + {""}, {""}, +#line 130 "accessor_class_list.gperf" + {"latlonvalues", &grib_accessor_class_latlonvalues}, + {""}, {""}, {""}, {""}, +#line 30 "accessor_class_list.gperf" + {"change_alternative_row_scanning", &grib_accessor_class_change_alternative_row_scanning}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 31 "accessor_class_list.gperf" + {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 149 "accessor_class_list.gperf" + {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, +#line 10 "accessor_class_list.gperf" + {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, + {""}, {""}, {""}, +#line 40 "accessor_class_list.gperf" + {"count_file", &grib_accessor_class_count_file}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 91 "accessor_class_list.gperf" + {"g1monthlydate", &grib_accessor_class_g1monthlydate}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 82 "accessor_class_list.gperf" + {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, + {""}, +#line 81 "accessor_class_list.gperf" + {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 32 "accessor_class_list.gperf" + {"check_internal_version", &grib_accessor_class_check_internal_version}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 97 "accessor_class_list.gperf" + {"g2_chemical", &grib_accessor_class_g2_chemical}, +#line 87 "accessor_class_list.gperf" + {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, + {""}, {""}, {""}, {""}, {""}, +#line 164 "accessor_class_list.gperf" + {"reference_value_error", &grib_accessor_class_reference_value_error}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, #line 93 "accessor_class_list.gperf" {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, #line 92 "accessor_class_list.gperf" {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 164 "accessor_class_list.gperf" - {"reference_value_error", &grib_accessor_class_reference_value_error}, -#line 32 "accessor_class_list.gperf" - {"check_internal_version", &grib_accessor_class_check_internal_version}, - {""}, {""}, -#line 10 "accessor_class_list.gperf" - {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, -#line 37 "accessor_class_list.gperf" - {"codetable_units", &grib_accessor_class_codetable_units}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, #line 90 "accessor_class_list.gperf" {"g1forecastmonth", &grib_accessor_class_g1forecastmonth}, - {""}, {""}, {""}, {""}, {""}, -#line 97 "accessor_class_list.gperf" - {"g2_chemical", &grib_accessor_class_g2_chemical} + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 95 "accessor_class_list.gperf" + {"g1verificationdate", &grib_accessor_class_g1verificationdate} }; static const struct accessor_class_hash* grib_accessor_classes_hash(const char *str, size_t len) diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index 114886b0c..3dea70b57 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -187,7 +187,6 @@ { "transient_darray", &grib_accessor_class_transient_darray, }, { "trim", &grib_accessor_class_trim, }, { "uint16", &grib_accessor_class_uint16, }, -{ "uint16_little_endian", &grib_accessor_class_uint16_little_endian, }, { "uint32", &grib_accessor_class_uint32, }, { "uint32_little_endian", &grib_accessor_class_uint32_little_endian, }, { "uint64", &grib_accessor_class_uint64, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index 08cb2a7b4..c26759217 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -188,7 +188,6 @@ transient, &grib_accessor_class_transient transient_darray, &grib_accessor_class_transient_darray trim, &grib_accessor_class_trim uint16, &grib_accessor_class_uint16 -uint16_little_endian, &grib_accessor_class_uint16_little_endian uint32, &grib_accessor_class_uint32 uint32_little_endian, &grib_accessor_class_uint32_little_endian uint64, &grib_accessor_class_uint64 From 3932f86df3dc0b5197a0c0c1cfc7a8e6db24103a Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 29 Aug 2023 11:23:29 +0100 Subject: [PATCH 279/372] Testing: Increase coverage --- tests/gts_compare.sh | 10 +++++++++- tests/metar_compare.sh | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/tests/gts_compare.sh b/tests/gts_compare.sh index 88d3d899c..3fd648a1d 100755 --- a/tests/gts_compare.sh +++ b/tests/gts_compare.sh @@ -40,7 +40,7 @@ cat > $fRules< $fMetarTmp set +e -${tools_dir}/metar_compare -v -d $metar_file $fMetarTmp +${tools_dir}/metar_compare -v -d -f $metar_file $fMetarTmp status=$? set -e if [ $status -eq 0 ]; then From cf50f62e0ac4220e72d809b7b14289d05635aaba Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 29 Aug 2023 14:03:22 +0100 Subject: [PATCH 280/372] ECC-1673: MARS: add mars.number to the combination ocda/tpa --- definitions/mars/grib.ocda.tpa.def | 3 +++ src/grib_dumper_class_grib_encode_C.cc | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/definitions/mars/grib.ocda.tpa.def b/definitions/mars/grib.ocda.tpa.def index d46a8bd2a..d9c2ce22f 100644 --- a/definitions/mars/grib.ocda.tpa.def +++ b/definitions/mars/grib.ocda.tpa.def @@ -6,3 +6,6 @@ alias mars.time = dataTime; unalias mars.step; alias mars.step = stepRange; +if (defined(perturbationNumber)) { + alias mars.number = perturbationNumber; +} diff --git a/src/grib_dumper_class_grib_encode_C.cc b/src/grib_dumper_class_grib_encode_C.cc index 91d07b688..5ecb6953d 100644 --- a/src/grib_dumper_class_grib_encode_C.cc +++ b/src/grib_dumper_class_grib_encode_C.cc @@ -342,7 +342,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) fprintf(self->dumper.out, " size = %zu;\n", size); fprintf(self->dumper.out, " v%s = (%s*)calloc(size,sizeof(%s));\n", stype, stype, stype); fprintf(self->dumper.out, " if(!v%s) {\n", stype); - fprintf(self->dumper.out, " fprintf(stderr,\"failed to allocate %%d bytes\\n\",size*sizeof(%s));\n", stype); + fprintf(self->dumper.out, " fprintf(stderr,\"failed to allocate %%zu bytes\\n\",size*sizeof(%s));\n", stype); fprintf(self->dumper.out, " exit(1);\n"); fprintf(self->dumper.out, " }\n"); From 2e5b0bc69a3af31e8cf61876bf3ac14433037fef Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 29 Aug 2023 19:33:15 +0100 Subject: [PATCH 281/372] Better error messages --- src/grib_iterator_class.cc | 2 +- src/grib_nearest_class.cc | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/grib_iterator_class.cc b/src/grib_iterator_class.cc index 0197a09a4..4e3a166fb 100644 --- a/src/grib_iterator_class.cc +++ b/src/grib_iterator_class.cc @@ -52,7 +52,7 @@ grib_iterator* grib_iterator_factory(grib_handle* h, grib_arguments* args, unsig return NULL; } - grib_context_log(h->context, GRIB_LOG_ERROR, "Geoiterator factory: Unknown type: %s for iterator", type); + grib_context_log(h->context, GRIB_LOG_ERROR, "Geoiterator factory: Unknown type: %s", type); return NULL; } diff --git a/src/grib_nearest_class.cc b/src/grib_nearest_class.cc index edb4c74cc..7f5c92398 100644 --- a/src/grib_nearest_class.cc +++ b/src/grib_nearest_class.cc @@ -8,11 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * - */ - - #include "grib_api_internal.h" #define NUMBER(x) (sizeof(x) / sizeof(x[0])) @@ -45,12 +40,13 @@ grib_nearest* grib_nearest_factory(grib_handle* h, grib_arguments* args) ret = grib_nearest_init(it, h, args); if (ret == GRIB_SUCCESS) return it; - grib_context_log(h->context, GRIB_LOG_ERROR, "grib_nearest_factory: error %d instantiating nearest %s", ret, table[i].type); + grib_context_log(h->context, GRIB_LOG_ERROR, "grib_nearest_factory: Error instantiating nearest %s (%s)", + table[i].type, grib_get_error_message(ret)); grib_nearest_delete(it); return NULL; } - grib_context_log(h->context, GRIB_LOG_ERROR, "grib_nearest_factory : Unknown type : %s for nearest", type); + grib_context_log(h->context, GRIB_LOG_ERROR, "grib_nearest_factory: Unknown type: %s", type); return NULL; } From 33cd475fe04ae32cb150261e4b109d8c50f65f81 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 30 Aug 2023 10:00:44 +0100 Subject: [PATCH 282/372] ECC-1675: C internals: Add error argument to grib_nearest_factory function --- src/eccodes_prototypes.h | 2 +- src/grib_accessor_class_nearest.cc | 2 +- src/grib_iterator_class.cc | 13 +++++++------ src/grib_nearest_class.cc | 13 +++++++------ 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 3f2371fb5..0dda8e5bc 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -1284,7 +1284,7 @@ int grib_nearest_find_generic(grib_nearest* nearest, grib_handle* h, double inla double* outlats, double* outlons, double* values, double* distances, int* indexes, size_t* len); /* grib_nearest_class.cc*/ -grib_nearest* grib_nearest_factory(grib_handle* h, grib_arguments* args); +grib_nearest* grib_nearest_factory(grib_handle* h, grib_arguments* args, int* error); /* grib_nearest_class_gen.cc*/ diff --git a/src/grib_accessor_class_nearest.cc b/src/grib_accessor_class_nearest.cc index 0620b5395..b1a3138d3 100644 --- a/src/grib_accessor_class_nearest.cc +++ b/src/grib_accessor_class_nearest.cc @@ -122,7 +122,7 @@ grib_nearest* grib_nearest_new(const grib_handle* ch, int* error) if (!a) return NULL; - n = grib_nearest_factory(h, na->args); + n = grib_nearest_factory(h, na->args, error); if (n) *error = GRIB_SUCCESS; diff --git a/src/grib_iterator_class.cc b/src/grib_iterator_class.cc index 4e3a166fb..571221836 100644 --- a/src/grib_iterator_class.cc +++ b/src/grib_iterator_class.cc @@ -31,26 +31,27 @@ static const struct table_entry table[] = { #include "grib_iterator_factory.h" }; -grib_iterator* grib_iterator_factory(grib_handle* h, grib_arguments* args, unsigned long flags, int* ret) +grib_iterator* grib_iterator_factory(grib_handle* h, grib_arguments* args, unsigned long flags, int* error) { size_t i = 0; const char* type = (char*)grib_arguments_get_name(h, args, 0); + *error = GRIB_NOT_IMPLEMENTED; - for (i = 0; i < NUMBER(table); i++) + for (i = 0; i < NUMBER(table); i++) { if (strcmp(type, table[i].type) == 0) { grib_iterator_class* c = *(table[i].cclass); grib_iterator* it = (grib_iterator*)grib_context_malloc_clear(h->context, c->size); it->cclass = c; it->flags = flags; - *ret = GRIB_SUCCESS; - *ret = grib_iterator_init(it, h, args); - if (*ret == GRIB_SUCCESS) + *error = grib_iterator_init(it, h, args); + if (*error == GRIB_SUCCESS) return it; grib_context_log(h->context, GRIB_LOG_ERROR, "Geoiterator factory: Error instantiating iterator %s (%s)", - table[i].type, grib_get_error_message(*ret)); + table[i].type, grib_get_error_message(*error)); grib_iterator_delete(it); return NULL; } + } grib_context_log(h->context, GRIB_LOG_ERROR, "Geoiterator factory: Unknown type: %s", type); diff --git a/src/grib_nearest_class.cc b/src/grib_nearest_class.cc index 7f5c92398..42e618ff8 100644 --- a/src/grib_nearest_class.cc +++ b/src/grib_nearest_class.cc @@ -26,25 +26,26 @@ static const struct table_entry table[] = { #include "grib_nearest_factory.h" }; -grib_nearest* grib_nearest_factory(grib_handle* h, grib_arguments* args) +grib_nearest* grib_nearest_factory(grib_handle* h, grib_arguments* args, int* error) { size_t i = 0; - int ret = GRIB_SUCCESS; + *error = GRIB_NOT_IMPLEMENTED; char* type = (char*)grib_arguments_get_name(h, args, 0); - for (i = 0; i < NUMBER(table); i++) + for (i = 0; i < NUMBER(table); i++) { if (strcmp(type, table[i].type) == 0) { grib_nearest_class* c = *(table[i].cclass); grib_nearest* it = (grib_nearest*)grib_context_malloc_clear(h->context, c->size); it->cclass = c; - ret = grib_nearest_init(it, h, args); - if (ret == GRIB_SUCCESS) + *error = grib_nearest_init(it, h, args); + if (*error == GRIB_SUCCESS) return it; grib_context_log(h->context, GRIB_LOG_ERROR, "grib_nearest_factory: Error instantiating nearest %s (%s)", - table[i].type, grib_get_error_message(ret)); + table[i].type, grib_get_error_message(*error)); grib_nearest_delete(it); return NULL; } + } grib_context_log(h->context, GRIB_LOG_ERROR, "grib_nearest_factory: Unknown type: %s", type); From feb71f9da6ecfe3ea22044301fc95a4818cf6113 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 29 Aug 2023 13:29:28 +0000 Subject: [PATCH 283/372] ECC-1674: GRIB2: Add support for encoding template 5.200 --- definitions/grib2/template.5.200.def | 4 + ..._accessor_class_data_run_length_packing.cc | 118 +++++++++++++++++- 2 files changed, 119 insertions(+), 3 deletions(-) diff --git a/definitions/grib2/template.5.200.def b/definitions/grib2/template.5.200.def index 2ceca0c69..dee6f449c 100644 --- a/definitions/grib2/template.5.200.def +++ b/definitions/grib2/template.5.200.def @@ -2,6 +2,10 @@ # TEMPLATE 5.200, Grid point data - Run length packing with level values +# added for conversion from other packing +transient referenceValue=0 : hidden; +transient binaryScaleFactor=0 : hidden; + unsigned[1] bitsPerValue : dump; unsigned[2] maxLevelValue : dump; unsigned[2] numberOfLevelValues : dump; diff --git a/src/grib_accessor_class_data_run_length_packing.cc b/src/grib_accessor_class_data_run_length_packing.cc index cfe5370e0..da2d68a85 100644 --- a/src/grib_accessor_class_data_run_length_packing.cc +++ b/src/grib_accessor_class_data_run_length_packing.cc @@ -249,7 +249,119 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) static int pack_double(grib_accessor* a, const double* val, size_t* len) { - grib_context_log(a->context, GRIB_LOG_ERROR, - "%s: Function '%s' is not implemented", a->cclass->name, __func__); - return GRIB_NOT_IMPLEMENTED; + grib_accessor_data_run_length_packing* self = (grib_accessor_data_run_length_packing*)a; + grib_handle* gh = grib_handle_of_accessor(a); + int err = GRIB_SUCCESS; + long number_of_values, bits_per_value, max_level_value, number_of_level_values, decimal_scale_factor; + long* level_values = NULL; + size_t level_values_size = 0; + int i = 0; + long range = 0, pos = 0, n = 0, j = 0, k = 0, l = 0, missingValueLong = 0; + double level_scale_factor = 0; + unsigned char* buf = NULL; + double missingValue = 9999.0; + size_t n_vals = *len; + + if ((err = grib_get_long_internal(gh, self->number_of_values, &number_of_values)) != GRIB_SUCCESS) + return err; + if ((err = grib_get_long_internal(gh, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) + return err; + if ((err = grib_get_long_internal(gh, self->max_level_value, &max_level_value)) != GRIB_SUCCESS) + return err; + if ((err = grib_get_long_internal(gh, self->number_of_level_values, &number_of_level_values)) != GRIB_SUCCESS) + return err; + if ((err = grib_get_long_internal(gh, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + return err; + if ((err = grib_get_double(gh, "missingValue", &missingValue)) != GRIB_SUCCESS) + return err; + + if (n_vals != number_of_values) { + grib_context_log(a->context, GRIB_LOG_ERROR, "parameters are invalid: n_vals=%ld(==number_of_values), number_of_values=%ld(==n_vals)", n_vals, number_of_values); + return GRIB_ENCODING_ERROR; + } + level_values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * number_of_level_values); + level_values_size = number_of_level_values; + if ((err = grib_get_long_array_internal(gh, self->level_values, level_values, &level_values_size)) != GRIB_SUCCESS) + return err; + if (decimal_scale_factor > 127) { + decimal_scale_factor = -(decimal_scale_factor - 128); + } + level_scale_factor = grib_power(-decimal_scale_factor, 10.0); + missingValueLong = (long)(round(missingValue / level_scale_factor)); + for (i = 0; i < number_of_level_values; i++) { + if (missingValueLong == level_values[i]) { + grib_context_log(a->context, GRIB_LOG_ERROR, "parameters are invalid: level_values[%ld]=%ld, missingValueLong=%ld", i, level_values[i], missingValueLong); + return GRIB_ENCODING_ERROR; + } + } + range = (1 << bits_per_value) - 1 - max_level_value; + if ((max_level_value <= 0) || (number_of_level_values <= 0) || (max_level_value > number_of_level_values) || (range <= 0)) { + grib_context_log(a->context, GRIB_LOG_ERROR, "parameters are invalid: max_level_value=%ld(>0, <=number_of_level_values), number_of_level_values=%ld(>0, >=max_level_value), range=%ld(>0)", max_level_value, number_of_level_values, range); + return GRIB_ENCODING_ERROR; + } + buf = (unsigned char*)grib_context_malloc(a->context, 2 * number_of_values); + for (i = 0; i < number_of_values; i++) { + k = (long)(round(val[i] / level_scale_factor)); + err = GRIB_ENCODING_ERROR; + if (missingValueLong == k) { + k = 0; + err = GRIB_SUCCESS; + } else { + for (j = 0; j < max_level_value; j++) { + if (level_values[j] == k) { + k = j + 1; + err = GRIB_SUCCESS; + break; + } + } + } + if (err != GRIB_SUCCESS) { + grib_context_log(a->context, GRIB_LOG_ERROR, "values and/or parameters are invalid: val[%ld]=%lf, level_value=%ld, max_level_value=%ld", i, val[i], k, max_level_value); + return GRIB_ENCODING_ERROR; + } + if (i == 0) { + grib_encode_unsigned_longb(buf, k, &pos, bits_per_value); + } else if (i == number_of_values - 1) { + if (k != l) { + if (n == 0) { + grib_encode_unsigned_longb(buf, k, &pos, bits_per_value); + } else { + while (n >= range) { + grib_encode_unsigned_longb(buf, (n % range) + max_level_value + 1, &pos, bits_per_value); + n = n / range; + } + grib_encode_unsigned_longb(buf, n + max_level_value + 1, &pos, bits_per_value); + grib_encode_unsigned_longb(buf, k, &pos, bits_per_value); + } + } else { + n = n + 1; + while (n >= range) { + grib_encode_unsigned_longb(buf, (n % range) + max_level_value + 1, &pos, bits_per_value); + n = n / range; + } + grib_encode_unsigned_longb(buf, n + max_level_value + 1, &pos, bits_per_value); + } + } else { + if (k != l) { + if ( n == 0 ) { + grib_encode_unsigned_longb(buf, k, &pos, bits_per_value); + } else { + while (n >= range) { + grib_encode_unsigned_longb(buf, (n % range) + max_level_value + 1, &pos, bits_per_value); + n = n / range; + } + grib_encode_unsigned_longb(buf, n + max_level_value + 1, &pos, bits_per_value); + grib_encode_unsigned_longb(buf, k, &pos, bits_per_value); + n = 0; + } + } else { + n = n + 1; + } + } + l = k; + } + grib_context_free(a->context, level_values); + grib_buffer_replace(a, buf, pos/8, 1, 1); + grib_context_buffer_free(a->context, buf); + return err; } From 6df2b29839b1d34f73449202be2fdb2c6ff4c912 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 29 Aug 2023 15:09:21 +0100 Subject: [PATCH 284/372] ECC-1674: Better error messages --- ...rib_accessor_class_data_run_length_packing.cc | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/grib_accessor_class_data_run_length_packing.cc b/src/grib_accessor_class_data_run_length_packing.cc index da2d68a85..72ea167ea 100644 --- a/src/grib_accessor_class_data_run_length_packing.cc +++ b/src/grib_accessor_class_data_run_length_packing.cc @@ -251,6 +251,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) { grib_accessor_data_run_length_packing* self = (grib_accessor_data_run_length_packing*)a; grib_handle* gh = grib_handle_of_accessor(a); + const char* cclass_name = a->cclass->name; int err = GRIB_SUCCESS; long number_of_values, bits_per_value, max_level_value, number_of_level_values, decimal_scale_factor; long* level_values = NULL; @@ -276,7 +277,8 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) return err; if (n_vals != number_of_values) { - grib_context_log(a->context, GRIB_LOG_ERROR, "parameters are invalid: n_vals=%ld(==number_of_values), number_of_values=%ld(==n_vals)", n_vals, number_of_values); + grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Parameters are invalid: n_vals=%ld(==number_of_values), number_of_values=%ld(==n_vals)", + cclass_name, n_vals, number_of_values); return GRIB_ENCODING_ERROR; } level_values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * number_of_level_values); @@ -290,13 +292,17 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) missingValueLong = (long)(round(missingValue / level_scale_factor)); for (i = 0; i < number_of_level_values; i++) { if (missingValueLong == level_values[i]) { - grib_context_log(a->context, GRIB_LOG_ERROR, "parameters are invalid: level_values[%ld]=%ld, missingValueLong=%ld", i, level_values[i], missingValueLong); + grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Parameters are invalid: level_values[%d]=%ld, missingValueLong=%ld", + cclass_name, i, level_values[i], missingValueLong); return GRIB_ENCODING_ERROR; } } range = (1 << bits_per_value) - 1 - max_level_value; if ((max_level_value <= 0) || (number_of_level_values <= 0) || (max_level_value > number_of_level_values) || (range <= 0)) { - grib_context_log(a->context, GRIB_LOG_ERROR, "parameters are invalid: max_level_value=%ld(>0, <=number_of_level_values), number_of_level_values=%ld(>0, >=max_level_value), range=%ld(>0)", max_level_value, number_of_level_values, range); + grib_context_log(a->context, GRIB_LOG_ERROR, + "%s: Parameters are invalid: max_level_value=%ld(>0, <=number_of_level_values), " + "number_of_level_values=%ld(>0, >=max_level_value), range=%ld(>0)", + cclass_name, max_level_value, number_of_level_values, range); return GRIB_ENCODING_ERROR; } buf = (unsigned char*)grib_context_malloc(a->context, 2 * number_of_values); @@ -316,7 +322,9 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) } } if (err != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_ERROR, "values and/or parameters are invalid: val[%ld]=%lf, level_value=%ld, max_level_value=%ld", i, val[i], k, max_level_value); + grib_context_log(a->context, GRIB_LOG_ERROR, + "%s: Values and/or parameters are invalid: val[%ld]=%lf, level_value=%ld, max_level_value=%ld", + cclass_name, i, val[i], k, max_level_value); return GRIB_ENCODING_ERROR; } if (i == 0) { From 78bc61ed66c20c72c3df5bbea9417075a6e0fede Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 29 Aug 2023 15:18:53 +0100 Subject: [PATCH 285/372] ECC-1674: Fix variable types --- src/grib_accessor_class_data_run_length_packing.cc | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/grib_accessor_class_data_run_length_packing.cc b/src/grib_accessor_class_data_run_length_packing.cc index 72ea167ea..3fa8f44c6 100644 --- a/src/grib_accessor_class_data_run_length_packing.cc +++ b/src/grib_accessor_class_data_run_length_packing.cc @@ -149,8 +149,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) long seclen, number_of_values, bits_per_value, max_level_value, number_of_level_values, decimal_scale_factor; long* level_values = NULL; size_t level_values_size = 0; - int i = 0; - long number_of_compressed_values = 0, range = 0, offsetBeforeData = 0, pos = 0; + long i = 0, number_of_compressed_values = 0, range = 0, offsetBeforeData = 0, pos = 0; long v, n, factor, k, j; long* compressed_values = NULL; double level_scale_factor = 0; @@ -214,7 +213,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) while (i < number_of_compressed_values) { if (compressed_values[i] > max_level_value) { grib_context_log(a->context, GRIB_LOG_ERROR, - "%s: numberOfValues mismatch: i=%d, " + "%s: numberOfValues mismatch: i=%ld, " "compressed_values[i]=%ld, max_level_value=%ld", cclass_name, i, compressed_values[i], max_level_value); break; @@ -256,8 +255,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) long number_of_values, bits_per_value, max_level_value, number_of_level_values, decimal_scale_factor; long* level_values = NULL; size_t level_values_size = 0; - int i = 0; - long range = 0, pos = 0, n = 0, j = 0, k = 0, l = 0, missingValueLong = 0; + long i = 0, range = 0, pos = 0, n = 0, j = 0, k = 0, l = 0, missingValueLong = 0; double level_scale_factor = 0; unsigned char* buf = NULL; double missingValue = 9999.0; @@ -292,7 +290,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) missingValueLong = (long)(round(missingValue / level_scale_factor)); for (i = 0; i < number_of_level_values; i++) { if (missingValueLong == level_values[i]) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Parameters are invalid: level_values[%d]=%ld, missingValueLong=%ld", + grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Parameters are invalid: level_values[%ld]=%ld, missingValueLong=%ld", cclass_name, i, level_values[i], missingValueLong); return GRIB_ENCODING_ERROR; } From a3b40577dd2d1ba2bac4635ddb53b2e3f8dade4e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 30 Aug 2023 10:35:28 +0000 Subject: [PATCH 286/372] Cleanup --- definitions/grib2/template.7.200.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/definitions/grib2/template.7.200.def b/definitions/grib2/template.7.200.def index 3c738cacb..71459b2cf 100644 --- a/definitions/grib2/template.7.200.def +++ b/definitions/grib2/template.7.200.def @@ -1,6 +1,6 @@ # (C) Copyright 2005- ECMWF. -# TEMPLATE 7.200, Grid point data – run length packing with level values +# TEMPLATE 7.200, Grid point data - Run length packing with level values meta codedValues data_run_length_packing( section7Length, From f4ba4e071f0cf20f65232cff6af941069482742d Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 30 Aug 2023 10:36:48 +0000 Subject: [PATCH 287/372] ECC-1674: Treatment of constant fields --- src/grib_accessor_class_data_run_length_packing.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/grib_accessor_class_data_run_length_packing.cc b/src/grib_accessor_class_data_run_length_packing.cc index 3fa8f44c6..61e581185 100644 --- a/src/grib_accessor_class_data_run_length_packing.cc +++ b/src/grib_accessor_class_data_run_length_packing.cc @@ -279,6 +279,12 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) cclass_name, n_vals, number_of_values); return GRIB_ENCODING_ERROR; } + + if (bits_per_value == 0) { + // TODO(masn): What are we meant to do with constant fields? + return GRIB_SUCCESS; + } + level_values = (long*)grib_context_malloc_clear(a->context, sizeof(long) * number_of_level_values); level_values_size = number_of_level_values; if ((err = grib_get_long_array_internal(gh, self->level_values, level_values, &level_values_size)) != GRIB_SUCCESS) From cfc96163b804d9236a01a46caf0823a131a2f543 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 30 Aug 2023 11:02:52 +0000 Subject: [PATCH 288/372] ECC-1674: Test added --- tests/CMakeLists.txt | 1 + tests/grib_run_length_packing.cc | 75 ++++++++++++++++++++++++++++++++ tests/grib_run_length_packing.sh | 13 ++++++ 3 files changed, 89 insertions(+) create mode 100644 tests/grib_run_length_packing.cc diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 2e478eefc..1595e759e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -32,6 +32,7 @@ list(APPEND test_c_bins grib_optimize_scaling grib_optimize_scaling_sh grib_set_force + grib_run_length_packing grib_partial_message grib_ecc-386 grib_ecc-1467 diff --git a/tests/grib_run_length_packing.cc b/tests/grib_run_length_packing.cc new file mode 100644 index 000000000..15a88619f --- /dev/null +++ b/tests/grib_run_length_packing.cc @@ -0,0 +1,75 @@ +/* + * (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 +#include "eccodes.h" +#undef NDEBUG +#include + +int main(int argc, char *argv[]) +{ + size_t str_len = 0; + long number_of_values=4, bits_per_value=8, max_level_value=3, number_of_level_values=5, decimal_scale_factor=1; + size_t level_values_length = number_of_level_values; + long level_values[] = {101L, 102L, 103L, 104L, 105L}; + double *values = NULL; + size_t values_length = number_of_values; + values = (double*)malloc(values_length * sizeof(double)); + int i = 0; + values[0] = 9999.0; + + assert(argc == 2); + + for (i=1; i Date: Wed, 30 Aug 2023 12:22:44 +0100 Subject: [PATCH 289/372] ECC-1674: Tests --- tests/grib_run_length_packing.cc | 81 +++++++++++++------------------- tests/grib_run_length_packing.sh | 3 +- 2 files changed, 35 insertions(+), 49 deletions(-) diff --git a/tests/grib_run_length_packing.cc b/tests/grib_run_length_packing.cc index 15a88619f..f80ddae8a 100644 --- a/tests/grib_run_length_packing.cc +++ b/tests/grib_run_length_packing.cc @@ -12,63 +12,48 @@ #undef NDEBUG #include -int main(int argc, char *argv[]) +int main(int argc, char* argv[]) { - size_t str_len = 0; - long number_of_values=4, bits_per_value=8, max_level_value=3, number_of_level_values=5, decimal_scale_factor=1; + size_t str_len = 0; + long number_of_values = 4, bits_per_value = 8, max_level_value = 3, number_of_level_values = 5, decimal_scale_factor = 1; size_t level_values_length = number_of_level_values; - long level_values[] = {101L, 102L, 103L, 104L, 105L}; - double *values = NULL; - size_t values_length = number_of_values; - values = (double*)malloc(values_length * sizeof(double)); - int i = 0; - values[0] = 9999.0; + long level_values[] = { 101L, 102L, 103L, 104L, 105L }; + double* values = NULL; + size_t values_length = number_of_values; + values = (double*)malloc(values_length * sizeof(double)); + values[0] = 9999.0; assert(argc == 2); - for (i=1; i Date: Wed, 30 Aug 2023 12:58:55 +0100 Subject: [PATCH 290/372] ECC-1674: Compiler warnings fixed --- tests/grib_run_length_packing.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tests/grib_run_length_packing.cc b/tests/grib_run_length_packing.cc index f80ddae8a..ec6ef53a3 100644 --- a/tests/grib_run_length_packing.cc +++ b/tests/grib_run_length_packing.cc @@ -12,6 +12,8 @@ #undef NDEBUG #include +// Provided by Tatsuya Noyori + int main(int argc, char* argv[]) { size_t str_len = 0; @@ -34,12 +36,13 @@ int main(int argc, char* argv[]) CODES_CHECK(codes_set_long(h, "Ni", sqrt(number_of_values)), 0); CODES_CHECK(codes_set_long(h, "Nj", sqrt(number_of_values)), 0); - CODES_CHECK(codes_set_long(h, "latitudeOfFirstGridPointInDegrees", 35.000000), 0); - CODES_CHECK(codes_set_long(h, "longitudeOfFirstGridPointInDegrees", 135.000000), 0); - CODES_CHECK(codes_set_long(h, "latitudeOfLastGridPointInDegrees", 35.000000 + (0.012500 * sqrt(number_of_values))), 0); - CODES_CHECK(codes_set_long(h, "longitudeOfLastGridPointInDegrees", 135.000000 + (0.008333 * sqrt(number_of_values))), 0); + CODES_CHECK(codes_set_double(h, "latitudeOfFirstGridPointInDegrees", 35.000000), 0); + CODES_CHECK(codes_set_double(h, "longitudeOfFirstGridPointInDegrees", 135.000000), 0); + CODES_CHECK(codes_set_double(h, "latitudeOfLastGridPointInDegrees", 35.000000 + (0.012500 * sqrt(number_of_values))), 0); + CODES_CHECK(codes_set_double(h, "longitudeOfLastGridPointInDegrees", 135.000000 + (0.008333 * sqrt(number_of_values))), 0); CODES_CHECK(codes_set_double(h, "iDirectionIncrementInDegrees", 0.012500), 0); CODES_CHECK(codes_set_double(h, "jDirectionIncrementInDegrees", 0.008333), 0); + CODES_CHECK(codes_set_long(h, "jScansPositively", 1), 0); CODES_CHECK(codes_set_string(h, "shortName", "t", &str_len), 0); CODES_CHECK(codes_set_long(h, "numberOfValues", 1), 0); From 786ffb8cb408e9fb68f20b3bc30202fd0e855f30 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 30 Aug 2023 15:15:05 +0100 Subject: [PATCH 291/372] HEALPix: Set Lo to 45 by default --- definitions/grib2/template.3.healpix.def | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/definitions/grib2/template.3.healpix.def b/definitions/grib2/template.3.healpix.def index 0975a039b..47e1a63f8 100644 --- a/definitions/grib2/template.3.healpix.def +++ b/definitions/grib2/template.3.healpix.def @@ -12,9 +12,10 @@ alias numberOfPointsAlongASide = Nside; alias geography.Nside = Nside; # Longitude of the centre line of the first rhomboid -unsigned[4] longitudeOfFirstGridPoint : edition_specific,dump; +unsigned[4] longitudeOfFirstGridPoint = 45000000 : edition_specific,dump; alias Lo = longitudeOfFirstGridPoint; -alias geography.longitudeOfFirstGridPoint = longitudeOfFirstGridPoint; +meta geography.longitudeOfFirstGridPointInDegrees + scale(longitudeOfFirstGridPoint,one,grib2divider,truncateDegrees) : dump; # Position of the points. Default = Grid points at centres of shape codetable[1] gridPointPosition ('3.8.table',masterDir,localDir) = 4 : edition_specific,dump; From f2359c38b97c05f64119eb5db3611ca4c5dc4cfb Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 30 Aug 2023 17:00:37 +0100 Subject: [PATCH 292/372] Rename of variables for readability --- src/eccodes_prototypes.h | 4 ++-- src/grib_iterator.cc | 2 -- src/grib_scaling.cc | 16 +++++----------- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 0dda8e5bc..ab0c77e7e 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -1119,7 +1119,7 @@ grib_accessor* grib_find_accessor_fast(grib_handle* h, const char* name); /* grib_scaling.cc*/ double grib_power(long s, long n); -long grib_get_binary_scale_fact(double max, double min, long bpval, int* ret); +long grib_get_binary_scale_fact(double max, double min, long bpval, int* error); /* grib_templates.cc*/ grib_handle* codes_external_template(grib_context* c, ProductKind product_kind, const char* name); @@ -1314,7 +1314,7 @@ int grib_iterator_init(grib_iterator* i, grib_handle* h, grib_arguments* args); int grib_iterator_delete(grib_iterator* i); /* grib_iterator_class.cc*/ -grib_iterator* grib_iterator_factory(grib_handle* h, grib_arguments* args, unsigned long flags, int* ret); +grib_iterator* grib_iterator_factory(grib_handle* h, grib_arguments* args, unsigned long flags, int* error); /* grib_iterator_class_gaussian.cc*/ diff --git a/src/grib_iterator.cc b/src/grib_iterator.cc index 0844a1fed..9f4fadd95 100644 --- a/src/grib_iterator.cc +++ b/src/grib_iterator.cc @@ -11,7 +11,6 @@ /*************************************************************************** * Enrico Fucile * * Jean Baptiste Filippi - 01.11.2005 * - * * ***************************************************************************/ #include "grib_api_internal.h" @@ -43,7 +42,6 @@ static void init_mutex() } #endif - int grib_get_data(const grib_handle* h, double* lats, double* lons, double* values) { int err = 0; diff --git a/src/grib_scaling.cc b/src/grib_scaling.cc index d00562d1c..e49a1e6dc 100644 --- a/src/grib_scaling.cc +++ b/src/grib_scaling.cc @@ -8,10 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/************************************** - * Enrico Fucile - **************************************/ - #include "grib_scaling.h" #include "grib_api_internal.h" @@ -21,7 +17,7 @@ double grib_power(long s, long n) { return codes_power(s, n); } -long grib_get_binary_scale_fact(double max, double min, long bpval, int* ret) +long grib_get_binary_scale_fact(double max, double min, long bpval, int* error) { double range = max - min; double zs = 1; @@ -35,20 +31,19 @@ long grib_get_binary_scale_fact(double max, double min, long bpval, int* ret) double dmaxint=(double)maxint; */ if (bpval >= ulong_size) { - *ret = GRIB_OUT_OF_RANGE; /*overflow*/ + *error = GRIB_OUT_OF_RANGE; /*overflow*/ return 0; } const double dmaxint = codes_power(bpval, 2) - 1; maxint = (unsigned long)dmaxint; /* Now it's safe to cast */ - *ret = 0; + *error = 0; if (bpval < 1) { - *ret = GRIB_ENCODING_ERROR; /* constant field */ + *error = GRIB_ENCODING_ERROR; /* constant field */ return 0; } Assert(bpval >= 1); - /* printf("---- Maxint %ld range=%g\n",maxint,range); */ if (range == 0) return 0; @@ -74,8 +69,7 @@ long grib_get_binary_scale_fact(double max, double min, long bpval, int* ret) } if (scale < -last) { - *ret = GRIB_UNDERFLOW; - /*printf("grib_get_binary_scale_fact: max=%g min=%g\n",max,min);*/ + *error = GRIB_UNDERFLOW; scale = -last; } Assert(scale <= last); From f600470512d2a2fe052d9aa09eb561c7896d87c5 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 30 Aug 2023 18:23:47 +0100 Subject: [PATCH 293/372] HEALPix: set Lo via grib_util_set_spec --- src/grib_util.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/grib_util.cc b/src/grib_util.cc index 8b66ae503..5b8f5b9cc 100644 --- a/src/grib_util.cc +++ b/src/grib_util.cc @@ -1171,6 +1171,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, COPY_SPEC_LONG(bitmapPresent); if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue); COPY_SPEC_LONG(N); // Nside + COPY_SPEC_DOUBLE(longitudeOfFirstGridPointInDegrees); break; case GRIB_UTIL_GRID_SPEC_REDUCED_GG: From 2fa337644156dba69b366eccc7acd363808da0d1 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 31 Aug 2023 10:50:31 +0100 Subject: [PATCH 294/372] ECC-1361: HEALPix iterator/nearest --- src/CMakeLists.txt | 2 + src/grib_iterator_class.h | 1 + src/grib_iterator_class_healpix.cc | 252 +++++++++++++++++++++++++++++ src/grib_iterator_factory.h | 1 + src/grib_nearest_class.h | 1 + src/grib_nearest_class_healpix.cc | 134 +++++++++++++++ src/grib_nearest_factory.h | 1 + src/iterator_class_hierarchy.txt | 1 + 8 files changed, 393 insertions(+) create mode 100644 src/grib_iterator_class_healpix.cc create mode 100644 src/grib_nearest_class_healpix.cc diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7011e4175..4243d0350 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -316,6 +316,7 @@ list( APPEND eccodes_src_files grib_nearest.cc grib_nearest_class.cc grib_nearest_class_gen.cc + grib_nearest_class_healpix.cc grib_nearest_class_regular.cc grib_nearest_class_reduced.cc grib_nearest_class_latlon_reduced.cc @@ -337,6 +338,7 @@ list( APPEND eccodes_src_files grib_iterator_class_latlon.cc grib_iterator_class_regular.cc grib_iterator_class_space_view.cc + grib_iterator_class_healpix.cc grib_expression.cc codes_util.cc grib_util.cc diff --git a/src/grib_iterator_class.h b/src/grib_iterator_class.h index 62d3fd5c6..e9f95f5ec 100644 --- a/src/grib_iterator_class.h +++ b/src/grib_iterator_class.h @@ -2,6 +2,7 @@ extern grib_iterator_class* grib_iterator_class_gaussian; extern grib_iterator_class* grib_iterator_class_gaussian_reduced; extern grib_iterator_class* grib_iterator_class_gen; +extern grib_iterator_class* grib_iterator_class_healpix; extern grib_iterator_class* grib_iterator_class_lambert_azimuthal_equal_area; extern grib_iterator_class* grib_iterator_class_lambert_conformal; extern grib_iterator_class* grib_iterator_class_latlon; diff --git a/src/grib_iterator_class_healpix.cc b/src/grib_iterator_class_healpix.cc new file mode 100644 index 000000000..9f7d9a49d --- /dev/null +++ b/src/grib_iterator_class_healpix.cc @@ -0,0 +1,252 @@ +/* + * (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" +#include +#include +#include + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = iterator + SUPER = grib_iterator_class_gen + IMPLEMENTS = destroy + IMPLEMENTS = init;next + MEMBERS = double *lats + MEMBERS = double *lons + MEMBERS = long Nsides + 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 "iterator.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_iterator_class*); + +static int init (grib_iterator* i,grib_handle*,grib_arguments*); +static int next (grib_iterator* i, double *lat, double *lon, double *val); +static int destroy (grib_iterator* i); + + +typedef struct grib_iterator_healpix{ + grib_iterator it; + /* Members defined in gen */ + int carg; + const char* missingValue; + /* Members defined in healpix */ + double *lats; + double *lons; + long Nsides; +} grib_iterator_healpix; + +extern grib_iterator_class* grib_iterator_class_gen; + +static grib_iterator_class _grib_iterator_class_healpix = { + &grib_iterator_class_gen, /* super */ + "healpix", /* name */ + sizeof(grib_iterator_healpix),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &next, /* Next Value */ + 0, /* Previous Value */ + 0, /* Reset the counter */ + 0, /* has next values */ +}; + +grib_iterator_class* grib_iterator_class_healpix = &_grib_iterator_class_healpix; + + +static void init_class(grib_iterator_class* c) +{ + c->previous = (*(c->super))->previous; + c->reset = (*(c->super))->reset; + c->has_next = (*(c->super))->has_next; +} +/* END_CLASS_IMP */ + + +#define ITER "HEALPix Geoiterator" +#define RAD2DEG 57.29577951308232087684 // 180 over pi + +size_t HEALPix_nj(size_t N, size_t i) +{ + Assert(0 < N); + size_t ni = 4 * N - 1; + Assert(i < ni); + return i < N ? 4 * (i + 1) : i < 3 * N ? 4 * N + : HEALPix_nj(N, ni - 1 - i); +} + +// Thanks to Willem Deconinck and Pedro Maciel +// +// y[] = { y0, y1, y2, y3, ... }; // the latitude values +// PL[] = { 4, ... } ; // the number of values on each latitude +// xstart[] = { 45, ... }; // the value of first longitude on each latitude +// assume that you have 360 degrees to cover on each latitude +// +// std::vector xstart(4 * N - 1); +// std::vector pl(4 * N - 1); +// // Polar caps +// for (int r = 1; r < N; r++) { +// xstart[r-1] = 45./r; +// pl[r-1] = 4*r; +// xstart[4*N-r-1] = xstart[r-1]; +// pl[4*N-r-1] = pl[r-1]; +// } +// // Equatorial belt +// const double start = 45. / N; +// for (int r = N; r < 2 * N; r++) { +// xstart[r-1] = start * (2. - (r - N + 1) % 2); +// pl[r-1] = 4*N; +// xstart[4*N-r-1] = xstart[r-1]; +// pl[4*N-r-1] = pl[r-1]; +// } +// // Equator +// xstart[2*N-1] = start * (1 - (N % 2 ? 1 : 0)); +// pl[2*N-1] = 4*N; +// +static std::vector HEALPix_longitudes(size_t N, size_t i) +{ + const auto Nj = HEALPix_nj(N, i); + const auto step = 360. / static_cast(Nj); + const auto start = i < N || 3 * N - 1 < i || static_cast((i + N) % 2) ? step / 2. : 0.; + + std::vector longitudes(Nj); + std::generate_n(longitudes.begin(), Nj, [start, step, n = 0ULL]() mutable { return start + static_cast(n++) * step; }); + + return longitudes; +} + +static int iterate_healpix(grib_iterator_healpix* self, long N) +{ + size_t ny, nx, k; + ny = nx = 4*N - 1; + std::vector latitudes(ny); + + for (long r = 1; r < N; r++) { + latitudes[r - 1] = 90.0 - RAD2DEG * std::acos(1.0 - r * r / (3.0 * N * N)); + latitudes[4 * N - 1 - r] = -latitudes[r - 1]; + } + // Polar caps + for (long r = 1; r < N; r++) { + latitudes[r - 1] = 90.0 - RAD2DEG * std::acos(1.0 - r * r / (3.0 * N * N)); + latitudes[4 * N - 1 - r] = -latitudes[r - 1]; + } + // Equatorial belt + for (long r = N; r < 2 * N; r++) { + latitudes[r - 1] = 90.0 - RAD2DEG * std::acos((4.0 * N - 2.0 * r) / (3.0 * N)); + latitudes[4 * N - 1 - r] = -latitudes[r - 1]; + } + + // Equator + latitudes[2 * N - 1] = 0.0; + + k = 0; + for (size_t i = 0; i < ny; i++) { + // Compute the longitudes at a given latitude + std::vector longitudes = HEALPix_longitudes(N, i); + for (size_t j = 0; j < longitudes.size(); j++) { + self->lons[k] = longitudes[j]; + self->lats[k] = latitudes[i]; + ++k; + } + } + + return GRIB_SUCCESS; +} + +static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) +{ + int err = 0; + grib_iterator_healpix* self = (grib_iterator_healpix*)iter; + + const char* snside = grib_arguments_get_name(h, args, self->carg++); + const char* sorder = grib_arguments_get_name(h, args, self->carg++); + + long N = 0; + if ((err = grib_get_long_internal(h, snside, &N)) != GRIB_SUCCESS) return err; + if (N <= 0) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Key %s must be greater than zero", ITER, snside); + return GRIB_WRONG_GRID; + } + + char ordering[32] = {0,}; + size_t slen = sizeof(ordering); + if ((err = grib_get_string_internal(h, sorder, ordering, &slen)) != GRIB_SUCCESS) + return err; + + if (!STR_EQUAL(ordering, "ring")) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Only ring ordering is supported", ITER); + return GRIB_WRONG_GRID; + } + + if (grib_is_earth_oblate(h)) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Only spherical earth is supported", ITER); + return GRIB_WRONG_GRID; + } + + if (iter->nv != 12 * N * N) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=12x%ldx%ld)", + ITER, iter->nv, N, N); + return GRIB_WRONG_GRID; + } + + self->lats = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); + self->lons = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); + + try { + err = iterate_healpix(self, N); + } + catch (...) { + return GRIB_INTERNAL_ERROR; + } + + iter->e = -1; + + return err; +} + +static int next(grib_iterator* iter, double* lat, double* lon, double* val) +{ + grib_iterator_healpix* self = (grib_iterator_healpix*)iter; + + if ((long)iter->e >= (long)(iter->nv - 1)) + return 0; + iter->e++; + + *lat = self->lats[iter->e]; + *lon = self->lons[iter->e]; + if (val && iter->data) { + *val = iter->data[iter->e]; + } + return 1; +} + +static int destroy(grib_iterator* i) +{ + grib_iterator_healpix* self = (grib_iterator_healpix*)i; + const grib_context* c = i->h->context; + + grib_context_free(c, self->lats); + grib_context_free(c, self->lons); + return GRIB_SUCCESS; +} diff --git a/src/grib_iterator_factory.h b/src/grib_iterator_factory.h index ad46ced1e..206a6d140 100644 --- a/src/grib_iterator_factory.h +++ b/src/grib_iterator_factory.h @@ -2,6 +2,7 @@ { "gaussian", &grib_iterator_class_gaussian, }, { "gaussian_reduced", &grib_iterator_class_gaussian_reduced, }, { "gen", &grib_iterator_class_gen, }, +{ "healpix", &grib_iterator_class_healpix, }, { "lambert_azimuthal_equal_area", &grib_iterator_class_lambert_azimuthal_equal_area, }, { "lambert_conformal", &grib_iterator_class_lambert_conformal, }, { "latlon", &grib_iterator_class_latlon, }, diff --git a/src/grib_nearest_class.h b/src/grib_nearest_class.h index 531eb200a..a1341806a 100644 --- a/src/grib_nearest_class.h +++ b/src/grib_nearest_class.h @@ -1,5 +1,6 @@ /* This file is automatically generated by ./make_class.pl, do not edit */ extern grib_nearest_class* grib_nearest_class_gen; +extern grib_nearest_class* grib_nearest_class_healpix; extern grib_nearest_class* grib_nearest_class_lambert_azimuthal_equal_area; extern grib_nearest_class* grib_nearest_class_lambert_conformal; extern grib_nearest_class* grib_nearest_class_latlon_reduced; diff --git a/src/grib_nearest_class_healpix.cc b/src/grib_nearest_class_healpix.cc new file mode 100644 index 000000000..915556a76 --- /dev/null +++ b/src/grib_nearest_class_healpix.cc @@ -0,0 +1,134 @@ +/* + * (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 + CLASS = nearest + SUPER = grib_nearest_class_gen + IMPLEMENTS = init + IMPLEMENTS = find;destroy + MEMBERS = double* lats + MEMBERS = int lats_count + MEMBERS = double* lons + MEMBERS = int lons_count + MEMBERS = double* distances + MEMBERS = int* k + MEMBERS = int* i + MEMBERS = int* j + MEMBERS = const char* Ni + MEMBERS = const char* Nj + 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 "nearest.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_nearest_class*); + +static int init (grib_nearest* nearest,grib_handle* h,grib_arguments* args); +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); +static int destroy (grib_nearest* nearest); + +typedef struct grib_nearest_healpix{ + grib_nearest nearest; + /* Members defined in gen */ + const char* values_key; + const char* radius; + int cargs; + /* Members defined in healpix */ + double* lats; + int lats_count; + double* lons; + int lons_count; + double* distances; + int* k; + int* i; + int* j; + const char* Ni; + const char* Nj; +} grib_nearest_healpix; + +extern grib_nearest_class* grib_nearest_class_gen; + +static grib_nearest_class _grib_nearest_class_healpix = { + &grib_nearest_class_gen, /* super */ + "healpix", /* name */ + sizeof(grib_nearest_healpix), /* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &find, /* find nearest */ +}; + +grib_nearest_class* grib_nearest_class_healpix = &_grib_nearest_class_healpix; + + +static void init_class(grib_nearest_class* c) +{ +} +/* END_CLASS_IMP */ + +static int init(grib_nearest* nearest, grib_handle* h, grib_arguments* args) +{ + grib_nearest_healpix* self = (grib_nearest_healpix*)nearest; + self->Ni = grib_arguments_get_name(h, args, self->cargs++); + self->Nj = grib_arguments_get_name(h, args, self->cargs++); + self->lats = self->lons = self->distances = NULL; + self->lats_count = self->lons_count = 0; + self->i = (int*)grib_context_malloc(h->context, 2 * sizeof(int)); + self->j = (int*)grib_context_malloc(h->context, 2 * sizeof(int)); + return GRIB_SUCCESS; +} + +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_healpix* self = (grib_nearest_healpix*)nearest; + return grib_nearest_find_generic( + nearest, h, inlat, inlon, flags, /* inputs */ + + self->values_key, /* outputs to set the 'self' object */ + &(self->lats), + &(self->lats_count), + &(self->lons), + &(self->lons_count), + &(self->distances), + + outlats, outlons, /* outputs of the find function */ + values, distances, indexes, len); +} + +static int destroy(grib_nearest* nearest) +{ + grib_nearest_healpix* self = (grib_nearest_healpix*)nearest; + if (self->lats) grib_context_free(nearest->context, self->lats); + if (self->lons) grib_context_free(nearest->context, self->lons); + if (self->i) grib_context_free(nearest->context, self->i); + if (self->j) grib_context_free(nearest->context, self->j); + if (self->k) grib_context_free(nearest->context, self->k); + if (self->distances) grib_context_free(nearest->context, self->distances); + return GRIB_SUCCESS; +} diff --git a/src/grib_nearest_factory.h b/src/grib_nearest_factory.h index be537e8e6..837524914 100644 --- a/src/grib_nearest_factory.h +++ b/src/grib_nearest_factory.h @@ -1,5 +1,6 @@ /* This file is automatically generated by ./make_class.pl, do not edit */ { "gen", &grib_nearest_class_gen, }, +{ "healpix", &grib_nearest_class_healpix, }, { "lambert_azimuthal_equal_area", &grib_nearest_class_lambert_azimuthal_equal_area, }, { "lambert_conformal", &grib_nearest_class_lambert_conformal, }, { "latlon_reduced", &grib_nearest_class_latlon_reduced, }, diff --git a/src/iterator_class_hierarchy.txt b/src/iterator_class_hierarchy.txt index e692fa5c7..ffd961e9d 100644 --- a/src/iterator_class_hierarchy.txt +++ b/src/iterator_class_hierarchy.txt @@ -2,6 +2,7 @@ Iterator Class Hierarchy |-grib_iterator_class_gen |---grib_iterator_class_gaussian_reduced + |---grib_iterator_class_healpix |---grib_iterator_class_lambert_azimuthal_equal_area |---grib_iterator_class_lambert_conformal |---grib_iterator_class_latlon_reduced From 3b9cd2e0186d8629b2e277364c42e69634cbf2f0 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 31 Aug 2023 11:08:26 +0100 Subject: [PATCH 295/372] Debugging: Take missingValue into account when printing values --- src/grib_value.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/grib_value.cc b/src/grib_value.cc index bd4421a13..e244d3c65 100644 --- a/src/grib_value.cc +++ b/src/grib_value.cc @@ -37,8 +37,13 @@ static void print_debug_info__set_array(grib_handle* h, const char* func, const size_t N = 7, i = 0; T minVal = std::numeric_limits::max(); T maxVal = -std::numeric_limits::max(); + double missingValue = 0; Assert( h->context->debug ); + if (grib_get_double(h, "missingValue", &missingValue)!=GRIB_SUCCESS) { + missingValue = 9999.0; + } + if (length <= N) N = length; fprintf(stderr, "ECCODES DEBUG %s key=%s, %zu entries (", func, name, length); @@ -49,6 +54,7 @@ static void print_debug_info__set_array(grib_handle* h, const char* func, const if (N >= length) fprintf(stderr, ") "); else fprintf(stderr, "...) "); for (i = 0; i < length; ++i) { + if (val[i] == (T)missingValue) continue; if (val[i] < minVal) minVal = val[i]; if (val[i] > maxVal) maxVal = val[i]; } From cff9f8d7685df9c911ca05802a4f9e8574c48afd Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 31 Aug 2023 11:28:47 +0100 Subject: [PATCH 296/372] ECC-1361: HEALPix tests --- tests/CMakeLists.txt | 1 + tests/grib_gridType.sh | 1 + tests/grib_grid_healpix.sh | 92 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100755 tests/grib_grid_healpix.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1595e759e..8671f37eb 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -144,6 +144,7 @@ if( HAVE_BUILD_TOOLS ) grib_grid_unstructured grib_grid_lambert_conformal grib_grid_polar_stereographic + grib_grid_healpix grib_g1monthlydate grib_g1day_of_the_year_date grib_g1fcperiod) diff --git a/tests/grib_gridType.sh b/tests/grib_gridType.sh index 01d91a4b8..491a1481c 100755 --- a/tests/grib_gridType.sh +++ b/tests/grib_gridType.sh @@ -135,6 +135,7 @@ grib2_gridded_types=" lambert_bf mercator_bf polar_stereographic_bf + healpix " grib2_spectral_types=" sh diff --git a/tests/grib_grid_healpix.sh b/tests/grib_grid_healpix.sh new file mode 100755 index 000000000..82ee2b257 --- /dev/null +++ b/tests/grib_grid_healpix.sh @@ -0,0 +1,92 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.ctest.sh + +# Define a common label for all the tmp files +label="grib_healpix_test" +tempFilter="temp.${label}.filt" +tempGrib="temp.${label}.grib" +tempLog="temp.${label}.log" + +input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + +latest=`${tools_dir}/grib_get -p tablesVersionLatest $input` + +# Create a filter +cat > $tempFilter <&2 + exit 1 +fi +grib_check_key_equals $tempGrib gridType,orderingConvention,N,Nside 'healpix ring 32 32' +grib_check_key_equals $tempGrib gridDefinitionTemplateNumber,gridName '150 H32' +if [ $latest -gt 31 ]; then + grib_check_key_equals $tempGrib gridDefinitionDescription 'Hierarchical Equal Area isoLatitude Pixelization grid' +fi + +${tools_dir}/grib_dump -O -p section_3 $tempGrib +${tools_dir}/grib_ls -jn geography $tempGrib + +# Geoiterator +# ------------- +rm -f $tempGrib +cat > $tempFilter < $tempFilter < $tempLog 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Nside must be greater than zero" $tempLog + +set +e +${tools_dir}/grib_get_data -s orderingConvention=nested $tempGrib > $tempLog 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Only ring ordering is supported" $tempLog + + +# Clean up +rm -f $tempFilter $tempGrib $tempLog From 060b2cf7b0752a773e63d42ec95997577d07db9f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 31 Aug 2023 10:41:20 +0000 Subject: [PATCH 297/372] ECC-1678: GRIB2: Add encoding for CAPES --- definitions/grib2/cfVarName.def | 8 ++++++++ definitions/grib2/name.def | 8 ++++++++ definitions/grib2/paramId.def | 8 ++++++++ definitions/grib2/shortName.def | 8 ++++++++ definitions/grib2/units.def | 8 ++++++++ 5 files changed, 40 insertions(+) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index d3a6d2cbe..d8b564f30 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -2523,6 +2523,14 @@ parameterCategory = 3 ; parameterNumber = 23 ; } +#Convective available potential energy shear +'capes' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } #Tropopause pressure 'trpp' = { discipline = 0 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index 21acf6c82..e8019325f 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -2523,6 +2523,14 @@ parameterCategory = 3 ; parameterNumber = 23 ; } +#Convective available potential energy shear +'Convective available potential energy shear' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } #Tropopause pressure 'Tropopause pressure' = { discipline = 0 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 72ea5bc62..1b6ff6200 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -2523,6 +2523,14 @@ parameterCategory = 3 ; parameterNumber = 23 ; } +#Convective available potential energy shear +'228044' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } #Tropopause pressure '228045' = { discipline = 0 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 6f4db2dbb..4698a68f8 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -2523,6 +2523,14 @@ parameterCategory = 3 ; parameterNumber = 23 ; } +#Convective available potential energy shear +'capes' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } #Tropopause pressure 'trpp' = { discipline = 0 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 4bed837f2..945df5bd5 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -2523,6 +2523,14 @@ parameterCategory = 3 ; parameterNumber = 23 ; } +#Convective available potential energy shear +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } #Tropopause pressure 'Pa' = { discipline = 0 ; From 8c613f0c15ca410b84d2946f36f7893312804f1e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 31 Aug 2023 10:54:26 +0000 Subject: [PATCH 298/372] ECC-1677: GRIB2: Replace discipline 192 local encoding (part 1) --- .../grib2/localConcepts/ecmf/cfName.legacy.def | 6 ++++++ .../localConcepts/ecmf/cfVarName.legacy.def | 18 ++++++++++++++++++ .../grib2/localConcepts/ecmf/name.legacy.def | 18 ++++++++++++++++++ .../localConcepts/ecmf/paramId.legacy.def | 18 ++++++++++++++++++ .../localConcepts/ecmf/shortName.legacy.def | 18 ++++++++++++++++++ .../grib2/localConcepts/ecmf/units.legacy.def | 18 ++++++++++++++++++ 6 files changed, 96 insertions(+) diff --git a/definitions/grib2/localConcepts/ecmf/cfName.legacy.def b/definitions/grib2/localConcepts/ecmf/cfName.legacy.def index 102bbbc17..e3b2b9750 100644 --- a/definitions/grib2/localConcepts/ecmf/cfName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/cfName.legacy.def @@ -142,3 +142,9 @@ parameterCategory = 128 ; parameterNumber = 174 ; } +#Total column ozone +'atmosphere_mass_content_of_ozone' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 206 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def index f7bcee7d1..f157d0442 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def @@ -1225,3 +1225,21 @@ parameterCategory = 140 ; parameterNumber = 216 ; } +#Total column ozone +'tco3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 206 ; +} +#Convective snowfall +'csf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 239 ; +} +#Large-scale snowfall +'lsf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 240 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/name.legacy.def b/definitions/grib2/localConcepts/ecmf/name.legacy.def index a57bbf939..4ce5332df 100644 --- a/definitions/grib2/localConcepts/ecmf/name.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/name.legacy.def @@ -1225,3 +1225,21 @@ parameterCategory = 140 ; parameterNumber = 216 ; } +#Total column ozone +'Total column ozone' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 206 ; +} +#Convective snowfall +'Convective snowfall' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 239 ; +} +#Large-scale snowfall +'Large-scale snowfall' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 240 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def index 598fa6dea..7fbafcf2c 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def @@ -1225,3 +1225,21 @@ parameterCategory = 140 ; parameterNumber = 216 ; } +#Total column ozone +'206' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 206 ; +} +#Convective snowfall +'239' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 239 ; +} +#Large-scale snowfall +'240' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 240 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def index a043040a0..ca1c60326 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def @@ -1225,3 +1225,21 @@ parameterCategory = 140 ; parameterNumber = 216 ; } +#Total column ozone +'tco3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 206 ; +} +#Convective snowfall +'csf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 239 ; +} +#Large-scale snowfall +'lsf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 240 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/units.legacy.def b/definitions/grib2/localConcepts/ecmf/units.legacy.def index 74e470e08..14fcd1095 100644 --- a/definitions/grib2/localConcepts/ecmf/units.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/units.legacy.def @@ -1225,3 +1225,21 @@ parameterCategory = 140 ; parameterNumber = 216 ; } +#Total column ozone +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 206 ; +} +#Convective snowfall +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 239 ; +} +#Large-scale snowfall +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 240 ; +} From 97cd0ffe0e630a32bde22a4a54bc7f19342a2b7d Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 31 Aug 2023 12:22:37 +0000 Subject: [PATCH 299/372] ECC-1677: GRIB2: Replace discipline 192 local encoding --- definitions/grib2/cfVarName.def | 14 +++++----- .../grib2/localConcepts/ecmf/cfName.def | 9 ++++--- .../grib2/localConcepts/ecmf/cfVarName.def | 27 ++++++++++++------- definitions/grib2/localConcepts/ecmf/name.def | 27 ++++++++++++------- .../grib2/localConcepts/ecmf/paramId.def | 27 ++++++++++++------- .../grib2/localConcepts/ecmf/shortName.def | 27 ++++++++++++------- .../grib2/localConcepts/ecmf/units.def | 27 ++++++++++++------- definitions/grib2/name.def | 14 +++++----- definitions/grib2/paramId.def | 14 +++++----- definitions/grib2/shortName.def | 14 +++++----- .../grib2/tables/local/ecmf/1/4.2.0.1.table | 2 ++ .../grib2/tables/local/ecmf/1/4.2.0.14.table | 2 ++ definitions/grib2/units.def | 14 +++++----- 13 files changed, 140 insertions(+), 78 deletions(-) create mode 100644 definitions/grib2/tables/local/ecmf/1/4.2.0.14.table diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index d8b564f30..86b59d1b0 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -4094,6 +4094,14 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Total column integrated ozone +'tcioz' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } #2 metre relative humidity 'r2' = { discipline = 0 ; @@ -9006,12 +9014,6 @@ parameterCategory = 14 ; parameterNumber = 0 ; } -#Total column integrated ozone -'tcioz' = { - discipline = 0 ; - parameterCategory = 14 ; - parameterNumber = 2 ; - } #Base spectrum width 'bswid' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfName.def b/definitions/grib2/localConcepts/ecmf/cfName.def index f60b522c8..e347e08e7 100644 --- a/definitions/grib2/localConcepts/ecmf/cfName.def +++ b/definitions/grib2/localConcepts/ecmf/cfName.def @@ -85,9 +85,12 @@ } #Total column ozone 'atmosphere_mass_content_of_ozone' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 206 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Hydrogen peroxide 'mass_fraction_of_hydrogen_peroxide_in_air' = { diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index 50d38a32b..64840b587 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -803,9 +803,12 @@ } #Total column ozone 'tco3' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 206 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Diabatic heating by radiation 'dhr' = { @@ -921,15 +924,21 @@ } #Convective snowfall 'csf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 239 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Large-scale snowfall 'lsf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 240 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Accumulated cloud fraction tendency 'acf' = { diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index 9aaaccc21..dd1aa78e1 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -803,9 +803,12 @@ } #Total column ozone 'Total column ozone' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 206 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Diabatic heating by radiation 'Diabatic heating by radiation' = { @@ -921,15 +924,21 @@ } #Convective snowfall 'Convective snowfall' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 239 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Large-scale snowfall 'Large-scale snowfall' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 240 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Accumulated cloud fraction tendency 'Accumulated cloud fraction tendency' = { diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index b333b780c..9cf83acc6 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -803,9 +803,12 @@ } #Total column ozone '206' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 206 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Diabatic heating by radiation '214' = { @@ -921,15 +924,21 @@ } #Convective snowfall '239' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 239 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Large-scale snowfall '240' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 240 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Accumulated cloud fraction tendency '241' = { diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index 08c773a66..f7bf7e485 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -803,9 +803,12 @@ } #Total column ozone 'tco3' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 206 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Diabatic heating by radiation 'dhr' = { @@ -921,15 +924,21 @@ } #Convective snowfall 'csf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 239 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Large-scale snowfall 'lsf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 240 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Accumulated cloud fraction tendency 'acf' = { diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index a36fc4dca..f35c866cc 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -803,9 +803,12 @@ } #Total column ozone 'kg m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 206 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Diabatic heating by radiation 'K' = { @@ -921,15 +924,21 @@ } #Convective snowfall 'm of water equivalent' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 239 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Large-scale snowfall 'm of water equivalent' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 240 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Accumulated cloud fraction tendency '(-1 to 1)' = { diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index e8019325f..808467496 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -4094,6 +4094,14 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Total column integrated ozone +'Total column integrated ozone' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } #2 metre relative humidity '2 metre relative humidity' = { discipline = 0 ; @@ -9006,12 +9014,6 @@ parameterCategory = 14 ; parameterNumber = 0 ; } -#Total column integrated ozone -'Total column integrated ozone' = { - discipline = 0 ; - parameterCategory = 14 ; - parameterNumber = 2 ; - } #Base spectrum width 'Base spectrum width' = { discipline = 0 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 1b6ff6200..4df33c043 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -4094,6 +4094,14 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Total column integrated ozone +'260132' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } #2 metre relative humidity '260242' = { discipline = 0 ; @@ -9006,12 +9014,6 @@ parameterCategory = 14 ; parameterNumber = 0 ; } -#Total column integrated ozone -'260132' = { - discipline = 0 ; - parameterCategory = 14 ; - parameterNumber = 2 ; - } #Base spectrum width '260133' = { discipline = 0 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 4698a68f8..487f3adba 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -4094,6 +4094,14 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Total column integrated ozone +'tcioz' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } #2 metre relative humidity '2r' = { discipline = 0 ; @@ -9006,12 +9014,6 @@ parameterCategory = 14 ; parameterNumber = 0 ; } -#Total column integrated ozone -'tcioz' = { - discipline = 0 ; - parameterCategory = 14 ; - parameterNumber = 2 ; - } #Base spectrum width 'bswid' = { discipline = 0 ; diff --git a/definitions/grib2/tables/local/ecmf/1/4.2.0.1.table b/definitions/grib2/tables/local/ecmf/1/4.2.0.1.table index 2c4961ba0..70233e452 100644 --- a/definitions/grib2/tables/local/ecmf/1/4.2.0.1.table +++ b/definitions/grib2/tables/local/ecmf/1/4.2.0.1.table @@ -8,4 +8,6 @@ 198 198 Snowfall (m of water equivalent) 199 199 Evaporation (m of water equivalent) 200 200 Potential evaporation (m) +201 201 Convective snowfall (m of water equivalent) +202 202 Large-scale snowfall (m of water equivalent) 254 254 Snow depth (m of water equivalent) diff --git a/definitions/grib2/tables/local/ecmf/1/4.2.0.14.table b/definitions/grib2/tables/local/ecmf/1/4.2.0.14.table new file mode 100644 index 000000000..e7573ef3d --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/1/4.2.0.14.table @@ -0,0 +1,2 @@ +# Code table 4.2 - discipline=0 category=14 for ECMWF +192 192 Total column ozone diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 945df5bd5..a3b01c67e 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -4094,6 +4094,14 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Total column integrated ozone +'DU' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } #2 metre relative humidity '%' = { discipline = 0 ; @@ -9006,12 +9014,6 @@ parameterCategory = 14 ; parameterNumber = 0 ; } -#Total column integrated ozone -'DU' = { - discipline = 0 ; - parameterCategory = 14 ; - parameterNumber = 2 ; - } #Base spectrum width 'm s**-1' = { discipline = 0 ; From ae31e43423a65c3060a084ac1b5ffa75b4b79314 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 31 Aug 2023 13:55:40 +0000 Subject: [PATCH 300/372] ECC-1682: GRIB2: New reflectance parameters --- definitions/grib2/cfVarName.def | 12 ++++++++++++ definitions/grib2/name.def | 12 ++++++++++++ definitions/grib2/paramId.def | 12 ++++++++++++ definitions/grib2/shortName.def | 12 ++++++++++++ definitions/grib2/units.def | 12 ++++++++++++ 5 files changed, 60 insertions(+) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index 86b59d1b0..58756d44d 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -4449,6 +4449,18 @@ parameterCategory = 1 ; parameterNumber = 15 ; } +#Cloudy reflectance +'cdrfl' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 31 ; + } +#Clear reflectance +'crrfl' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 32 ; + } #Scaled radiance 'p260530' = { discipline = 3 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index 808467496..66b26cdbf 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -4449,6 +4449,18 @@ parameterCategory = 1 ; parameterNumber = 15 ; } +#Cloudy reflectance +'Cloudy reflectance' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 31 ; + } +#Clear reflectance +'Clear reflectance' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 32 ; + } #Scaled radiance 'Scaled radiance' = { discipline = 3 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 4df33c043..7cc882fc3 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -4449,6 +4449,18 @@ parameterCategory = 1 ; parameterNumber = 15 ; } +#Cloudy reflectance +'260512' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 31 ; + } +#Clear reflectance +'260513' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 32 ; + } #Scaled radiance '260530' = { discipline = 3 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 487f3adba..c6437919f 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -4449,6 +4449,18 @@ parameterCategory = 1 ; parameterNumber = 15 ; } +#Cloudy reflectance +'cdrfl' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 31 ; + } +#Clear reflectance +'crrfl' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 32 ; + } #Scaled radiance '~' = { discipline = 3 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index a3b01c67e..fc99813ae 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -4449,6 +4449,18 @@ parameterCategory = 1 ; parameterNumber = 15 ; } +#Cloudy reflectance +'%' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 31 ; + } +#Clear reflectance +'%' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 32 ; + } #Scaled radiance 'Numeric' = { discipline = 3 ; From 1a887dd0e8f9081e3dd63cf3de5747c94f98db52 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 1 Sep 2023 10:08:59 +0100 Subject: [PATCH 301/372] ECC-1683: GRIB2: Add new pseudo-centre for DestinE (Destination Earth) --- definitions/grib2/section.4.def | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/definitions/grib2/section.4.def b/definitions/grib2/section.4.def index b62a15329..1f646f221 100644 --- a/definitions/grib2/section.4.def +++ b/definitions/grib2/section.4.def @@ -33,9 +33,11 @@ concept datasetForLocal(unknown) { "hydro" = {marsClass="ul";} # ULYSSES "fire" = {marsClass="gw";} # Global Wildfire awareness system "uerra" = {productionStatusOfProcessedData=8;} # UERRA - "uerra" = {productionStatusOfProcessedData=9;} # UERRA + "uerra" = {productionStatusOfProcessedData=9;} "uerra" = {productionStatusOfProcessedData=10;} # CARRA/CERRA - "uerra" = {productionStatusOfProcessedData=11;} # CARRA/CERRA + "uerra" = {productionStatusOfProcessedData=11;} + "destine" = {productionStatusOfProcessedData=12;} # Destination Earth + "destine" = {productionStatusOfProcessedData=13;} "unknown" = { dummy=1; } } From 5e87ecc2d42f843ce48ef80ef34d6746cb243c3d Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 2 Sep 2023 12:19:29 +0100 Subject: [PATCH 302/372] Dead code removal: int64 little endian --- src/CMakeLists.txt | 1 - src/accessor_class_hierarchy.txt | 1 - src/action_class_modify.cc | 12 +- ...grib_accessor_class_int64_little_endian.cc | 0 src/eccodes_prototypes.h | 2 - src/grib_accessor_class.h | 1 - src/grib_accessor_classes_hash.cc | 194 +++++++++--------- src/grib_accessor_factory.h | 1 - src/grib_accessor_factory_hash_list | 1 - 9 files changed, 102 insertions(+), 111 deletions(-) rename src/{ => deprecated}/grib_accessor_class_int64_little_endian.cc (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4243d0350..8ce7d8f29 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -359,7 +359,6 @@ list( APPEND eccodes_src_files grib_yacc.h md5.h md5.cc - grib_accessor_class_int64_little_endian.cc grib_accessor_class_uint16.cc grib_accessor_class_uint32.cc grib_accessor_class_uint32_little_endian.cc diff --git a/src/accessor_class_hierarchy.txt b/src/accessor_class_hierarchy.txt index 5ff2efe03..2fa53b858 100644 --- a/src/accessor_class_hierarchy.txt +++ b/src/accessor_class_hierarchy.txt @@ -89,7 +89,6 @@ Generated by src/make_accessor_class_hierarchy_dirs.sh |---grib_accessor_class_hash_array |---grib_accessor_class_headers_only |---grib_accessor_class_ifs_param - |---grib_accessor_class_int64_little_endian |---grib_accessor_class_iterator |---grib_accessor_class_label |---grib_accessor_class_long diff --git a/src/action_class_modify.cc b/src/action_class_modify.cc index 9a56fcf4b..c379d7300 100644 --- a/src/action_class_modify.cc +++ b/src/action_class_modify.cc @@ -77,9 +77,7 @@ static void init_class(grib_action_class* c) } /* END_CLASS_IMP */ -grib_action* grib_action_create_modify(grib_context* context, - const char* name, - long flags) +grib_action* grib_action_create_modify(grib_context* context, const char* name, long flags) { grib_action_modify* a; grib_action_class* c = grib_action_class_modify; @@ -110,11 +108,13 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) ga = grib_find_accessor(p->h, a->name); - if (ga) + if (ga) { ga->flags = a->flags; - + } else { - grib_context_log(act->context, GRIB_LOG_DEBUG, "action_class_modify: create_accessor_buffer : No accessor named %s to modify.", a->name); + grib_context_log(act->context, GRIB_LOG_ERROR, "action_class_modify: %s: No accessor named %s to modify", + __func__, a->name); + return GRIB_INTERNAL_ERROR; } return GRIB_SUCCESS; } diff --git a/src/grib_accessor_class_int64_little_endian.cc b/src/deprecated/grib_accessor_class_int64_little_endian.cc similarity index 100% rename from src/grib_accessor_class_int64_little_endian.cc rename to src/deprecated/grib_accessor_class_int64_little_endian.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index ab0c77e7e..278fdcf7e 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -408,8 +408,6 @@ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd); /* grib_accessor_class_ifs_param.cc*/ -/* grib_accessor_class_int64_little_endian.cc*/ - /* grib_accessor_class_uint16.cc*/ /* grib_accessor_class_uint32.cc*/ diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index 90f9e3619..e27597551 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -112,7 +112,6 @@ extern grib_accessor_class* grib_accessor_class_headers_only; extern grib_accessor_class* grib_accessor_class_ibmfloat; extern grib_accessor_class* grib_accessor_class_ieeefloat; extern grib_accessor_class* grib_accessor_class_ifs_param; -extern grib_accessor_class* grib_accessor_class_int64_little_endian; extern grib_accessor_class* grib_accessor_class_iterator; extern grib_accessor_class* grib_accessor_class_julian_date; extern grib_accessor_class* grib_accessor_class_julian_day; diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index a62745117..ef515c9e1 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -37,7 +37,7 @@ #line 6 "accessor_class_list.gperf" struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 204 +#define TOTAL_KEYWORDS 203 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 @@ -60,7 +60,7 @@ static unsigned int grib_accessor_classes_get_id (const char *str, size_t len) 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 0, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 1, 145, - 23, 6, 5, 507, 4, 507, 1, 507, 507, 507, + 23, 6, 2, 507, 4, 507, 1, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, @@ -117,21 +117,21 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, -#line 178 "accessor_class_list.gperf" +#line 177 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, -#line 175 "accessor_class_list.gperf" +#line 174 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, -#line 155 "accessor_class_list.gperf" +#line 154 "accessor_class_list.gperf" {"pad", &grib_accessor_class_pad}, -#line 181 "accessor_class_list.gperf" +#line 180 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, {""}, #line 75 "accessor_class_list.gperf" {"dirty", &grib_accessor_class_dirty}, {""}, -#line 176 "accessor_class_list.gperf" +#line 175 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, {""}, #line 66 "accessor_class_list.gperf" @@ -141,7 +141,7 @@ static const struct accessor_class_hash classes[] = {"data_simple_packing", &grib_accessor_class_data_simple_packing}, #line 68 "accessor_class_list.gperf" {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 169 "accessor_class_list.gperf" +#line 168 "accessor_class_list.gperf" {"section", &grib_accessor_class_section}, #line 43 "accessor_class_list.gperf" {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, @@ -155,36 +155,36 @@ static const struct accessor_class_hash classes[] = {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, #line 65 "accessor_class_list.gperf" {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 171 "accessor_class_list.gperf" +#line 170 "accessor_class_list.gperf" {"section_padding", &grib_accessor_class_section_padding}, -#line 172 "accessor_class_list.gperf" +#line 171 "accessor_class_list.gperf" {"section_pointer", &grib_accessor_class_section_pointer}, #line 44 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, {""}, {""}, {""}, {""}, #line 80 "accessor_class_list.gperf" {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, -#line 156 "accessor_class_list.gperf" +#line 155 "accessor_class_list.gperf" {"padding", &grib_accessor_class_padding}, #line 45 "accessor_class_list.gperf" {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, #line 110 "accessor_class_list.gperf" {"gds_is_present", &grib_accessor_class_gds_is_present}, -#line 168 "accessor_class_list.gperf" +#line 167 "accessor_class_list.gperf" {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 170 "accessor_class_list.gperf" +#line 169 "accessor_class_list.gperf" {"section_length", &grib_accessor_class_section_length}, #line 113 "accessor_class_list.gperf" {"getenv", &grib_accessor_class_getenv}, #line 57 "accessor_class_list.gperf" {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, -#line 190 "accessor_class_list.gperf" +#line 189 "accessor_class_list.gperf" {"time", &grib_accessor_class_time}, {""}, #line 61 "accessor_class_list.gperf" {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, {""}, -#line 154 "accessor_class_list.gperf" +#line 153 "accessor_class_list.gperf" {"packing_type", &grib_accessor_class_packing_type}, #line 62 "accessor_class_list.gperf" {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, @@ -198,28 +198,28 @@ static const struct accessor_class_hash classes[] = {"g2end_step", &grib_accessor_class_g2end_step}, #line 98 "accessor_class_list.gperf" {"g2_eps", &grib_accessor_class_g2_eps}, -#line 142 "accessor_class_list.gperf" +#line 141 "accessor_class_list.gperf" {"nearest", &grib_accessor_class_nearest}, {""}, -#line 157 "accessor_class_list.gperf" +#line 156 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, -#line 188 "accessor_class_list.gperf" +#line 187 "accessor_class_list.gperf" {"sum", &grib_accessor_class_sum}, {""}, #line 107 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, -#line 202 "accessor_class_list.gperf" +#line 201 "accessor_class_list.gperf" {"uint8", &grib_accessor_class_uint8}, {""}, -#line 187 "accessor_class_list.gperf" +#line 186 "accessor_class_list.gperf" {"step_in_units", &grib_accessor_class_step_in_units}, #line 63 "accessor_class_list.gperf" {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, -#line 200 "accessor_class_list.gperf" +#line 199 "accessor_class_list.gperf" {"uint64", &grib_accessor_class_uint64}, #line 47 "accessor_class_list.gperf" {"data_complex_packing", &grib_accessor_class_data_complex_packing}, -#line 198 "accessor_class_list.gperf" +#line 197 "accessor_class_list.gperf" {"uint32", &grib_accessor_class_uint32}, #line 13 "accessor_class_list.gperf" {"bit", &grib_accessor_class_bit}, @@ -229,11 +229,11 @@ static const struct accessor_class_hash classes[] = {"data_dummy_field", &grib_accessor_class_data_dummy_field}, #line 14 "accessor_class_list.gperf" {"bitmap", &grib_accessor_class_bitmap}, -#line 125 "accessor_class_list.gperf" - {"julian_day", &grib_accessor_class_julian_day}, #line 124 "accessor_class_list.gperf" + {"julian_day", &grib_accessor_class_julian_day}, +#line 123 "accessor_class_list.gperf" {"julian_date", &grib_accessor_class_julian_date}, -#line 143 "accessor_class_list.gperf" +#line 142 "accessor_class_list.gperf" {"non_alpha", &grib_accessor_class_non_alpha}, {""}, #line 29 "accessor_class_list.gperf" @@ -245,14 +245,14 @@ static const struct accessor_class_hash classes[] = #line 16 "accessor_class_list.gperf" {"bits_per_value", &grib_accessor_class_bits_per_value}, {""}, {""}, {""}, {""}, {""}, -#line 166 "accessor_class_list.gperf" +#line 165 "accessor_class_list.gperf" {"scale", &grib_accessor_class_scale}, {""}, -#line 184 "accessor_class_list.gperf" +#line 183 "accessor_class_list.gperf" {"statistics", &grib_accessor_class_statistics}, #line 102 "accessor_class_list.gperf" {"g2date", &grib_accessor_class_g2date}, -#line 145 "accessor_class_list.gperf" +#line 144 "accessor_class_list.gperf" {"number_of_points", &grib_accessor_class_number_of_points}, #line 100 "accessor_class_list.gperf" {"g2bitmap", &grib_accessor_class_g2bitmap}, @@ -263,47 +263,47 @@ static const struct accessor_class_hash classes[] = {"data_g2bifourier_packing", &grib_accessor_class_data_g2bifourier_packing}, #line 111 "accessor_class_list.gperf" {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, -#line 123 "accessor_class_list.gperf" +#line 122 "accessor_class_list.gperf" {"iterator", &grib_accessor_class_iterator}, -#line 185 "accessor_class_list.gperf" +#line 184 "accessor_class_list.gperf" {"statistics_spectral", &grib_accessor_class_statistics_spectral}, #line 46 "accessor_class_list.gperf" {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, -#line 146 "accessor_class_list.gperf" +#line 145 "accessor_class_list.gperf" {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, -#line 205 "accessor_class_list.gperf" +#line 204 "accessor_class_list.gperf" {"unsigned", &grib_accessor_class_unsigned}, -#line 139 "accessor_class_list.gperf" +#line 138 "accessor_class_list.gperf" {"md5", &grib_accessor_class_md5}, {""}, {""}, #line 96 "accessor_class_list.gperf" {"g2_aerosol", &grib_accessor_class_g2_aerosol}, -#line 140 "accessor_class_list.gperf" +#line 139 "accessor_class_list.gperf" {"message", &grib_accessor_class_message}, -#line 206 "accessor_class_list.gperf" +#line 205 "accessor_class_list.gperf" {"unsigned_bits", &grib_accessor_class_unsigned_bits}, -#line 173 "accessor_class_list.gperf" +#line 172 "accessor_class_list.gperf" {"select_step_template", &grib_accessor_class_select_step_template}, -#line 137 "accessor_class_list.gperf" +#line 136 "accessor_class_list.gperf" {"mars_param", &grib_accessor_class_mars_param}, -#line 203 "accessor_class_list.gperf" +#line 202 "accessor_class_list.gperf" {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, -#line 192 "accessor_class_list.gperf" +#line 191 "accessor_class_list.gperf" {"to_integer", &grib_accessor_class_to_integer}, {""}, {""}, {""}, -#line 177 "accessor_class_list.gperf" +#line 176 "accessor_class_list.gperf" {"simple_packing_error", &grib_accessor_class_simple_packing_error}, -#line 186 "accessor_class_list.gperf" +#line 185 "accessor_class_list.gperf" {"step_human_readable", &grib_accessor_class_step_human_readable}, -#line 141 "accessor_class_list.gperf" +#line 140 "accessor_class_list.gperf" {"message_copy", &grib_accessor_class_message_copy}, -#line 162 "accessor_class_list.gperf" +#line 161 "accessor_class_list.gperf" {"raw", &grib_accessor_class_raw}, {""}, {""}, -#line 201 "accessor_class_list.gperf" +#line 200 "accessor_class_list.gperf" {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, {""}, -#line 199 "accessor_class_list.gperf" +#line 198 "accessor_class_list.gperf" {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, #line 114 "accessor_class_list.gperf" {"global_gaussian", &grib_accessor_class_global_gaussian}, @@ -311,22 +311,22 @@ static const struct accessor_class_hash classes[] = #line 76 "accessor_class_list.gperf" {"divdouble", &grib_accessor_class_divdouble}, {""}, -#line 174 "accessor_class_list.gperf" +#line 173 "accessor_class_list.gperf" {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, #line 99 "accessor_class_list.gperf" {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, #line 78 "accessor_class_list.gperf" {"element", &grib_accessor_class_element}, -#line 159 "accessor_class_list.gperf" +#line 158 "accessor_class_list.gperf" {"padtomultiple", &grib_accessor_class_padtomultiple}, -#line 128 "accessor_class_list.gperf" +#line 127 "accessor_class_list.gperf" {"latitudes", &grib_accessor_class_latitudes}, -#line 163 "accessor_class_list.gperf" +#line 162 "accessor_class_list.gperf" {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, {""}, {""}, {""}, -#line 193 "accessor_class_list.gperf" +#line 192 "accessor_class_list.gperf" {"to_string", &grib_accessor_class_to_string}, -#line 133 "accessor_class_list.gperf" +#line 132 "accessor_class_list.gperf" {"long", &grib_accessor_class_long}, #line 19 "accessor_class_list.gperf" {"bufr_data_array", &grib_accessor_class_bufr_data_array}, @@ -340,7 +340,7 @@ static const struct accessor_class_hash classes[] = #line 26 "accessor_class_list.gperf" {"bufr_simple_thinning", &grib_accessor_class_bufr_simple_thinning}, {""}, -#line 138 "accessor_class_list.gperf" +#line 137 "accessor_class_list.gperf" {"mars_step", &grib_accessor_class_mars_step}, {""}, #line 115 "accessor_class_list.gperf" @@ -348,20 +348,20 @@ static const struct accessor_class_hash classes[] = {""}, #line 28 "accessor_class_list.gperf" {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, -#line 160 "accessor_class_list.gperf" +#line 159 "accessor_class_list.gperf" {"position", &grib_accessor_class_position}, {""}, {""}, {""}, #line 17 "accessor_class_list.gperf" {"blob", &grib_accessor_class_blob}, #line 109 "accessor_class_list.gperf" {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, -#line 196 "accessor_class_list.gperf" +#line 195 "accessor_class_list.gperf" {"trim", &grib_accessor_class_trim}, {""}, {""}, #line 119 "accessor_class_list.gperf" {"ibmfloat", &grib_accessor_class_ibmfloat}, {""}, {""}, -#line 194 "accessor_class_list.gperf" +#line 193 "accessor_class_list.gperf" {"transient", &grib_accessor_class_transient}, #line 55 "accessor_class_list.gperf" {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, @@ -370,49 +370,49 @@ static const struct accessor_class_hash classes[] = {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, #line 49 "accessor_class_list.gperf" {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 165 "accessor_class_list.gperf" +#line 164 "accessor_class_list.gperf" {"round", &grib_accessor_class_round}, -#line 195 "accessor_class_list.gperf" +#line 194 "accessor_class_list.gperf" {"transient_darray", &grib_accessor_class_transient_darray}, #line 18 "accessor_class_list.gperf" {"budgdate", &grib_accessor_class_budgdate}, -#line 209 "accessor_class_list.gperf" +#line 208 "accessor_class_list.gperf" {"values", &grib_accessor_class_values}, -#line 144 "accessor_class_list.gperf" +#line 143 "accessor_class_list.gperf" {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, -#line 127 "accessor_class_list.gperf" +#line 126 "accessor_class_list.gperf" {"label", &grib_accessor_class_label}, {""}, {""}, #line 38 "accessor_class_list.gperf" {"concept", &grib_accessor_class_concept}, {""}, -#line 182 "accessor_class_list.gperf" +#line 181 "accessor_class_list.gperf" {"spectral_truncation", &grib_accessor_class_spectral_truncation}, {""}, {""}, #line 83 "accessor_class_list.gperf" {"g1_message_length", &grib_accessor_class_g1_message_length}, -#line 183 "accessor_class_list.gperf" +#line 182 "accessor_class_list.gperf" {"sprintf", &grib_accessor_class_sprintf}, -#line 189 "accessor_class_list.gperf" +#line 188 "accessor_class_list.gperf" {"suppressed", &grib_accessor_class_suppressed}, {""}, -#line 212 "accessor_class_list.gperf" +#line 211 "accessor_class_list.gperf" {"when", &grib_accessor_class_when}, {""}, {""}, -#line 179 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" {"smart_table", &grib_accessor_class_smart_table}, {""}, #line 39 "accessor_class_list.gperf" {"constant", &grib_accessor_class_constant}, {""}, {""}, -#line 161 "accessor_class_list.gperf" +#line 160 "accessor_class_list.gperf" {"proj_string", &grib_accessor_class_proj_string}, -#line 150 "accessor_class_list.gperf" +#line 149 "accessor_class_list.gperf" {"octet_number", &grib_accessor_class_octet_number}, -#line 180 "accessor_class_list.gperf" +#line 179 "accessor_class_list.gperf" {"smart_table_column", &grib_accessor_class_smart_table_column}, {""}, -#line 136 "accessor_class_list.gperf" +#line 135 "accessor_class_list.gperf" {"lookup", &grib_accessor_class_lookup}, {""}, #line 94 "accessor_class_list.gperf" @@ -420,17 +420,15 @@ static const struct accessor_class_hash classes[] = #line 73 "accessor_class_list.gperf" {"decimal_precision", &grib_accessor_class_decimal_precision}, {""}, -#line 135 "accessor_class_list.gperf" +#line 134 "accessor_class_list.gperf" {"longitudes", &grib_accessor_class_longitudes}, #line 70 "accessor_class_list.gperf" {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, #line 27 "accessor_class_list.gperf" {"bufr_string_values", &grib_accessor_class_bufr_string_values}, -#line 197 "accessor_class_list.gperf" +#line 196 "accessor_class_list.gperf" {"uint16", &grib_accessor_class_uint16}, -#line 122 "accessor_class_list.gperf" - {"int64_little_endian", &grib_accessor_class_int64_little_endian}, - {""}, + {""}, {""}, #line 71 "accessor_class_list.gperf" {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, #line 86 "accessor_class_list.gperf" @@ -441,35 +439,35 @@ static const struct accessor_class_hash classes[] = {""}, #line 54 "accessor_class_list.gperf" {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, -#line 191 "accessor_class_list.gperf" +#line 190 "accessor_class_list.gperf" {"to_double", &grib_accessor_class_to_double}, #line 101 "accessor_class_list.gperf" {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, #line 120 "accessor_class_list.gperf" {"ieeefloat", &grib_accessor_class_ieeefloat}, -#line 151 "accessor_class_list.gperf" +#line 150 "accessor_class_list.gperf" {"offset_file", &grib_accessor_class_offset_file}, -#line 207 "accessor_class_list.gperf" +#line 206 "accessor_class_list.gperf" {"validity_date", &grib_accessor_class_validity_date}, -#line 208 "accessor_class_list.gperf" +#line 207 "accessor_class_list.gperf" {"validity_time", &grib_accessor_class_validity_time}, {""}, -#line 131 "accessor_class_list.gperf" +#line 130 "accessor_class_list.gperf" {"library_version", &grib_accessor_class_library_version}, -#line 211 "accessor_class_list.gperf" +#line 210 "accessor_class_list.gperf" {"vector", &grib_accessor_class_vector}, - {""}, {""}, -#line 52 "accessor_class_list.gperf" - {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, #line 84 "accessor_class_list.gperf" {"g1_section4_length", &grib_accessor_class_g1_section4_length}, {""}, +#line 52 "accessor_class_list.gperf" + {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, + {""}, {""}, #line 53 "accessor_class_list.gperf" {"data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing}, {""}, #line 24 "accessor_class_list.gperf" {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, -#line 158 "accessor_class_list.gperf" +#line 157 "accessor_class_list.gperf" {"padtoeven", &grib_accessor_class_padtoeven}, #line 50 "accessor_class_list.gperf" {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, @@ -485,11 +483,11 @@ static const struct accessor_class_hash classes[] = #line 21 "accessor_class_list.gperf" {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, {""}, {""}, {""}, {""}, -#line 153 "accessor_class_list.gperf" +#line 152 "accessor_class_list.gperf" {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, #line 35 "accessor_class_list.gperf" {"codetable", &grib_accessor_class_codetable}, -#line 132 "accessor_class_list.gperf" +#line 131 "accessor_class_list.gperf" {"local_definition", &grib_accessor_class_local_definition}, {""}, #line 25 "accessor_class_list.gperf" @@ -497,7 +495,7 @@ static const struct accessor_class_hash classes[] = {""}, #line 88 "accessor_class_list.gperf" {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, -#line 147 "accessor_class_list.gperf" +#line 146 "accessor_class_list.gperf" {"number_of_values", &grib_accessor_class_number_of_values}, {""}, #line 116 "accessor_class_list.gperf" @@ -506,23 +504,23 @@ static const struct accessor_class_hash classes[] = #line 33 "accessor_class_list.gperf" {"closest_date", &grib_accessor_class_closest_date}, {""}, {""}, -#line 210 "accessor_class_list.gperf" +#line 209 "accessor_class_list.gperf" {"variable", &grib_accessor_class_variable}, -#line 134 "accessor_class_list.gperf" +#line 133 "accessor_class_list.gperf" {"long_vector", &grib_accessor_class_long_vector}, -#line 167 "accessor_class_list.gperf" +#line 166 "accessor_class_list.gperf" {"scale_values", &grib_accessor_class_scale_values}, {""}, {""}, {""}, -#line 129 "accessor_class_list.gperf" +#line 128 "accessor_class_list.gperf" {"latlon_increment", &grib_accessor_class_latlon_increment}, {""}, {""}, {""}, -#line 148 "accessor_class_list.gperf" +#line 147 "accessor_class_list.gperf" {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, {""}, #line 79 "accessor_class_list.gperf" {"evaluate", &grib_accessor_class_evaluate}, {""}, {""}, {""}, {""}, {""}, -#line 152 "accessor_class_list.gperf" +#line 151 "accessor_class_list.gperf" {"offset_values", &grib_accessor_class_offset_values}, #line 69 "accessor_class_list.gperf" {"data_sh_packed", &grib_accessor_class_data_sh_packed}, @@ -530,12 +528,12 @@ static const struct accessor_class_hash classes[] = {"abstract_vector", &grib_accessor_class_abstract_vector}, #line 118 "accessor_class_list.gperf" {"headers_only", &grib_accessor_class_headers_only}, -#line 126 "accessor_class_list.gperf" +#line 125 "accessor_class_list.gperf" {"ksec1expver", &grib_accessor_class_ksec1expver}, {""}, {""}, #line 41 "accessor_class_list.gperf" {"count_missing", &grib_accessor_class_count_missing}, -#line 204 "accessor_class_list.gperf" +#line 203 "accessor_class_list.gperf" {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, {""}, {""}, #line 121 "accessor_class_list.gperf" @@ -560,7 +558,7 @@ static const struct accessor_class_hash classes[] = #line 37 "accessor_class_list.gperf" {"codetable_units", &grib_accessor_class_codetable_units}, {""}, {""}, -#line 130 "accessor_class_list.gperf" +#line 129 "accessor_class_list.gperf" {"latlonvalues", &grib_accessor_class_latlonvalues}, {""}, {""}, {""}, {""}, #line 30 "accessor_class_list.gperf" @@ -569,7 +567,7 @@ static const struct accessor_class_hash classes[] = #line 31 "accessor_class_list.gperf" {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 149 "accessor_class_list.gperf" +#line 148 "accessor_class_list.gperf" {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, #line 10 "accessor_class_list.gperf" {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, @@ -600,7 +598,7 @@ static const struct accessor_class_hash classes[] = #line 87 "accessor_class_list.gperf" {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, {""}, {""}, {""}, {""}, {""}, -#line 164 "accessor_class_list.gperf" +#line 163 "accessor_class_list.gperf" {"reference_value_error", &grib_accessor_class_reference_value_error}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index 3dea70b57..96a9bc024 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -111,7 +111,6 @@ { "ibmfloat", &grib_accessor_class_ibmfloat, }, { "ieeefloat", &grib_accessor_class_ieeefloat, }, { "ifs_param", &grib_accessor_class_ifs_param, }, -{ "int64_little_endian", &grib_accessor_class_int64_little_endian, }, { "iterator", &grib_accessor_class_iterator, }, { "julian_date", &grib_accessor_class_julian_date, }, { "julian_day", &grib_accessor_class_julian_day, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index c26759217..4c8a05671 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -112,7 +112,6 @@ headers_only, &grib_accessor_class_headers_only ibmfloat, &grib_accessor_class_ibmfloat ieeefloat, &grib_accessor_class_ieeefloat ifs_param, &grib_accessor_class_ifs_param -int64_little_endian, &grib_accessor_class_int64_little_endian iterator, &grib_accessor_class_iterator julian_date, &grib_accessor_class_julian_date julian_day, &grib_accessor_class_julian_day From 70b2799dcd115f50ba36a60e1b2491356eee7da2 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 2 Sep 2023 15:37:33 +0100 Subject: [PATCH 303/372] Testing: Increase coverage --- tests/grib_set.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/grib_set.sh b/tests/grib_set.sh index 8e448c8d9..1b8be144b 100755 --- a/tests/grib_set.sh +++ b/tests/grib_set.sh @@ -208,6 +208,22 @@ count=`${tools_dir}/grib_count $outfile` [ $count -eq 1 ] grib_check_key_equals $outfile shortName '2t' +# Key with no_fail flag +# ------------------------ +input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +grib_check_key_equals $input 'typeOfProcessedData:i' '2' +${tools_dir}/grib_set -s typeOfProcessedData=rubbish $input $outfile +grib_check_key_equals $outfile 'typeOfProcessedData:i' '255' # set to default + +# Codetable mismatch +# ------------------------ +input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +set +e +${tools_dir}/grib_set -s stepUnits=d $input $outfile > $temp 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "stepUnits: No such code table entry.*Did you mean" $temp # ------------------------ # Unreadable message From a96fe2a6614f2383c8bc4e57b0d402a7921f4d57 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 2 Sep 2023 15:38:03 +0100 Subject: [PATCH 304/372] Use ERROR rather than FATAL --- src/grib_accessor_class_codetable.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/grib_accessor_class_codetable.cc b/src/grib_accessor_class_codetable.cc index d623f09e1..e8e286623 100644 --- a/src/grib_accessor_class_codetable.cc +++ b/src/grib_accessor_class_codetable.cc @@ -682,10 +682,10 @@ static int pack_string(grib_accessor* a, const char* buffer, size_t* len) if (act->default_value != NULL) { const char* p = 0; size_t s_len = 1; - long l; + long l = 0; int ret = 0; - double d; - char tmp[1024]; + double d = 0; + char tmp[1024] = {0,}; grib_expression* expression = grib_arguments_get_expression(grib_handle_of_accessor(a), act->default_value, 0); int type = grib_expression_native_type(grib_handle_of_accessor(a), expression); switch (type) { @@ -703,8 +703,8 @@ static int pack_string(grib_accessor* a, const char* buffer, size_t* len) s_len = sizeof(tmp); p = grib_expression_evaluate_string(grib_handle_of_accessor(a), expression, tmp, &s_len, &ret); if (ret != GRIB_SUCCESS) { - grib_context_log(a->context, GRIB_LOG_FATAL, - "unable to evaluate %s as string", a->name); + grib_context_log(a->context, GRIB_LOG_ERROR, + "%s: Unable to evaluate default value of %s as string expression", __func__, a->name); return ret; } s_len = strlen(p) + 1; From a1a09240552e1661d62f4b0cf7e2e48adebf86ab Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 2 Sep 2023 15:58:11 +0100 Subject: [PATCH 305/372] Testing: Increase coverage --- tests/bufr_coordinate_descriptors.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/bufr_coordinate_descriptors.cc b/tests/bufr_coordinate_descriptors.cc index d743024a2..f005ab5a5 100644 --- a/tests/bufr_coordinate_descriptors.cc +++ b/tests/bufr_coordinate_descriptors.cc @@ -34,6 +34,7 @@ int main(int argc, char* argv[]) char* filename = NULL; FILE* fin = NULL; int is_coord = 0; + int is_header = 0; assert (argc == 2); filename = argv[1]; @@ -78,6 +79,10 @@ int main(int argc, char* argv[]) is_coord = codes_bufr_key_is_coordinate(h, "nosuchkey", &err); assert(err == CODES_NOT_FOUND); + assert(is_coord == 0); + is_header = codes_bufr_key_is_header(h, "nosuchkey", &err); + assert(err == CODES_NOT_FOUND); + assert(is_header == 0); codes_bufr_keys_iterator_delete(kiter); codes_handle_delete(h); From adcaaee3a69f212b41ff651b8248980144a79a84 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 2 Sep 2023 17:28:45 +0100 Subject: [PATCH 306/372] Testing: Increase coverage --- src/grib_accessor_class_uint16.cc | 11 +++++++++-- src/grib_accessor_class_uint32.cc | 2 -- src/grib_accessor_class_uint64.cc | 1 - tests/grib_get_fail.sh | 26 ++++++++++++++++++++++++++ 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/grib_accessor_class_uint16.cc b/src/grib_accessor_class_uint16.cc index 8977e92be..e95105b32 100644 --- a/src/grib_accessor_class_uint16.cc +++ b/src/grib_accessor_class_uint16.cc @@ -18,6 +18,7 @@ SUPER = grib_accessor_class_gen IMPLEMENTS = unpack_long IMPLEMENTS = pack_long + IMPLEMENTS = get_native_type END_CLASS_DEF */ @@ -32,6 +33,7 @@ or edit "accessor.class" and rerun ./make_class.pl */ +static int get_native_type(grib_accessor*); static int pack_long(grib_accessor*, const long* val, size_t* len); static int unpack_long(grib_accessor*, long* val, size_t* len); @@ -59,7 +61,7 @@ static grib_accessor_class _grib_accessor_class_uint16 = { 0, /* get number of values */ 0, /* get number of bytes */ 0, /* get offset to bytes */ - 0, /* get native type */ + &get_native_type, /* get native type */ 0, /* get sub_section */ 0, /* pack_missing */ 0, /* is_missing */ @@ -104,7 +106,7 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) /*unsigned char* data = grib_handle_of_accessor(a)->buffer->data;*/ if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name, 1); + grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values", a->name, 1); *len = 0; return GRIB_ARRAY_TOO_SMALL; } @@ -119,3 +121,8 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } + +static int get_native_type(grib_accessor* a) +{ + return GRIB_TYPE_LONG; +} diff --git a/src/grib_accessor_class_uint32.cc b/src/grib_accessor_class_uint32.cc index 60e113ae0..01889e79c 100644 --- a/src/grib_accessor_class_uint32.cc +++ b/src/grib_accessor_class_uint32.cc @@ -116,13 +116,11 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) return GRIB_NOT_IMPLEMENTED; } - static int pack_long(grib_accessor* a, const long* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; } - static int get_native_type(grib_accessor* a) { return GRIB_TYPE_LONG; diff --git a/src/grib_accessor_class_uint64.cc b/src/grib_accessor_class_uint64.cc index 2ffe4fc14..1e8ef3a93 100644 --- a/src/grib_accessor_class_uint64.cc +++ b/src/grib_accessor_class_uint64.cc @@ -132,7 +132,6 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) return GRIB_SUCCESS; } - static int pack_long(grib_accessor* a, const long* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; diff --git a/tests/grib_get_fail.sh b/tests/grib_get_fail.sh index 9f34e83b8..e990862f0 100755 --- a/tests/grib_get_fail.sh +++ b/tests/grib_get_fail.sh @@ -33,4 +33,30 @@ set -e [ $status -ne 0 ] grep -q "Nh (Key/value not found)" $tempText +# Types like uint16 etc +# Create a temporary directory which holds the tables etc +tempDir=${label}.temp.dir +rm -rf $tempDir +mkdir -p $tempDir/definitions/grib2 +bootfile=$tempDir/definitions/grib2/boot.def +cat $def_dir/grib2/boot.def > $bootfile +echo "uint16 key_uint16: transient;" >> $bootfile +echo "uint32 key_uint32: transient;" >> $bootfile +echo "uint64 key_uint64: transient;" >> $bootfile +echo "uint32_little_endian key_uint32_le: transient;" >> $bootfile +echo "uint64_little_endian key_uint64_le: transient;" >> $bootfile +export ECCODES_DEFINITION_PATH=$tempDir/definitions +input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +set +e +${tools_dir}/grib_get -p key_uint16 $input > $tempText 2>&1 +${tools_dir}/grib_get -p key_uint32 $input >> $tempText 2>&1 +${tools_dir}/grib_get -p key_uint64 $input >> $tempText 2>&1 +${tools_dir}/grib_get -p key_uint32_le $input >> $tempText 2>&1 +${tools_dir}/grib_get -p key_uint64_le $input >> $tempText 2>&1 +set -e +# cat $tempText + +# Clean up +cd $test_dir +rm -rf $tempDir rm -f $tempText From 2aa1e7efd1104fce07c313e667698315d5ef02cf Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 2 Sep 2023 18:42:11 +0100 Subject: [PATCH 307/372] Remove pack_ methods on read-only accessors --- src/grib_accessor_class_group.cc | 35 ++++++-------------------------- 1 file changed, 6 insertions(+), 29 deletions(-) diff --git a/src/grib_accessor_class_group.cc b/src/grib_accessor_class_group.cc index d4c09a2f5..32f337d3b 100644 --- a/src/grib_accessor_class_group.cc +++ b/src/grib_accessor_class_group.cc @@ -7,9 +7,6 @@ * 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. */ -/*********************************************************** - * Enrico Fucile - ***********************************************************/ #include "grib_api_internal.h" /* @@ -18,9 +15,9 @@ START_CLASS_DEF CLASS = accessor SUPER = grib_accessor_class_gen - IMPLEMENTS = unpack_string;pack_string - IMPLEMENTS = unpack_long;pack_long - IMPLEMENTS = unpack_double;pack_double + IMPLEMENTS = unpack_string + IMPLEMENTS = unpack_long + IMPLEMENTS = unpack_double IMPLEMENTS = init;dump;string_length IMPLEMENTS = value_count IMPLEMENTS = next_offset @@ -42,9 +39,6 @@ or edit "accessor.class" and rerun ./make_class.pl */ static int get_native_type(grib_accessor*); -static int pack_double(grib_accessor*, const double* val, size_t* len); -static int pack_long(grib_accessor*, const long* val, size_t* len); -static int pack_string(grib_accessor*, const char*, size_t* len); static int unpack_double(grib_accessor*, double* val, size_t* len); static int unpack_long(grib_accessor*, long* val, size_t* len); static int unpack_string(grib_accessor*, char*, size_t* len); @@ -84,13 +78,13 @@ static grib_accessor_class _grib_accessor_class_group = { 0, /* get sub_section */ 0, /* pack_missing */ 0, /* is_missing */ - &pack_long, /* pack_long */ + 0, /* pack_long */ &unpack_long, /* unpack_long */ - &pack_double, /* pack_double */ + 0, /* pack_double */ 0, /* pack_float */ &unpack_double, /* unpack_double */ 0, /* unpack_float */ - &pack_string, /* pack_string */ + 0, /* pack_string */ &unpack_string, /* unpack_string */ 0, /* pack_string_array */ 0, /* unpack_string_array */ @@ -194,23 +188,6 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) return GRIB_SUCCESS; } -static int pack_string(grib_accessor* a, const char* val, size_t* len) -{ - return GRIB_NOT_IMPLEMENTED; -} - -static int pack_long(grib_accessor* a, const long* v, size_t* len) -{ - grib_context_log(a->context, GRIB_LOG_ERROR, " Should not pack %s as long", a->name); - return GRIB_NOT_IMPLEMENTED; -} - -static int pack_double(grib_accessor* a, const double* v, size_t* len) -{ - grib_context_log(a->context, GRIB_LOG_ERROR, " Should not pack %s as double", a->name); - return GRIB_NOT_IMPLEMENTED; -} - static int unpack_long(grib_accessor* a, long* v, size_t* len) { char val[1024] = {0,}; From 9b79f50bc3a3fa463ffd324b4debd099424f8319 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sat, 2 Sep 2023 19:54:55 +0000 Subject: [PATCH 308/372] Testing: Fix definitions path --- tests/grib_get_fail.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/grib_get_fail.sh b/tests/grib_get_fail.sh index e990862f0..c1fb887b7 100755 --- a/tests/grib_get_fail.sh +++ b/tests/grib_get_fail.sh @@ -20,10 +20,9 @@ REDIRECT=/dev/null # Expect failure as the key does not exist set +e ${tools_dir}/grib_get -p boomerang ${data_dir}/regular_latlon_surface.grib1 2> $REDIRECT > $REDIRECT -if [ $? -eq 0 ] ; then - exit 1; # Should not have succeeded -fi +status=$? set -e +[ $status -ne 0 ] # ECC-1551: Print which key does not exist set +e @@ -45,7 +44,9 @@ echo "uint32 key_uint32: transient;" >> $bootfile echo "uint64 key_uint64: transient;" >> $bootfile echo "uint32_little_endian key_uint32_le: transient;" >> $bootfile echo "uint64_little_endian key_uint64_le: transient;" >> $bootfile -export ECCODES_DEFINITION_PATH=$tempDir/definitions +curr_defs=$ECCODES_DEFINITION_PATH +export ECCODES_DEFINITION_PATH=$PWD/$tempDir/definitions:$curr_defs + input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl set +e ${tools_dir}/grib_get -p key_uint16 $input > $tempText 2>&1 @@ -54,7 +55,7 @@ ${tools_dir}/grib_get -p key_uint64 $input >> $tempText 2>&1 ${tools_dir}/grib_get -p key_uint32_le $input >> $tempText 2>&1 ${tools_dir}/grib_get -p key_uint64_le $input >> $tempText 2>&1 set -e -# cat $tempText +cat $tempText # Clean up cd $test_dir From 94026eb80bb8d0853f35cdd5170d0f357f0c2980 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 3 Sep 2023 12:15:48 +0100 Subject: [PATCH 309/372] Testing: grid_second_order_constant_width --- ...s_data_g1second_order_constant_width_packing.cc | 3 ++- tests/grib_get_fail.sh | 13 +++++++------ tests/grib_second_order.sh | 14 ++++++++++++++ 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/grib_accessor_class_data_g1second_order_constant_width_packing.cc b/src/grib_accessor_class_data_g1second_order_constant_width_packing.cc index a18ef2d2d..eba3ecc24 100644 --- a/src/grib_accessor_class_data_g1second_order_constant_width_packing.cc +++ b/src/grib_accessor_class_data_g1second_order_constant_width_packing.cc @@ -308,7 +308,8 @@ static int unpack_double(grib_accessor* a, double* values, size_t* len) static int pack_double(grib_accessor* a, const double* cval, size_t* len) { - grib_context_log(a->context, GRIB_LOG_ERROR, "constant width packing not implemented"); + const char* cclass_name = a->cclass->name; + grib_context_log(a->context, GRIB_LOG_ERROR, "%s: %s: Not implemented", cclass_name, __func__); return GRIB_NOT_IMPLEMENTED; } diff --git a/tests/grib_get_fail.sh b/tests/grib_get_fail.sh index c1fb887b7..ebe18cbb9 100755 --- a/tests/grib_get_fail.sh +++ b/tests/grib_get_fail.sh @@ -12,19 +12,19 @@ label="grib_get_fail_test" tempText=temp.$label.txt -REDIRECT=/dev/null # Check input file has been downloaded [ -f ${data_dir}/regular_latlon_surface.grib1 ] # Expect failure as the key does not exist set +e -${tools_dir}/grib_get -p boomerang ${data_dir}/regular_latlon_surface.grib1 2> $REDIRECT > $REDIRECT +${tools_dir}/grib_get -p boomerang ${data_dir}/regular_latlon_surface.grib1 status=$? set -e [ $status -ne 0 ] # ECC-1551: Print which key does not exist +# ----------------------------------------- set +e ${tools_dir}/grib_get -p Ni,Nh,Nj $ECCODES_SAMPLES_PATH/GRIB2.tmpl > $tempText 2>&1 status=$? @@ -32,8 +32,8 @@ set -e [ $status -ne 0 ] grep -q "Nh (Key/value not found)" $tempText -# Types like uint16 etc -# Create a temporary directory which holds the tables etc +# Types like uint16, uint32 etc +# ------------------------------- tempDir=${label}.temp.dir rm -rf $tempDir mkdir -p $tempDir/definitions/grib2 @@ -51,12 +51,13 @@ input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl set +e ${tools_dir}/grib_get -p key_uint16 $input > $tempText 2>&1 ${tools_dir}/grib_get -p key_uint32 $input >> $tempText 2>&1 -${tools_dir}/grib_get -p key_uint64 $input >> $tempText 2>&1 ${tools_dir}/grib_get -p key_uint32_le $input >> $tempText 2>&1 -${tools_dir}/grib_get -p key_uint64_le $input >> $tempText 2>&1 set -e cat $tempText +${tools_dir}/grib_get -p key_uint64 $input +${tools_dir}/grib_get -p key_uint64_le $input + # Clean up cd $test_dir rm -rf $tempDir diff --git a/tests/grib_second_order.sh b/tests/grib_second_order.sh index 7fab5e736..352cf94ca 100755 --- a/tests/grib_second_order.sh +++ b/tests/grib_second_order.sh @@ -183,6 +183,20 @@ ${tools_dir}/grib_set -s scaleValuesBy=1.1 boustrophedonic.grib1 $temp1 unset ECCODES_GRIBEX_BOUSTROPHEDONIC +# data_g1second_order_constant_width_packing +# ------------------------------------------ +input=second_ord_rbr.grib1 +${tools_dir}/grib_set -s secondOrderOfDifferentWidth=0,secondaryBitmapPresent=1 $input $temp1 +grib_check_key_equals $temp1 packingType grid_second_order_constant_width +${tools_dir}/grib_dump -O $temp1 > $REDIRECT +set +e +${tools_dir}/grib_set -s scaleValuesBy=2 $temp1 $temp2 > $tempText 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Not implemented" $tempText + + # Clean up rm -f $temp_stat1 $temp_stat2 rm -f $temp1 $temp2 $temp3 $sec_ord_bmp From 56d6a410b2f0ffb62c676e4d2cb1571686a4037d Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 3 Sep 2023 13:07:46 +0100 Subject: [PATCH 310/372] Testing: grid_second_order_constant_width --- tests/grib_second_order.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/grib_second_order.sh b/tests/grib_second_order.sh index 352cf94ca..a50c8f681 100755 --- a/tests/grib_second_order.sh +++ b/tests/grib_second_order.sh @@ -186,7 +186,7 @@ unset ECCODES_GRIBEX_BOUSTROPHEDONIC # data_g1second_order_constant_width_packing # ------------------------------------------ input=second_ord_rbr.grib1 -${tools_dir}/grib_set -s secondOrderOfDifferentWidth=0,secondaryBitmapPresent=1 $input $temp1 +${tools_dir}/grib_set -s Ni=2,Nj=74,secondOrderOfDifferentWidth=0,secondaryBitmapPresent=1 $input $temp1 grib_check_key_equals $temp1 packingType grid_second_order_constant_width ${tools_dir}/grib_dump -O $temp1 > $REDIRECT set +e @@ -196,6 +196,10 @@ set -e [ $status -ne 0 ] grep -q "Not implemented" $tempText +${tools_dir}/grib_get_data $temp1 > $REDIRECT +${tools_dir}/grib_ls -l46,1 $temp1 > $REDIRECT +${tools_dir}/grib_ls -j -l46,1,1 $temp1 > $REDIRECT + # Clean up rm -f $temp_stat1 $temp_stat2 From 348c750c21fa34fb75572ed8b471fada6db97197 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 3 Sep 2023 13:30:21 +0100 Subject: [PATCH 311/372] Testing: Use of the 'length' expression --- tests/grib_filter.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/grib_filter.sh b/tests/grib_filter.sh index 7ab488853..c07e2151a 100755 --- a/tests/grib_filter.sh +++ b/tests/grib_filter.sh @@ -362,6 +362,14 @@ set -e [ $status -ne 0 ] grep "Assertion failure" $tempOut +# Use of the "length" expression +cat >$tempFilt < $tempOut + + # Clean up rm -f $tempGrib $tempFilt $tempOut $tempRef rm -f ${data_dir}/formatint.rules ${data_dir}/binop.rules From 9d6510a441ed45c9d31537ef60b6a2ec37d4702c Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 3 Sep 2023 13:44:48 +0100 Subject: [PATCH 312/372] Testing: Use of the 'length' expression --- tests/grib_filter.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/grib_filter.sh b/tests/grib_filter.sh index c07e2151a..dee06e373 100755 --- a/tests/grib_filter.sh +++ b/tests/grib_filter.sh @@ -214,6 +214,15 @@ switch (packingType) { EOF ${tools_dir}/grib_filter $tempFilt $data_dir/sample.grib2 ${data_dir}/ccsds.grib2 $data_dir/spherical_model_level.grib2 +cat >$tempFilt < Date: Sun, 3 Sep 2023 14:22:23 +0100 Subject: [PATCH 313/372] Testing: Fix for Windows --- tests/grib_get_fail.sh | 49 ++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/tests/grib_get_fail.sh b/tests/grib_get_fail.sh index ebe18cbb9..cb23f7468 100755 --- a/tests/grib_get_fail.sh +++ b/tests/grib_get_fail.sh @@ -34,31 +34,34 @@ grep -q "Nh (Key/value not found)" $tempText # Types like uint16, uint32 etc # ------------------------------- -tempDir=${label}.temp.dir -rm -rf $tempDir -mkdir -p $tempDir/definitions/grib2 -bootfile=$tempDir/definitions/grib2/boot.def -cat $def_dir/grib2/boot.def > $bootfile -echo "uint16 key_uint16: transient;" >> $bootfile -echo "uint32 key_uint32: transient;" >> $bootfile -echo "uint64 key_uint64: transient;" >> $bootfile -echo "uint32_little_endian key_uint32_le: transient;" >> $bootfile -echo "uint64_little_endian key_uint64_le: transient;" >> $bootfile -curr_defs=$ECCODES_DEFINITION_PATH -export ECCODES_DEFINITION_PATH=$PWD/$tempDir/definitions:$curr_defs +if [ $ECCODES_ON_WINDOWS -eq 0 ]; then + tempDir=${label}.temp.dir + rm -rf $tempDir + mkdir -p $tempDir/definitions/grib2 + bootfile=$tempDir/definitions/grib2/boot.def + cat $def_dir/grib2/boot.def > $bootfile + echo "uint16 key_uint16: transient;" >> $bootfile + echo "uint32 key_uint32: transient;" >> $bootfile + echo "uint64 key_uint64: transient;" >> $bootfile + echo "uint32_little_endian key_uint32_le: transient;" >> $bootfile + echo "uint64_little_endian key_uint64_le: transient;" >> $bootfile + curr_defs=$ECCODES_DEFINITION_PATH + export ECCODES_DEFINITION_PATH=$PWD/$tempDir/definitions:$curr_defs -input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl -set +e -${tools_dir}/grib_get -p key_uint16 $input > $tempText 2>&1 -${tools_dir}/grib_get -p key_uint32 $input >> $tempText 2>&1 -${tools_dir}/grib_get -p key_uint32_le $input >> $tempText 2>&1 -set -e -cat $tempText + input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + set +e + # Not yet fully implemented + ${tools_dir}/grib_get -p key_uint16 $input > $tempText 2>&1 + ${tools_dir}/grib_get -p key_uint32 $input >> $tempText 2>&1 + ${tools_dir}/grib_get -p key_uint32_le $input >> $tempText 2>&1 + set -e + cat $tempText -${tools_dir}/grib_get -p key_uint64 $input -${tools_dir}/grib_get -p key_uint64_le $input + ${tools_dir}/grib_get -p key_uint64 $input + ${tools_dir}/grib_get -p key_uint64_le $input + + rm -rf $tempDir +fi # Clean up -cd $test_dir -rm -rf $tempDir rm -f $tempText From 760cc84d803e99c237fb5646adaa644e33d0edd4 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 3 Sep 2023 14:30:29 +0100 Subject: [PATCH 314/372] HEALPix: Check mallocs --- src/grib_iterator_class_healpix.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/grib_iterator_class_healpix.cc b/src/grib_iterator_class_healpix.cc index 9f7d9a49d..f2e9c0766 100644 --- a/src/grib_iterator_class_healpix.cc +++ b/src/grib_iterator_class_healpix.cc @@ -83,7 +83,6 @@ static void init_class(grib_iterator_class* c) } /* END_CLASS_IMP */ - #define ITER "HEALPix Geoiterator" #define RAD2DEG 57.29577951308232087684 // 180 over pi @@ -123,7 +122,7 @@ size_t HEALPix_nj(size_t N, size_t i) // // Equator // xstart[2*N-1] = start * (1 - (N % 2 ? 1 : 0)); // pl[2*N-1] = 4*N; -// +// static std::vector HEALPix_longitudes(size_t N, size_t i) { const auto Nj = HEALPix_nj(N, i); @@ -138,7 +137,7 @@ static std::vector HEALPix_longitudes(size_t N, size_t i) static int iterate_healpix(grib_iterator_healpix* self, long N) { - size_t ny, nx, k; + size_t ny, nx; ny = nx = 4*N - 1; std::vector latitudes(ny); @@ -160,7 +159,7 @@ static int iterate_healpix(grib_iterator_healpix* self, long N) // Equator latitudes[2 * N - 1] = 0.0; - k = 0; + size_t k = 0; for (size_t i = 0; i < ny; i++) { // Compute the longitudes at a given latitude std::vector longitudes = HEALPix_longitudes(N, i); @@ -211,7 +210,9 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) } self->lats = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); + if (self->lats == NULL) return GRIB_OUT_OF_MEMORY; self->lons = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); + if (self->lons == NULL) return GRIB_OUT_OF_MEMORY; try { err = iterate_healpix(self, N); From 13982e7dbdcc31c7f0676f6fdd21824effccc247 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 3 Sep 2023 16:12:58 +0100 Subject: [PATCH 315/372] Testing: GRIB2 product def templates --- tests/grib2_templates.sh | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/tests/grib2_templates.sh b/tests/grib2_templates.sh index 93daa7e5d..4b08f2619 100755 --- a/tests/grib2_templates.sh +++ b/tests/grib2_templates.sh @@ -35,8 +35,7 @@ done # Template 4.86 # ------------- -# TODO: Add tablesVersion later... -$tools_dir/grib_set -s productDefinitionTemplateNumber=86,totalNumberOfQuantiles=2 $sample2 $temp +$tools_dir/grib_set -s tablesVersion=31,productDefinitionTemplateNumber=86,totalNumberOfQuantiles=2 $sample2 $temp grib_check_key_equals $temp totalNumberOfQuantiles,quantileValue '2 0' @@ -148,6 +147,33 @@ grib_check_key_equals $temp perturbationNumber,typeOfStatisticalProcessing '2000 $tools_dir/grib_dump -O -p section_4 $temp > $tempText grep -q "Individual member for large ensemble forecast.*continuous or non-continuous interval" $tempText +# stepType & PDTNs +# -------------------- +test_PDTN_conversions() +{ + # Arguments + # $1 = product def template for instantaneous + # $2 = product def template for interval-based + pdtn_instant=$1 + pdtn_interval=$2 + $tools_dir/grib_set -s productDefinitionTemplateNumber=$pdtn_instant,stepType=accum $sample2 $temp + grib_check_key_equals $temp productDefinitionTemplateNumber $pdtn_interval + $tools_dir/grib_set -s stepType=instant $temp $temp1 + grib_check_key_equals $temp1 productDefinitionTemplateNumber $pdtn_instant +} + +test_PDTN_conversions 2 12 +test_PDTN_conversions 3 13 +test_PDTN_conversions 4 14 +test_PDTN_conversions 5 9 +test_PDTN_conversions 6 10 +test_PDTN_conversions 40 42 +test_PDTN_conversions 41 43 +# test_PDTN_conversions 45 85 # TODO +test_PDTN_conversions 57 67 +test_PDTN_conversions 58 68 +test_PDTN_conversions 71 73 + # Clean up rm -f $temp $temp1 $temp2 $tempFilt $tempText From 44476b7ba98c37a857e884b5e40d4a68971218df Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 4 Sep 2023 12:44:02 +0100 Subject: [PATCH 316/372] Testing: Various accessors --- tests/CMakeLists.txt | 1 + tests/grib_accessors.sh | 57 +++++++++++++++++++++++++++++++++++++++++ tests/grib_get_fail.sh | 31 ---------------------- 3 files changed, 58 insertions(+), 31 deletions(-) create mode 100755 tests/grib_accessors.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 8671f37eb..21e4eb5dc 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -277,6 +277,7 @@ if( HAVE_BUILD_TOOLS ) grib_copy_message grib_decimalPrecision grib_bitsPerValue + grib_accessors grib_get_fail grib_missing grib_local diff --git a/tests/grib_accessors.sh b/tests/grib_accessors.sh new file mode 100755 index 000000000..0d10c7442 --- /dev/null +++ b/tests/grib_accessors.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +label="grib_accessors_test" +tempText=temp.$label.txt + +if [ $ECCODES_ON_WINDOWS -eq 1 ]; then + echo "$0: This test is currently disabled on Windows" + exit 0 +fi + +# Accessors like uint16, uint32 etc +# ---------------------------------- +tempDir=${label}.temp.dir +rm -rf $tempDir +mkdir -p $tempDir/definitions/grib2 +bootfile=$tempDir/definitions/grib2/boot.def +cat $def_dir/grib2/boot.def > $bootfile +echo "uint16 key_uint16: transient;" >> $bootfile +echo "uint32 key_uint32: transient;" >> $bootfile +echo "uint64 key_uint64: transient;" >> $bootfile +echo "uint32_little_endian key_uint32_le: transient;" >> $bootfile +echo "uint64_little_endian key_uint64_le: transient;" >> $bootfile +echo "key_tos1 = to_string(kindOfProduct,0,1);" >> $bootfile +echo "key_tos2 = to_string(dataDate,0,3);" >> $bootfile +echo >> $bootfile + +curr_defs=$ECCODES_DEFINITION_PATH +export ECCODES_DEFINITION_PATH=$PWD/$tempDir/definitions:$curr_defs + +input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +set +e +# Not yet fully implemented +${tools_dir}/grib_get -p key_uint16 $input > $tempText 2>&1 +${tools_dir}/grib_get -p key_uint32 $input >> $tempText 2>&1 +${tools_dir}/grib_get -p key_uint32_le $input >> $tempText 2>&1 +set -e + +# kindOfProduct = GRIB, dataDate = 20070323 +grib_check_key_equals $input 'key_uint64,key_uint64_le' '0 0' +grib_check_key_equals $input 'key_tos1,key_tos2' 'G 200' +grib_check_key_equals $input 'key_tos2:d,key_tos2:i' '200 200' + +rm -rf $tempDir + + +# Clean up +rm -f $tempText diff --git a/tests/grib_get_fail.sh b/tests/grib_get_fail.sh index cb23f7468..a94ad80f6 100755 --- a/tests/grib_get_fail.sh +++ b/tests/grib_get_fail.sh @@ -32,36 +32,5 @@ set -e [ $status -ne 0 ] grep -q "Nh (Key/value not found)" $tempText -# Types like uint16, uint32 etc -# ------------------------------- -if [ $ECCODES_ON_WINDOWS -eq 0 ]; then - tempDir=${label}.temp.dir - rm -rf $tempDir - mkdir -p $tempDir/definitions/grib2 - bootfile=$tempDir/definitions/grib2/boot.def - cat $def_dir/grib2/boot.def > $bootfile - echo "uint16 key_uint16: transient;" >> $bootfile - echo "uint32 key_uint32: transient;" >> $bootfile - echo "uint64 key_uint64: transient;" >> $bootfile - echo "uint32_little_endian key_uint32_le: transient;" >> $bootfile - echo "uint64_little_endian key_uint64_le: transient;" >> $bootfile - curr_defs=$ECCODES_DEFINITION_PATH - export ECCODES_DEFINITION_PATH=$PWD/$tempDir/definitions:$curr_defs - - input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl - set +e - # Not yet fully implemented - ${tools_dir}/grib_get -p key_uint16 $input > $tempText 2>&1 - ${tools_dir}/grib_get -p key_uint32 $input >> $tempText 2>&1 - ${tools_dir}/grib_get -p key_uint32_le $input >> $tempText 2>&1 - set -e - cat $tempText - - ${tools_dir}/grib_get -p key_uint64 $input - ${tools_dir}/grib_get -p key_uint64_le $input - - rm -rf $tempDir -fi - # Clean up rm -f $tempText From f7cf087f083ee74ed93345236ac984c76d84e9f1 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 4 Sep 2023 12:44:59 +0100 Subject: [PATCH 317/372] Remove pack_ methods on read-only accessors --- src/grib_accessor_class_to_string.cc | 49 ++++++++-------------------- 1 file changed, 13 insertions(+), 36 deletions(-) diff --git a/src/grib_accessor_class_to_string.cc b/src/grib_accessor_class_to_string.cc index 2abfccee1..ce8bf4e74 100644 --- a/src/grib_accessor_class_to_string.cc +++ b/src/grib_accessor_class_to_string.cc @@ -7,9 +7,6 @@ * 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. */ -/*********************************************************** - * Enrico Fucile - ***********************************************************/ #include "grib_api_internal.h" /* @@ -18,9 +15,9 @@ START_CLASS_DEF CLASS = accessor SUPER = grib_accessor_class_gen - IMPLEMENTS = unpack_string;pack_string - IMPLEMENTS = unpack_long;pack_long - IMPLEMENTS = unpack_double;pack_double + IMPLEMENTS = unpack_string + IMPLEMENTS = unpack_long + IMPLEMENTS = unpack_double IMPLEMENTS = init;dump;string_length IMPLEMENTS = value_count IMPLEMENTS = next_offset @@ -44,9 +41,6 @@ or edit "accessor.class" and rerun ./make_class.pl */ static int get_native_type(grib_accessor*); -static int pack_double(grib_accessor*, const double* val, size_t* len); -static int pack_long(grib_accessor*, const long* val, size_t* len); -static int pack_string(grib_accessor*, const char*, size_t* len); static int unpack_double(grib_accessor*, double* val, size_t* len); static int unpack_long(grib_accessor*, long* val, size_t* len); static int unpack_string(grib_accessor*, char*, size_t* len); @@ -88,13 +82,13 @@ static grib_accessor_class _grib_accessor_class_to_string = { 0, /* get sub_section */ 0, /* pack_missing */ 0, /* is_missing */ - &pack_long, /* pack_long */ + 0, /* pack_long */ &unpack_long, /* unpack_long */ - &pack_double, /* pack_double */ + 0, /* pack_double */ 0, /* pack_float */ &unpack_double, /* unpack_double */ 0, /* unpack_float */ - &pack_string, /* pack_string */ + 0, /* pack_string */ &unpack_string, /* unpack_string */ 0, /* pack_string_array */ 0, /* unpack_string_array */ @@ -148,11 +142,11 @@ static int value_count(grib_accessor* a, long* count) static size_t string_length(grib_accessor* a) { grib_accessor_to_string* self = (grib_accessor_to_string*)a; - size_t size = 0; if (self->length) return self->length; + size_t size = 0; grib_get_string_length(grib_handle_of_accessor(a), self->key, &size); return size; } @@ -169,21 +163,21 @@ static int get_native_type(grib_accessor* a) static int unpack_string(grib_accessor* a, char* val, size_t* len) { - int err = 0; grib_accessor_to_string* self = (grib_accessor_to_string*)a; - char buff[512] = {0,}; - size_t length; - size_t size = 512; - length = string_length(a); + int err = 0; + char buff[512] = {0,}; + + size_t length = string_length(a); if (len[0] < length + 1) { grib_context_log(a->context, GRIB_LOG_ERROR, "unpack_string: Wrong size (%lu) for %s, it contains %ld values", - len[0], a->name, a->length + 1); + len[0], a->name, a->length + 1); len[0] = 0; return GRIB_ARRAY_TOO_SMALL; } + size_t size = sizeof(buff); err = grib_get_string(grib_handle_of_accessor(a), self->key, buff, &size); if (err) return err; @@ -199,23 +193,6 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) return GRIB_SUCCESS; } -static int pack_string(grib_accessor* a, const char* val, size_t* len) -{ - return GRIB_NOT_IMPLEMENTED; -} - -static int pack_long(grib_accessor* a, const long* v, size_t* len) -{ - grib_context_log(a->context, GRIB_LOG_ERROR, " Should not pack %s as long", a->name); - return GRIB_NOT_IMPLEMENTED; -} - -static int pack_double(grib_accessor* a, const double* v, size_t* len) -{ - grib_context_log(a->context, GRIB_LOG_ERROR, " Should not pack %s as double", a->name); - return GRIB_NOT_IMPLEMENTED; -} - static int unpack_long(grib_accessor* a, long* v, size_t* len) { char val[1024] = {0,}; From b2b4fa1f603afc1f17f09e697c29cb645a00f05f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 4 Sep 2023 12:01:01 +0000 Subject: [PATCH 318/372] Testing: Fix broken test --- tests/CMakeLists.txt | 2 +- tests/grib_accessors.sh | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 21e4eb5dc..ad9f7c408 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -87,6 +87,7 @@ if( HAVE_BUILD_TOOLS ) bufr_check_descriptors definitions grib2_version + grib_accessors grib_calendar grib_md5 grib_cfNames @@ -277,7 +278,6 @@ if( HAVE_BUILD_TOOLS ) grib_copy_message grib_decimalPrecision grib_bitsPerValue - grib_accessors grib_get_fail grib_missing grib_local diff --git a/tests/grib_accessors.sh b/tests/grib_accessors.sh index 0d10c7442..c86815cb5 100755 --- a/tests/grib_accessors.sh +++ b/tests/grib_accessors.sh @@ -45,8 +45,12 @@ ${tools_dir}/grib_get -p key_uint32 $input >> $tempText 2>&1 ${tools_dir}/grib_get -p key_uint32_le $input >> $tempText 2>&1 set -e +# grib_check_key_equals $input 'key_uint64,key_uint64_le' '0 0' +${tools_dir}/grib_get -p key_uint64 $input > $tempText 2>&1 +${tools_dir}/grib_get -p key_uint64_le $input > $tempText 2>&1 +cat $tempText + # kindOfProduct = GRIB, dataDate = 20070323 -grib_check_key_equals $input 'key_uint64,key_uint64_le' '0 0' grib_check_key_equals $input 'key_tos1,key_tos2' 'G 200' grib_check_key_equals $input 'key_tos2:d,key_tos2:i' '200 200' From 7e78533dfe9a6cf6e0c2e98dadcf6482493ff3fb Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 4 Sep 2023 14:16:34 +0100 Subject: [PATCH 319/372] Testing: Fix broken test --- tests/grib_accessors.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/grib_accessors.sh b/tests/grib_accessors.sh index c86815cb5..18011d3f8 100755 --- a/tests/grib_accessors.sh +++ b/tests/grib_accessors.sh @@ -27,9 +27,11 @@ bootfile=$tempDir/definitions/grib2/boot.def cat $def_dir/grib2/boot.def > $bootfile echo "uint16 key_uint16: transient;" >> $bootfile echo "uint32 key_uint32: transient;" >> $bootfile -echo "uint64 key_uint64: transient;" >> $bootfile echo "uint32_little_endian key_uint32_le: transient;" >> $bootfile + +echo "uint64 key_uint64: transient;" >> $bootfile echo "uint64_little_endian key_uint64_le: transient;" >> $bootfile + echo "key_tos1 = to_string(kindOfProduct,0,1);" >> $bootfile echo "key_tos2 = to_string(dataDate,0,3);" >> $bootfile echo >> $bootfile @@ -45,14 +47,12 @@ ${tools_dir}/grib_get -p key_uint32 $input >> $tempText 2>&1 ${tools_dir}/grib_get -p key_uint32_le $input >> $tempText 2>&1 set -e +# TODO # grib_check_key_equals $input 'key_uint64,key_uint64_le' '0 0' -${tools_dir}/grib_get -p key_uint64 $input > $tempText 2>&1 -${tools_dir}/grib_get -p key_uint64_le $input > $tempText 2>&1 -cat $tempText # kindOfProduct = GRIB, dataDate = 20070323 -grib_check_key_equals $input 'key_tos1,key_tos2' 'G 200' -grib_check_key_equals $input 'key_tos2:d,key_tos2:i' '200 200' +grib_check_key_equals $input 'key_tos1,key_tos2' 'G 200' +grib_check_key_equals $input 'key_tos2:d,key_tos2:i' '200 200' rm -rf $tempDir From c85e5cb1245e721f63bbf5f3febeea851502d87d Mon Sep 17 00:00:00 2001 From: Sebastien Villaume Date: Sun, 17 Sep 2023 15:47:48 +0100 Subject: [PATCH 320/372] add levtype HL in ERA6 --- .../localConcepts/era6/marsLevtypeConcept.def | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 definitions/grib2/localConcepts/era6/marsLevtypeConcept.def diff --git a/definitions/grib2/localConcepts/era6/marsLevtypeConcept.def b/definitions/grib2/localConcepts/era6/marsLevtypeConcept.def new file mode 100644 index 000000000..cedc39b0d --- /dev/null +++ b/definitions/grib2/localConcepts/era6/marsLevtypeConcept.def @@ -0,0 +1,69 @@ +# Concept marsLevtype +'sfc' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=8;} +'o2d' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=9;} +'sfc' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=162;} +'sfc' = {typeOfFirstFixedSurface=7; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=8; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=17; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=18; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=20; scaleFactorOfFirstFixedSurface=-2; + scaledValueOfFirstFixedSurface=29315; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=20; typeOfSecondFixedSurface=255;} +'pl' = {typeOfFirstFixedSurface=100; typeOfSecondFixedSurface=255;} +'pl' = {typeOfFirstFixedSurface=100; typeOfSecondFixedSurface=100;} +'sfc' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=100; + scaleFactorOfSecondFixedSurface=0; scaledValueOfSecondFixedSurface=80000;} +'sfc' = {typeOfFirstFixedSurface=100; scaleFactorOfFirstFixedSurface=0; scaledValueOfFirstFixedSurface=80000; + typeOfSecondFixedSurface=100; scaleFactorOfSecondFixedSurface=0; scaledValueOfSecondFixedSurface=45000;} +'sfc' = {typeOfFirstFixedSurface=100; scaleFactorOfFirstFixedSurface=0; + scaledValueOfFirstFixedSurface=45000; typeOfSecondFixedSurface=8;} +'sfc' = {typeOfFirstFixedSurface=101; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;} +'hl' = {typeOfFirstFixedSurface=103; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=103; scaleFactorOfFirstFixedSurface=0; scaledValueOfFirstFixedSurface=0; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=103; scaleFactorOfFirstFixedSurface=0; scaledValueOfFirstFixedSurface=2; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=103; scaleFactorOfFirstFixedSurface=0; scaledValueOfFirstFixedSurface=10; typeOfSecondFixedSurface=255;} +'ml' = {typeOfFirstFixedSurface=105; typeOfSecondFixedSurface=255;} +'ml' = {typeOfFirstFixedSurface=105; typeOfSecondFixedSurface=105;} +'sfc' = {typeOfFirstFixedSurface=106; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=106;typeOfSecondFixedSurface=106;} +'pt' = {typeOfFirstFixedSurface=107; typeOfSecondFixedSurface=255;} +'pt' = {typeOfFirstFixedSurface=107; typeOfSecondFixedSurface=107;} +'pv' = {typeOfFirstFixedSurface=109; typeOfSecondFixedSurface=255;} +'sol' = {typeOfFirstFixedSurface=114; typeOfSecondFixedSurface=255;} +'sol' = {typeOfFirstFixedSurface=114; typeOfSecondFixedSurface=114;} +'hhl' = {typeOfFirstFixedSurface=118; typeOfSecondFixedSurface=255;} +'hpl' = {typeOfFirstFixedSurface=119; typeOfSecondFixedSurface=255;} +'sol' = {typeOfFirstFixedSurface=151; typeOfSecondFixedSurface=255;} +'sol' = {typeOfFirstFixedSurface=151; typeOfSecondFixedSurface=151;} +'sol' = {typeOfFirstFixedSurface=152; typeOfSecondFixedSurface=255;} +'sol' = {typeOfFirstFixedSurface=152; typeOfSecondFixedSurface=152;} +'o2d' = {typeOfFirstFixedSurface=160; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=160; scaleFactorOfFirstFixedSurface=0; + scaledValueOfFirstFixedSurface=0; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=160; typeOfSecondFixedSurface=160;} +'o2d' = {typeOfFirstFixedSurface=160; typeOfSecondFixedSurface=9;} +'o2d' = {typeOfFirstFixedSurface=160; typeOfSecondFixedSurface=20; + scaledValueOfFirstFixedSurface=0; scaleFactorOfFirstFixedSurface=0;} +'sfc' = {typeOfFirstFixedSurface=162; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=166; typeOfSecondFixedSurface=255;} +'o3d' = {typeOfFirstFixedSurface=168; typeOfSecondFixedSurface=255;} +'o3d' = {typeOfFirstFixedSurface=168; typeOfSecondFixedSurface=168;} +'o2d' = {typeOfFirstFixedSurface=169; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=170; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=171; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=173; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=173; typeOfSecondFixedSurface=175;} +'o2d' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=255;} +'sfc' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=255; discipline=1;} +'o2d' = {typeOfFirstFixedSurface=175; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=176; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=160; + scaleFactorOfSecondFixedSurface=0; scaledValueOfSecondFixedSurface=0;} +'o2d' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=176;} +'sfc' = {typeOfFirstFixedSurface=174; typeOfSecondFixedSurface=176; discipline=1;} +'o2d' = {typeOfFirstFixedSurface=175; typeOfSecondFixedSurface=176;} +'sfc' = {typeOfFirstFixedSurface=177; typeOfSecondFixedSurface=255;} +'o2d' = {typeOfFirstFixedSurface=188; typeOfSecondFixedSurface=189;} + From 68c74bd807ebde3f96b627a322ced2e5a5affa30 Mon Sep 17 00:00:00 2001 From: Robert Osinski Date: Wed, 8 Mar 2023 16:07:05 +0000 Subject: [PATCH 321/372] CMake target set_latest_tables_version added --- samples/CMakeLists.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 2dbf37b46..d1d3fc607 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -4,6 +4,20 @@ if(HAVE_INSTALL_ECCODES_SAMPLES) install( FILES ${samples_files} DESTINATION ${ECCODES_SAMPLES_SUFF} PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ ) + +# # copy script installSamples.sh to samples folder +# install( PROGRAMS installSamples.sh DESTINATION ${ECCODES_SAMPLES_SUFF} ) + + if(NOT HAVE_MEMFS) + add_custom_target(set_latest_tables_version) + add_custom_command(TARGET set_latest_tables_version + POST_BUILD + COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF}; for F in GRIB2.tmpl *_grib2.tmpl ; do grib_set -s tablesVersion=30 $F tmp; mv tmp $F; done" + VERBATIM + WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF} + ) + endif() + endif() foreach( tmpl ${samples_files} ) From c4b2a8687bce4d325aa580618642c4dce732c009 Mon Sep 17 00:00:00 2001 From: Robert Osinski Date: Thu, 9 Mar 2023 08:33:32 +0000 Subject: [PATCH 322/372] grib2 ifs_samples added to set latest version target --- samples/CMakeLists.txt | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index d1d3fc607..f35ae6fd1 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -4,18 +4,35 @@ if(HAVE_INSTALL_ECCODES_SAMPLES) install( FILES ${samples_files} DESTINATION ${ECCODES_SAMPLES_SUFF} PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ ) - -# # copy script installSamples.sh to samples folder -# install( PROGRAMS installSamples.sh DESTINATION ${ECCODES_SAMPLES_SUFF} ) - + # set to the newest GRIB2 tablesVersion if(NOT HAVE_MEMFS) - add_custom_target(set_latest_tables_version) - add_custom_command(TARGET set_latest_tables_version + add_custom_target(set_grib2_latest_tables_version) + add_custom_command(TARGET set_grib2_latest_tables_version POST_BUILD COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF}; for F in GRIB2.tmpl *_grib2.tmpl ; do grib_set -s tablesVersion=30 $F tmp; mv tmp $F; done" VERBATIM WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF} ) + add_custom_command(TARGET set_grib2_latest_tables_version + POST_BUILD + COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/share/eccodes/ifs_samples/grib1_mlgrib2; for F in *_ml.tmpl ; do grib_set -s tablesVersion=30 $F tmp; mv tmp $F; done" + VERBATIM + WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF} + ) + add_custom_command(TARGET set_grib2_latest_tables_version + POST_BUILD + COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/share/eccodes/ifs_samples/grib1_mlgrib2_ieee64; for F in *_ml.tmpl ; do grib_set -s tablesVersion=30 $F tmp; mv tmp $F; done" + VERBATIM + WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF} + ) + if(HAVE_AEC) + add_custom_command(TARGET set_grib2_latest_tables_version + POST_BUILD + COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/share/eccodes/ifs_samples/grib1_mlgrib2_ccsds; for F in *_ml.tmpl gg_sfc_grib2.tmpl ; do grib_set -s tablesVersion=30 $F tmp; mv tmp $F; done" + VERBATIM + WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF} + ) + endif() endif() endif() From e064b4dc95cdb6a61bcae86174be5791f1ad4093 Mon Sep 17 00:00:00 2001 From: Robert Osinski Date: Thu, 9 Mar 2023 16:21:52 +0000 Subject: [PATCH 323/372] Variable for grib2 tables version added --- samples/CMakeLists.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index f35ae6fd1..497557c59 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -6,29 +6,30 @@ if(HAVE_INSTALL_ECCODES_SAMPLES) PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ ) # set to the newest GRIB2 tablesVersion if(NOT HAVE_MEMFS) + set(GRB2TABVERS '30') add_custom_target(set_grib2_latest_tables_version) add_custom_command(TARGET set_grib2_latest_tables_version POST_BUILD - COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF}; for F in GRIB2.tmpl *_grib2.tmpl ; do grib_set -s tablesVersion=30 $F tmp; mv tmp $F; done" + COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF}; for F in GRIB2.tmpl *_grib2.tmpl ; do grib_set -s tablesVersion=${GRB2TABVERS} $F tmp; mv tmp $F; done" VERBATIM WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF} ) add_custom_command(TARGET set_grib2_latest_tables_version POST_BUILD - COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/share/eccodes/ifs_samples/grib1_mlgrib2; for F in *_ml.tmpl ; do grib_set -s tablesVersion=30 $F tmp; mv tmp $F; done" + COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/share/eccodes/ifs_samples/grib1_mlgrib2; for F in *_ml.tmpl ; do grib_set -s tablesVersion=${GRB2TABVERS} $F tmp; mv tmp $F; done" VERBATIM WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF} ) add_custom_command(TARGET set_grib2_latest_tables_version POST_BUILD - COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/share/eccodes/ifs_samples/grib1_mlgrib2_ieee64; for F in *_ml.tmpl ; do grib_set -s tablesVersion=30 $F tmp; mv tmp $F; done" + COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/share/eccodes/ifs_samples/grib1_mlgrib2_ieee64; for F in *_ml.tmpl ; do grib_set -s tablesVersion=${GRB2TABVERS} $F tmp; mv tmp $F; done" VERBATIM WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF} ) if(HAVE_AEC) add_custom_command(TARGET set_grib2_latest_tables_version POST_BUILD - COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/share/eccodes/ifs_samples/grib1_mlgrib2_ccsds; for F in *_ml.tmpl gg_sfc_grib2.tmpl ; do grib_set -s tablesVersion=30 $F tmp; mv tmp $F; done" + COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/share/eccodes/ifs_samples/grib1_mlgrib2_ccsds; for F in *_ml.tmpl gg_sfc_grib2.tmpl ; do grib_set -s tablesVersion=${GRB2TABVERS} $F tmp; mv tmp $F; done" VERBATIM WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF} ) From 470f9c8cef74603f5571823c814d64d3e156b8bb Mon Sep 17 00:00:00 2001 From: Robert Osinski Date: Wed, 29 Mar 2023 13:58:42 +0000 Subject: [PATCH 324/372] Sync with ecmwf develop --- samples/CMakeLists.txt | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 497557c59..2dbf37b46 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -4,38 +4,6 @@ if(HAVE_INSTALL_ECCODES_SAMPLES) install( FILES ${samples_files} DESTINATION ${ECCODES_SAMPLES_SUFF} PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ ) - # set to the newest GRIB2 tablesVersion - if(NOT HAVE_MEMFS) - set(GRB2TABVERS '30') - add_custom_target(set_grib2_latest_tables_version) - add_custom_command(TARGET set_grib2_latest_tables_version - POST_BUILD - COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF}; for F in GRIB2.tmpl *_grib2.tmpl ; do grib_set -s tablesVersion=${GRB2TABVERS} $F tmp; mv tmp $F; done" - VERBATIM - WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF} - ) - add_custom_command(TARGET set_grib2_latest_tables_version - POST_BUILD - COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/share/eccodes/ifs_samples/grib1_mlgrib2; for F in *_ml.tmpl ; do grib_set -s tablesVersion=${GRB2TABVERS} $F tmp; mv tmp $F; done" - VERBATIM - WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF} - ) - add_custom_command(TARGET set_grib2_latest_tables_version - POST_BUILD - COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/share/eccodes/ifs_samples/grib1_mlgrib2_ieee64; for F in *_ml.tmpl ; do grib_set -s tablesVersion=${GRB2TABVERS} $F tmp; mv tmp $F; done" - VERBATIM - WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF} - ) - if(HAVE_AEC) - add_custom_command(TARGET set_grib2_latest_tables_version - POST_BUILD - COMMAND bash -c "cd ${CMAKE_INSTALL_PREFIX}/share/eccodes/ifs_samples/grib1_mlgrib2_ccsds; for F in *_ml.tmpl gg_sfc_grib2.tmpl ; do grib_set -s tablesVersion=${GRB2TABVERS} $F tmp; mv tmp $F; done" - VERBATIM - WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ECCODES_SAMPLES_SUFF} - ) - endif() - endif() - endif() foreach( tmpl ${samples_files} ) From 1b45b2c16c55598ba08447867df625da14f7f2ca Mon Sep 17 00:00:00 2001 From: Robert Osinski Date: Tue, 19 Sep 2023 09:38:58 +0000 Subject: [PATCH 325/372] ECC-1685: GRIB2 - Correct local ECMWF table entries --- .../grib2/tables/local/ecmf/1/4.2.0.1.table | 18 +++++++++--------- .../grib2/tables/local/ecmf/1/4.2.2.0.table | 8 ++++---- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/definitions/grib2/tables/local/ecmf/1/4.2.0.1.table b/definitions/grib2/tables/local/ecmf/1/4.2.0.1.table index 70233e452..5e02901a1 100644 --- a/definitions/grib2/tables/local/ecmf/1/4.2.0.1.table +++ b/definitions/grib2/tables/local/ecmf/1/4.2.0.1.table @@ -1,13 +1,13 @@ # Code table 4.2 - discipline=0 category=1 for ECMWF 192 192 Snow evaporation rate (kg m-2 s-1) -193 193 Total precipitation (m) +193 193 Total precipitation rate (m s-1) 194 194 Accumulated freezing rain (m) -195 195 Convective precipitation (m) -196 196 Large-scale precipitation (m) -197 197 Snow evaporation (m of water equivalent) -198 198 Snowfall (m of water equivalent) -199 199 Evaporation (m of water equivalent) -200 200 Potential evaporation (m) -201 201 Convective snowfall (m of water equivalent) -202 202 Large-scale snowfall (m of water equivalent) +195 195 Convective precipitation rate (m s-1) +196 196 Large-scale precipitation rate (m s-1) +197 197 Snow evaporation rate (m of water equivalent s-1) +198 198 Snowfall rate (m of water equivalent s-1) +199 199 Evaporation rate (m of water equivalent s-1) +200 200 Potential evaporation rate (m s-1) +201 201 Convective snowfall rate (m of water equivalent s-1) +202 202 Large-scale snowfall rate (m of water equivalent s-1) 254 254 Snow depth (m of water equivalent) diff --git a/definitions/grib2/tables/local/ecmf/1/4.2.2.0.table b/definitions/grib2/tables/local/ecmf/1/4.2.2.0.table index f68411f32..16c57248b 100644 --- a/definitions/grib2/tables/local/ecmf/1/4.2.2.0.table +++ b/definitions/grib2/tables/local/ecmf/1/4.2.2.0.table @@ -8,9 +8,9 @@ 198 198 GPP coefficient from Biogenic Flux Adjustment System 199 199 Rec coefficient from Biogenic Flux Adjustment System 200 200 Surface roughness length for heat (m) -201 201 Water runoff (m) -202 202 Surface runoff (m) -203 203 Snow melt (m of water equivalent) -204 204 Sub-surface runoff (m) +201 201 Water runoff and drainage rate (m s-1) +202 202 Surface runoff rate (m s-1) +203 203 Snow melt rate (m of water equivalent s-1) +204 204 Sub-surface runoff rate (m s-1) 205 205 Skin reservoir content (m of water equivalent) 255 255 Missing From 72337e09b56f93774586a81c90903092427dcc39 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 19 Sep 2023 12:26:17 +0000 Subject: [PATCH 326/372] ECC-1684: GRIB2: Rename wind gust parameters --- definitions/grib1/localConcepts/ecmf/cfVarName.def | 6 +++--- definitions/grib1/localConcepts/ecmf/name.def | 12 ++++++------ definitions/grib1/localConcepts/ecmf/paramId.def | 6 +++--- definitions/grib1/localConcepts/ecmf/shortName.def | 6 +++--- definitions/grib1/localConcepts/ecmf/units.def | 6 +++--- definitions/grib2/cfVarName.def | 4 ++-- definitions/grib2/localConcepts/ecmf/cfVarName.def | 2 +- definitions/grib2/localConcepts/ecmf/name.def | 4 ++-- definitions/grib2/localConcepts/ecmf/paramId.def | 2 +- definitions/grib2/localConcepts/ecmf/shortName.def | 2 +- definitions/grib2/localConcepts/ecmf/units.def | 2 +- definitions/grib2/localConcepts/uerra/cfVarName.def | 6 +++--- definitions/grib2/localConcepts/uerra/name.def | 12 ++++++------ definitions/grib2/localConcepts/uerra/paramId.def | 6 +++--- definitions/grib2/localConcepts/uerra/shortName.def | 6 +++--- definitions/grib2/localConcepts/uerra/units.def | 6 +++--- definitions/grib2/name.def | 8 ++++---- definitions/grib2/paramId.def | 4 ++-- definitions/grib2/shortName.def | 4 ++-- definitions/grib2/units.def | 4 ++-- 20 files changed, 54 insertions(+), 54 deletions(-) diff --git a/definitions/grib1/localConcepts/ecmf/cfVarName.def b/definitions/grib1/localConcepts/ecmf/cfVarName.def index 21f25c311..3788ed167 100644 --- a/definitions/grib1/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib1/localConcepts/ecmf/cfVarName.def @@ -294,7 +294,7 @@ table2Version = 128 ; indicatorOfParameter = 48 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing 'fg10' = { table2Version = 128 ; indicatorOfParameter = 49 ; @@ -659,7 +659,7 @@ table2Version = 128 ; indicatorOfParameter = 122 ; } -#10 metre wind gust in the last 6 hours +#Maximum 10 metre wind gust in the last 6 hours 'p10fg6' = { table2Version = 128 ; indicatorOfParameter = 123 ; @@ -9914,7 +9914,7 @@ table2Version = 228 ; indicatorOfParameter = 27 ; } -#10 metre wind gust in the last 3 hours +#Maximum 10 metre wind gust in the last 3 hours 'fg310' = { table2Version = 228 ; indicatorOfParameter = 28 ; diff --git a/definitions/grib1/localConcepts/ecmf/name.def b/definitions/grib1/localConcepts/ecmf/name.def index fd2b9af79..cc9185af2 100644 --- a/definitions/grib1/localConcepts/ecmf/name.def +++ b/definitions/grib1/localConcepts/ecmf/name.def @@ -294,8 +294,8 @@ table2Version = 128 ; indicatorOfParameter = 48 ; } -#10 metre wind gust since previous post-processing -'10 metre wind gust since previous post-processing' = { +#Maximum 10 metre wind gust since previous post-processing +'Maximum 10 metre wind gust since previous post-processing' = { table2Version = 128 ; indicatorOfParameter = 49 ; } @@ -659,8 +659,8 @@ table2Version = 128 ; indicatorOfParameter = 122 ; } -#10 metre wind gust in the last 6 hours -'10 metre wind gust in the last 6 hours' = { +#Maximum 10 metre wind gust in the last 6 hours +'Maximum 10 metre wind gust in the last 6 hours' = { table2Version = 128 ; indicatorOfParameter = 123 ; } @@ -9914,8 +9914,8 @@ table2Version = 228 ; indicatorOfParameter = 27 ; } -#10 metre wind gust in the last 3 hours -'10 metre wind gust in the last 3 hours' = { +#Maximum 10 metre wind gust in the last 3 hours +'Maximum 10 metre wind gust in the last 3 hours' = { table2Version = 228 ; indicatorOfParameter = 28 ; } diff --git a/definitions/grib1/localConcepts/ecmf/paramId.def b/definitions/grib1/localConcepts/ecmf/paramId.def index 46ed99774..36bd6d1b9 100644 --- a/definitions/grib1/localConcepts/ecmf/paramId.def +++ b/definitions/grib1/localConcepts/ecmf/paramId.def @@ -294,7 +294,7 @@ table2Version = 128 ; indicatorOfParameter = 48 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing '49' = { table2Version = 128 ; indicatorOfParameter = 49 ; @@ -659,7 +659,7 @@ table2Version = 128 ; indicatorOfParameter = 122 ; } -#10 metre wind gust in the last 6 hours +#Maximum 10 metre wind gust in the last 6 hours '123' = { table2Version = 128 ; indicatorOfParameter = 123 ; @@ -9914,7 +9914,7 @@ table2Version = 228 ; indicatorOfParameter = 27 ; } -#10 metre wind gust in the last 3 hours +#Maximum 10 metre wind gust in the last 3 hours '228028' = { table2Version = 228 ; indicatorOfParameter = 28 ; diff --git a/definitions/grib1/localConcepts/ecmf/shortName.def b/definitions/grib1/localConcepts/ecmf/shortName.def index 159ebb628..fe2df90e9 100644 --- a/definitions/grib1/localConcepts/ecmf/shortName.def +++ b/definitions/grib1/localConcepts/ecmf/shortName.def @@ -294,7 +294,7 @@ table2Version = 128 ; indicatorOfParameter = 48 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing '10fg' = { table2Version = 128 ; indicatorOfParameter = 49 ; @@ -659,7 +659,7 @@ table2Version = 128 ; indicatorOfParameter = 122 ; } -#10 metre wind gust in the last 6 hours +#Maximum 10 metre wind gust in the last 6 hours '10fg6' = { table2Version = 128 ; indicatorOfParameter = 123 ; @@ -9914,7 +9914,7 @@ table2Version = 228 ; indicatorOfParameter = 27 ; } -#10 metre wind gust in the last 3 hours +#Maximum 10 metre wind gust in the last 3 hours '10fg3' = { table2Version = 228 ; indicatorOfParameter = 28 ; diff --git a/definitions/grib1/localConcepts/ecmf/units.def b/definitions/grib1/localConcepts/ecmf/units.def index f34142102..97687e8ab 100644 --- a/definitions/grib1/localConcepts/ecmf/units.def +++ b/definitions/grib1/localConcepts/ecmf/units.def @@ -294,7 +294,7 @@ table2Version = 128 ; indicatorOfParameter = 48 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing 'm s**-1' = { table2Version = 128 ; indicatorOfParameter = 49 ; @@ -659,7 +659,7 @@ table2Version = 128 ; indicatorOfParameter = 122 ; } -#10 metre wind gust in the last 6 hours +#Maximum 10 metre wind gust in the last 6 hours 'm s**-1' = { table2Version = 128 ; indicatorOfParameter = 123 ; @@ -9914,7 +9914,7 @@ table2Version = 228 ; indicatorOfParameter = 27 ; } -#10 metre wind gust in the last 3 hours +#Maximum 10 metre wind gust in the last 3 hours 'm s**-1' = { table2Version = 228 ; indicatorOfParameter = 28 ; diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index 58756d44d..35ae4290f 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -206,7 +206,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing 'fg10' = { discipline = 0 ; parameterCategory = 2 ; @@ -2441,7 +2441,7 @@ scaledValueOfFirstFixedSurface = 27315 ; scaleFactorOfFirstFixedSurface = 2 ; } -#10 metre wind gust in the last 3 hours +#Maximum 10 metre wind gust in the last 3 hours 'fg310' = { discipline = 0 ; parameterCategory = 2 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index 64840b587..536def5ab 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -542,7 +542,7 @@ parameterCategory = 128 ; parameterNumber = 120 ; } -#10 metre wind gust in the last 6 hours +#Maximum 10 metre wind gust in the last 6 hours 'p10fg6' = { discipline = 192 ; parameterCategory = 128 ; diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index dd1aa78e1..4a9c09277 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -542,8 +542,8 @@ parameterCategory = 128 ; parameterNumber = 120 ; } -#10 metre wind gust in the last 6 hours -'10 metre wind gust in the last 6 hours' = { +#Maximum 10 metre wind gust in the last 6 hours +'Maximum 10 metre wind gust in the last 6 hours' = { discipline = 192 ; parameterCategory = 128 ; parameterNumber = 123 ; diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index 9cf83acc6..fcf493049 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -542,7 +542,7 @@ parameterCategory = 128 ; parameterNumber = 120 ; } -#10 metre wind gust in the last 6 hours +#Maximum 10 metre wind gust in the last 6 hours '123' = { discipline = 192 ; parameterCategory = 128 ; diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index f7bf7e485..a455af471 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -542,7 +542,7 @@ parameterCategory = 128 ; parameterNumber = 120 ; } -#10 metre wind gust in the last 6 hours +#Maximum 10 metre wind gust in the last 6 hours '10fg6' = { discipline = 192 ; parameterCategory = 128 ; diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index f35c866cc..f34952a8a 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -542,7 +542,7 @@ parameterCategory = 128 ; parameterNumber = 120 ; } -#10 metre wind gust in the last 6 hours +#Maximum 10 metre wind gust in the last 6 hours 'm s**-1' = { discipline = 192 ; parameterCategory = 128 ; diff --git a/definitions/grib2/localConcepts/uerra/cfVarName.def b/definitions/grib2/localConcepts/uerra/cfVarName.def index 20387cdfc..a77e854d9 100644 --- a/definitions/grib2/localConcepts/uerra/cfVarName.def +++ b/definitions/grib2/localConcepts/uerra/cfVarName.def @@ -17,7 +17,7 @@ scaledValueOfFirstFixedSurface = 200 ; scaleFactorOfFirstFixedSurface = 0 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing 'fg10' = { discipline = 0 ; parameterCategory = 2 ; @@ -29,7 +29,7 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 3 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing 'fg10' = { discipline = 0 ; parameterCategory = 2 ; @@ -41,7 +41,7 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 1 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing 'fg10' = { discipline = 0 ; parameterCategory = 2 ; diff --git a/definitions/grib2/localConcepts/uerra/name.def b/definitions/grib2/localConcepts/uerra/name.def index 644409a2c..938e1072a 100644 --- a/definitions/grib2/localConcepts/uerra/name.def +++ b/definitions/grib2/localConcepts/uerra/name.def @@ -17,8 +17,8 @@ scaledValueOfFirstFixedSurface = 200 ; scaleFactorOfFirstFixedSurface = 0 ; } -#10 metre wind gust since previous post-processing -'10 metre wind gust since previous post-processing' = { +#Maximum 10 metre wind gust since previous post-processing +'Maximum 10 metre wind gust since previous post-processing' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; @@ -29,8 +29,8 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 3 ; } -#10 metre wind gust since previous post-processing -'10 metre wind gust since previous post-processing' = { +#Maximum 10 metre wind gust since previous post-processing +'Maximum 10 metre wind gust since previous post-processing' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; @@ -41,8 +41,8 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 1 ; } -#10 metre wind gust since previous post-processing -'10 metre wind gust since previous post-processing' = { +#Maximum 10 metre wind gust since previous post-processing +'Maximum 10 metre wind gust since previous post-processing' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; diff --git a/definitions/grib2/localConcepts/uerra/paramId.def b/definitions/grib2/localConcepts/uerra/paramId.def index db4f09f5d..3db8ad4fa 100644 --- a/definitions/grib2/localConcepts/uerra/paramId.def +++ b/definitions/grib2/localConcepts/uerra/paramId.def @@ -17,7 +17,7 @@ scaledValueOfFirstFixedSurface = 200 ; scaleFactorOfFirstFixedSurface = 0 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing '49' = { discipline = 0 ; parameterCategory = 2 ; @@ -29,7 +29,7 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 3 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing '49' = { discipline = 0 ; parameterCategory = 2 ; @@ -41,7 +41,7 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 1 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing '49' = { discipline = 0 ; parameterCategory = 2 ; diff --git a/definitions/grib2/localConcepts/uerra/shortName.def b/definitions/grib2/localConcepts/uerra/shortName.def index 839d6dc5d..9cbb74cd7 100644 --- a/definitions/grib2/localConcepts/uerra/shortName.def +++ b/definitions/grib2/localConcepts/uerra/shortName.def @@ -17,7 +17,7 @@ scaledValueOfFirstFixedSurface = 200 ; scaleFactorOfFirstFixedSurface = 0 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing '10fg' = { discipline = 0 ; parameterCategory = 2 ; @@ -29,7 +29,7 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 3 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing '10fg' = { discipline = 0 ; parameterCategory = 2 ; @@ -41,7 +41,7 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 1 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing '10fg' = { discipline = 0 ; parameterCategory = 2 ; diff --git a/definitions/grib2/localConcepts/uerra/units.def b/definitions/grib2/localConcepts/uerra/units.def index 87cb31619..aa1f30814 100644 --- a/definitions/grib2/localConcepts/uerra/units.def +++ b/definitions/grib2/localConcepts/uerra/units.def @@ -17,7 +17,7 @@ scaledValueOfFirstFixedSurface = 200 ; scaleFactorOfFirstFixedSurface = 0 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing 'm s**-1' = { discipline = 0 ; parameterCategory = 2 ; @@ -29,7 +29,7 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 3 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing 'm s**-1' = { discipline = 0 ; parameterCategory = 2 ; @@ -41,7 +41,7 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 1 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing 'm s**-1' = { discipline = 0 ; parameterCategory = 2 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index 66b26cdbf..64677eaa0 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -206,8 +206,8 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#10 metre wind gust since previous post-processing -'10 metre wind gust since previous post-processing' = { +#Maximum 10 metre wind gust since previous post-processing +'Maximum 10 metre wind gust since previous post-processing' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; @@ -2441,8 +2441,8 @@ scaledValueOfFirstFixedSurface = 27315 ; scaleFactorOfFirstFixedSurface = 2 ; } -#10 metre wind gust in the last 3 hours -'10 metre wind gust in the last 3 hours' = { +#Maximum 10 metre wind gust in the last 3 hours +'Maximum 10 metre wind gust in the last 3 hours' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 7cc882fc3..48f1a5f41 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -206,7 +206,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing '49' = { discipline = 0 ; parameterCategory = 2 ; @@ -2441,7 +2441,7 @@ scaledValueOfFirstFixedSurface = 27315 ; scaleFactorOfFirstFixedSurface = 2 ; } -#10 metre wind gust in the last 3 hours +#Maximum 10 metre wind gust in the last 3 hours '228028' = { discipline = 0 ; parameterCategory = 2 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index c6437919f..870548688 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -206,7 +206,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing '10fg' = { discipline = 0 ; parameterCategory = 2 ; @@ -2441,7 +2441,7 @@ scaledValueOfFirstFixedSurface = 27315 ; scaleFactorOfFirstFixedSurface = 2 ; } -#10 metre wind gust in the last 3 hours +#Maximum 10 metre wind gust in the last 3 hours '10fg3' = { discipline = 0 ; parameterCategory = 2 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index fc99813ae..ab0c0229e 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -206,7 +206,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#10 metre wind gust since previous post-processing +#Maximum 10 metre wind gust since previous post-processing 'm s**-1' = { discipline = 0 ; parameterCategory = 2 ; @@ -2441,7 +2441,7 @@ scaledValueOfFirstFixedSurface = 27315 ; scaleFactorOfFirstFixedSurface = 2 ; } -#10 metre wind gust in the last 3 hours +#Maximum 10 metre wind gust in the last 3 hours 'm s**-1' = { discipline = 0 ; parameterCategory = 2 ; From 5ac1521d21e89b610d6b554a9ad3de008eba0672 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 19 Sep 2023 14:11:56 +0000 Subject: [PATCH 327/372] ECC-1688: GRIB2: Update encoding for altimeter wave height parameters (part 1) --- .../localConcepts/ecmf/cfVarName.legacy.def | 18 ++++++++++++++++++ .../grib2/localConcepts/ecmf/name.legacy.def | 18 ++++++++++++++++++ .../localConcepts/ecmf/paramId.legacy.def | 18 ++++++++++++++++++ .../localConcepts/ecmf/shortName.legacy.def | 18 ++++++++++++++++++ .../grib2/localConcepts/ecmf/units.legacy.def | 18 ++++++++++++++++++ 5 files changed, 90 insertions(+) diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def index f157d0442..f49c6ed66 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def @@ -1243,3 +1243,21 @@ parameterCategory = 128 ; parameterNumber = 240 ; } +#Altimeter wave height +'awh' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 246 ; +} +#Altimeter corrected wave height +'acwh' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 247 ; +} +#Altimeter range relative correction +'arrc' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 248 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/name.legacy.def b/definitions/grib2/localConcepts/ecmf/name.legacy.def index 4ce5332df..e31c59c64 100644 --- a/definitions/grib2/localConcepts/ecmf/name.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/name.legacy.def @@ -1243,3 +1243,21 @@ parameterCategory = 128 ; parameterNumber = 240 ; } +#Altimeter wave height +'Altimeter wave height' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 246 ; +} +#Altimeter corrected wave height +'Altimeter corrected wave height' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 247 ; +} +#Altimeter range relative correction +'Altimeter range relative correction' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 248 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def index 7fbafcf2c..6caf49219 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def @@ -1243,3 +1243,21 @@ parameterCategory = 128 ; parameterNumber = 240 ; } +#Altimeter wave height +'140246' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 246 ; +} +#Altimeter corrected wave height +'140247' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 247 ; +} +#Altimeter range relative correction +'140248' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 248 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def index ca1c60326..ccdc678cb 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def @@ -1243,3 +1243,21 @@ parameterCategory = 128 ; parameterNumber = 240 ; } +#Altimeter wave height +'awh' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 246 ; +} +#Altimeter corrected wave height +'acwh' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 247 ; +} +#Altimeter range relative correction +'arrc' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 248 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/units.legacy.def b/definitions/grib2/localConcepts/ecmf/units.legacy.def index 14fcd1095..6970bd6c0 100644 --- a/definitions/grib2/localConcepts/ecmf/units.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/units.legacy.def @@ -1243,3 +1243,21 @@ parameterCategory = 128 ; parameterNumber = 240 ; } +#Altimeter wave height +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 246 ; +} +#Altimeter corrected wave height +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 247 ; +} +#Altimeter range relative correction +'~' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 248 ; +} From 8ffaf277dbb1f0cc02756d2b6d9b18cec9d57a76 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 19 Sep 2023 14:18:55 +0000 Subject: [PATCH 328/372] ECC-1688: GRIB2: Update encoding for altimeter wave height parameters (part 2) --- definitions/grib2/cfVarName.def | 18 ++++++++++++++++++ .../grib2/localConcepts/ecmf/cfVarName.def | 18 ------------------ definitions/grib2/localConcepts/ecmf/name.def | 18 ------------------ .../grib2/localConcepts/ecmf/paramId.def | 18 ------------------ .../grib2/localConcepts/ecmf/shortName.def | 18 ------------------ definitions/grib2/localConcepts/ecmf/units.def | 18 ------------------ definitions/grib2/name.def | 18 ++++++++++++++++++ definitions/grib2/paramId.def | 18 ++++++++++++++++++ definitions/grib2/shortName.def | 18 ++++++++++++++++++ definitions/grib2/units.def | 18 ++++++++++++++++++ 10 files changed, 90 insertions(+), 90 deletions(-) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index 35ae4290f..03282aa59 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -7584,6 +7584,24 @@ parameterCategory = 0 ; parameterNumber = 20 ; } +#Altimeter wave height +'awh' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 37 ; + } +#Altimeter corrected wave height +'acwh' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 38 ; + } +#Altimeter range relative correction +'arrc' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 39 ; + } #2D wave spectra (single) 'd2fd' = { discipline = 10 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index 536def5ab..11b9114f1 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -16483,24 +16483,6 @@ parameterCategory = 140 ; parameterNumber = 245 ; } -#Altimeter wave height -'awh' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 246 ; - } -#Altimeter corrected wave height -'acwh' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 247 ; - } -#Altimeter range relative correction -'arrc' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 248 ; - } #10 metre wind direction 'dwi' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index 4a9c09277..a19566c16 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -16483,24 +16483,6 @@ parameterCategory = 140 ; parameterNumber = 245 ; } -#Altimeter wave height -'Altimeter wave height' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 246 ; - } -#Altimeter corrected wave height -'Altimeter corrected wave height' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 247 ; - } -#Altimeter range relative correction -'Altimeter range relative correction' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 248 ; - } #10 metre wind direction '10 metre wind direction' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index fcf493049..612bfb714 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -16483,24 +16483,6 @@ parameterCategory = 140 ; parameterNumber = 245 ; } -#Altimeter wave height -'140246' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 246 ; - } -#Altimeter corrected wave height -'140247' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 247 ; - } -#Altimeter range relative correction -'140248' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 248 ; - } #10 metre wind direction '140249' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index a455af471..568d0bc15 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -16483,24 +16483,6 @@ parameterCategory = 140 ; parameterNumber = 245 ; } -#Altimeter wave height -'awh' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 246 ; - } -#Altimeter corrected wave height -'acwh' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 247 ; - } -#Altimeter range relative correction -'arrc' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 248 ; - } #10 metre wind direction 'dwi' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index f34952a8a..df75cd083 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -16483,24 +16483,6 @@ parameterCategory = 140 ; parameterNumber = 245 ; } -#Altimeter wave height -'m' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 246 ; - } -#Altimeter corrected wave height -'m' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 247 ; - } -#Altimeter range relative correction -'~' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 248 ; - } #10 metre wind direction 'degrees' = { discipline = 192 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index 64677eaa0..f9bad8198 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -7584,6 +7584,24 @@ parameterCategory = 0 ; parameterNumber = 20 ; } +#Altimeter wave height +'Altimeter wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 37 ; + } +#Altimeter corrected wave height +'Altimeter corrected wave height' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 38 ; + } +#Altimeter range relative correction +'Altimeter range relative correction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 39 ; + } #2D wave spectra (single) '2D wave spectra (single)' = { discipline = 10 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 48f1a5f41..75545d089 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -7584,6 +7584,24 @@ parameterCategory = 0 ; parameterNumber = 20 ; } +#Altimeter wave height +'140246' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 37 ; + } +#Altimeter corrected wave height +'140247' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 38 ; + } +#Altimeter range relative correction +'140248' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 39 ; + } #2D wave spectra (single) '140251' = { discipline = 10 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 870548688..784635a4c 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -7584,6 +7584,24 @@ parameterCategory = 0 ; parameterNumber = 20 ; } +#Altimeter wave height +'awh' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 37 ; + } +#Altimeter corrected wave height +'acwh' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 38 ; + } +#Altimeter range relative correction +'arrc' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 39 ; + } #2D wave spectra (single) '2dfd' = { discipline = 10 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index ab0c0229e..bf2ae1f46 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -7584,6 +7584,24 @@ parameterCategory = 0 ; parameterNumber = 20 ; } +#Altimeter wave height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 37 ; + } +#Altimeter corrected wave height +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 38 ; + } +#Altimeter range relative correction +'~' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 39 ; + } #2D wave spectra (single) 'm**2 s radian**-1' = { discipline = 10 ; From ef24c8f947db6b8581368b664eb845d69c2b915d Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 20 Sep 2023 12:06:39 +0100 Subject: [PATCH 329/372] Add better error/debug messages --- src/grib_iterator_class_regular.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/grib_iterator_class_regular.cc b/src/grib_iterator_class_regular.cc index 81fcfd548..857112261 100644 --- a/src/grib_iterator_class_regular.cc +++ b/src/grib_iterator_class_regular.cc @@ -98,6 +98,7 @@ static void init_class(grib_iterator_class* c) } /* END_CLASS_IMP */ +#define ITER "Regular grid Geoiterator" static int next(grib_iterator* iter, double* lat, double* lon, double* val) { @@ -148,7 +149,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) long Ni; /* Number of points along a parallel = Nx */ long Nj; /* Number of points along a meridian = Ny */ - double idir, lon1, lon2; + double idir, idir_coded, lon1, lon2; long loi; const char* s_lon1 = grib_arguments_get_name(h, args, self->carg++); @@ -163,22 +164,23 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) return ret; if ((ret = grib_get_double_internal(h, s_idir, &idir))) // can be GRIB_MISSING_DOUBLE return ret; + idir_coded = idir; if ((ret = grib_get_long_internal(h, s_Ni, &Ni))) return ret; if (grib_is_missing(h, s_Ni, &ret) && ret == GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Key %s cannot be 'missing' for a regular grid!", s_Ni); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Key %s cannot be 'missing' for a regular grid!", ITER, s_Ni); return GRIB_WRONG_GRID; } if ((ret = grib_get_long_internal(h, s_Nj, &Nj))) return ret; if (grib_is_missing(h, s_Nj, &ret) && ret == GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Key %s cannot be 'missing' for a regular grid!", s_Nj); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Key %s cannot be 'missing' for a regular grid!", ITER, s_Nj); return GRIB_WRONG_GRID; } if (Ni*Nj != iter->nv) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Geoiterator: Ni*Nj!=numberOfDataPoints (%ld*%ld!=%zu)", Ni,Nj,iter->nv); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Ni*Nj!=numberOfDataPoints (%ld*%ld!=%zu)", ITER, Ni, Nj, iter->nv); return GRIB_WRONG_GRID; } @@ -223,6 +225,10 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) self->las = (double*)grib_context_malloc(h->context, Nj * sizeof(double)); self->los = (double*)grib_context_malloc(h->context, Ni * sizeof(double)); + if (idir != idir_coded) { + grib_context_log(h->context, GRIB_LOG_DEBUG, "%s: Using idir=%g (coded value=%g)", ITER, idir, idir_coded); + } + for (loi = 0; loi < Ni; loi++) { self->los[loi] = lon1; lon1 += idir; From 5df52497372aa44edc6d93c8245ee60bfd9a06b4 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Wed, 20 Sep 2023 12:19:27 +0100 Subject: [PATCH 330/372] Add better error/debug messages --- src/grib_iterator_class_gaussian_reduced.cc | 15 ++++++--------- ...terator_class_lambert_azimuthal_equal_area.cc | 16 +++++++--------- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/grib_iterator_class_gaussian_reduced.cc b/src/grib_iterator_class_gaussian_reduced.cc index ee81bfce5..cde71f746 100644 --- a/src/grib_iterator_class_gaussian_reduced.cc +++ b/src/grib_iterator_class_gaussian_reduced.cc @@ -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" #include @@ -87,6 +82,8 @@ static void init_class(grib_iterator_class* c) } /* END_CLASS_IMP */ +#define ITER "Reduced Gaussian grid Geoiterator" + static int next(grib_iterator* iter, double* lat, double* lon, double* val) { grib_iterator_gaussian_reduced* self = (grib_iterator_gaussian_reduced*)iter; @@ -190,7 +187,7 @@ static int iterate_reduced_gaussian_subarea_legacy(grib_iterator* iter, grib_han if (iter->e >= iter->nv) { size_t np = count_subarea_points(h, get_reduced_row, pl, plsize, lon_first, lon_last); grib_context_log(h->context, GRIB_LOG_ERROR, - "Reduced Gaussian Geoiterator (sub-area legacy). Num points=%ld, size(values)=%ld", np, iter->nv); + "%s (sub-area legacy). Num points=%zu, size(values)=%zu", ITER, np, iter->nv); return GRIB_WRONG_GRID; } @@ -256,7 +253,7 @@ static int iterate_reduced_gaussian_subarea(grib_iterator* iter, grib_handle* h, /* Only print error message on the second pass */ size_t np = count_subarea_points(h, get_reduced_row, pl, plsize, lon_first, lon_last); grib_context_log(h->context, GRIB_LOG_ERROR, - "Reduced Gaussian Geoiterator (sub-area). Num points=%ld, size(values)=%ld", np, iter->nv); + "%s (sub-area). Num points=%zu, size(values)=%zu", ITER, np, iter->nv); return GRIB_WRONG_GRID; } self->los[iter->e] = lon2; @@ -315,7 +312,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) if ((ret = grib_get_long_internal(h, sorder, &order)) != GRIB_SUCCESS) return ret; if (order == 0) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Invalid Gaussian grid: N cannot be 0!"); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Invalid grid: N cannot be 0!", ITER); return GRIB_WRONG_GRID; } if ((ret = grib_get_long_internal(h, snj, &nj)) != GRIB_SUCCESS) @@ -385,7 +382,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) /*Try now as NON-global*/ ret = iterate_reduced_gaussian_subarea(iter, h, lat_first, lon_first, lat_last, lon_last, lats, pl, plsize, numlats); if (ret != GRIB_SUCCESS) - grib_context_log(h->context, GRIB_LOG_ERROR, "Failed to initialise reduced Gaussian iterator (global)"); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Failed to initialise iterator (global)", ITER); goto finalise; } diff --git a/src/grib_iterator_class_lambert_azimuthal_equal_area.cc b/src/grib_iterator_class_lambert_azimuthal_equal_area.cc index f9b76d702..a945ee1d2 100644 --- a/src/grib_iterator_class_lambert_azimuthal_equal_area.cc +++ b/src/grib_iterator_class_lambert_azimuthal_equal_area.cc @@ -81,6 +81,8 @@ static void init_class(grib_iterator_class* c) } /* END_CLASS_IMP */ +#define ITER "Lambert azimuthal equal area Geoiterator" + static int next(grib_iterator* iter, double* lat, double* lon, double* val) { grib_iterator_lambert_azimuthal_equal_area* self = (grib_iterator_lambert_azimuthal_equal_area*)iter; @@ -227,12 +229,12 @@ static int init_oblate(grib_handle* h, /* Allocate latitude and longitude arrays */ self->lats = (double*)grib_context_malloc(h->context, nv * sizeof(double)); if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Error allocating %ld bytes", nv * sizeof(double)); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } self->lons = (double*)grib_context_malloc(h->context, nv * sizeof(double)); if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Error allocating %ld bytes", nv * sizeof(double)); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } lats = self->lats; @@ -308,14 +310,12 @@ static int init_sphere(grib_handle* h, Dy = jScansPositively == 1 ? Dy / 1000 : -Dy / 1000; self->lats = (double*)grib_context_malloc(h->context, nv * sizeof(double)); if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, - "Error allocating %ld bytes", nv * sizeof(double)); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } self->lons = (double*)grib_context_malloc(h->context, nv * sizeof(double)); if (!self->lats) { - grib_context_log(h->context, GRIB_LOG_ERROR, - "Error allocating %ld bytes", nv * sizeof(double)); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Error allocating %zu bytes", ITER, nv * sizeof(double)); return GRIB_OUT_OF_MEMORY; } lats = self->lats; @@ -435,9 +435,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) return err; if (iter->nv != nx * ny) { - grib_context_log(h->context, GRIB_LOG_ERROR, - "Wrong number of points (%ld!=%ldx%ld)", - iter->nv, nx, ny); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=%ldx%ld)", ITER, iter->nv, nx, ny); return GRIB_WRONG_GRID; } if ((err = grib_get_double_internal(h, slatFirstInDegrees, &latFirstInDegrees)) != GRIB_SUCCESS) From 17f590bc78a527f22e07285021e8cb46439f3add Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 21 Sep 2023 14:11:16 +0000 Subject: [PATCH 331/372] Testing: Add pseudo-centre destine --- definitions/grib2/localConcepts/destine/cfName.def | 9 +++++++++ definitions/grib2/localConcepts/destine/name.def | 9 +++++++++ definitions/grib2/localConcepts/destine/paramId.def | 9 +++++++++ definitions/grib2/localConcepts/destine/shortName.def | 9 +++++++++ definitions/grib2/localConcepts/destine/units.def | 9 +++++++++ tests/grib_check_param_concepts.sh | 3 +++ 6 files changed, 48 insertions(+) create mode 100644 definitions/grib2/localConcepts/destine/cfName.def create mode 100644 definitions/grib2/localConcepts/destine/name.def create mode 100644 definitions/grib2/localConcepts/destine/paramId.def create mode 100644 definitions/grib2/localConcepts/destine/shortName.def create mode 100644 definitions/grib2/localConcepts/destine/units.def diff --git a/definitions/grib2/localConcepts/destine/cfName.def b/definitions/grib2/localConcepts/destine/cfName.def new file mode 100644 index 000000000..e9ed7cabc --- /dev/null +++ b/definitions/grib2/localConcepts/destine/cfName.def @@ -0,0 +1,9 @@ +# Automatically generated by ./create_def.pl, do not edit +#Carbon Dioxide +'mass_fraction_of_carbon_dioxide_in_air' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 3 ; + is_chemical = 1 ; +} diff --git a/definitions/grib2/localConcepts/destine/name.def b/definitions/grib2/localConcepts/destine/name.def new file mode 100644 index 000000000..6a6c16f1b --- /dev/null +++ b/definitions/grib2/localConcepts/destine/name.def @@ -0,0 +1,9 @@ +# Automatically generated by ./create_def.pl, do not edit +#Carbon Dioxide +'Carbon Dioxide' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 3 ; + is_chemical = 1 ; +} diff --git a/definitions/grib2/localConcepts/destine/paramId.def b/definitions/grib2/localConcepts/destine/paramId.def new file mode 100644 index 000000000..e553083dd --- /dev/null +++ b/definitions/grib2/localConcepts/destine/paramId.def @@ -0,0 +1,9 @@ +# Automatically generated by ./create_def.pl, do not edit +#Carbon Dioxide +'210061' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 3 ; + is_chemical = 1 ; +} diff --git a/definitions/grib2/localConcepts/destine/shortName.def b/definitions/grib2/localConcepts/destine/shortName.def new file mode 100644 index 000000000..e4ce474f6 --- /dev/null +++ b/definitions/grib2/localConcepts/destine/shortName.def @@ -0,0 +1,9 @@ +# Automatically generated by ./create_def.pl, do not edit +#Carbon Dioxide +'co2' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 3 ; + is_chemical = 1 ; +} diff --git a/definitions/grib2/localConcepts/destine/units.def b/definitions/grib2/localConcepts/destine/units.def new file mode 100644 index 000000000..78052444a --- /dev/null +++ b/definitions/grib2/localConcepts/destine/units.def @@ -0,0 +1,9 @@ +# Automatically generated by ./create_def.pl, do not edit +#Carbon Dioxide +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 3 ; + is_chemical = 1 ; +} diff --git a/tests/grib_check_param_concepts.sh b/tests/grib_check_param_concepts.sh index d16fe3135..940762ddc 100755 --- a/tests/grib_check_param_concepts.sh +++ b/tests/grib_check_param_concepts.sh @@ -24,6 +24,8 @@ $EXEC ${test_dir}/grib_check_param_concepts paramId $ECCODES_DEFINITION_PATH/gri $EXEC ${test_dir}/grib_check_param_concepts paramId $ECCODES_DEFINITION_PATH/grib2/localConcepts/tigge/paramId.def $EXEC ${test_dir}/grib_check_param_concepts paramId $ECCODES_DEFINITION_PATH/grib2/localConcepts/s2s/paramId.def $EXEC ${test_dir}/grib_check_param_concepts paramId $ECCODES_DEFINITION_PATH/grib2/localConcepts/era6/paramId.def +$EXEC ${test_dir}/grib_check_param_concepts paramId $ECCODES_DEFINITION_PATH/grib2/localConcepts/destine/paramId.def + $EXEC ${test_dir}/grib_check_param_concepts shortName $ECCODES_DEFINITION_PATH/grib2/shortName.def $EXEC ${test_dir}/grib_check_param_concepts shortName $ECCODES_DEFINITION_PATH/grib2/localConcepts/ecmf/shortName.def @@ -32,6 +34,7 @@ $EXEC ${test_dir}/grib_check_param_concepts shortName $ECCODES_DEFINITION_PATH/g $EXEC ${test_dir}/grib_check_param_concepts shortName $ECCODES_DEFINITION_PATH/grib2/localConcepts/tigge/shortName.def $EXEC ${test_dir}/grib_check_param_concepts shortName $ECCODES_DEFINITION_PATH/grib2/localConcepts/s2s/shortName.def $EXEC ${test_dir}/grib_check_param_concepts shortName $ECCODES_DEFINITION_PATH/grib2/localConcepts/era6/shortName.def +$EXEC ${test_dir}/grib_check_param_concepts shortName $ECCODES_DEFINITION_PATH/grib2/localConcepts/destine/shortName.def # Check the group: name.def paramId.def shortName.def units.def cfVarName.def # ---------------------------------------------------------------------------- From ff72b3650996f2f53b3596187e15383c5e717426 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 21 Sep 2023 14:31:11 +0000 Subject: [PATCH 332/372] ECC-1692 GRIB2: Add Carbon Dioxide parameter encoding to 210061 for pseudo-centre DestinationEarth --- definitions/grib2/localConcepts/destine/paramId.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/definitions/grib2/localConcepts/destine/paramId.def b/definitions/grib2/localConcepts/destine/paramId.def index e553083dd..94e564449 100644 --- a/definitions/grib2/localConcepts/destine/paramId.def +++ b/definitions/grib2/localConcepts/destine/paramId.def @@ -1,7 +1,7 @@ # Automatically generated by ./create_def.pl, do not edit #Carbon Dioxide '210061' = { - discipline = 0 ; + discipline = 0 ; parameterCategory = 20 ; parameterNumber = 2 ; constituentType = 3 ; From ee77c57a5de4ddab941a1af9877a98ec6c600009 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 21 Sep 2023 14:40:48 +0000 Subject: [PATCH 333/372] ECC-1692: GRIB2: Add Carbon Dioxide parameter encoding to 210061 for pseudo-centre DestinationEarth --- definitions/grib1/localConcepts/ecmf/cfVarName.def | 2 +- definitions/grib1/localConcepts/ecmf/name.def | 4 ++-- definitions/grib1/localConcepts/ecmf/paramId.def | 2 +- definitions/grib1/localConcepts/ecmf/shortName.def | 2 +- definitions/grib1/localConcepts/ecmf/units.def | 2 +- definitions/grib2/localConcepts/destine/cfName.def | 2 +- definitions/grib2/localConcepts/destine/name.def | 4 ++-- definitions/grib2/localConcepts/destine/paramId.def | 4 ++-- definitions/grib2/localConcepts/destine/shortName.def | 2 +- definitions/grib2/localConcepts/destine/units.def | 2 +- definitions/grib2/localConcepts/ecmf/cfName.def | 2 +- definitions/grib2/localConcepts/ecmf/cfVarName.def | 2 +- definitions/grib2/localConcepts/ecmf/name.def | 4 ++-- definitions/grib2/localConcepts/ecmf/paramId.def | 2 +- definitions/grib2/localConcepts/ecmf/shortName.def | 2 +- definitions/grib2/localConcepts/ecmf/units.def | 2 +- 16 files changed, 20 insertions(+), 20 deletions(-) diff --git a/definitions/grib1/localConcepts/ecmf/cfVarName.def b/definitions/grib1/localConcepts/ecmf/cfVarName.def index 3788ed167..7e4d47596 100644 --- a/definitions/grib1/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib1/localConcepts/ecmf/cfVarName.def @@ -16314,7 +16314,7 @@ table2Version = 210 ; indicatorOfParameter = 54 ; } -#Carbon Dioxide +#Carbon dioxide mass mixing ratio 'co2' = { table2Version = 210 ; indicatorOfParameter = 61 ; diff --git a/definitions/grib1/localConcepts/ecmf/name.def b/definitions/grib1/localConcepts/ecmf/name.def index cc9185af2..a406fa1c2 100644 --- a/definitions/grib1/localConcepts/ecmf/name.def +++ b/definitions/grib1/localConcepts/ecmf/name.def @@ -16314,8 +16314,8 @@ table2Version = 210 ; indicatorOfParameter = 54 ; } -#Carbon Dioxide -'Carbon Dioxide' = { +#Carbon dioxide mass mixing ratio +'Carbon dioxide mass mixing ratio' = { table2Version = 210 ; indicatorOfParameter = 61 ; } diff --git a/definitions/grib1/localConcepts/ecmf/paramId.def b/definitions/grib1/localConcepts/ecmf/paramId.def index 36bd6d1b9..7819fe507 100644 --- a/definitions/grib1/localConcepts/ecmf/paramId.def +++ b/definitions/grib1/localConcepts/ecmf/paramId.def @@ -16314,7 +16314,7 @@ table2Version = 210 ; indicatorOfParameter = 54 ; } -#Carbon Dioxide +#Carbon dioxide mass mixing ratio '210061' = { table2Version = 210 ; indicatorOfParameter = 61 ; diff --git a/definitions/grib1/localConcepts/ecmf/shortName.def b/definitions/grib1/localConcepts/ecmf/shortName.def index fe2df90e9..bf1926b11 100644 --- a/definitions/grib1/localConcepts/ecmf/shortName.def +++ b/definitions/grib1/localConcepts/ecmf/shortName.def @@ -16314,7 +16314,7 @@ table2Version = 210 ; indicatorOfParameter = 54 ; } -#Carbon Dioxide +#Carbon dioxide mass mixing ratio 'co2' = { table2Version = 210 ; indicatorOfParameter = 61 ; diff --git a/definitions/grib1/localConcepts/ecmf/units.def b/definitions/grib1/localConcepts/ecmf/units.def index 97687e8ab..a196126fe 100644 --- a/definitions/grib1/localConcepts/ecmf/units.def +++ b/definitions/grib1/localConcepts/ecmf/units.def @@ -16314,7 +16314,7 @@ table2Version = 210 ; indicatorOfParameter = 54 ; } -#Carbon Dioxide +#Carbon dioxide mass mixing ratio 'kg kg**-1' = { table2Version = 210 ; indicatorOfParameter = 61 ; diff --git a/definitions/grib2/localConcepts/destine/cfName.def b/definitions/grib2/localConcepts/destine/cfName.def index e9ed7cabc..acde985fd 100644 --- a/definitions/grib2/localConcepts/destine/cfName.def +++ b/definitions/grib2/localConcepts/destine/cfName.def @@ -1,5 +1,5 @@ # Automatically generated by ./create_def.pl, do not edit -#Carbon Dioxide +#Carbon dioxide mass mixing ratio 'mass_fraction_of_carbon_dioxide_in_air' = { discipline = 0 ; parameterCategory = 20 ; diff --git a/definitions/grib2/localConcepts/destine/name.def b/definitions/grib2/localConcepts/destine/name.def index 6a6c16f1b..a00484536 100644 --- a/definitions/grib2/localConcepts/destine/name.def +++ b/definitions/grib2/localConcepts/destine/name.def @@ -1,6 +1,6 @@ # Automatically generated by ./create_def.pl, do not edit -#Carbon Dioxide -'Carbon Dioxide' = { +#Carbon dioxide mass mixing ratio +'Carbon dioxide mass mixing ratio' = { discipline = 0 ; parameterCategory = 20 ; parameterNumber = 2 ; diff --git a/definitions/grib2/localConcepts/destine/paramId.def b/definitions/grib2/localConcepts/destine/paramId.def index 94e564449..e9080e6d4 100644 --- a/definitions/grib2/localConcepts/destine/paramId.def +++ b/definitions/grib2/localConcepts/destine/paramId.def @@ -1,7 +1,7 @@ # Automatically generated by ./create_def.pl, do not edit -#Carbon Dioxide +#Carbon dioxide mass mixing ratio '210061' = { - discipline = 0 ; + discipline = 0 ; parameterCategory = 20 ; parameterNumber = 2 ; constituentType = 3 ; diff --git a/definitions/grib2/localConcepts/destine/shortName.def b/definitions/grib2/localConcepts/destine/shortName.def index e4ce474f6..8c26930a3 100644 --- a/definitions/grib2/localConcepts/destine/shortName.def +++ b/definitions/grib2/localConcepts/destine/shortName.def @@ -1,5 +1,5 @@ # Automatically generated by ./create_def.pl, do not edit -#Carbon Dioxide +#Carbon dioxide mass mixing ratio 'co2' = { discipline = 0 ; parameterCategory = 20 ; diff --git a/definitions/grib2/localConcepts/destine/units.def b/definitions/grib2/localConcepts/destine/units.def index 78052444a..b7edf253c 100644 --- a/definitions/grib2/localConcepts/destine/units.def +++ b/definitions/grib2/localConcepts/destine/units.def @@ -1,5 +1,5 @@ # Automatically generated by ./create_def.pl, do not edit -#Carbon Dioxide +#Carbon dioxide mass mixing ratio 'kg kg**-1' = { discipline = 0 ; parameterCategory = 20 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfName.def b/definitions/grib2/localConcepts/ecmf/cfName.def index e347e08e7..f32ddc9a7 100644 --- a/definitions/grib2/localConcepts/ecmf/cfName.def +++ b/definitions/grib2/localConcepts/ecmf/cfName.def @@ -518,7 +518,7 @@ parameterCategory = 151 ; parameterNumber = 154 ; } -#Carbon Dioxide +#Carbon dioxide mass mixing ratio 'mass_fraction_of_carbon_dioxide_in_air' = { discipline = 192 ; parameterCategory = 210 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index 11b9114f1..8627e2155 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -20449,7 +20449,7 @@ parameterCategory = 210 ; parameterNumber = 54 ; } -#Carbon Dioxide +#Carbon dioxide mass mixing ratio 'co2' = { discipline = 192 ; parameterCategory = 210 ; diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index a19566c16..4933de9a0 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -20449,8 +20449,8 @@ parameterCategory = 210 ; parameterNumber = 54 ; } -#Carbon Dioxide -'Carbon Dioxide' = { +#Carbon dioxide mass mixing ratio +'Carbon dioxide mass mixing ratio' = { discipline = 192 ; parameterCategory = 210 ; parameterNumber = 61 ; diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index 612bfb714..c038ad987 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -20449,7 +20449,7 @@ parameterCategory = 210 ; parameterNumber = 54 ; } -#Carbon Dioxide +#Carbon dioxide mass mixing ratio '210061' = { discipline = 192 ; parameterCategory = 210 ; diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index 568d0bc15..3a812e21b 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -20449,7 +20449,7 @@ parameterCategory = 210 ; parameterNumber = 54 ; } -#Carbon Dioxide +#Carbon dioxide mass mixing ratio 'co2' = { discipline = 192 ; parameterCategory = 210 ; diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index df75cd083..c875e073f 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -20449,7 +20449,7 @@ parameterCategory = 210 ; parameterNumber = 54 ; } -#Carbon Dioxide +#Carbon dioxide mass mixing ratio 'kg kg**-1' = { discipline = 192 ; parameterCategory = 210 ; From 571b894019a7f60d1d80c0d584196546bc953a2e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 22 Sep 2023 13:04:58 +0100 Subject: [PATCH 334/372] Add better error messages --- src/grib_accessor_class_gen.cc | 10 ++++++++-- src/grib_accessor_class_non_alpha.cc | 7 ++----- src/grib_accessor_class_to_integer.cc | 7 ++----- tests/grib_ecc-1167.sh | 10 ++++++++++ 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/grib_accessor_class_gen.cc b/src/grib_accessor_class_gen.cc index bd7341160..75f84bebd 100644 --- a/src/grib_accessor_class_gen.cc +++ b/src/grib_accessor_class_gen.cc @@ -469,7 +469,10 @@ static int pack_long(grib_accessor* a, const long* v, size_t* len) grib_context_free(c, val); return ret; } - grib_context_log(c, GRIB_LOG_ERROR, "Should not grib_pack %s as long", a->name); + grib_context_log(c, GRIB_LOG_ERROR, "Should not pack '%s' as an integer", a->name); + if (a->cclass->pack_string && a->cclass->pack_string != &pack_string) { + grib_context_log(c, GRIB_LOG_ERROR, "Try packing as a string"); + } return GRIB_NOT_IMPLEMENTED; } @@ -507,7 +510,10 @@ static int pack_double(grib_accessor* a, const double* v, size_t* len) if (do_pack_as_long) { return pack_double_array_as_long(a, v, len); } - grib_context_log(c, GRIB_LOG_ERROR, "Should not grib_pack %s as double", a->name); + grib_context_log(c, GRIB_LOG_ERROR, "Should not pack '%s' as a double", a->name); + if (a->cclass->pack_string && a->cclass->pack_string != &pack_string) { + grib_context_log(c, GRIB_LOG_ERROR, "Try packing as a string"); + } return GRIB_NOT_IMPLEMENTED; } diff --git a/src/grib_accessor_class_non_alpha.cc b/src/grib_accessor_class_non_alpha.cc index 3b5badd23..e0f52f4d9 100644 --- a/src/grib_accessor_class_non_alpha.cc +++ b/src/grib_accessor_class_non_alpha.cc @@ -7,9 +7,6 @@ * 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. */ -/*********************************************************** - * Enrico Fucile - ***********************************************************/ #include "grib_api_internal.h" /* @@ -181,13 +178,13 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) static int pack_long(grib_accessor* a, const long* v, size_t* len) { - grib_context_log(a->context, GRIB_LOG_ERROR, " Should not pack %s as long", a->name); + grib_context_log(a->context, GRIB_LOG_ERROR, "Should not pack %s as an integer", a->name); return GRIB_NOT_IMPLEMENTED; } static int pack_double(grib_accessor* a, const double* v, size_t* len) { - grib_context_log(a->context, GRIB_LOG_ERROR, " Should not pack %s as double", a->name); + grib_context_log(a->context, GRIB_LOG_ERROR, "Should not pack %s as a double", a->name); return GRIB_NOT_IMPLEMENTED; } diff --git a/src/grib_accessor_class_to_integer.cc b/src/grib_accessor_class_to_integer.cc index a51ff6972..30fa00251 100644 --- a/src/grib_accessor_class_to_integer.cc +++ b/src/grib_accessor_class_to_integer.cc @@ -7,9 +7,6 @@ * 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. */ -/*********************************************************** - * Enrico Fucile - ***********************************************************/ #include "grib_api_internal.h" /* @@ -206,13 +203,13 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) static int pack_long(grib_accessor* a, const long* v, size_t* len) { - grib_context_log(a->context, GRIB_LOG_ERROR, " Should not pack %s as long", a->name); + grib_context_log(a->context, GRIB_LOG_ERROR, "Should not pack %s as an integer", a->name); return GRIB_NOT_IMPLEMENTED; } static int pack_double(grib_accessor* a, const double* v, size_t* len) { - grib_context_log(a->context, GRIB_LOG_ERROR, " Should not pack %s as double", a->name); + grib_context_log(a->context, GRIB_LOG_ERROR, "Should not pack %s as a double", a->name); return GRIB_NOT_IMPLEMENTED; } diff --git a/tests/grib_ecc-1167.sh b/tests/grib_ecc-1167.sh index 3bd4cb37f..32db7af41 100755 --- a/tests/grib_ecc-1167.sh +++ b/tests/grib_ecc-1167.sh @@ -32,6 +32,7 @@ grib_check_key_equals $temp2 uuidOfHGrid '10991111111111111111115000110000' # Test errors +# -------------- set +e # Invalid HEX ${tools_dir}/grib_set -s uuidOfHGrid=DEZZBEef10203040b00b1e50001100FF $temp1 $temp2 2>$errlog @@ -40,6 +41,15 @@ set -e [ $status -ne 0 ] grep -q "Invalid hex byte specfication 'ZZ'" $errlog +# Packing as an integer +set +e +${tools_dir}/grib_set -s uuidOfHGrid=12345 $temp1 $temp2 2>$errlog +status=$? +set -e +[ $status -ne 0 ] +grep -q "Should not pack 'uuidOfHGrid' as an integer" $errlog +grep -q "Try packing as a string" $errlog + # Clean up rm -f $temp1 $temp2 $errlog From cf0aa1b7fd63878ef61ea5fb64532441127c8929 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 22 Sep 2023 13:12:12 +0100 Subject: [PATCH 335/372] Cleanup --- definitions/grib1/section.1.def | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/definitions/grib1/section.1.def b/definitions/grib1/section.1.def index fc0c82e86..3d89bd277 100644 --- a/definitions/grib1/section.1.def +++ b/definitions/grib1/section.1.def @@ -23,15 +23,14 @@ section_length[3] section1Length; meta section1Pointer section_pointer(offsetSection1,section1Length,1); constant wrongPadding=0; -# GRIB tables Version No. +# GRIB tables Version No. # (currently 3 for international exchange) -unsigned[1] table2Version : edition_specific,dump; +unsigned[1] table2Version : edition_specific,dump; alias gribTablesVersionNo=table2Version; - #assert(section1Length > 5); -# Identification of originating/generating centre +# Identification of originating/generating centre codetable[1] centre 'common/c-1.table' : dump,string_type; alias identificationOfOriginatingGeneratingCentre=centre; meta centreDescription codetable_title(centre); @@ -40,8 +39,7 @@ alias parameter.centre=centre; alias originatingCentre=centre; alias ls.centre = centre; -# Generating process identification number -# (allocated by originating centre) +# Generating process identification number unsigned[1] generatingProcessIdentifier : dump; alias generatingProcessIdentificationNumber=generatingProcessIdentifier; alias process=generatingProcessIdentifier; @@ -269,7 +267,6 @@ if(((section1Length > 40) or new() or setLocalDefinition> 0) and deleteLocalDefi } template_nofail marsKeywords "mars/grib.[stream:s].[type:s].def"; - #template marsKeywords "mars/grib.[stream:s].[type:s].def"; } else @@ -286,13 +283,12 @@ if(((section1Length > 40) or new() or setLocalDefinition> 0) and deleteLocalDefi else { constant localUsePresent = 0 : edition_specific; - # template defaultMarsLabeling "mars/default_labeling.def"; } section_padding section1Padding : read_only; #if (!wrongPadding) { -# padtoeven evenpadding_sec1(offsetSection1,section1Length); +# padtoeven evenpadding_sec1(offsetSection1,section1Length); #} concept shortNameECMF (defaultShortName,"shortName.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy; From 87fed37bb741a082fa4b1f7438b63e8fc1e2c0aa Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Sun, 24 Sep 2023 15:50:05 +0100 Subject: [PATCH 336/372] Add better error messages --- src/grib_accessor_class_bytes.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/grib_accessor_class_bytes.cc b/src/grib_accessor_class_bytes.cc index 158714998..8ad005033 100644 --- a/src/grib_accessor_class_bytes.cc +++ b/src/grib_accessor_class_bytes.cc @@ -165,8 +165,9 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) size_t i = 0, slen = strlen(val); if (slen != expected_slen || *len != expected_slen) { - grib_context_log(c, GRIB_LOG_ERROR,"pack_string: key %s is %lu bytes. Expected a string with %lu characters", - a->name, expected_blen, expected_slen); + grib_context_log(c, GRIB_LOG_ERROR, + "%s: Key %s is %lu bytes. Expected a string with %lu characters (actual length=%zu)", + __func__, a->name, expected_blen, expected_slen, *len); return GRIB_WRONG_ARRAY_SIZE; } @@ -176,7 +177,7 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) for (i = 0; i < (slen/2); i++) { unsigned int byteVal = 0; if (sscanf(val + 2*i, "%02x", &byteVal) != 1) { - grib_context_log(c, GRIB_LOG_ERROR,"pack_string: Invalid hex byte specfication '%.2s'",val + 2*i); + grib_context_log(c, GRIB_LOG_ERROR,"%s: Invalid hex byte specfication '%.2s'", __func__, val + 2*i); grib_context_free(c, bytearray); return GRIB_INVALID_KEY_VALUE; } From 539f7c5fb83a7810f1afe435b22b28bfb8ce65f1 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Mon, 25 Sep 2023 10:07:02 +0300 Subject: [PATCH 337/372] Add libaec_ROOT as search hint for FindAEC --- cmake/FindAEC.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmake/FindAEC.cmake b/cmake/FindAEC.cmake index bfbe813e3..7eb5b3339 100644 --- a/cmake/FindAEC.cmake +++ b/cmake/FindAEC.cmake @@ -22,14 +22,15 @@ # libaec_DIR # LIBAEC_PATH # libaec_PATH +# libaec_ROOT find_path( AEC_INCLUDE_DIR libaec.h - PATHS ${AEC_DIR} ${AEC_PATH} ${LIBAEC_DIR} ${libaec_DIR} ${LIBAEC_PATH} ${libaec_PATH} ENV AEC_DIR ENV AEC_PATH ENV LIBAEC_DIR ENV libaec_DIR ENV LIBAEC_PATH ENV libaec_PATH + PATHS ${AEC_DIR} ${AEC_PATH} ${LIBAEC_DIR} ${libaec_DIR} ${LIBAEC_PATH} ${libaec_PATH} ${libaec_ROOT} ENV AEC_DIR ENV AEC_PATH ENV LIBAEC_DIR ENV libaec_DIR ENV LIBAEC_PATH ENV libaec_PATH ENV libaec_ROOT PATH_SUFFIXES include include/aec NO_DEFAULT_PATH ) find_path( AEC_INCLUDE_DIR libaec.h PATH_SUFFIXES include include/aec ) find_library( AEC_LIBRARY NAMES aec - PATHS ${AEC_DIR} ${AEC_PATH} ${LIBAEC_DIR} ${libaec_DIR} ${LIBAEC_PATH} ${libaec_PATH} ENV AEC_DIR ENV AEC_PATH ENV LIBAEC_DIR ENV libaec_DIR ENV LIBAEC_PATH ENV libaec_PATH + PATHS ${AEC_DIR} ${AEC_PATH} ${LIBAEC_DIR} ${libaec_DIR} ${LIBAEC_PATH} ${libaec_PATH} ${libaec_ROOT} ENV AEC_DIR ENV AEC_PATH ENV LIBAEC_DIR ENV libaec_DIR ENV LIBAEC_PATH ENV libaec_PATH ENV libaec_ROOT PATH_SUFFIXES lib lib64 lib/aec lib64/aec NO_DEFAULT_PATH ) find_library( AEC_LIBRARY NAMES aec PATH_SUFFIXES lib lib64 lib/aec lib64/aec ) From da964bdf7df4eb8974ce9da90ef8ced7a1a956ec Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 26 Sep 2023 12:02:45 +0000 Subject: [PATCH 338/372] ECC-1679: GRIB2: Replace discipline=192 encodings --- .../grib1/localConcepts/ecmf/cfVarName.def | 8 +-- definitions/grib1/localConcepts/ecmf/name.def | 16 ++--- .../grib1/localConcepts/ecmf/paramId.def | 8 +-- .../grib1/localConcepts/ecmf/shortName.def | 8 +-- .../grib1/localConcepts/ecmf/units.def | 8 +-- definitions/grib2/cfVarName.def | 61 +++++++++++++++++++ .../grib2/localConcepts/ecmf/cfVarName.def | 48 --------------- .../localConcepts/ecmf/cfVarName.legacy.def | 48 +++++++++++++++ definitions/grib2/localConcepts/ecmf/name.def | 48 --------------- .../grib2/localConcepts/ecmf/name.legacy.def | 48 +++++++++++++++ .../grib2/localConcepts/ecmf/paramId.def | 48 --------------- .../localConcepts/ecmf/paramId.legacy.def | 48 +++++++++++++++ .../grib2/localConcepts/ecmf/shortName.def | 48 --------------- .../localConcepts/ecmf/shortName.legacy.def | 48 +++++++++++++++ .../grib2/localConcepts/ecmf/units.def | 48 --------------- .../grib2/localConcepts/ecmf/units.legacy.def | 48 +++++++++++++++ definitions/grib2/name.def | 61 +++++++++++++++++++ definitions/grib2/paramId.def | 61 +++++++++++++++++++ definitions/grib2/shortName.def | 61 +++++++++++++++++++ definitions/grib2/units.def | 61 +++++++++++++++++++ 20 files changed, 569 insertions(+), 264 deletions(-) diff --git a/definitions/grib1/localConcepts/ecmf/cfVarName.def b/definitions/grib1/localConcepts/ecmf/cfVarName.def index 7e4d47596..36530b6f3 100644 --- a/definitions/grib1/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib1/localConcepts/ecmf/cfVarName.def @@ -1169,7 +1169,7 @@ table2Version = 128 ; indicatorOfParameter = 159 ; } -#Standard deviation of orography +#Standard deviation of sub-gridscale orography 'sdor' = { table2Version = 128 ; indicatorOfParameter = 160 ; @@ -9879,7 +9879,7 @@ table2Version = 228 ; indicatorOfParameter = 20 ; } -#Total sky direct solar radiation at surface +#Total sky direct short-wave (solar) radiation at surface 'fdir' = { table2Version = 228 ; indicatorOfParameter = 21 ; @@ -10089,12 +10089,12 @@ table2Version = 228 ; indicatorOfParameter = 94 ; } -#Surface solar radiation downward clear-sky +#Surface short-wave (solar) radiation downward clear-sky 'ssrdc' = { table2Version = 228 ; indicatorOfParameter = 129 ; } -#Surface thermal radiation downward clear-sky +#Surface long-wave (thermal) radiation downward clear-sky 'strdc' = { table2Version = 228 ; indicatorOfParameter = 130 ; diff --git a/definitions/grib1/localConcepts/ecmf/name.def b/definitions/grib1/localConcepts/ecmf/name.def index a406fa1c2..78ecaecad 100644 --- a/definitions/grib1/localConcepts/ecmf/name.def +++ b/definitions/grib1/localConcepts/ecmf/name.def @@ -1169,8 +1169,8 @@ table2Version = 128 ; indicatorOfParameter = 159 ; } -#Standard deviation of orography -'Standard deviation of orography' = { +#Standard deviation of sub-gridscale orography +'Standard deviation of sub-gridscale orography' = { table2Version = 128 ; indicatorOfParameter = 160 ; } @@ -9879,8 +9879,8 @@ table2Version = 228 ; indicatorOfParameter = 20 ; } -#Total sky direct solar radiation at surface -'Total sky direct solar radiation at surface' = { +#Total sky direct short-wave (solar) radiation at surface +'Total sky direct short-wave (solar) radiation at surface' = { table2Version = 228 ; indicatorOfParameter = 21 ; } @@ -10089,13 +10089,13 @@ table2Version = 228 ; indicatorOfParameter = 94 ; } -#Surface solar radiation downward clear-sky -'Surface solar radiation downward clear-sky' = { +#Surface short-wave (solar) radiation downward clear-sky +'Surface short-wave (solar) radiation downward clear-sky' = { table2Version = 228 ; indicatorOfParameter = 129 ; } -#Surface thermal radiation downward clear-sky -'Surface thermal radiation downward clear-sky' = { +#Surface long-wave (thermal) radiation downward clear-sky +'Surface long-wave (thermal) radiation downward clear-sky' = { table2Version = 228 ; indicatorOfParameter = 130 ; } diff --git a/definitions/grib1/localConcepts/ecmf/paramId.def b/definitions/grib1/localConcepts/ecmf/paramId.def index 7819fe507..572393e2e 100644 --- a/definitions/grib1/localConcepts/ecmf/paramId.def +++ b/definitions/grib1/localConcepts/ecmf/paramId.def @@ -1169,7 +1169,7 @@ table2Version = 128 ; indicatorOfParameter = 159 ; } -#Standard deviation of orography +#Standard deviation of sub-gridscale orography '160' = { table2Version = 128 ; indicatorOfParameter = 160 ; @@ -9879,7 +9879,7 @@ table2Version = 228 ; indicatorOfParameter = 20 ; } -#Total sky direct solar radiation at surface +#Total sky direct short-wave (solar) radiation at surface '228021' = { table2Version = 228 ; indicatorOfParameter = 21 ; @@ -10089,12 +10089,12 @@ table2Version = 228 ; indicatorOfParameter = 94 ; } -#Surface solar radiation downward clear-sky +#Surface short-wave (solar) radiation downward clear-sky '228129' = { table2Version = 228 ; indicatorOfParameter = 129 ; } -#Surface thermal radiation downward clear-sky +#Surface long-wave (thermal) radiation downward clear-sky '228130' = { table2Version = 228 ; indicatorOfParameter = 130 ; diff --git a/definitions/grib1/localConcepts/ecmf/shortName.def b/definitions/grib1/localConcepts/ecmf/shortName.def index bf1926b11..6fd82758e 100644 --- a/definitions/grib1/localConcepts/ecmf/shortName.def +++ b/definitions/grib1/localConcepts/ecmf/shortName.def @@ -1169,7 +1169,7 @@ table2Version = 128 ; indicatorOfParameter = 159 ; } -#Standard deviation of orography +#Standard deviation of sub-gridscale orography 'sdor' = { table2Version = 128 ; indicatorOfParameter = 160 ; @@ -9879,7 +9879,7 @@ table2Version = 228 ; indicatorOfParameter = 20 ; } -#Total sky direct solar radiation at surface +#Total sky direct short-wave (solar) radiation at surface 'fdir' = { table2Version = 228 ; indicatorOfParameter = 21 ; @@ -10089,12 +10089,12 @@ table2Version = 228 ; indicatorOfParameter = 94 ; } -#Surface solar radiation downward clear-sky +#Surface short-wave (solar) radiation downward clear-sky 'ssrdc' = { table2Version = 228 ; indicatorOfParameter = 129 ; } -#Surface thermal radiation downward clear-sky +#Surface long-wave (thermal) radiation downward clear-sky 'strdc' = { table2Version = 228 ; indicatorOfParameter = 130 ; diff --git a/definitions/grib1/localConcepts/ecmf/units.def b/definitions/grib1/localConcepts/ecmf/units.def index a196126fe..027242702 100644 --- a/definitions/grib1/localConcepts/ecmf/units.def +++ b/definitions/grib1/localConcepts/ecmf/units.def @@ -1169,7 +1169,7 @@ table2Version = 128 ; indicatorOfParameter = 159 ; } -#Standard deviation of orography +#Standard deviation of sub-gridscale orography 'm' = { table2Version = 128 ; indicatorOfParameter = 160 ; @@ -9879,7 +9879,7 @@ table2Version = 228 ; indicatorOfParameter = 20 ; } -#Total sky direct solar radiation at surface +#Total sky direct short-wave (solar) radiation at surface 'J m**-2' = { table2Version = 228 ; indicatorOfParameter = 21 ; @@ -10089,12 +10089,12 @@ table2Version = 228 ; indicatorOfParameter = 94 ; } -#Surface solar radiation downward clear-sky +#Surface short-wave (solar) radiation downward clear-sky 'J m**-2' = { table2Version = 228 ; indicatorOfParameter = 129 ; } -#Surface thermal radiation downward clear-sky +#Surface long-wave (thermal) radiation downward clear-sky 'J m**-2' = { table2Version = 228 ; indicatorOfParameter = 130 ; diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index 03282aa59..77cf6e0f5 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -326,6 +326,12 @@ parameterCategory = 3 ; parameterNumber = 18 ; } +#Standard deviation of sub-gridscale orography +'sdor' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + } #Anisotropy of sub-gridscale orography 'isor' = { discipline = 0 ; @@ -2424,6 +2430,14 @@ scaledValueOfFirstFixedSurface = 26315 ; scaleFactorOfFirstFixedSurface = 2 ; } +#Total sky direct short-wave (solar) radiation at surface +'fdir' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Surface direct short-wave radiation, clear sky 'cdir' = { discipline = 0 ; @@ -2432,6 +2446,13 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Cloud base height +'cbh' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + } #0 degrees C isothermal level (atm) 'deg0l' = { discipline = 0 ; @@ -2754,6 +2775,22 @@ is_chemical_srcsink = 1 ; sourceSinkChemicalPhysicalProcess = 10 ; } +#Surface short-wave (solar) radiation downward clear-sky +'ssrdc' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Surface long-wave (thermal) radiation downward clear-sky +'strdc' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Convective precipitation 'cp' = { discipline = 0 ; @@ -7584,6 +7621,15 @@ parameterCategory = 0 ; parameterNumber = 20 ; } +#10 metre wind speed +'wind' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } #Altimeter wave height 'awh' = { discipline = 10 ; @@ -7602,12 +7648,27 @@ parameterCategory = 0 ; parameterNumber = 39 ; } +#10 metre wind direction +'dwi' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } #2D wave spectra (single) 'd2fd' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 86 ; } +#Wave spectral kurtosis +'wsk' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + } #Benjamin-Feir index 'bfi' = { discipline = 10 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index 8627e2155..4f85bb57e 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -661,12 +661,6 @@ parameterCategory = 128 ; parameterNumber = 158 ; } -#Standard deviation of orography -'sdor' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 160 ; - } #Total cloud cover 'tcc' = { localTablesVersion = 1 ; @@ -13635,18 +13629,6 @@ typeOfStatisticalProcessing = 1 ; is_chemical = 1 ; } -#Total sky direct solar radiation at surface -'fdir' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 21 ; - } -#Cloud base height -'cbh' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 23 ; - } #Horizontal visibility 'hvis' = { discipline = 192 ; @@ -13809,18 +13791,6 @@ scaleFactorOfSecondWavelength = missing() ; is_aerosol_optical = 1 ; } -#Surface solar radiation downward clear-sky -'ssrdc' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 129 ; - } -#Surface thermal radiation downward clear-sky -'strdc' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 130 ; - } #Accumulated freezing rain 'fzra' = { localTablesVersion = 1 ; @@ -16477,30 +16447,12 @@ parameterCategory = 140 ; parameterNumber = 243 ; } -#10 metre wind speed -'wind' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 245 ; - } -#10 metre wind direction -'dwi' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 249 ; - } #2D wave spectra (multiple) 'd2sp' = { discipline = 192 ; parameterCategory = 140 ; parameterNumber = 250 ; } -#Wave spectral kurtosis -'wsk' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 252 ; - } #Wave spectral peakedness 'wsp' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def index f49c6ed66..d7faa1e1d 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def @@ -1261,3 +1261,51 @@ parameterCategory = 140 ; parameterNumber = 248 ; } +#Total sky direct solar radiation at surface +'fdir' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 21 ; +} +#Surface solar radiation downward clear-sky +'ssrdc' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 129 ; +} +#Surface thermal radiation downward clear-sky +'strdc' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 130 ; +} +#Standard deviation of orography +'sdor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 160 ; +} +#Cloud base height +'cbh' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 23 ; +} +#Wave spectral kurtosis +'wsk' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 252 ; +} +#10 metre wind speed +'wind' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 245 ; +} +#10 metre wind direction +'dwi' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 249 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index 4933de9a0..1d626bf3d 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -661,12 +661,6 @@ parameterCategory = 128 ; parameterNumber = 158 ; } -#Standard deviation of orography -'Standard deviation of orography' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 160 ; - } #Total cloud cover 'Total cloud cover' = { localTablesVersion = 1 ; @@ -13635,18 +13629,6 @@ typeOfStatisticalProcessing = 1 ; is_chemical = 1 ; } -#Total sky direct solar radiation at surface -'Total sky direct solar radiation at surface' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 21 ; - } -#Cloud base height -'Cloud base height' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 23 ; - } #Horizontal visibility 'Horizontal visibility' = { discipline = 192 ; @@ -13809,18 +13791,6 @@ scaleFactorOfSecondWavelength = missing() ; is_aerosol_optical = 1 ; } -#Surface solar radiation downward clear-sky -'Surface solar radiation downward clear-sky' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 129 ; - } -#Surface thermal radiation downward clear-sky -'Surface thermal radiation downward clear-sky' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 130 ; - } #Accumulated freezing rain 'Accumulated freezing rain' = { localTablesVersion = 1 ; @@ -16477,30 +16447,12 @@ parameterCategory = 140 ; parameterNumber = 243 ; } -#10 metre wind speed -'10 metre wind speed' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 245 ; - } -#10 metre wind direction -'10 metre wind direction' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 249 ; - } #2D wave spectra (multiple) '2D wave spectra (multiple)' = { discipline = 192 ; parameterCategory = 140 ; parameterNumber = 250 ; } -#Wave spectral kurtosis -'Wave spectral kurtosis' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 252 ; - } #Wave spectral peakedness 'Wave spectral peakedness' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/name.legacy.def b/definitions/grib2/localConcepts/ecmf/name.legacy.def index e31c59c64..c7a877462 100644 --- a/definitions/grib2/localConcepts/ecmf/name.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/name.legacy.def @@ -1261,3 +1261,51 @@ parameterCategory = 140 ; parameterNumber = 248 ; } +#Total sky direct solar radiation at surface +'Total sky direct solar radiation at surface' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 21 ; +} +#Surface solar radiation downward clear-sky +'Surface solar radiation downward clear-sky' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 129 ; +} +#Surface thermal radiation downward clear-sky +'Surface thermal radiation downward clear-sky' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 130 ; +} +#Standard deviation of orography +'Standard deviation of orography' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 160 ; +} +#Cloud base height +'Cloud base height' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 23 ; +} +#Wave spectral kurtosis +'Wave spectral kurtosis' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 252 ; +} +#10 metre wind speed +'10 metre wind speed' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 245 ; +} +#10 metre wind direction +'10 metre wind direction' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 249 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index c038ad987..9886c1f16 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -661,12 +661,6 @@ parameterCategory = 128 ; parameterNumber = 158 ; } -#Standard deviation of orography -'160' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 160 ; - } #Total cloud cover '164' = { localTablesVersion = 1 ; @@ -13635,18 +13629,6 @@ typeOfStatisticalProcessing = 1 ; is_chemical = 1 ; } -#Total sky direct solar radiation at surface -'228021' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 21 ; - } -#Cloud base height -'228023' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 23 ; - } #Horizontal visibility '228025' = { discipline = 192 ; @@ -13809,18 +13791,6 @@ scaleFactorOfSecondWavelength = missing() ; is_aerosol_optical = 1 ; } -#Surface solar radiation downward clear-sky -'228129' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 129 ; - } -#Surface thermal radiation downward clear-sky -'228130' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 130 ; - } #Accumulated freezing rain '228216' = { localTablesVersion = 1 ; @@ -16477,30 +16447,12 @@ parameterCategory = 140 ; parameterNumber = 243 ; } -#10 metre wind speed -'140245' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 245 ; - } -#10 metre wind direction -'140249' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 249 ; - } #2D wave spectra (multiple) '140250' = { discipline = 192 ; parameterCategory = 140 ; parameterNumber = 250 ; } -#Wave spectral kurtosis -'140252' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 252 ; - } #Wave spectral peakedness '140254' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def index 6caf49219..cb5186931 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def @@ -1261,3 +1261,51 @@ parameterCategory = 140 ; parameterNumber = 248 ; } +#Total sky direct solar radiation at surface +'228021' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 21 ; +} +#Surface solar radiation downward clear-sky +'228129' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 129 ; +} +#Surface thermal radiation downward clear-sky +'228130' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 130 ; +} +#Standard deviation of orography +'160' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 160 ; +} +#Cloud base height +'228023' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 23 ; +} +#Wave spectral kurtosis +'140252' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 252 ; +} +#10 metre wind speed +'140245' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 245 ; +} +#10 metre wind direction +'140249' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 249 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index 3a812e21b..3d30e0aec 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -661,12 +661,6 @@ parameterCategory = 128 ; parameterNumber = 158 ; } -#Standard deviation of orography -'sdor' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 160 ; - } #Total cloud cover 'tcc' = { localTablesVersion = 1 ; @@ -13635,18 +13629,6 @@ typeOfStatisticalProcessing = 1 ; is_chemical = 1 ; } -#Total sky direct solar radiation at surface -'fdir' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 21 ; - } -#Cloud base height -'cbh' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 23 ; - } #Horizontal visibility 'hvis' = { discipline = 192 ; @@ -13809,18 +13791,6 @@ scaleFactorOfSecondWavelength = missing() ; is_aerosol_optical = 1 ; } -#Surface solar radiation downward clear-sky -'ssrdc' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 129 ; - } -#Surface thermal radiation downward clear-sky -'strdc' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 130 ; - } #Accumulated freezing rain 'fzra' = { localTablesVersion = 1 ; @@ -16477,30 +16447,12 @@ parameterCategory = 140 ; parameterNumber = 243 ; } -#10 metre wind speed -'wind' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 245 ; - } -#10 metre wind direction -'dwi' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 249 ; - } #2D wave spectra (multiple) '2dsp' = { discipline = 192 ; parameterCategory = 140 ; parameterNumber = 250 ; } -#Wave spectral kurtosis -'wsk' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 252 ; - } #Wave spectral peakedness 'wsp' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def index ccdc678cb..7e0d60eed 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def @@ -1261,3 +1261,51 @@ parameterCategory = 140 ; parameterNumber = 248 ; } +#Total sky direct solar radiation at surface +'fdir' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 21 ; +} +#Surface solar radiation downward clear-sky +'ssrdc' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 129 ; +} +#Surface thermal radiation downward clear-sky +'strdc' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 130 ; +} +#Standard deviation of orography +'sdor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 160 ; +} +#Cloud base height +'cbh' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 23 ; +} +#Wave spectral kurtosis +'wsk' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 252 ; +} +#10 metre wind speed +'wind' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 245 ; +} +#10 metre wind direction +'dwi' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 249 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index c875e073f..26a9c0a22 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -661,12 +661,6 @@ parameterCategory = 128 ; parameterNumber = 158 ; } -#Standard deviation of orography -'m' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 160 ; - } #Total cloud cover '(0 - 1)' = { localTablesVersion = 1 ; @@ -13635,18 +13629,6 @@ typeOfStatisticalProcessing = 1 ; is_chemical = 1 ; } -#Total sky direct solar radiation at surface -'J m**-2' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 21 ; - } -#Cloud base height -'m' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 23 ; - } #Horizontal visibility 'm' = { discipline = 192 ; @@ -13809,18 +13791,6 @@ scaleFactorOfSecondWavelength = missing() ; is_aerosol_optical = 1 ; } -#Surface solar radiation downward clear-sky -'J m**-2' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 129 ; - } -#Surface thermal radiation downward clear-sky -'J m**-2' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 130 ; - } #Accumulated freezing rain 'm' = { localTablesVersion = 1 ; @@ -16477,30 +16447,12 @@ parameterCategory = 140 ; parameterNumber = 243 ; } -#10 metre wind speed -'m s**-1' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 245 ; - } -#10 metre wind direction -'degrees' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 249 ; - } #2D wave spectra (multiple) 'm**2 s radian**-1' = { discipline = 192 ; parameterCategory = 140 ; parameterNumber = 250 ; } -#Wave spectral kurtosis -'dimensionless' = { - discipline = 192 ; - parameterCategory = 140 ; - parameterNumber = 252 ; - } #Wave spectral peakedness 'dimensionless' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/units.legacy.def b/definitions/grib2/localConcepts/ecmf/units.legacy.def index 6970bd6c0..4b5d36486 100644 --- a/definitions/grib2/localConcepts/ecmf/units.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/units.legacy.def @@ -1261,3 +1261,51 @@ parameterCategory = 140 ; parameterNumber = 248 ; } +#Total sky direct solar radiation at surface +'J m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 21 ; +} +#Surface solar radiation downward clear-sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 129 ; +} +#Surface thermal radiation downward clear-sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 130 ; +} +#Standard deviation of orography +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 160 ; +} +#Cloud base height +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 23 ; +} +#Wave spectral kurtosis +'dimensionless' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 252 ; +} +#10 metre wind speed +'m s**-1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 245 ; +} +#10 metre wind direction +'degrees' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 249 ; +} diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index f9bad8198..eb5f83d62 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -326,6 +326,12 @@ parameterCategory = 3 ; parameterNumber = 18 ; } +#Standard deviation of sub-gridscale orography +'Standard deviation of sub-gridscale orography' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + } #Anisotropy of sub-gridscale orography 'Anisotropy of sub-gridscale orography' = { discipline = 0 ; @@ -2424,6 +2430,14 @@ scaledValueOfFirstFixedSurface = 26315 ; scaleFactorOfFirstFixedSurface = 2 ; } +#Total sky direct short-wave (solar) radiation at surface +'Total sky direct short-wave (solar) radiation at surface' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Surface direct short-wave radiation, clear sky 'Surface direct short-wave radiation, clear sky' = { discipline = 0 ; @@ -2432,6 +2446,13 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Cloud base height +'Cloud base height' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + } #0 degrees C isothermal level (atm) '0 degrees C isothermal level (atm)' = { discipline = 0 ; @@ -2754,6 +2775,22 @@ is_chemical_srcsink = 1 ; sourceSinkChemicalPhysicalProcess = 10 ; } +#Surface short-wave (solar) radiation downward clear-sky +'Surface short-wave (solar) radiation downward clear-sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Surface long-wave (thermal) radiation downward clear-sky +'Surface long-wave (thermal) radiation downward clear-sky' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Convective precipitation 'Convective precipitation' = { discipline = 0 ; @@ -7584,6 +7621,15 @@ parameterCategory = 0 ; parameterNumber = 20 ; } +#10 metre wind speed +'10 metre wind speed' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } #Altimeter wave height 'Altimeter wave height' = { discipline = 10 ; @@ -7602,12 +7648,27 @@ parameterCategory = 0 ; parameterNumber = 39 ; } +#10 metre wind direction +'10 metre wind direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } #2D wave spectra (single) '2D wave spectra (single)' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 86 ; } +#Wave spectral kurtosis +'Wave spectral kurtosis' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + } #Benjamin-Feir index 'Benjamin-Feir index' = { discipline = 10 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 75545d089..ea9121ca9 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -326,6 +326,12 @@ parameterCategory = 3 ; parameterNumber = 18 ; } +#Standard deviation of sub-gridscale orography +'160' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + } #Anisotropy of sub-gridscale orography '161' = { discipline = 0 ; @@ -2424,6 +2430,14 @@ scaledValueOfFirstFixedSurface = 26315 ; scaleFactorOfFirstFixedSurface = 2 ; } +#Total sky direct short-wave (solar) radiation at surface +'228021' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Surface direct short-wave radiation, clear sky '228022' = { discipline = 0 ; @@ -2432,6 +2446,13 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Cloud base height +'228023' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + } #0 degrees C isothermal level (atm) '228024' = { discipline = 0 ; @@ -2754,6 +2775,22 @@ is_chemical_srcsink = 1 ; sourceSinkChemicalPhysicalProcess = 10 ; } +#Surface short-wave (solar) radiation downward clear-sky +'228129' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Surface long-wave (thermal) radiation downward clear-sky +'228130' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Convective precipitation '228143' = { discipline = 0 ; @@ -7584,6 +7621,15 @@ parameterCategory = 0 ; parameterNumber = 20 ; } +#10 metre wind speed +'140245' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } #Altimeter wave height '140246' = { discipline = 10 ; @@ -7602,12 +7648,27 @@ parameterCategory = 0 ; parameterNumber = 39 ; } +#10 metre wind direction +'140249' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } #2D wave spectra (single) '140251' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 86 ; } +#Wave spectral kurtosis +'140252' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + } #Benjamin-Feir index '140253' = { discipline = 10 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 784635a4c..1390fb70e 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -326,6 +326,12 @@ parameterCategory = 3 ; parameterNumber = 18 ; } +#Standard deviation of sub-gridscale orography +'sdor' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + } #Anisotropy of sub-gridscale orography 'isor' = { discipline = 0 ; @@ -2424,6 +2430,14 @@ scaledValueOfFirstFixedSurface = 26315 ; scaleFactorOfFirstFixedSurface = 2 ; } +#Total sky direct short-wave (solar) radiation at surface +'fdir' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Surface direct short-wave radiation, clear sky 'cdir' = { discipline = 0 ; @@ -2432,6 +2446,13 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Cloud base height +'cbh' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + } #0 degrees C isothermal level (atm) 'deg0l' = { discipline = 0 ; @@ -2754,6 +2775,22 @@ is_chemical_srcsink = 1 ; sourceSinkChemicalPhysicalProcess = 10 ; } +#Surface short-wave (solar) radiation downward clear-sky +'ssrdc' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Surface long-wave (thermal) radiation downward clear-sky +'strdc' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Convective precipitation 'cp' = { discipline = 0 ; @@ -7584,6 +7621,15 @@ parameterCategory = 0 ; parameterNumber = 20 ; } +#10 metre wind speed +'wind' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } #Altimeter wave height 'awh' = { discipline = 10 ; @@ -7602,12 +7648,27 @@ parameterCategory = 0 ; parameterNumber = 39 ; } +#10 metre wind direction +'dwi' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } #2D wave spectra (single) '2dfd' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 86 ; } +#Wave spectral kurtosis +'wsk' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + } #Benjamin-Feir index 'bfi' = { discipline = 10 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index bf2ae1f46..10ddc6c07 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -326,6 +326,12 @@ parameterCategory = 3 ; parameterNumber = 18 ; } +#Standard deviation of sub-gridscale orography +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + } #Anisotropy of sub-gridscale orography 'Numeric' = { discipline = 0 ; @@ -2424,6 +2430,14 @@ scaledValueOfFirstFixedSurface = 26315 ; scaleFactorOfFirstFixedSurface = 2 ; } +#Total sky direct short-wave (solar) radiation at surface +'J m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Surface direct short-wave radiation, clear sky 'J m**-2' = { discipline = 0 ; @@ -2432,6 +2446,13 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#Cloud base height +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 2 ; + } #0 degrees C isothermal level (atm) 'm' = { discipline = 0 ; @@ -2754,6 +2775,22 @@ is_chemical_srcsink = 1 ; sourceSinkChemicalPhysicalProcess = 10 ; } +#Surface short-wave (solar) radiation downward clear-sky +'J m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Surface long-wave (thermal) radiation downward clear-sky +'J m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Convective precipitation 'kg m**-2' = { discipline = 0 ; @@ -7584,6 +7621,15 @@ parameterCategory = 0 ; parameterNumber = 20 ; } +#10 metre wind speed +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 40 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } #Altimeter wave height 'm' = { discipline = 10 ; @@ -7602,12 +7648,27 @@ parameterCategory = 0 ; parameterNumber = 39 ; } +#10 metre wind direction +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 41 ; + typeOfFirstFixedSurface = 102 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } #2D wave spectra (single) 'm**2 s radian**-1' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 86 ; } +#Wave spectral kurtosis +'dimensionless' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 43 ; + } #Benjamin-Feir index 'dimensionless' = { discipline = 10 ; From 66c7e6d73c74f9bb7533c114090bd2852d14db9b Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 26 Sep 2023 14:24:41 +0100 Subject: [PATCH 339/372] ECC-1679: Fix levtype for 228023 --- definitions/grib2/marsLevtypeConcept.def | 1 + 1 file changed, 1 insertion(+) diff --git a/definitions/grib2/marsLevtypeConcept.def b/definitions/grib2/marsLevtypeConcept.def index 1bfb06e6d..109473e86 100644 --- a/definitions/grib2/marsLevtypeConcept.def +++ b/definitions/grib2/marsLevtypeConcept.def @@ -3,6 +3,7 @@ 'sfc' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=8;} 'o2d' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=9;} 'sfc' = {typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=162;} +'sfc' = {typeOfFirstFixedSurface=2; typeOfSecondFixedSurface=255;} 'sfc' = {typeOfFirstFixedSurface=7; typeOfSecondFixedSurface=255;} 'sfc' = {typeOfFirstFixedSurface=8; typeOfSecondFixedSurface=255;} 'sfc' = {typeOfFirstFixedSurface=17; typeOfSecondFixedSurface=255;} From 40003ea72dc7136d19b7235a06179f23af50b249 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 29 Sep 2023 12:09:56 +0000 Subject: [PATCH 340/372] ECC-1695: GRIB2 definitions: Group files into sub-directories (Part 1) --- definitions/grib2/d | 98 ------ definitions/grib2/ls.def | 2 - definitions/grib2/meta.def | 5 - definitions/grib2/rules.def | 12 - definitions/grib2/tigge_name.def | 45 --- definitions/grib2/tigge_parameter.def | 395 ------------------------- definitions/grib2/tigge_short_name.def | 44 --- 7 files changed, 601 deletions(-) delete mode 100644 definitions/grib2/d delete mode 100644 definitions/grib2/ls.def delete mode 100644 definitions/grib2/meta.def delete mode 100644 definitions/grib2/rules.def delete mode 100644 definitions/grib2/tigge_name.def delete mode 100644 definitions/grib2/tigge_parameter.def delete mode 100644 definitions/grib2/tigge_short_name.def diff --git a/definitions/grib2/d b/definitions/grib2/d deleted file mode 100644 index 1747c3626..000000000 --- a/definitions/grib2/d +++ /dev/null @@ -1,98 +0,0 @@ -0.0.table -1.0.table -1.1.table -1.2.table -1.3.table -1.4.table -3.0.table -3.1.table -3.10.table -3.11.table -3.15.table -3.2.table -3.20.table -3.21.table -3.3.table -3.4.table -3.5.table -3.6.table -3.7.table -3.8.table -3.9.table -4.0.table -4.1.0.table -4.1.1.table -4.1.10.table -4.1.2.table -4.1.3.table -4.1.table -4.10.table -4.11.table -4.12.table -4.13.table -4.14.table -4.2.0.0.table -4.2.0.1.table -4.2.0.13.table -4.2.0.14.table -4.2.0.15.table -4.2.0.18.table -4.2.0.19.table -4.2.0.190.table -4.2.0.191.table -4.2.0.2.table -4.2.0.3.table -4.2.0.4.table -4.2.0.5.table -4.2.0.6.table -4.2.0.7.table -4.2.1.0.table -4.2.1.1.table -4.2.10.0.table -4.2.10.1.table -4.2.10.2.table -4.2.10.3.table -4.2.10.4.table -4.2.2.0.table -4.2.2.3.table -4.2.3.0.table -4.2.3.1.table -4.2.table -4.201.table -4.202.table -4.203.table -4.204.table -4.205.table -4.206.table -4.207.table -4.208.table -4.209.table -4.210.table -4.211.table -4.212.table -4.213.table -4.215.table -4.216.table -4.217.table -4.220.table -4.221.table -4.3.table -4.4.table -4.5.table -4.6.table -4.7.table -4.8.table -4.9.table -5.0.table -5.1.table -5.2.table -5.3.table -5.4.table -5.40.table -5.40000.table -5.5.table -5.6.table -5.7.table -5.8.table -5.9.table -6.0.table diff --git a/definitions/grib2/ls.def b/definitions/grib2/ls.def deleted file mode 100644 index 139597f9c..000000000 --- a/definitions/grib2/ls.def +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/definitions/grib2/meta.def b/definitions/grib2/meta.def deleted file mode 100644 index baa49b8f2..000000000 --- a/definitions/grib2/meta.def +++ /dev/null @@ -1,5 +0,0 @@ -# (C) Copyright 2005- ECMWF. - -label "_Empty file"; - -#meta area g1area(latitudeOfFirstGridPoint,longitudeOfFirstGridPoint,latitudeOfLastGridPoint,longitudeOfLastGridPoint,angleMultiplier,angleDivisor); diff --git a/definitions/grib2/rules.def b/definitions/grib2/rules.def deleted file mode 100644 index c1f74af5d..000000000 --- a/definitions/grib2/rules.def +++ /dev/null @@ -1,12 +0,0 @@ -# (C) Copyright 2005- ECMWF. - -# Experimental stuff - -transient isAccumulation = 0 ; -transient isEPS = 0 ; - -when(isAccumulation and !isEPS) - set productDefinitionTemplateNumber = 8; - -when(isAccumulation and isEPS) - set productDefinitionTemplateNumber = 11; diff --git a/definitions/grib2/tigge_name.def b/definitions/grib2/tigge_name.def deleted file mode 100644 index 76fbb84b5..000000000 --- a/definitions/grib2/tigge_name.def +++ /dev/null @@ -1,45 +0,0 @@ -# Automatically generated by ./tigge_def.pl, do not edit - - '10_meter_u_velocity' = { parameter = 165; } - '10_meter_v_velocity' = { parameter = 166; } - '10_metre_wind_gust_of_at_least_15_m/s' = { parameter = 131070; } - '10_metre_wind_gust_of_at_least_25_m/s' = { parameter = 131071; } - 'convective_available_potential_energy' = { parameter = 59; } - 'convective_inhibition' = { parameter = 228001; } - 'field_capacity' = { parameter = 228170; } - 'geopotential_height' = { parameter = 156; } - 'land_sea_mask' = { parameter = 172; } - 'maximum_wind_gust' = { parameter = 49; } - 'mean_sea_level_pressure' = { parameter = 151; } - 'orography' = { parameter = 228002; } - 'potential_temperature' = { parameter = 3; } - 'potential_vorticity' = { parameter = 60; } - 'sea_surface_temperature_anomaly' = { parameter = 171034; } - 'skin_temperature' = { parameter = 235; } - 'snow_depth_water_equivalent' = { parameter = 228141; } - 'snow_fall_water_equivalent' = { parameter = 228144; } - 'soil_moisture' = { parameter = 228039; } - 'soil_temperature' = { parameter = 228139; } - 'specific_humidity' = { parameter = 133; } - 'sunshine_duration' = { parameter = 189; } - 'surface_air_dew_point_temperature' = { parameter = 168; } - 'surface_air_maximum_temperature' = { parameter = 121; } - 'surface_air_minimum_temperature' = { parameter = 122; } - 'surface_air_temperature' = { parameter = 167; } - 'surface_pressure' = { parameter = 134; } - 'temperature' = { parameter = 130; } - 'time_integrated_outgoing_long_wave_radiation' = { parameter = 179; } - 'time_integrated_surface_latent_heat_flux' = { parameter = 147; } - 'time_integrated_surface_net_solar_radiation' = { parameter = 176; } - 'time_integrated_surface_net_thermal_radiation' = { parameter = 177; } - 'time_integrated_surface_sensible_heat_flux' = { parameter = 146; } - 'total_cloud_cover' = { parameter = 228164; } - 'total_column_water' = { parameter = 136; } - 'total_precipitation' = { parameter = 228228; } - 'total_precipitation_of_at_least_10_mm' = { parameter = 131062; } - 'total_precipitation_of_at_least_20_mm' = { parameter = 131063; } - 'u_velocity' = { parameter = 131; } - 'v_velocity' = { parameter = 132; } - 'wilting_point' = { parameter = 228171; } - 'default' = { parameter = 99999; } - diff --git a/definitions/grib2/tigge_parameter.def b/definitions/grib2/tigge_parameter.def deleted file mode 100644 index 3ded0bb12..000000000 --- a/definitions/grib2/tigge_parameter.def +++ /dev/null @@ -1,395 +0,0 @@ -# Automatically generated by ./tigge_def.pl, do not edit - -# 10_meter_u_velocity -'165' = { - discipline = 0; - parameterCategory = 2; - parameterNumber = 2; - scaleFactorOfFirstFixedSurface = 0; - scaledValueOfFirstFixedSurface = 10; - typeOfFirstFixedSurface = 103; -} - -# 10_meter_v_velocity -'166' = { - discipline = 0; - parameterCategory = 2; - parameterNumber = 3; - scaleFactorOfFirstFixedSurface = 0; - scaledValueOfFirstFixedSurface = 10; - typeOfFirstFixedSurface = 103; -} - -# 10_metre_wind_gust_of_at_least_15_m/s -'131070' = { - discipline = 0; - parameterCategory = 2; - parameterNumber = 22; - productDefinitionTemplateNumber = 9; - scaleFactorOfFirstFixedSurface = 0; - scaledValueOfFirstFixedSurface = 10; - scaledValueOfLowerLimit = 15; - typeOfFirstFixedSurface = 103; - typeOfStatisticalProcessing = 2; -} - -# 10_metre_wind_gust_of_at_least_25_m/s -'131071' = { - discipline = 0; - parameterCategory = 2; - parameterNumber = 22; - productDefinitionTemplateNumber = 9; - scaleFactorOfFirstFixedSurface = 0; - scaledValueOfFirstFixedSurface = 10; - scaledValueOfLowerLimit = 25; - typeOfFirstFixedSurface = 103; - typeOfStatisticalProcessing = 2; -} - -# convective_available_potential_energy -'59' = { - discipline = 0; - parameterCategory = 7; - parameterNumber = 6; - typeOfFirstFixedSurface = 1; - typeOfSecondFixedSurface = 8; -} - -# convective_inhibition -'228001' = { - discipline = 0; - parameterCategory = 7; - parameterNumber = 7; - typeOfFirstFixedSurface = 1; - typeOfSecondFixedSurface = 8; -} - -# field_capacity -'228170' = { - discipline = 2; - parameterCategory = 3; - parameterNumber = 12; - scaleFactorOfFirstFixedSurface = 0; - scaleFactorOfSecondFixedSurface = 1; - scaledValueOfFirstFixedSurface = 0; - scaledValueOfSecondFixedSurface = 2; - typeOfFirstFixedSurface = 106; - typeOfSecondFixedSurface = 106; -} - -# geopotential_height -'156' = { - discipline = 0; - parameterCategory = 3; - parameterNumber = 5; - typeOfFirstFixedSurface = 100; -} - -# land_sea_mask -'172' = { - discipline = 2; - parameterCategory = 0; - parameterNumber = 0; - typeOfFirstFixedSurface = 1; -} - -# maximum_wind_gust -'49' = { - discipline = 0; - parameterCategory = 2; - parameterNumber = 22; - scaleFactorOfFirstFixedSurface = 0; - scaledValueOfFirstFixedSurface = 10; - typeOfFirstFixedSurface = 103; - typeOfStatisticalProcessing = 2; -} - -# mean_sea_level_pressure -'151' = { - discipline = 0; - parameterCategory = 3; - parameterNumber = 0; - typeOfFirstFixedSurface = 101; -} - -# orography -'228002' = { - discipline = 0; - parameterCategory = 3; - parameterNumber = 5; - typeOfFirstFixedSurface = 1; -} - -# potential_temperature -'3' = { - discipline = 0; - parameterCategory = 0; - parameterNumber = 2; - scaleFactorOfFirstFixedSurface = 6; - scaledValueOfFirstFixedSurface = 2; - typeOfFirstFixedSurface = 109; -} - -# potential_vorticity -'60' = { - discipline = 0; - parameterCategory = 2; - parameterNumber = 14; - scaleFactorOfFirstFixedSurface = 0; - scaledValueOfFirstFixedSurface = 320; - typeOfFirstFixedSurface = 107; -} - -# sea_surface_temperature_anomaly -'171034' = { - discipline = 0; - parameterCategory = 0; - parameterNumber = 9; - typeOfFirstFixedSurface = 1; -} - -# skin_temperature -'235' = { - discipline = 0; - parameterCategory = 0; - parameterNumber = 17; - typeOfFirstFixedSurface = 1; -} - -# snow_depth_water_equivalent -'228141' = { - discipline = 0; - parameterCategory = 1; - parameterNumber = 60; - typeOfFirstFixedSurface = 1; -} - -# snow_fall_water_equivalent -'228144' = { - discipline = 0; - parameterCategory = 1; - parameterNumber = 53; - typeOfFirstFixedSurface = 1; - typeOfStatisticalProcessing = 1; -} - -# soil_moisture -'228039' = { - discipline = 2; - parameterCategory = 0; - parameterNumber = 22; - scaleFactorOfFirstFixedSurface = 0; - scaleFactorOfSecondFixedSurface = 1; - scaledValueOfFirstFixedSurface = 0; - scaledValueOfSecondFixedSurface = 2; - typeOfFirstFixedSurface = 106; - typeOfSecondFixedSurface = 106; -} - -# soil_temperature -'228139' = { - discipline = 2; - parameterCategory = 0; - parameterNumber = 2; - scaleFactorOfFirstFixedSurface = 0; - scaleFactorOfSecondFixedSurface = 1; - scaledValueOfFirstFixedSurface = 0; - scaledValueOfSecondFixedSurface = 2; - typeOfFirstFixedSurface = 106; - typeOfSecondFixedSurface = 106; -} - -# specific_humidity -'133' = { - discipline = 0; - parameterCategory = 1; - parameterNumber = 0; - typeOfFirstFixedSurface = 100; -} - -# sunshine_duration -'189' = { - discipline = 0; - parameterCategory = 6; - parameterNumber = 24; - typeOfFirstFixedSurface = 1; - typeOfStatisticalProcessing = 1; -} - -# surface_air_dew_point_temperature -'168' = { - discipline = 0; - parameterCategory = 0; - parameterNumber = 6; - typeOfFirstFixedSurface = 103; -} - -# surface_air_maximum_temperature -'121' = { - discipline = 0; - parameterCategory = 0; - parameterNumber = 0; - typeOfFirstFixedSurface = 103; - typeOfStatisticalProcessing = 2; -} - -# surface_air_minimum_temperature -'122' = { - discipline = 0; - parameterCategory = 0; - parameterNumber = 0; - typeOfFirstFixedSurface = 103; - typeOfStatisticalProcessing = 3; -} - -# surface_air_temperature -'167' = { - discipline = 0; - parameterCategory = 0; - parameterNumber = 0; - typeOfFirstFixedSurface = 103; -} - -# surface_pressure -'134' = { - discipline = 0; - parameterCategory = 3; - parameterNumber = 0; - typeOfFirstFixedSurface = 1; -} - -# temperature -'130' = { - discipline = 0; - parameterCategory = 0; - parameterNumber = 0; - typeOfFirstFixedSurface = 100; -} - -# time_integrated_outgoing_long_wave_radiation -'179' = { - discipline = 0; - parameterCategory = 5; - parameterNumber = 5; - typeOfFirstFixedSurface = 8; - typeOfStatisticalProcessing = 1; -} - -# time_integrated_surface_latent_heat_flux -'147' = { - discipline = 0; - parameterCategory = 0; - parameterNumber = 10; - typeOfFirstFixedSurface = 1; - typeOfStatisticalProcessing = 1; -} - -# time_integrated_surface_net_solar_radiation -'176' = { - discipline = 0; - parameterCategory = 4; - parameterNumber = 9; - typeOfFirstFixedSurface = 1; - typeOfStatisticalProcessing = 1; -} - -# time_integrated_surface_net_thermal_radiation -'177' = { - discipline = 0; - parameterCategory = 5; - parameterNumber = 5; - typeOfFirstFixedSurface = 1; - typeOfStatisticalProcessing = 1; -} - -# time_integrated_surface_sensible_heat_flux -'146' = { - discipline = 0; - parameterCategory = 0; - parameterNumber = 11; - typeOfFirstFixedSurface = 1; - typeOfStatisticalProcessing = 1; -} - -# total_cloud_cover -'228164' = { - discipline = 0; - parameterCategory = 6; - parameterNumber = 1; - typeOfFirstFixedSurface = 1; - typeOfSecondFixedSurface = 8; -} - -# total_column_water -'136' = { - discipline = 0; - parameterCategory = 1; - parameterNumber = 51; - typeOfFirstFixedSurface = 1; - typeOfSecondFixedSurface = 8; -} - -# total_precipitation -'228228' = { - discipline = 0; - parameterCategory = 1; - parameterNumber = 52; - typeOfFirstFixedSurface = 1; - typeOfStatisticalProcessing = 1; -} - -# total_precipitation_of_at_least_10_mm -'131062' = { - discipline = 0; - parameterCategory = 1; - parameterNumber = 52; - productDefinitionTemplateNumber = 9; - scaledValueOfLowerLimit = 10; - typeOfFirstFixedSurface = 1; - typeOfStatisticalProcessing = 1; -} - -# total_precipitation_of_at_least_20_mm -'131063' = { - discipline = 0; - parameterCategory = 1; - parameterNumber = 52; - productDefinitionTemplateNumber = 9; - scaledValueOfLowerLimit = 20; - typeOfFirstFixedSurface = 1; - typeOfStatisticalProcessing = 1; -} - -# u_velocity -'131' = { - discipline = 0; - parameterCategory = 2; - parameterNumber = 2; -} - -# unknown -'default' = { - discipline = 0; - parameterCategory = 0; - parameterNumber = 0; -} - -# v_velocity -'132' = { - discipline = 0; - parameterCategory = 2; - parameterNumber = 3; -} - -# wilting_point -'228171' = { - discipline = 2; - parameterCategory = 0; - parameterNumber = 26; - scaleFactorOfFirstFixedSurface = 0; - scaleFactorOfSecondFixedSurface = 1; - scaledValueOfFirstFixedSurface = 0; - scaledValueOfSecondFixedSurface = 2; - typeOfFirstFixedSurface = 106; - typeOfSecondFixedSurface = 106; -} diff --git a/definitions/grib2/tigge_short_name.def b/definitions/grib2/tigge_short_name.def deleted file mode 100644 index 42ef5c6ea..000000000 --- a/definitions/grib2/tigge_short_name.def +++ /dev/null @@ -1,44 +0,0 @@ -# Automatically generated by ./tigge_def.pl, do not edit - - '10fgg25' = { parameter = 131071; } - '10fgg15' = { parameter = 131070; } - '10v' = { parameter = 166; } - '10u' = { parameter = 165; } - '10u' = { parameter = 49; } - 'ci' = { parameter = 228001; } - 'cap' = { parameter = 228170; } - 'cape' = { parameter = 59; } - 'gh' = { parameter = 156; } - 'lsm' = { parameter = 172; } - 'msl' = { parameter = 151; } - 'orog' = { parameter = 228002; } - 'sd' = { parameter = 228141; } - 'mx2t6' = { parameter = 121; } - '2d' = { parameter = 168; } - 'pv' = { parameter = 60; } - 'pt' = { parameter = 3; } - 'sf' = { parameter = 228144; } - 'skt' = { parameter = 235; } - 'sm' = { parameter = 228039; } - 'str' = { parameter = 177; } - 'sund' = { parameter = 189; } - 'mn2t6' = { parameter = 122; } - 'q' = { parameter = 133; } - 'ssta' = { parameter = 171034; } - '2t' = { parameter = 167; } - 'tcw' = { parameter = 136; } - 'slhf' = { parameter = 147; } - 'st' = { parameter = 228139; } - 'sshf' = { parameter = 146; } - 'sp' = { parameter = 134; } - 't' = { parameter = 130; } - 'tcc' = { parameter = 228164; } - 'ssr' = { parameter = 176; } - 'tpg10' = { parameter = 131062; } - 'tpg20' = { parameter = 131063; } - 'ttr' = { parameter = 179; } - 'tp' = { parameter = 228228; } - 'u' = { parameter = 131; } - 'v' = { parameter = 132; } - 'wilt' = { parameter = 228171; } - 'default' = { parameter = 99999; } From 6112d06bcced76d3a13f6a134073acf8bbcea892 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 2 Oct 2023 12:13:34 +0100 Subject: [PATCH 341/372] Bump up version --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 7cca401c7..3afbaeb2b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.32.0 +2.33.0 From 7e823700d1591e0f92fd178328afa759695bc0eb Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 2 Oct 2023 12:54:37 +0100 Subject: [PATCH 342/372] ECC-1333: GRIB2 only: make levtype read-only --- definitions/grib2/template.4.horizontal.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/definitions/grib2/template.4.horizontal.def b/definitions/grib2/template.4.horizontal.def index e5a45721a..67a1909da 100644 --- a/definitions/grib2/template.4.horizontal.def +++ b/definitions/grib2/template.4.horizontal.def @@ -75,7 +75,7 @@ if (extraDim) { } } # ECC-1333: levtype should be read-only in GRIB2 - concept mars.levtype(unknown,"marsLevtypeConcept.def",conceptsDir2,conceptsDir1):no_copy; + concept mars.levtype(unknown,"marsLevtypeConcept.def",conceptsDir2,conceptsDir1):no_copy, read_only; # GRIB-372: levelist alias does not pertain to surface parameters if (levtype is "sfc" || levtype is "o2d") { unalias mars.levelist; From b3f5b5df5cfc85d52d86c13406286b0586ab6065 Mon Sep 17 00:00:00 2001 From: Sebastien Villaume Date: Tue, 3 Oct 2023 14:30:24 +0100 Subject: [PATCH 343/372] change to master table version 32 --- definitions/grib2/boot.def | 2 +- definitions/grib2/tables/{33 => 32}/4.0.table | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename definitions/grib2/tables/{33 => 32}/4.0.table (100%) diff --git a/definitions/grib2/boot.def b/definitions/grib2/boot.def index fc3604f6a..f453a714d 100644 --- a/definitions/grib2/boot.def +++ b/definitions/grib2/boot.def @@ -11,7 +11,7 @@ # See https://community.wmo.int/activity-areas/wmo-codes/manual-codes/latest-version constant tablesVersionLatestOfficial = 31 : edition_specific; # If this is different from the official version, then it is the pre-operational version -constant tablesVersionLatest = 33 : edition_specific; +constant tablesVersionLatest = 32 : edition_specific; constant million = 1000000 : hidden; constant grib2divider = 1000000; diff --git a/definitions/grib2/tables/33/4.0.table b/definitions/grib2/tables/32/4.0.table similarity index 100% rename from definitions/grib2/tables/33/4.0.table rename to definitions/grib2/tables/32/4.0.table From 98df806ed051b07c1302fa091ba485a08ddf43cf Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 3 Oct 2023 13:55:44 +0000 Subject: [PATCH 344/372] ECC-1697: GRIB2: Update long name of hydrology parameter 231002 --- definitions/grib2/cfVarName.def | 2 +- definitions/grib2/name.def | 4 ++-- definitions/grib2/paramId.def | 2 +- definitions/grib2/shortName.def | 2 +- definitions/grib2/units.def | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index 77cf6e0f5..4234951b7 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -3029,7 +3029,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Runoff water equivalent +#Runoff water equivalent (surface plus subsurface) 'rowe' = { discipline = 2 ; parameterCategory = 0 ; diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index eb5f83d62..d852effb4 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -3029,8 +3029,8 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Runoff water equivalent -'Runoff water equivalent' = { +#Runoff water equivalent (surface plus subsurface) +'Runoff water equivalent (surface plus subsurface)' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 42 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index ea9121ca9..1d0daf539 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -3029,7 +3029,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Runoff water equivalent +#Runoff water equivalent (surface plus subsurface) '231002' = { discipline = 2 ; parameterCategory = 0 ; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 1390fb70e..5070fb459 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -3029,7 +3029,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Runoff water equivalent +#Runoff water equivalent (surface plus subsurface) 'rowe' = { discipline = 2 ; parameterCategory = 0 ; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 10ddc6c07..37540142d 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -3029,7 +3029,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Runoff water equivalent +#Runoff water equivalent (surface plus subsurface) 'kg m**-2' = { discipline = 2 ; parameterCategory = 0 ; From 3a1ea5a54b9461249601576dd5a11023eecb4a53 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 3 Oct 2023 15:20:52 +0000 Subject: [PATCH 345/372] ECC-1698: Add format specifier keys for converting a number (float or int) into a string --- definitions/boot.def | 3 +++ src/grib_accessor_class_double.cc | 15 ++++++----- src/grib_accessor_class_long.cc | 11 +++++--- tests/CMakeLists.txt | 1 + tests/codes_ecc-1698.sh | 45 +++++++++++++++++++++++++++++++ 5 files changed, 65 insertions(+), 10 deletions(-) create mode 100755 tests/codes_ecc-1698.sh diff --git a/definitions/boot.def b/definitions/boot.def index 22edf96e1..61a7b7be0 100644 --- a/definitions/boot.def +++ b/definitions/boot.def @@ -52,6 +52,9 @@ transient unitsFactor=1 : hidden; transient unitsBias=0 : hidden; constant globalDomain = "g"; transient timeRangeIndicatorFromStepRange=-1 : hidden; +# Format specifiers for converting a number (float or int) into a string +transient formatForDoubles = "%g" : no_copy,hidden; +transient formatForLongs = "%ld" : no_copy,hidden; # ECC-868 transient produceLargeConstantFields = 0 : hidden; diff --git a/src/grib_accessor_class_double.cc b/src/grib_accessor_class_double.cc index e1888ed0c..3f635720c 100644 --- a/src/grib_accessor_class_double.cc +++ b/src/grib_accessor_class_double.cc @@ -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 @@ -115,13 +111,18 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) double val = 0; size_t l = 1; char repres[1024]; + char format[32] = "%g"; + grib_handle* h = grib_handle_of_accessor(a); grib_unpack_double(a, &val, &l); - if ((val == GRIB_MISSING_DOUBLE) && ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0)) + if ((val == GRIB_MISSING_DOUBLE) && ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0)) { snprintf(repres, sizeof(repres), "MISSING"); - else - snprintf(repres, sizeof(repres), "%g", val); + } else { + size_t size = sizeof(format); + grib_get_string(h, "formatForDoubles", format, &size); + snprintf(repres, sizeof(repres), format, val); + } l = strlen(repres) + 1; diff --git a/src/grib_accessor_class_long.cc b/src/grib_accessor_class_long.cc index c939189a5..1f97a539e 100644 --- a/src/grib_accessor_class_long.cc +++ b/src/grib_accessor_class_long.cc @@ -120,6 +120,8 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) long val = 0; size_t l = 1; char repres[1024]; + char format[32] = "%ld"; + grib_handle* h = grib_handle_of_accessor(a); err = grib_unpack_long(a, &val, &l); /* TODO: We should catch all errors but in this case the test ERA_Gen.sh will fail @@ -127,10 +129,13 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) /* if (err) return err; */ (void)err; - if ((val == GRIB_MISSING_LONG) && ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0)) + if ((val == GRIB_MISSING_LONG) && ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0)) { snprintf(repres, sizeof(repres), "MISSING"); - else - snprintf(repres, sizeof(repres), "%ld", val); + } else { + size_t size = sizeof(format); + grib_get_string(h, "formatForLongs", format, &size); + snprintf(repres, sizeof(repres), format, val); + } l = strlen(repres) + 1; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index ad9f7c408..172101ad9 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -236,6 +236,7 @@ if( HAVE_BUILD_TOOLS ) grib_set_bytes grib_set_force bufr_ecc-556 + codes_ecc-1698 gts_get gts_ls gts_count diff --git a/tests/codes_ecc-1698.sh b/tests/codes_ecc-1698.sh new file mode 100755 index 000000000..d7e0d49ec --- /dev/null +++ b/tests/codes_ecc-1698.sh @@ -0,0 +1,45 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +REDIRECT=/dev/null + +label="codes_ecc-1698_test" +tempGrib=temp.$label.grib +tempBufr=temp.$label.bufr +tempFilt=temp.$label.filt +tempLog=temp.$label.log +tempRef=temp.$label.ref + +sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +sample_bufr4=$ECCODES_SAMPLES_PATH/BUFR4.tmpl + +# Double to string +# ------------------ +infile=$sample_grib2 +result=$(${tools_dir}/grib_get -p maximum:s $infile) +[ "$result" = "1" ] +result=$(${tools_dir}/grib_get -s formatForDoubles=%e -p maximum:s $infile) +[ "$result" = "1.000000e+00" ] + +infile=${data_dir}/sample.grib2 +result=$(${tools_dir}/grib_get -s formatForDoubles=%e -p minimum:s $infile) +[ "$result" = "2.704668e+02" ] + + +# Integer to string +# ------------------ +infile=${data_dir}/sample.grib2 +result=$(${tools_dir}/grib_get -s formatForLongs=%lX -p year:s $infile) +[ "$result" = "7D8" ] + + +rm -f $tempGrib $tempBufr $tempFilt $tempLog $tempRef From 73499f2e35b8ba85153cf0a22529497bd5a4c526 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 5 Oct 2023 10:33:34 +0100 Subject: [PATCH 346/372] Testing: S2S hindcasts --- tests/grib_s2s.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/grib_s2s.sh b/tests/grib_s2s.sh index e4cd8388a..139013606 100755 --- a/tests/grib_s2s.sh +++ b/tests/grib_s2s.sh @@ -39,5 +39,14 @@ status=$? set -e [ $status -ne 0 ] +# Reforecasts +${tools_dir}/grib_set -s \ + tablesVersion=14,productionStatusOfProcessedData=6,productDefinitionTemplateNumber=60 \ + $grib2_sample $temp1 +${tools_dir}/grib_ls -jm $temp1 +grib_check_key_equals $temp1 mars.hdate '20070323' +grib_check_key_equals $temp1 mars.stream 'enfh' +grib_check_key_equals $temp1 isHindcast '1' + # Clean up rm -f $temp1 $temp2 $tempSample From 442d033b764b7159a40d7c28f8e800181e50f84a Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 5 Oct 2023 12:52:36 +0100 Subject: [PATCH 347/372] SD-84523: EcCodes local concepts edzw --- definitions/grib1/localConcepts/edzw/name.def | 114 +- .../grib1/localConcepts/edzw/paramId.def | 114 +- .../grib1/localConcepts/edzw/shortName.def | 114 +- .../grib1/localConcepts/edzw/units.def | 114 +- definitions/grib2/localConcepts/edzw/name.def | 1687 +++++++++++++++-- .../grib2/localConcepts/edzw/paramId.def | 1519 ++++++++++++++- .../grib2/localConcepts/edzw/shortName.def | 1687 +++++++++++++++-- .../grib2/localConcepts/edzw/units.def | 1687 +++++++++++++++-- .../grib2/tables/local/edzw/1/2.120.table | 26 + .../grib2/tables/local/edzw/1/4.2.0.1.table | 4 + .../grib2/tables/local/edzw/1/4.2.0.15.table | 1 + .../grib2/tables/local/edzw/1/4.2.0.17.table | 1 + .../grib2/tables/local/edzw/1/4.2.0.19.table | 7 +- .../grib2/tables/local/edzw/1/4.2.0.191.table | 2 + .../tables/local/edzw/1/4.2.0.191.table_alt | 9 + .../grib2/tables/local/edzw/1/4.2.0.2.table | 3 + .../grib2/tables/local/edzw/1/4.2.0.20.table | 3 + .../grib2/tables/local/edzw/1/4.2.0.3.table | 3 + .../grib2/tables/local/edzw/1/4.2.0.6.table | 3 + .../grib2/tables/local/edzw/1/4.2.1.0.table | 3 + .../grib2/tables/local/edzw/1/4.2.2.192.table | 8 + .../grib2/tables/local/edzw/1/4.2.2.3.table | 7 + .../grib2/tables/local/edzw/1/4.2.215.5.table | 2 +- .../grib2/tables/local/edzw/1/4.230.table | 4 + .../grib2/tables/local/edzw/1/4.3.table | 8 +- .../grib2/tables/local/edzw/1/4.5.table | 3 +- .../edzw/1/generatingProcessIdentifier.table | 12 +- 27 files changed, 6735 insertions(+), 410 deletions(-) create mode 100644 definitions/grib2/tables/local/edzw/1/2.120.table create mode 100644 definitions/grib2/tables/local/edzw/1/4.2.0.191.table_alt create mode 100644 definitions/grib2/tables/local/edzw/1/4.2.2.192.table create mode 100644 definitions/grib2/tables/local/edzw/1/4.230.table diff --git a/definitions/grib1/localConcepts/edzw/name.def b/definitions/grib1/localConcepts/edzw/name.def index 47f2c21a7..6abae509f 100644 --- a/definitions/grib1/localConcepts/edzw/name.def +++ b/definitions/grib1/localConcepts/edzw/name.def @@ -1,4 +1,4 @@ -# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE, do not edit! 2020-11-05 10:29 +# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE, do not edit! 2023-07-18 16:26 #paramId: 500000 #Pressure (S) (not reduced) 'Pressure (S) (not reduced)' = { @@ -5441,6 +5441,104 @@ indicatorOfParameter = 128 ; } +#paramId: 500779 +#DUMMY_129 +'DUMMY_129' = { + table2Version = 254 ; + indicatorOfParameter = 129 ; + } + +#paramId: 500780 +#DUMMY_130 +'DUMMY_130' = { + table2Version = 254 ; + indicatorOfParameter = 130 ; + } + +#paramId: 500781 +#DUMMY_131 +'DUMMY_131' = { + table2Version = 254 ; + indicatorOfParameter = 131 ; + } + +#paramId: 500782 +#DUMMY_132 +'DUMMY_132' = { + table2Version = 254 ; + indicatorOfParameter = 132 ; + } + +#paramId: 500783 +#DUMMY_133 +'DUMMY_133' = { + table2Version = 254 ; + indicatorOfParameter = 133 ; + } + +#paramId: 500784 +#DUMMY_134 +'DUMMY_134' = { + table2Version = 254 ; + indicatorOfParameter = 134 ; + } + +#paramId: 500785 +#DUMMY_135 +'DUMMY_135' = { + table2Version = 254 ; + indicatorOfParameter = 135 ; + } + +#paramId: 500786 +#DUMMY_136 +'DUMMY_136' = { + table2Version = 254 ; + indicatorOfParameter = 136 ; + } + +#paramId: 500787 +#DUMMY_137 +'DUMMY_137' = { + table2Version = 254 ; + indicatorOfParameter = 137 ; + } + +#paramId: 500788 +#DUMMY_138 +'DUMMY_138' = { + table2Version = 254 ; + indicatorOfParameter = 138 ; + } + +#paramId: 500789 +#DUMMY_139 +'DUMMY_139' = { + table2Version = 254 ; + indicatorOfParameter = 139 ; + } + +#paramId: 500790 +#DUMMY_140 +'DUMMY_140' = { + table2Version = 254 ; + indicatorOfParameter = 140 ; + } + +#paramId: 500791 +#DUMMY_141 +'DUMMY_141' = { + table2Version = 254 ; + indicatorOfParameter = 141 ; + } + +#paramId: 500792 +#DUMMY_142 +'DUMMY_142' = { + table2Version = 254 ; + indicatorOfParameter = 142 ; + } + #paramId: 500793 #DUMMY_143 'DUMMY_143' = { @@ -7342,13 +7440,6 @@ indicatorOfParameter = 18 ; } -#paramId: 502505 -#Visibility -'Visibility' = { - table2Version = 2 ; - indicatorOfParameter = 20 ; - } - #paramId: 502506 #Radar spectra (2) 'Radar spectra (2)' = { @@ -8657,6 +8748,13 @@ indicatorOfParameter = 71 ; } +#paramId: 502946 +#Visibility +'Visibility' = { + table2Version = 2 ; + indicatorOfParameter = 20 ; + } + #paramId: 503049 #Eddy dissipitation rate of TKE 'Eddy dissipitation rate of TKE' = { diff --git a/definitions/grib1/localConcepts/edzw/paramId.def b/definitions/grib1/localConcepts/edzw/paramId.def index e27013695..c26e8f4b9 100644 --- a/definitions/grib1/localConcepts/edzw/paramId.def +++ b/definitions/grib1/localConcepts/edzw/paramId.def @@ -1,4 +1,4 @@ -# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE,do not edit! 2020-11-05 10:29 +# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE,do not edit! 2023-07-18 16:26 #paramId: 500000 #Pressure (S) (not reduced) '500000' = { @@ -2073,13 +2073,6 @@ indicatorOfParameter = 18 ; } -#paramId: 502505 -#Visibility -'502505' = { - table2Version = 2 ; - indicatorOfParameter = 20 ; - } - #paramId: 502506 #Radar spectra (2) '502506' = { @@ -3381,6 +3374,13 @@ indicatorOfParameter = 35 ; } +#paramId: 502946 +#Visibility +'502946' = { + table2Version = 2 ; + indicatorOfParameter = 20 ; + } + #paramId: 503063 #Momentum Flux, U-Component (m) '503063' = { @@ -7922,6 +7922,104 @@ indicatorOfParameter = 128 ; } +#paramId: 500779 +#DUMMY_129 +'500779' = { + table2Version = 254 ; + indicatorOfParameter = 129 ; + } + +#paramId: 500780 +#DUMMY_130 +'500780' = { + table2Version = 254 ; + indicatorOfParameter = 130 ; + } + +#paramId: 500781 +#DUMMY_131 +'500781' = { + table2Version = 254 ; + indicatorOfParameter = 131 ; + } + +#paramId: 500782 +#DUMMY_132 +'500782' = { + table2Version = 254 ; + indicatorOfParameter = 132 ; + } + +#paramId: 500783 +#DUMMY_133 +'500783' = { + table2Version = 254 ; + indicatorOfParameter = 133 ; + } + +#paramId: 500784 +#DUMMY_134 +'500784' = { + table2Version = 254 ; + indicatorOfParameter = 134 ; + } + +#paramId: 500785 +#DUMMY_135 +'500785' = { + table2Version = 254 ; + indicatorOfParameter = 135 ; + } + +#paramId: 500786 +#DUMMY_136 +'500786' = { + table2Version = 254 ; + indicatorOfParameter = 136 ; + } + +#paramId: 500787 +#DUMMY_137 +'500787' = { + table2Version = 254 ; + indicatorOfParameter = 137 ; + } + +#paramId: 500788 +#DUMMY_138 +'500788' = { + table2Version = 254 ; + indicatorOfParameter = 138 ; + } + +#paramId: 500789 +#DUMMY_139 +'500789' = { + table2Version = 254 ; + indicatorOfParameter = 139 ; + } + +#paramId: 500790 +#DUMMY_140 +'500790' = { + table2Version = 254 ; + indicatorOfParameter = 140 ; + } + +#paramId: 500791 +#DUMMY_141 +'500791' = { + table2Version = 254 ; + indicatorOfParameter = 141 ; + } + +#paramId: 500792 +#DUMMY_142 +'500792' = { + table2Version = 254 ; + indicatorOfParameter = 142 ; + } + #paramId: 500793 #DUMMY_143 '500793' = { diff --git a/definitions/grib1/localConcepts/edzw/shortName.def b/definitions/grib1/localConcepts/edzw/shortName.def index 3ee953db6..e71934309 100644 --- a/definitions/grib1/localConcepts/edzw/shortName.def +++ b/definitions/grib1/localConcepts/edzw/shortName.def @@ -1,4 +1,4 @@ -# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE, do not edit! 2020-11-05 10:29 +# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE, do not edit! 2023-07-18 16:26 #paramId: 500000 #Pressure (S) (not reduced) 'PS' = { @@ -5441,6 +5441,104 @@ indicatorOfParameter = 128 ; } +#paramId: 500779 +#DUMMY_129 +'DUMMY_129' = { + table2Version = 254 ; + indicatorOfParameter = 129 ; + } + +#paramId: 500780 +#DUMMY_130 +'DUMMY_130' = { + table2Version = 254 ; + indicatorOfParameter = 130 ; + } + +#paramId: 500781 +#DUMMY_131 +'DUMMY_131' = { + table2Version = 254 ; + indicatorOfParameter = 131 ; + } + +#paramId: 500782 +#DUMMY_132 +'DUMMY_132' = { + table2Version = 254 ; + indicatorOfParameter = 132 ; + } + +#paramId: 500783 +#DUMMY_133 +'DUMMY_133' = { + table2Version = 254 ; + indicatorOfParameter = 133 ; + } + +#paramId: 500784 +#DUMMY_134 +'DUMMY_134' = { + table2Version = 254 ; + indicatorOfParameter = 134 ; + } + +#paramId: 500785 +#DUMMY_135 +'DUMMY_135' = { + table2Version = 254 ; + indicatorOfParameter = 135 ; + } + +#paramId: 500786 +#DUMMY_136 +'DUMMY_136' = { + table2Version = 254 ; + indicatorOfParameter = 136 ; + } + +#paramId: 500787 +#DUMMY_137 +'DUMMY_137' = { + table2Version = 254 ; + indicatorOfParameter = 137 ; + } + +#paramId: 500788 +#DUMMY_138 +'DUMMY_138' = { + table2Version = 254 ; + indicatorOfParameter = 138 ; + } + +#paramId: 500789 +#DUMMY_139 +'DUMMY_139' = { + table2Version = 254 ; + indicatorOfParameter = 139 ; + } + +#paramId: 500790 +#DUMMY_140 +'DUMMY_140' = { + table2Version = 254 ; + indicatorOfParameter = 140 ; + } + +#paramId: 500791 +#DUMMY_141 +'DUMMY_141' = { + table2Version = 254 ; + indicatorOfParameter = 141 ; + } + +#paramId: 500792 +#DUMMY_142 +'DUMMY_142' = { + table2Version = 254 ; + indicatorOfParameter = 142 ; + } + #paramId: 500793 #DUMMY_143 'DUMMY_143' = { @@ -7342,13 +7440,6 @@ indicatorOfParameter = 18 ; } -#paramId: 502505 -#Visibility -'VIS' = { - table2Version = 2 ; - indicatorOfParameter = 20 ; - } - #paramId: 502506 #Radar spectra (2) 'RDSP2' = { @@ -8657,6 +8748,13 @@ indicatorOfParameter = 71 ; } +#paramId: 502946 +#Visibility +'VIS' = { + table2Version = 2 ; + indicatorOfParameter = 20 ; + } + #paramId: 503049 #Eddy dissipitation rate of TKE 'EDR' = { diff --git a/definitions/grib1/localConcepts/edzw/units.def b/definitions/grib1/localConcepts/edzw/units.def index d525620a4..73fe51891 100644 --- a/definitions/grib1/localConcepts/edzw/units.def +++ b/definitions/grib1/localConcepts/edzw/units.def @@ -1,4 +1,4 @@ -# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE, do not edit! 2020-11-05 10:29 +# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE, do not edit! 2023-07-18 16:26 #paramId: 500000 #Pressure (S) (not reduced) 'Pa' = { @@ -5441,6 +5441,104 @@ indicatorOfParameter = 128 ; } +#paramId: 500779 +#DUMMY_129 +'' = { + table2Version = 254 ; + indicatorOfParameter = 129 ; + } + +#paramId: 500780 +#DUMMY_130 +'' = { + table2Version = 254 ; + indicatorOfParameter = 130 ; + } + +#paramId: 500781 +#DUMMY_131 +'' = { + table2Version = 254 ; + indicatorOfParameter = 131 ; + } + +#paramId: 500782 +#DUMMY_132 +'' = { + table2Version = 254 ; + indicatorOfParameter = 132 ; + } + +#paramId: 500783 +#DUMMY_133 +'' = { + table2Version = 254 ; + indicatorOfParameter = 133 ; + } + +#paramId: 500784 +#DUMMY_134 +'' = { + table2Version = 254 ; + indicatorOfParameter = 134 ; + } + +#paramId: 500785 +#DUMMY_135 +'' = { + table2Version = 254 ; + indicatorOfParameter = 135 ; + } + +#paramId: 500786 +#DUMMY_136 +'' = { + table2Version = 254 ; + indicatorOfParameter = 136 ; + } + +#paramId: 500787 +#DUMMY_137 +'' = { + table2Version = 254 ; + indicatorOfParameter = 137 ; + } + +#paramId: 500788 +#DUMMY_138 +'' = { + table2Version = 254 ; + indicatorOfParameter = 138 ; + } + +#paramId: 500789 +#DUMMY_139 +'' = { + table2Version = 254 ; + indicatorOfParameter = 139 ; + } + +#paramId: 500790 +#DUMMY_140 +'' = { + table2Version = 254 ; + indicatorOfParameter = 140 ; + } + +#paramId: 500791 +#DUMMY_141 +'' = { + table2Version = 254 ; + indicatorOfParameter = 141 ; + } + +#paramId: 500792 +#DUMMY_142 +'' = { + table2Version = 254 ; + indicatorOfParameter = 142 ; + } + #paramId: 500793 #DUMMY_143 '' = { @@ -7342,13 +7440,6 @@ indicatorOfParameter = 18 ; } -#paramId: 502505 -#Visibility -'m' = { - table2Version = 2 ; - indicatorOfParameter = 20 ; - } - #paramId: 502506 #Radar spectra (2) 'Numeric' = { @@ -8657,6 +8748,13 @@ indicatorOfParameter = 71 ; } +#paramId: 502946 +#Visibility +'m' = { + table2Version = 2 ; + indicatorOfParameter = 20 ; + } + #paramId: 503049 #Eddy dissipitation rate of TKE 'm2 s-3' = { diff --git a/definitions/grib2/localConcepts/edzw/name.def b/definitions/grib2/localConcepts/edzw/name.def index e94200cae..08b716bcb 100644 --- a/definitions/grib2/localConcepts/edzw/name.def +++ b/definitions/grib2/localConcepts/edzw/name.def @@ -1,4 +1,4 @@ -# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE, do not edit! 2020-11-05 10:29 +# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE, do not edit! 2023-08-17 13:41 #paramId: 500000 #Pressure (S) (not reduced) 'Pressure (S) (not reduced)' = { @@ -3471,118 +3471,6 @@ parameterNumber = 8 ; } -#paramId: 500779 -#Effective radius of cloud water -'Effective radius of cloud water' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 129 ; - } - -#paramId: 500780 -#Effective radius of rain -'Effective radius of rain' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 130 ; - } - -#paramId: 500781 -#Effective radius of cloud ice -'Effective radius of cloud ice' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 131 ; - } - -#paramId: 500782 -#Effective radius of snow -'Effective radius of snow' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 132 ; - } - -#paramId: 500783 -#Effective radius of graupel -'Effective radius of graupel' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 133 ; - } - -#paramId: 500784 -#Effective radius of hail -'Effective radius of hail' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 134 ; - } - -#paramId: 500785 -#Effective radius of subgrid liquid clouds -'Effective radius of subgrid liquid clouds' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 135 ; - } - -#paramId: 500786 -#Effective radius of subgrid ice clouds -'Effective radius of subgrid ice clouds' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 136 ; - } - -#paramId: 500787 -#Effective aspect ratio of rain -'Effective aspect ratio of rain' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 137 ; - } - -#paramId: 500788 -#Effective aspect ratio of cloud ice -'Effective aspect ratio of cloud ice' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 138 ; - } - -#paramId: 500789 -#Effective aspect ratio of snow -'Effective aspect ratio of snow' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 139 ; - } - -#paramId: 500790 -#Effective aspect ratio of graupel -'Effective aspect ratio of graupel' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 140 ; - } - -#paramId: 500791 -#Effective aspect ratio of hail -'Effective aspect ratio of hail' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 141 ; - } - -#paramId: 500792 -#Effective aspect ratio of subgrid ice clouds -'Effective aspect ratio of subgrid ice clouds' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 142 ; - } - #paramId: 500905 #Specific Humidity (S) 'Specific Humidity (S)' = { @@ -8267,6 +8155,815 @@ typeOfFirstFixedSurface = 1 ; } +#paramId: 503563 +#Temperature tendency perturbation due to stochastic model of model error +'Temperature tendency perturbation due to stochastic model of model error' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfGeneratingProcess = 221 ; + } + +#paramId: 503564 +#Zonal wind tendency perturbation due to stochastic model of model error +'Zonal wind tendency perturbation due to stochastic model of model error' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfGeneratingProcess = 221 ; + } + +#paramId: 503565 +#Meridional wind tendency perturbation due to stochastic model of model error +'Meridional wind tendency perturbation due to stochastic model of model error' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfGeneratingProcess = 221 ; + } + +#paramId: 503566 +#Effective radius of cloud water +'Effective radius of cloud water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 129 ; + } + +#paramId: 503567 +#Effective radius of rain +'Effective radius of rain' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 130 ; + } + +#paramId: 503568 +#Effective radius of cloud ice +'Effective radius of cloud ice' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 131 ; + } + +#paramId: 503569 +#Effective radius of snow +'Effective radius of snow' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 132 ; + } + +#paramId: 503570 +#Effective radius of graupel +'Effective radius of graupel' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 133 ; + } + +#paramId: 503571 +#Effective radius of hail +'Effective radius of hail' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 134 ; + } + +#paramId: 503572 +#Effective radius of subgrid liquid clouds +'Effective radius of subgrid liquid clouds' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 135 ; + } + +#paramId: 503573 +#Effective radius of subgrid ice clouds +'Effective radius of subgrid ice clouds' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 136 ; + } + +#paramId: 503574 +#Effective aspect ratio of rain +'Effective aspect ratio of rain' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 137 ; + } + +#paramId: 503575 +#Effective aspect ratio of cloud ice +'Effective aspect ratio of cloud ice' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 138 ; + } + +#paramId: 503576 +#Effective aspect ratio of snow +'Effective aspect ratio of snow' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 139 ; + } + +#paramId: 503577 +#Effective aspect ratio of graupel +'Effective aspect ratio of graupel' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 140 ; + } + +#paramId: 503578 +#Effective aspect ratio of hail +'Effective aspect ratio of hail' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 141 ; + } + +#paramId: 503579 +#Effective aspect ratio of subgrid ice clouds +'Effective aspect ratio of subgrid ice clouds' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 142 ; + } + +#paramId: 503580 +#Relative Humidity in lowest model layer - time-filtered assimilation increment +'Relative Humidity in lowest model layer - time-filtered assimilation increment' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503581 +#Temperature in lowest model layer - time-filtered assimilation increment +'Temperature in lowest model layer - time-filtered assimilation increment' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503583 +#Wind speed (time average) +'Wind speed (time average)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } + +#paramId: 503584 +#10m wind speed (time average) +'10m wind speed (time average)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + } + +#paramId: 503587 +#Total cloud cover (time average) +'Total cloud cover (time average)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } + +#paramId: 503593 +#Clear-sky net solar radiation flux (at the surface) +'Clear-sky net solar radiation flux (at the surface)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503594 +#Clear-sky net thermal radiation flux (at the surface) +'Clear-sky net thermal radiation flux (at the surface)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503595 +#Clear-sky net solar radiation flux (on model top) +'Clear-sky net solar radiation flux (on model top)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503596 +#Clear-sky net thermal radiation flux (on model top) +'Clear-sky net thermal radiation flux (on model top)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503597 +#Clear-sky net solar radiation flux (at the surface) - time average +'Clear-sky net solar radiation flux (at the surface) - time average' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503598 +#Clear-sky net thermal radiation flux (at the surface) - time average +'Clear-sky net thermal radiation flux (at the surface) - time average' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503599 +#Clear-sky net solar radiation flux (on model top) - time average +'Clear-sky net solar radiation flux (on model top) - time average' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503600 +#Clear-sky net thermal radiation flux (on model top) - time average +'Clear-sky net thermal radiation flux (on model top) - time average' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503601 +#TOA downward solar radiation (time average) +'TOA downward solar radiation (time average)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503602 +#Volumetric saturation of soil moisture +'Volumetric saturation of soil moisture' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfSecondFixedSurface = 106 ; + typeOfFirstFixedSurface = 106 ; + } + +#paramId: 503616 +#Pressure in lowest model layer - time-filtered assimilation increment +'Pressure in lowest model layer - time-filtered assimilation increment' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503617 +#Maximum amplitude of updraft helicity in tropospheric column of low height +'Maximum amplitude of updraft helicity in tropospheric column of low height' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 102 ; + scaleFactorOfSecondFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 3000 ; + typeOfFirstFixedSurface = 102 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 0 ; + } + +#paramId: 503618 +#Maximum amplitude of updraft helicity in tropospheric column of medium height +'Maximum amplitude of updraft helicity in tropospheric column of medium height' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 102 ; + scaleFactorOfSecondFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 5000 ; + typeOfFirstFixedSurface = 102 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2000 ; + } + +#paramId: 503621 +#Large-scale precipitation rate +'Large-scale precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + } + +#paramId: 503624 +#Total lightning flash density - maximum +'Total lightning flash density - maximum' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 8 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503628 +#Smoke - high absorption (mass mixing ratio) +'Smoke - high absorption (mass mixing ratio)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62020 ; + } + +#paramId: 503629 +#Smoke - high absorption (mass density) +'Smoke - high absorption (mass density)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62020 ; + } + +#paramId: 503630 +#Smoke - high absorption (specific number concentration) +'Smoke - high absorption (specific number concentration)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62020 ; + } + +#paramId: 503631 +#Smoke - low absorption (mass mixing ratio) +'Smoke - low absorption (mass mixing ratio)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62021 ; + } + +#paramId: 503632 +#Smoke - low absorption (mass density) +'Smoke - low absorption (mass density)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62021 ; + } + +#paramId: 503633 +#Smoke - low absorption (specific number concentration) +'Smoke - low absorption (specific number concentration)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62021 ; + } + +#paramId: 503634 +#Sulphur dioxide (SO2) - volume mixing ratio +'Sulphur dioxide (SO2) - volume mixing ratio' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 52 ; + constituentType = 8 ; + } + +#paramId: 503635 +#Sulphur dioxide (SO2) - mass density +'Sulphur dioxide (SO2) - mass density' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 8 ; + } + +#paramId: 503636 +#Hazel (corylus) pollen concentration +'Hazel (corylus) pollen concentration' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 59 ; + constituentType = 62104 ; + } + +#paramId: 503637 +#Fraction of land occupied by hazel (corylus) +'Fraction of land occupied by hazel (corylus)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503643 +#Precipitation reservoir (liquid water on the flowers, preventing them from flowering) of hazel (corylus) +'Precipitation reservoir (liquid water on the flowers, preventing them from flowering) of hazel (corylus)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + constituentType = 62104 ; + } + +#paramId: 503651 +#Hazel (corylus) pollen specific number concentration +'Hazel (corylus) pollen specific number concentration' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62104 ; + } + +#paramId: 503657 +#Temperature in lowest model layer - time-filtered assimilation increment, weighted with cos(2pi loc.time/day) +'Temperature in lowest model layer - time-filtered assimilation increment, weighted with cos(2pi loc.time/day)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 208 ; + } + +#paramId: 503662 +#Thickness of snow layer - multi level +'Thickness of snow layer - multi level' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503664 +#Snow temperature of layer (defined at layer top) - multi level +'Snow temperature of layer (defined at layer top) - multi level' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503672 +#Lightning Potential Index from convection scheme +'Lightning Potential Index from convection scheme' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 5 ; + } + +#paramId: 503673 +#Maximum Lightning Potential Index from convection scheme +'Maximum Lightning Potential Index from convection scheme' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 2 ; + } + +#paramId: 503674 +#Wind speed in lowest model layer - time-filtered assimilation increment +'Wind speed in lowest model layer - time-filtered assimilation increment' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503675 +#Eddy Dissipation Parameter +'Eddy Dissipation Parameter' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 30 ; + } + +#paramId: 503676 +#Icing Severity (0=None, 1=Trace, 2=Light, 3=Moderate, 4=Severe) +'Icing Severity (0=None, 1=Trace, 2=Light, 3=Moderate, 4=Severe)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 37 ; + } + +#paramId: 503677 +#U-component surface Stokes drift +'U-component surface Stokes drift' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + } + +#paramId: 503678 +#V-component surface Stokes drift +'V-component surface Stokes drift' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + } + +#paramId: 503679 +#Peak wave direction +'Peak wave direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 46 ; + } + +#paramId: 503680 +#Significant wave height of first swell partition +'Significant wave height of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + } + +#paramId: 503681 +#Significant wave height of second swell partition +'Significant wave height of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + } + +#paramId: 503682 +#Significant wave height of third swell partition +'Significant wave height of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + } + +#paramId: 503683 +#Mean wave period of first swell partition +'Mean wave period of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + } + +#paramId: 503684 +#Mean wave period of second swell partition +'Mean wave period of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + } + +#paramId: 503685 +#Mean wave period of third swell partition +'Mean wave period of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + } + +#paramId: 503686 +#Mean wave direction of first swell partition +'Mean wave direction of first swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + } + +#paramId: 503687 +#Mean wave direction of second swell partition +'Mean wave direction of second swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + } + +#paramId: 503688 +#Mean wave direction of third swell partition +'Mean wave direction of third swell partition' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + } + +#paramId: 503689 +#Diagnostic total mass concentration of mineral dust aerosol +'Diagnostic total mass concentration of mineral dust aerosol' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62001 ; + } + +#paramId: 503690 +#Diagnostic total mass concentration of sea salt aerosol +'Diagnostic total mass concentration of sea salt aerosol' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62008 ; + } + +#paramId: 503691 +#Diagnostic total mass concentration of black carbon aerosol (soot) +'Diagnostic total mass concentration of black carbon aerosol (soot)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62009 ; + } + +#paramId: 503692 +#Diagnostic black carbon aerosol (soot) optical depth +'Diagnostic black carbon aerosol (soot) optical depth' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + aerosolType = 62009 ; + } + +#paramId: 503693 +#Total atmosphere optical depth due to mineral dust aerosol +'Total atmosphere optical depth due to mineral dust aerosol' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62001 ; + } + +#paramId: 503694 +#Total atmosphere optical depth due to sea salt aerosol +'Total atmosphere optical depth due to sea salt aerosol' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62008 ; + } + +#paramId: 503695 +#Total atmosphere optical depth due to volcanic ash aerosol +'Total atmosphere optical depth due to volcanic ash aerosol' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62025 ; + } + +#paramId: 503696 +#Total atmosphere optical depth due to black carbon aerosol (soot) +'Total atmosphere optical depth due to black carbon aerosol (soot)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62009 ; + } + +#paramId: 503697 +#Modal prognostic mass mixing ratio of mineral dust aerosol (all modes) +'Modal prognostic mass mixing ratio of mineral dust aerosol (all modes)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62001 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503698 +#Modal prognostic mass mixing ratio of sea salt aerosol (all modes) +'Modal prognostic mass mixing ratio of sea salt aerosol (all modes)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62008 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503699 +#Modal prognostic mass mixing ratio of black carbon aerosol (soot) (all modes) +'Modal prognostic mass mixing ratio of black carbon aerosol (soot) (all modes)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62009 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503700 +#Modal prognostic specific number concentration of black carbon aerosol (soot) (all modes) +'Modal prognostic specific number concentration of black carbon aerosol (soot) (all modes)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62009 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503701 +#Modal prognostic mass mixing ratio of volcanic ash aerosol (all modes) +'Modal prognostic mass mixing ratio of volcanic ash aerosol (all modes)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62025 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503702 +#Modal prognostic specific number concentration of total aerosol (all modes) +'Modal prognostic specific number concentration of total aerosol (all modes)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62000 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503703 +#Base reflectivity - low layer maximum +'Base reflectivity - low layer maximum' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 4 ; + typeOfSecondFixedSurface = 103 ; + scaleFactorOfSecondFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 500 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2500 ; + } + +#paramId: 503706 +#Sea water density +'Sea water density' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 16 ; + } + +#paramId: 503707 +#Sea water potential temperature +'Sea water potential temperature' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 18 ; + } + +#paramId: 503708 +#Sea water potential density +'Sea water potential density' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 19 ; + } + +#paramId: 503709 +#Sea water practical salinity +'Sea water practical salinity' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 21 ; + } + #paramId: 500092 #Solar radiation heating rate 'Solar radiation heating rate' = { @@ -11069,6 +11766,118 @@ parameterNumber = 128 ; } +#paramId: 500779 +#DUMMY_129 +'DUMMY_129' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 129 ; + } + +#paramId: 500780 +#DUMMY_130 +'DUMMY_130' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 130 ; + } + +#paramId: 500781 +#DUMMY_131 +'DUMMY_131' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 131 ; + } + +#paramId: 500782 +#DUMMY_132 +'DUMMY_132' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 132 ; + } + +#paramId: 500783 +#DUMMY_133 +'DUMMY_133' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 133 ; + } + +#paramId: 500784 +#DUMMY_134 +'DUMMY_134' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 134 ; + } + +#paramId: 500785 +#DUMMY_135 +'DUMMY_135' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 135 ; + } + +#paramId: 500786 +#DUMMY_136 +'DUMMY_136' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 136 ; + } + +#paramId: 500787 +#DUMMY_137 +'DUMMY_137' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 137 ; + } + +#paramId: 500788 +#DUMMY_138 +'DUMMY_138' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 138 ; + } + +#paramId: 500789 +#DUMMY_139 +'DUMMY_139' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 139 ; + } + +#paramId: 500790 +#DUMMY_140 +'DUMMY_140' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 140 ; + } + +#paramId: 500791 +#DUMMY_141 +'DUMMY_141' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 141 ; + } + +#paramId: 500792 +#DUMMY_142 +'DUMMY_142' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 142 ; + } + #paramId: 500793 #DUMMY_143 'DUMMY_143' = { @@ -13807,3 +14616,655 @@ parameterNumber = 211 ; } +#paramId: 503582 +#Frequency of winds in defined wind sector for defined time interval +'Frequency of winds in defined wind sector for defined time interval' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 11 ; + typeOfSecondFixedSurface = 233 ; + typeOfFirstFixedSurface = 233 ; + } + +#paramId: 503585 +#10m wind speed in wind sector (time average) +'10m wind speed in wind sector (time average)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + typeOfSecondFixedSurface = 233 ; + typeOfFirstFixedSurface = 233 ; + } + +#paramId: 503586 +#10m wind speed in wind sector (time maximum) +'10m wind speed in wind sector (time maximum)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 233 ; + typeOfFirstFixedSurface = 233 ; + } + +#paramId: 503588 +#Downward direct short-wave radiation flux at surface on a plane normal to the sun (time average) +'Downward direct short-wave radiation flux at surface on a plane normal to the sun (time average)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 198 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 206 ; + } + +#paramId: 503589 +#Downward direct short-wave radiation flux at surface on a plane normal to the sun without orographic shading (time average) +'Downward direct short-wave radiation flux at surface on a plane normal to the sun without orographic shading (time average)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 198 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 207 ; + } + +#paramId: 503590 +#Solar elevation angle +'Solar elevation angle' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 202 ; + } + +#paramId: 503591 +#Solar azimuth angle +'Solar azimuth angle' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 203 ; + } + +#paramId: 503592 +#Turbulence intensity (time maximum) +'Turbulence intensity (time maximum)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 236 ; + typeOfStatisticalProcessing = 2 ; + } + +#paramId: 503603 +#Soil water mass flux at layer interfaces (sum of conductive and diffusive fluxes) +'Soil water mass flux at layer interfaces (sum of conductive and diffusive fluxes)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 106 ; + } + +#paramId: 503604 +#Ground water runoff rate, aquifer +'Ground water runoff rate, aquifer' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + typeOfSecondFixedSurface = 106 ; + typeOfFirstFixedSurface = 106 ; + } + +#paramId: 503605 +#Water table depth +'Water table depth' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 177 ; + } + +#paramId: 503606 +#Soil moisture saturation level +'Soil moisture saturation level' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 177 ; + } + +#paramId: 503607 +#Slope of orography (using average of maximum gradient in different directions) +'Slope of orography (using average of maximum gradient in different directions)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 198 ; + } + +#paramId: 503608 +#Total column zonal water flux +'Total column zonal water flux ' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 236 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503609 +#Total column meridional water flux +'Total column meridional water flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 237 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503610 +#Total column zonal water flux - time average +'Total column zonal water flux - time average' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 236 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503611 +#Total column meridional water flux - time average +'Total column meridional water flux - time average' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 237 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503612 +#Number of active clouds per horizontal unit area +'Number of active clouds per horizontal unit area' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 210 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503613 +#Number of passive clouds per horizontal unit area +'Number of passive clouds per horizontal unit area' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 211 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503614 +#Cloud base mass flux associated with active clouds +'Cloud base mass flux associated with active clouds' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503615 +#Cloud base mass flux associated with passive clouds +'Cloud base mass flux associated with passive clouds' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503619 +#Single scan reflectivity - observation +'Single scan reflectivity - observation' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 200 ; + typeOfGeneratingProcess = 8 ; + } + +#paramId: 503620 +#Single scan reflectivity - simulation +'Single scan reflectivity - simulation' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 198 ; + } + +#paramId: 503622 +#Lightning Potential Index from convection scheme, modified by convection index +'Lightning Potential Index from convection scheme, modified by convection index' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 193 ; + } + +#paramId: 503623 +#Maximum Lightning Potential Index from convection scheme, modified by convection index +'Maximum Lightning Potential Index from convection scheme, modified by convection index' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 2 ; + } + +#paramId: 503625 +#Mass median diameter of dust for mode 1 +'Mass median diameter of dust for mode 1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 220 ; + constituentType = 62001 ; + modeNumber = 1 ; + typeOfDistributionFunction = 8 ; + } + +#paramId: 503626 +#Mass median diameter of dust for mode 2 +'Mass median diameter of dust for mode 2' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 220 ; + constituentType = 62001 ; + modeNumber = 2 ; + typeOfDistributionFunction = 8 ; + } + +#paramId: 503627 +#Mass median diameter of dust for mode 3 +'Mass median diameter of dust for mode 3' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 220 ; + constituentType = 62001 ; + modeNumber = 3 ; + typeOfDistributionFunction = 8 ; + } + +#paramId: 503638 +#Number of hazel (corylus) pollen in the reservoir (previous timestep) +'Number of hazel (corylus) pollen in the reservoir (previous timestep)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 192 ; + constituentType = 62104 ; + } + +#paramId: 503639 +#Number of hazel (corylus) pollen released into the reservoir (new) +'Number of hazel (corylus) pollen released into the reservoir (new)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 193 ; + constituentType = 62104 ; + } + +#paramId: 503640 +#State of the hazel (corylus) season (eq.zero before and after season, the higher, the more plants are flowering) +'State of the hazel (corylus) season (eq.zero before and after season, the higher, the more plants are flowering)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 194 ; + constituentType = 62104 ; + } + +#paramId: 503641 +#Height correction for emission (decreasing emission with height) for hazel (corylus) +'Height correction for emission (decreasing emission with height) for hazel (corylus)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 195 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503642 +#Sum of released hazel (corylus) pollen into the reservoir (daily sum) +'Sum of released hazel (corylus) pollen into the reservoir (daily sum)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 11 ; + constituentType = 62104 ; + } + +#paramId: 503644 +#Cumulated weighted 2m temperature sum of daily values for hazel (corylus) pollen +'Cumulated weighted 2m temperature sum of daily values for hazel (corylus) pollen' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 196 ; + constituentType = 62104 ; + } + +#paramId: 503645 +#Cumulated 2m temperature sum threshold for the start of hazel (corylus) pollen season (climatological) +'Cumulated 2m temperature sum threshold for the start of hazel (corylus) pollen season (climatological)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 197 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503646 +#Cumulated 2m temperature sum threshold for the end of hazel (corylus) pollen season (climatological) +'Cumulated 2m temperature sum threshold for the end of hazel (corylus) pollen season (climatological)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 198 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503647 +#Number of days since the start of hazel (corylus) pollen season (if present day is in the season: zero outside season) +'Number of days since the start of hazel (corylus) pollen season (if present day is in the season: zero outside season)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 199 ; + constituentType = 62104 ; + } + +#paramId: 503648 +#Length of hazel (corylus) pollen season +'Length of hazel (corylus) pollen season' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 201 ; + constituentType = 62104 ; + } + +#paramId: 503649 +#Pollen number emission flux for hazel (corylus) +'Pollen number emission flux for hazel (corylus)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 202 ; + constituentType = 62104 ; + } + +#paramId: 503650 +#Number of days since the start of hazel (corylus) pollen season (if present day is outside the season: length of current season) +'Number of days since the start of hazel (corylus) pollen season (if present day is outside the season: length of current season)' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 200 ; + constituentType = 62104 ; + } + +#paramId: 503652 +#Emission tuning factor for birch (betula) pollen +'Emission tuning factor for birch (betula) pollen' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62101 ; + } + +#paramId: 503653 +#Emission tuning factor for alder (alnus) pollen +'Emission tuning factor for alder (alnus) pollen' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62100 ; + } + +#paramId: 503654 +#Emission tuning factor for grasses (poaceae) pollen +'Emission tuning factor for grasses (poaceae) pollen' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62300 ; + } + +#paramId: 503655 +#Emission tuning factor for ragweed (ambrosia) pollen +'Emission tuning factor for ragweed (ambrosia) pollen' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62200 ; + } + +#paramId: 503656 +#Emission tuning factor for hazel (corylus) pollen +'Emission tuning factor for hazel (corylus) pollen' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62104 ; + } + +#paramId: 503658 +#Height of new snow (without settling) +'Height of new snow (without settling)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 207 ; + } + +#paramId: 503659 +#Volumetric ice content of snow layer - multi level +'Volumetric ice content of snow layer - multi level' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + constituentType = 63000 ; + } + +#paramId: 503660 +#Volumetric water content of snow layer - multi level +'Volumetric water content of snow layer - multi level' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + constituentType = 62002 ; + } + +#paramId: 503661 +#Volumetric air content of snow layer - multi level +'Volumetric air content of snow layer - multi level' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + constituentType = 63001 ; + } + +#paramId: 503663 +#Number of snow layer - multi level +'Number of snow layer - multi level' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 206 ; + } + +#paramId: 503665 +#Building area fraction (proportion: 0=no building, 1=whole urban area) +'Building area fraction (proportion: 0=no building, 1=whole urban area)' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 0 ; + } + +#paramId: 503666 +#Street canyon aspect (height - width) ratio +'Street canyon aspect (height - width) ratio' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 1 ; + } + +#paramId: 503667 +#Height of building +'Height of building' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 2 ; + } + +#paramId: 503668 +#Urban material thermal albedo +'Urban material thermal albedo' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 3 ; + } + +#paramId: 503669 +#Urban material shortwave (solar) albedo +'Urban material shortwave (solar) albedo' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 4 ; + } + +#paramId: 503670 +#Volumetric heat capacity of urban material (capacity x density) +'Volumetric heat capacity of urban material (capacity x density)' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 5 ; + } + +#paramId: 503671 +#Heat conductivity of urban material +'Heat conductivity of urban material' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 6 ; + } + +#paramId: 503704 +#Potential flight distance PFD (gliding) +'Potential flight distance PFD (gliding)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 240 ; + } + +#paramId: 503705 +#Lifting ratio VST (gliding) +'Lifting ratio VST (gliding)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 241 ; + } + +#paramId: 503710 +#U-component of mean wind (vertical mean over specified layer) +'U-component of mean wind (vertical mean over specified layer)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 212 ; + } + +#paramId: 503711 +#V-component of mean wind (vertical mean over specified layer) +'V-component of mean wind (vertical mean over specified layer)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 213 ; + } + +#paramId: 503712 +#Extreme weather index of snow amount, grid-scale plus convective +'Extreme weather index of snow amount, grid-scale plus convective' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 240 ; + typeOfStatisticalProcessing = 1 ; + } + +#paramId: 503713 +#Extreme weather index of maximum Wind 10m +'Extreme weather index of maximum Wind 10m' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 214 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + } + +#paramId: 503714 +#Extreme weather index of total precipitation (Accumulation) +'Extreme weather index of total precipitation (Accumulation)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 239 ; + typeOfStatisticalProcessing = 1 ; + } + +#paramId: 503715 +#Cloud cover for use in radiative transfer (modified where large hydrometeors are present) +'Cloud cover for use in radiative transfer (modified where large hydrometeors are present)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 215 ; + } + +#paramId: 503716 +#Snow temperature at node (i.e. at snow layer interface or boundary) - multi level +'Snow temperature at node (i.e. at snow layer interface or boundary) - multi level' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 208 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503717 +#Volumetric ice content of snow layer (for use in tile approach) - multi level +'Volumetric ice content of snow layer (for use in tile approach) - multi level' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 209 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503718 +#Volumetric water content of snow layer (for use in tile approach) - multi level +'Volumetric water content of snow layer (for use in tile approach) - multi level' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503719 +#Volumetric air content of snow layer (for use in tile approach) - multi level +'Volumetric air content of snow layer (for use in tile approach) - multi level' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 211 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503720 +#Probability for freezing precipitation/wet snow +'Probability for freezing precipitation/wet snow' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 242 ; + } + +#paramId: 503721 +#Probability for freezing precipitation with wind +'Probability for freezing precipitation with wind' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 243 ; + } + diff --git a/definitions/grib2/localConcepts/edzw/paramId.def b/definitions/grib2/localConcepts/edzw/paramId.def index 9b31c68c9..09e15e295 100644 --- a/definitions/grib2/localConcepts/edzw/paramId.def +++ b/definitions/grib2/localConcepts/edzw/paramId.def @@ -1,4 +1,4 @@ -# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE, do not edit! 2020-11-05 10:29 +# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE, do not edit! 2023-08-17 13:41 #paramId: 500000 #Pressure (S) (not reduced) '500000' = { @@ -6785,114 +6785,114 @@ } #paramId: 500779 -#Effective radius of cloud water +#DUMMY_129 '500779' = { discipline = 0 ; - parameterCategory = 1 ; + parameterCategory = 254 ; parameterNumber = 129 ; } #paramId: 500780 -#Effective radius of rain +#DUMMY_130 '500780' = { discipline = 0 ; - parameterCategory = 1 ; + parameterCategory = 254 ; parameterNumber = 130 ; } #paramId: 500781 -#Effective radius of cloud ice +#DUMMY_131 '500781' = { discipline = 0 ; - parameterCategory = 1 ; + parameterCategory = 254 ; parameterNumber = 131 ; } #paramId: 500782 -#Effective radius of snow +#DUMMY_132 '500782' = { discipline = 0 ; - parameterCategory = 1 ; + parameterCategory = 254 ; parameterNumber = 132 ; } #paramId: 500783 -#Effective radius of graupel +#DUMMY_133 '500783' = { discipline = 0 ; - parameterCategory = 1 ; + parameterCategory = 254 ; parameterNumber = 133 ; } #paramId: 500784 -#Effective radius of hail +#DUMMY_134 '500784' = { discipline = 0 ; - parameterCategory = 1 ; + parameterCategory = 254 ; parameterNumber = 134 ; } #paramId: 500785 -#Effective radius of subgrid liquid clouds +#DUMMY_135 '500785' = { discipline = 0 ; - parameterCategory = 1 ; + parameterCategory = 254 ; parameterNumber = 135 ; } #paramId: 500786 -#Effective radius of subgrid ice clouds +#DUMMY_136 '500786' = { discipline = 0 ; - parameterCategory = 1 ; + parameterCategory = 254 ; parameterNumber = 136 ; } #paramId: 500787 -#Effective aspect ratio of rain +#DUMMY_137 '500787' = { discipline = 0 ; - parameterCategory = 1 ; + parameterCategory = 254 ; parameterNumber = 137 ; } #paramId: 500788 -#Effective aspect ratio of cloud ice +#DUMMY_138 '500788' = { discipline = 0 ; - parameterCategory = 1 ; + parameterCategory = 254 ; parameterNumber = 138 ; } #paramId: 500789 -#Effective aspect ratio of snow +#DUMMY_139 '500789' = { discipline = 0 ; - parameterCategory = 1 ; + parameterCategory = 254 ; parameterNumber = 139 ; } #paramId: 500790 -#Effective aspect ratio of graupel +#DUMMY_140 '500790' = { discipline = 0 ; - parameterCategory = 1 ; + parameterCategory = 254 ; parameterNumber = 140 ; } #paramId: 500791 -#Effective aspect ratio of hail +#DUMMY_141 '500791' = { discipline = 0 ; - parameterCategory = 1 ; + parameterCategory = 254 ; parameterNumber = 141 ; } #paramId: 500792 -#Effective aspect ratio of subgrid ice clouds +#DUMMY_142 '500792' = { discipline = 0 ; - parameterCategory = 1 ; + parameterCategory = 254 ; parameterNumber = 142 ; } @@ -14346,3 +14346,1464 @@ typeOfFirstFixedSurface = 1 ; } +#paramId: 503563 +#Temperature tendency perturbation due to stochastic model of model error +'503563' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfGeneratingProcess = 221 ; + } + +#paramId: 503564 +#Zonal wind tendency perturbation due to stochastic model of model error +'503564' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfGeneratingProcess = 221 ; + } + +#paramId: 503565 +#Meridional wind tendency perturbation due to stochastic model of model error +'503565' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfGeneratingProcess = 221 ; + } + +#paramId: 503566 +#Effective radius of cloud water +'503566' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 129 ; + } + +#paramId: 503567 +#Effective radius of rain +'503567' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 130 ; + } + +#paramId: 503568 +#Effective radius of cloud ice +'503568' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 131 ; + } + +#paramId: 503569 +#Effective radius of snow +'503569' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 132 ; + } + +#paramId: 503570 +#Effective radius of graupel +'503570' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 133 ; + } + +#paramId: 503571 +#Effective radius of hail +'503571' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 134 ; + } + +#paramId: 503572 +#Effective radius of subgrid liquid clouds +'503572' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 135 ; + } + +#paramId: 503573 +#Effective radius of subgrid ice clouds +'503573' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 136 ; + } + +#paramId: 503574 +#Effective aspect ratio of rain +'503574' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 137 ; + } + +#paramId: 503575 +#Effective aspect ratio of cloud ice +'503575' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 138 ; + } + +#paramId: 503576 +#Effective aspect ratio of snow +'503576' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 139 ; + } + +#paramId: 503577 +#Effective aspect ratio of graupel +'503577' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 140 ; + } + +#paramId: 503578 +#Effective aspect ratio of hail +'503578' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 141 ; + } + +#paramId: 503579 +#Effective aspect ratio of subgrid ice clouds +'503579' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 142 ; + } + +#paramId: 503580 +#Relative Humidity in lowest model layer - time-filtered assimilation increment +'503580' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503581 +#Temperature in lowest model layer - time-filtered assimilation increment +'503581' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503582 +#Frequency of winds in defined wind sector for defined time interval +'503582' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 11 ; + typeOfSecondFixedSurface = 233 ; + typeOfFirstFixedSurface = 233 ; + } + +#paramId: 503583 +#Wind speed (time average) +'503583' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } + +#paramId: 503584 +#10m wind speed (time average) +'503584' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + } + +#paramId: 503585 +#10m wind speed in wind sector (time average) +'503585' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + typeOfSecondFixedSurface = 233 ; + typeOfFirstFixedSurface = 233 ; + } + +#paramId: 503586 +#10m wind speed in wind sector (time maximum) +'503586' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 233 ; + typeOfFirstFixedSurface = 233 ; + } + +#paramId: 503587 +#Total cloud cover (time average) +'503587' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } + +#paramId: 503588 +#Downward direct short-wave radiation flux at surface on a plane normal to the sun (time average) +'503588' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 198 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 206 ; + } + +#paramId: 503589 +#Downward direct short-wave radiation flux at surface on a plane normal to the sun without orographic shading (time average) +'503589' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 198 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 207 ; + } + +#paramId: 503590 +#Solar elevation angle +'503590' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 202 ; + } + +#paramId: 503591 +#Solar azimuth angle +'503591' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 203 ; + } + +#paramId: 503592 +#Turbulence intensity (time maximum) +'503592' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 236 ; + typeOfStatisticalProcessing = 2 ; + } + +#paramId: 503593 +#Clear-sky net solar radiation flux (at the surface) +'503593' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503594 +#Clear-sky net thermal radiation flux (at the surface) +'503594' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503595 +#Clear-sky net solar radiation flux (on model top) +'503595' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503596 +#Clear-sky net thermal radiation flux (on model top) +'503596' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503597 +#Clear-sky net solar radiation flux (at the surface) - time average +'503597' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503598 +#Clear-sky net thermal radiation flux (at the surface) - time average +'503598' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503599 +#Clear-sky net solar radiation flux (on model top) - time average +'503599' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503600 +#Clear-sky net thermal radiation flux (on model top) - time average +'503600' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503601 +#TOA downward solar radiation (time average) +'503601' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503602 +#Volumetric saturation of soil moisture +'503602' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfSecondFixedSurface = 106 ; + typeOfFirstFixedSurface = 106 ; + } + +#paramId: 503603 +#Soil water mass flux at layer interfaces (sum of conductive and diffusive fluxes) +'503603' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 106 ; + } + +#paramId: 503604 +#Ground water runoff rate, aquifer +'503604' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + typeOfSecondFixedSurface = 106 ; + typeOfFirstFixedSurface = 106 ; + } + +#paramId: 503605 +#Water table depth +'503605' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 177 ; + } + +#paramId: 503606 +#Soil moisture saturation level +'503606' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 177 ; + } + +#paramId: 503607 +#Slope of orography (using average of maximum gradient in different directions) +'503607' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 198 ; + } + +#paramId: 503608 +#Total column zonal water flux +'503608' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 236 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503609 +#Total column meridional water flux +'503609' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 237 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503610 +#Total column zonal water flux - time average +'503610' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 236 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503611 +#Total column meridional water flux - time average +'503611' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 237 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503612 +#Number of active clouds per horizontal unit area +'503612' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 210 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503613 +#Number of passive clouds per horizontal unit area +'503613' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 211 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503614 +#Cloud base mass flux associated with active clouds +'503614' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503615 +#Cloud base mass flux associated with passive clouds +'503615' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503616 +#Pressure in lowest model layer - time-filtered assimilation increment +'503616' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503617 +#Maximum amplitude of updraft helicity in tropospheric column of low height +'503617' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 102 ; + scaleFactorOfSecondFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 3000 ; + typeOfFirstFixedSurface = 102 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 0 ; + } + +#paramId: 503618 +#Maximum amplitude of updraft helicity in tropospheric column of medium height +'503618' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 102 ; + scaleFactorOfSecondFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 5000 ; + typeOfFirstFixedSurface = 102 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2000 ; + } + +#paramId: 503619 +#Single scan reflectivity - observation +'503619' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 200 ; + typeOfGeneratingProcess = 8 ; + } + +#paramId: 503620 +#Single scan reflectivity - simulation +'503620' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 198 ; + } + +#paramId: 503621 +#Large-scale precipitation rate +'503621' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + } + +#paramId: 503622 +#Lightning Potential Index from convection scheme, modified by convection index +'503622' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 193 ; + } + +#paramId: 503623 +#Maximum Lightning Potential Index from convection scheme, modified by convection index +'503623' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 2 ; + } + +#paramId: 503624 +#Total lightning flash density - maximum +'503624' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 8 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503625 +#Mass median diameter of dust for mode 1 +'503625' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 220 ; + constituentType = 62001 ; + modeNumber = 1 ; + typeOfDistributionFunction = 8 ; + } + +#paramId: 503626 +#Mass median diameter of dust for mode 2 +'503626' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 220 ; + constituentType = 62001 ; + modeNumber = 2 ; + typeOfDistributionFunction = 8 ; + } + +#paramId: 503627 +#Mass median diameter of dust for mode 3 +'503627' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 220 ; + constituentType = 62001 ; + modeNumber = 3 ; + typeOfDistributionFunction = 8 ; + } + +#paramId: 503628 +#Smoke - high absorption (mass mixing ratio) +'503628' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62020 ; + } + +#paramId: 503629 +#Smoke - high absorption (mass density) +'503629' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62020 ; + } + +#paramId: 503630 +#Smoke - high absorption (specific number concentration) +'503630' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62020 ; + } + +#paramId: 503631 +#Smoke - low absorption (mass mixing ratio) +'503631' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62021 ; + } + +#paramId: 503632 +#Smoke - low absorption (mass density) +'503632' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62021 ; + } + +#paramId: 503633 +#Smoke - low absorption (specific number concentration) +'503633' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62021 ; + } + +#paramId: 503634 +#Sulphur dioxide (SO2) - volume mixing ratio +'503634' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 52 ; + constituentType = 8 ; + } + +#paramId: 503635 +#Sulphur dioxide (SO2) - mass density +'503635' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 8 ; + } + +#paramId: 503636 +#Hazel (corylus) pollen concentration +'503636' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 59 ; + constituentType = 62104 ; + } + +#paramId: 503637 +#Fraction of land occupied by hazel (corylus) +'503637' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503638 +#Number of hazel (corylus) pollen in the reservoir (previous timestep) +'503638' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 192 ; + constituentType = 62104 ; + } + +#paramId: 503639 +#Number of hazel (corylus) pollen released into the reservoir (new) +'503639' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 193 ; + constituentType = 62104 ; + } + +#paramId: 503640 +#State of the hazel (corylus) season (eq.zero before and after season, the higher, the more plants are flowering) +'503640' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 194 ; + constituentType = 62104 ; + } + +#paramId: 503641 +#Height correction for emission (decreasing emission with height) for hazel (corylus) +'503641' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 195 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503642 +#Sum of released hazel (corylus) pollen into the reservoir (daily sum) +'503642' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 11 ; + constituentType = 62104 ; + } + +#paramId: 503643 +#Precipitation reservoir (liquid water on the flowers, preventing them from flowering) of hazel (corylus) +'503643' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + constituentType = 62104 ; + } + +#paramId: 503644 +#Cumulated weighted 2m temperature sum of daily values for hazel (corylus) pollen +'503644' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 196 ; + constituentType = 62104 ; + } + +#paramId: 503645 +#Cumulated 2m temperature sum threshold for the start of hazel (corylus) pollen season (climatological) +'503645' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 197 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503646 +#Cumulated 2m temperature sum threshold for the end of hazel (corylus) pollen season (climatological) +'503646' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 198 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503647 +#Number of days since the start of hazel (corylus) pollen season (if present day is in the season: zero outside season) +'503647' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 199 ; + constituentType = 62104 ; + } + +#paramId: 503648 +#Length of hazel (corylus) pollen season +'503648' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 201 ; + constituentType = 62104 ; + } + +#paramId: 503649 +#Pollen number emission flux for hazel (corylus) +'503649' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 202 ; + constituentType = 62104 ; + } + +#paramId: 503650 +#Number of days since the start of hazel (corylus) pollen season (if present day is outside the season: length of current season) +'503650' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 200 ; + constituentType = 62104 ; + } + +#paramId: 503651 +#Hazel (corylus) pollen specific number concentration +'503651' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62104 ; + } + +#paramId: 503652 +#Emission tuning factor for birch (betula) pollen +'503652' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62101 ; + } + +#paramId: 503653 +#Emission tuning factor for alder (alnus) pollen +'503653' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62100 ; + } + +#paramId: 503654 +#Emission tuning factor for grasses (poaceae) pollen +'503654' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62300 ; + } + +#paramId: 503655 +#Emission tuning factor for ragweed (ambrosia) pollen +'503655' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62200 ; + } + +#paramId: 503656 +#Emission tuning factor for hazel (corylus) pollen +'503656' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62104 ; + } + +#paramId: 503657 +#Temperature in lowest model layer - time-filtered assimilation increment, weighted with cos(2pi loc.time/day) +'503657' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 208 ; + } + +#paramId: 503658 +#Height of new snow (without settling) +'503658' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 207 ; + } + +#paramId: 503659 +#Volumetric ice content of snow layer - multi level +'503659' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + constituentType = 63000 ; + } + +#paramId: 503660 +#Volumetric water content of snow layer - multi level +'503660' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + constituentType = 62002 ; + } + +#paramId: 503661 +#Volumetric air content of snow layer - multi level +'503661' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + constituentType = 63001 ; + } + +#paramId: 503662 +#Thickness of snow layer - multi level +'503662' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503663 +#Number of snow layer - multi level +'503663' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 206 ; + } + +#paramId: 503664 +#Snow temperature of layer (defined at layer top) - multi level +'503664' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503665 +#Building area fraction (proportion: 0=no building, 1=whole urban area) +'503665' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 0 ; + } + +#paramId: 503666 +#Street canyon aspect (height - width) ratio +'503666' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 1 ; + } + +#paramId: 503667 +#Height of building +'503667' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 2 ; + } + +#paramId: 503668 +#Urban material thermal albedo +'503668' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 3 ; + } + +#paramId: 503669 +#Urban material shortwave (solar) albedo +'503669' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 4 ; + } + +#paramId: 503670 +#Volumetric heat capacity of urban material (capacity x density) +'503670' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 5 ; + } + +#paramId: 503671 +#Heat conductivity of urban material +'503671' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 6 ; + } + +#paramId: 503672 +#Lightning Potential Index from convection scheme +'503672' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 5 ; + } + +#paramId: 503673 +#Maximum Lightning Potential Index from convection scheme +'503673' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 2 ; + } + +#paramId: 503674 +#Wind speed in lowest model layer - time-filtered assimilation increment +'503674' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503675 +#Eddy Dissipation Parameter +'503675' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 30 ; + } + +#paramId: 503676 +#Icing Severity (0=None, 1=Trace, 2=Light, 3=Moderate, 4=Severe) +'503676' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 37 ; + } + +#paramId: 503677 +#U-component surface Stokes drift +'503677' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + } + +#paramId: 503678 +#V-component surface Stokes drift +'503678' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + } + +#paramId: 503679 +#Peak wave direction +'503679' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 46 ; + } + +#paramId: 503680 +#Significant wave height of first swell partition +'503680' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + } + +#paramId: 503681 +#Significant wave height of second swell partition +'503681' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + } + +#paramId: 503682 +#Significant wave height of third swell partition +'503682' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + } + +#paramId: 503683 +#Mean wave period of first swell partition +'503683' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + } + +#paramId: 503684 +#Mean wave period of second swell partition +'503684' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + } + +#paramId: 503685 +#Mean wave period of third swell partition +'503685' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + } + +#paramId: 503686 +#Mean wave direction of first swell partition +'503686' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + } + +#paramId: 503687 +#Mean wave direction of second swell partition +'503687' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + } + +#paramId: 503688 +#Mean wave direction of third swell partition +'503688' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + } + +#paramId: 503689 +#Diagnostic total mass concentration of mineral dust aerosol +'503689' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62001 ; + } + +#paramId: 503690 +#Diagnostic total mass concentration of sea salt aerosol +'503690' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62008 ; + } + +#paramId: 503691 +#Diagnostic total mass concentration of black carbon aerosol (soot) +'503691' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62009 ; + } + +#paramId: 503692 +#Diagnostic black carbon aerosol (soot) optical depth +'503692' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + aerosolType = 62009 ; + } + +#paramId: 503693 +#Total atmosphere optical depth due to mineral dust aerosol +'503693' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62001 ; + } + +#paramId: 503694 +#Total atmosphere optical depth due to sea salt aerosol +'503694' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62008 ; + } + +#paramId: 503695 +#Total atmosphere optical depth due to volcanic ash aerosol +'503695' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62025 ; + } + +#paramId: 503696 +#Total atmosphere optical depth due to black carbon aerosol (soot) +'503696' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62009 ; + } + +#paramId: 503697 +#Modal prognostic mass mixing ratio of mineral dust aerosol (all modes) +'503697' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62001 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503698 +#Modal prognostic mass mixing ratio of sea salt aerosol (all modes) +'503698' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62008 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503699 +#Modal prognostic mass mixing ratio of black carbon aerosol (soot) (all modes) +'503699' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62009 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503700 +#Modal prognostic specific number concentration of black carbon aerosol (soot) (all modes) +'503700' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62009 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503701 +#Modal prognostic mass mixing ratio of volcanic ash aerosol (all modes) +'503701' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62025 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503702 +#Modal prognostic specific number concentration of total aerosol (all modes) +'503702' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62000 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503703 +#Base reflectivity - low layer maximum +'503703' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 4 ; + typeOfSecondFixedSurface = 103 ; + scaleFactorOfSecondFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 500 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2500 ; + } + +#paramId: 503704 +#Potential flight distance PFD (gliding) +'503704' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 240 ; + } + +#paramId: 503705 +#Lifting ratio VST (gliding) +'503705' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 241 ; + } + +#paramId: 503706 +#Sea water density +'503706' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 16 ; + } + +#paramId: 503707 +#Sea water potential temperature +'503707' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 18 ; + } + +#paramId: 503708 +#Sea water potential density +'503708' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 19 ; + } + +#paramId: 503709 +#Sea water practical salinity +'503709' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 21 ; + } + +#paramId: 503710 +#U-component of mean wind (vertical mean over specified layer) +'503710' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 212 ; + } + +#paramId: 503711 +#V-component of mean wind (vertical mean over specified layer) +'503711' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 213 ; + } + +#paramId: 503712 +#Extreme weather index of snow amount, grid-scale plus convective +'503712' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 240 ; + typeOfStatisticalProcessing = 1 ; + } + +#paramId: 503713 +#Extreme weather index of maximum Wind 10m +'503713' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 214 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + } + +#paramId: 503714 +#Extreme weather index of total precipitation (Accumulation) +'503714' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 239 ; + typeOfStatisticalProcessing = 1 ; + } + +#paramId: 503715 +#Cloud cover for use in radiative transfer (modified where large hydrometeors are present) +'503715' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 215 ; + } + +#paramId: 503716 +#Snow temperature at node (i.e. at snow layer interface or boundary) - multi level +'503716' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 208 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503717 +#Volumetric ice content of snow layer (for use in tile approach) - multi level +'503717' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 209 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503718 +#Volumetric water content of snow layer (for use in tile approach) - multi level +'503718' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503719 +#Volumetric air content of snow layer (for use in tile approach) - multi level +'503719' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 211 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503720 +#Probability for freezing precipitation/wet snow +'503720' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 242 ; + } + +#paramId: 503721 +#Probability for freezing precipitation with wind +'503721' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 243 ; + } + diff --git a/definitions/grib2/localConcepts/edzw/shortName.def b/definitions/grib2/localConcepts/edzw/shortName.def index a341a3566..37150d10c 100644 --- a/definitions/grib2/localConcepts/edzw/shortName.def +++ b/definitions/grib2/localConcepts/edzw/shortName.def @@ -1,4 +1,4 @@ -# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE, do not edit! 2020-11-05 10:29 +# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE, do not edit! 2023-08-17 13:41 #paramId: 500000 #Pressure (S) (not reduced) 'PS' = { @@ -3471,118 +3471,6 @@ parameterNumber = 8 ; } -#paramId: 500779 -#Effective radius of cloud water -'RECLOUD' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 129 ; - } - -#paramId: 500780 -#Effective radius of rain -'RERAIN' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 130 ; - } - -#paramId: 500781 -#Effective radius of cloud ice -'REICE' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 131 ; - } - -#paramId: 500782 -#Effective radius of snow -'RESNOW' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 132 ; - } - -#paramId: 500783 -#Effective radius of graupel -'REGRAUPEL' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 133 ; - } - -#paramId: 500784 -#Effective radius of hail -'REHAIL' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 134 ; - } - -#paramId: 500785 -#Effective radius of subgrid liquid clouds -'RECLOUD_SGS' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 135 ; - } - -#paramId: 500786 -#Effective radius of subgrid ice clouds -'REICE_SGS' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 136 ; - } - -#paramId: 500787 -#Effective aspect ratio of rain -'ARRAIN' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 137 ; - } - -#paramId: 500788 -#Effective aspect ratio of cloud ice -'ARICE' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 138 ; - } - -#paramId: 500789 -#Effective aspect ratio of snow -'ARSNOW' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 139 ; - } - -#paramId: 500790 -#Effective aspect ratio of graupel -'ARGRAUPEL' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 140 ; - } - -#paramId: 500791 -#Effective aspect ratio of hail -'ARHAIL' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 141 ; - } - -#paramId: 500792 -#Effective aspect ratio of subgrid ice clouds -'ARICE_SGS' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 142 ; - } - #paramId: 500905 #Specific Humidity (S) 'QV_S' = { @@ -8267,6 +8155,815 @@ typeOfFirstFixedSurface = 1 ; } +#paramId: 503563 +#Temperature tendency perturbation due to stochastic model of model error +'DT_SMME' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfGeneratingProcess = 221 ; + } + +#paramId: 503564 +#Zonal wind tendency perturbation due to stochastic model of model error +'DU_SMME' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfGeneratingProcess = 221 ; + } + +#paramId: 503565 +#Meridional wind tendency perturbation due to stochastic model of model error +'DV_SMME' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfGeneratingProcess = 221 ; + } + +#paramId: 503566 +#Effective radius of cloud water +'RECLOUD' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 129 ; + } + +#paramId: 503567 +#Effective radius of rain +'RERAIN' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 130 ; + } + +#paramId: 503568 +#Effective radius of cloud ice +'REICE' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 131 ; + } + +#paramId: 503569 +#Effective radius of snow +'RESNOW' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 132 ; + } + +#paramId: 503570 +#Effective radius of graupel +'REGRAUPEL' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 133 ; + } + +#paramId: 503571 +#Effective radius of hail +'REHAIL' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 134 ; + } + +#paramId: 503572 +#Effective radius of subgrid liquid clouds +'RECLOUD_SGS' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 135 ; + } + +#paramId: 503573 +#Effective radius of subgrid ice clouds +'REICE_SGS' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 136 ; + } + +#paramId: 503574 +#Effective aspect ratio of rain +'ARRAIN' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 137 ; + } + +#paramId: 503575 +#Effective aspect ratio of cloud ice +'ARICE' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 138 ; + } + +#paramId: 503576 +#Effective aspect ratio of snow +'ARSNOW' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 139 ; + } + +#paramId: 503577 +#Effective aspect ratio of graupel +'ARGRAUPEL' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 140 ; + } + +#paramId: 503578 +#Effective aspect ratio of hail +'ARHAIL' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 141 ; + } + +#paramId: 503579 +#Effective aspect ratio of subgrid ice clouds +'ARICE_SGS' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 142 ; + } + +#paramId: 503580 +#Relative Humidity in lowest model layer - time-filtered assimilation increment +'RELHUM_LML_FILTINC' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503581 +#Temperature in lowest model layer - time-filtered assimilation increment +'T_LML_FILTINC' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503583 +#Wind speed (time average) +'SP_AV' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } + +#paramId: 503584 +#10m wind speed (time average) +'SP_10M_AV' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + } + +#paramId: 503587 +#Total cloud cover (time average) +'CLCT_AV' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } + +#paramId: 503593 +#Clear-sky net solar radiation flux (at the surface) +'SOBS_RAD_CS' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503594 +#Clear-sky net thermal radiation flux (at the surface) +'THBS_RAD_CS' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503595 +#Clear-sky net solar radiation flux (on model top) +'SOBT_RAD_CS' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503596 +#Clear-sky net thermal radiation flux (on model top) +'THBT_RAD_CS' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503597 +#Clear-sky net solar radiation flux (at the surface) - time average +'ASOB_S_CS' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503598 +#Clear-sky net thermal radiation flux (at the surface) - time average +'ATHB_S_CS' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503599 +#Clear-sky net solar radiation flux (on model top) - time average +'ASOB_T_CS' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503600 +#Clear-sky net thermal radiation flux (on model top) - time average +'ATHB_T_CS' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503601 +#TOA downward solar radiation (time average) +'ASOD_T' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503602 +#Volumetric saturation of soil moisture +'W_SO_SAT' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfSecondFixedSurface = 106 ; + typeOfFirstFixedSurface = 106 ; + } + +#paramId: 503616 +#Pressure in lowest model layer - time-filtered assimilation increment +'P_LML_FILTINC' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503617 +#Maximum amplitude of updraft helicity in tropospheric column of low height +'UH_MAX_LOW' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 102 ; + scaleFactorOfSecondFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 3000 ; + typeOfFirstFixedSurface = 102 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 0 ; + } + +#paramId: 503618 +#Maximum amplitude of updraft helicity in tropospheric column of medium height +'UH_MAX_MED' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 102 ; + scaleFactorOfSecondFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 5000 ; + typeOfFirstFixedSurface = 102 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2000 ; + } + +#paramId: 503621 +#Large-scale precipitation rate +'PR_GSP' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + } + +#paramId: 503624 +#Total lightning flash density - maximum +'LFD_TOT_MX' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 8 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503628 +#Smoke - high absorption (mass mixing ratio) +'SMOKE_HA' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62020 ; + } + +#paramId: 503629 +#Smoke - high absorption (mass density) +'SMOKE_DEN_HA' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62020 ; + } + +#paramId: 503630 +#Smoke - high absorption (specific number concentration) +'SMOKE0_HA' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62020 ; + } + +#paramId: 503631 +#Smoke - low absorption (mass mixing ratio) +'SMOKE_LA' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62021 ; + } + +#paramId: 503632 +#Smoke - low absorption (mass density) +'SMOKE_DEN_LA' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62021 ; + } + +#paramId: 503633 +#Smoke - low absorption (specific number concentration) +'SMOKE0_LA' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62021 ; + } + +#paramId: 503634 +#Sulphur dioxide (SO2) - volume mixing ratio +'SO2' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 52 ; + constituentType = 8 ; + } + +#paramId: 503635 +#Sulphur dioxide (SO2) - mass density +'SO2_DEN' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 8 ; + } + +#paramId: 503636 +#Hazel (corylus) pollen concentration +'CORY' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 59 ; + constituentType = 62104 ; + } + +#paramId: 503637 +#Fraction of land occupied by hazel (corylus) +'CORYfr' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503643 +#Precipitation reservoir (liquid water on the flowers, preventing them from flowering) of hazel (corylus) +'CORYrprec' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + constituentType = 62104 ; + } + +#paramId: 503651 +#Hazel (corylus) pollen specific number concentration +'CORYsnc' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62104 ; + } + +#paramId: 503657 +#Temperature in lowest model layer - time-filtered assimilation increment, weighted with cos(2pi loc.time/day) +'T_LML_COSWGT_FILTINC' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 208 ; + } + +#paramId: 503662 +#Thickness of snow layer - multi level +'DZ_SNOW_M' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503664 +#Snow temperature of layer (defined at layer top) - multi level +'TofSNW_LTOP_M' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503672 +#Lightning Potential Index from convection scheme +'LPI_CON' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 5 ; + } + +#paramId: 503673 +#Maximum Lightning Potential Index from convection scheme +'LPI_CON_MAX' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 2 ; + } + +#paramId: 503674 +#Wind speed in lowest model layer - time-filtered assimilation increment +'SP_LML_FILTINC' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503675 +#Eddy Dissipation Parameter +'EDP' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 30 ; + } + +#paramId: 503676 +#Icing Severity (0=None, 1=Trace, 2=Light, 3=Moderate, 4=Severe) +'ICE_SEV' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 37 ; + } + +#paramId: 503677 +#U-component surface Stokes drift +'UST' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + } + +#paramId: 503678 +#V-component surface Stokes drift +'VST' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + } + +#paramId: 503679 +#Peak wave direction +'PWD' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 46 ; + } + +#paramId: 503680 +#Significant wave height of first swell partition +'SWH1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + } + +#paramId: 503681 +#Significant wave height of second swell partition +'SWH2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + } + +#paramId: 503682 +#Significant wave height of third swell partition +'SWH3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + } + +#paramId: 503683 +#Mean wave period of first swell partition +'MWP1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + } + +#paramId: 503684 +#Mean wave period of second swell partition +'MWP2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + } + +#paramId: 503685 +#Mean wave period of third swell partition +'MWP3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + } + +#paramId: 503686 +#Mean wave direction of first swell partition +'MWD1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + } + +#paramId: 503687 +#Mean wave direction of second swell partition +'MWD2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + } + +#paramId: 503688 +#Mean wave direction of third swell partition +'MWD3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + } + +#paramId: 503689 +#Diagnostic total mass concentration of mineral dust aerosol +'DUST_TOTAL_MC' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62001 ; + } + +#paramId: 503690 +#Diagnostic total mass concentration of sea salt aerosol +'SEAS_TOTAL_MC' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62008 ; + } + +#paramId: 503691 +#Diagnostic total mass concentration of black carbon aerosol (soot) +'BCARB_TOTAL_MC' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62009 ; + } + +#paramId: 503692 +#Diagnostic black carbon aerosol (soot) optical depth +'AOD_BCARB' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + aerosolType = 62009 ; + } + +#paramId: 503693 +#Total atmosphere optical depth due to mineral dust aerosol +'TAOD_DUST' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62001 ; + } + +#paramId: 503694 +#Total atmosphere optical depth due to sea salt aerosol +'TAOD_SEAS' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62008 ; + } + +#paramId: 503695 +#Total atmosphere optical depth due to volcanic ash aerosol +'TAOD_ASH' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62025 ; + } + +#paramId: 503696 +#Total atmosphere optical depth due to black carbon aerosol (soot) +'TAOD_BCARB' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62009 ; + } + +#paramId: 503697 +#Modal prognostic mass mixing ratio of mineral dust aerosol (all modes) +'DUST' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62001 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503698 +#Modal prognostic mass mixing ratio of sea salt aerosol (all modes) +'SEAS' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62008 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503699 +#Modal prognostic mass mixing ratio of black carbon aerosol (soot) (all modes) +'BCARB' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62009 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503700 +#Modal prognostic specific number concentration of black carbon aerosol (soot) (all modes) +'BCARB0' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62009 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503701 +#Modal prognostic mass mixing ratio of volcanic ash aerosol (all modes) +'ASH' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62025 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503702 +#Modal prognostic specific number concentration of total aerosol (all modes) +'SNC_AERO' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62000 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503703 +#Base reflectivity - low layer maximum +'DBZLMX_LOW' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 4 ; + typeOfSecondFixedSurface = 103 ; + scaleFactorOfSecondFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 500 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2500 ; + } + +#paramId: 503706 +#Sea water density +'SWDEN' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 16 ; + } + +#paramId: 503707 +#Sea water potential temperature +'SWPT' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 18 ; + } + +#paramId: 503708 +#Sea water potential density +'SWPDEN' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 19 ; + } + +#paramId: 503709 +#Sea water practical salinity +'SWPSAL' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 21 ; + } + #paramId: 500092 #Solar radiation heating rate 'SOHR_RAD' = { @@ -11069,6 +11766,118 @@ parameterNumber = 128 ; } +#paramId: 500779 +#DUMMY_129 +'DUMMY_129' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 129 ; + } + +#paramId: 500780 +#DUMMY_130 +'DUMMY_130' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 130 ; + } + +#paramId: 500781 +#DUMMY_131 +'DUMMY_131' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 131 ; + } + +#paramId: 500782 +#DUMMY_132 +'DUMMY_132' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 132 ; + } + +#paramId: 500783 +#DUMMY_133 +'DUMMY_133' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 133 ; + } + +#paramId: 500784 +#DUMMY_134 +'DUMMY_134' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 134 ; + } + +#paramId: 500785 +#DUMMY_135 +'DUMMY_135' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 135 ; + } + +#paramId: 500786 +#DUMMY_136 +'DUMMY_136' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 136 ; + } + +#paramId: 500787 +#DUMMY_137 +'DUMMY_137' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 137 ; + } + +#paramId: 500788 +#DUMMY_138 +'DUMMY_138' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 138 ; + } + +#paramId: 500789 +#DUMMY_139 +'DUMMY_139' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 139 ; + } + +#paramId: 500790 +#DUMMY_140 +'DUMMY_140' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 140 ; + } + +#paramId: 500791 +#DUMMY_141 +'DUMMY_141' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 141 ; + } + +#paramId: 500792 +#DUMMY_142 +'DUMMY_142' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 142 ; + } + #paramId: 500793 #DUMMY_143 'DUMMY_143' = { @@ -13807,3 +14616,655 @@ parameterNumber = 211 ; } +#paramId: 503582 +#Frequency of winds in defined wind sector for defined time interval +'DD_10M_SECFREQ' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 11 ; + typeOfSecondFixedSurface = 233 ; + typeOfFirstFixedSurface = 233 ; + } + +#paramId: 503585 +#10m wind speed in wind sector (time average) +'SP_10M_SECAV' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + typeOfSecondFixedSurface = 233 ; + typeOfFirstFixedSurface = 233 ; + } + +#paramId: 503586 +#10m wind speed in wind sector (time maximum) +'SP_10M_SECMAX' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 233 ; + typeOfFirstFixedSurface = 233 ; + } + +#paramId: 503588 +#Downward direct short-wave radiation flux at surface on a plane normal to the sun (time average) +'ASWDIR_SN' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 198 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 206 ; + } + +#paramId: 503589 +#Downward direct short-wave radiation flux at surface on a plane normal to the sun without orographic shading (time average) +'ASWDIR_SNO' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 198 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 207 ; + } + +#paramId: 503590 +#Solar elevation angle +'SUN_EL' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 202 ; + } + +#paramId: 503591 +#Solar azimuth angle +'SUN_AZI' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 203 ; + } + +#paramId: 503592 +#Turbulence intensity (time maximum) +'TURB_INTENS_MAX' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 236 ; + typeOfStatisticalProcessing = 2 ; + } + +#paramId: 503603 +#Soil water mass flux at layer interfaces (sum of conductive and diffusive fluxes) +'WSOIL_FLX' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 106 ; + } + +#paramId: 503604 +#Ground water runoff rate, aquifer +'Q_ROFF' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + typeOfSecondFixedSurface = 106 ; + typeOfFirstFixedSurface = 106 ; + } + +#paramId: 503605 +#Water table depth +'WT_DEPTH' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 177 ; + } + +#paramId: 503606 +#Soil moisture saturation level +'W_SO_SL' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 177 ; + } + +#paramId: 503607 +#Slope of orography (using average of maximum gradient in different directions) +'S_ORO_MAX' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 198 ; + } + +#paramId: 503608 +#Total column zonal water flux +'TWATFLXU' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 236 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503609 +#Total column meridional water flux +'TWATFLXV' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 237 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503610 +#Total column zonal water flux - time average +'ATWATFLXU' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 236 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503611 +#Total column meridional water flux - time average +'ATWATFLXV' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 237 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503612 +#Number of active clouds per horizontal unit area +'NCL_PUA_ACT' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 210 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503613 +#Number of passive clouds per horizontal unit area +'NCL_PUA_PSV' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 211 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503614 +#Cloud base mass flux associated with active clouds +'CBMFLX_ACT' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503615 +#Cloud base mass flux associated with passive clouds +'CBMFLX_PSV' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503619 +#Single scan reflectivity - observation +'DBZSCAN_OBS' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 200 ; + typeOfGeneratingProcess = 8 ; + } + +#paramId: 503620 +#Single scan reflectivity - simulation +'DBZSCAN_SIM' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 198 ; + } + +#paramId: 503622 +#Lightning Potential Index from convection scheme, modified by convection index +'LPI_CON_CI' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 193 ; + } + +#paramId: 503623 +#Maximum Lightning Potential Index from convection scheme, modified by convection index +'LPI_CON_CI_MAX' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 2 ; + } + +#paramId: 503625 +#Mass median diameter of dust for mode 1 +'MMD_DUSTA' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 220 ; + constituentType = 62001 ; + modeNumber = 1 ; + typeOfDistributionFunction = 8 ; + } + +#paramId: 503626 +#Mass median diameter of dust for mode 2 +'MMD_DUSTB' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 220 ; + constituentType = 62001 ; + modeNumber = 2 ; + typeOfDistributionFunction = 8 ; + } + +#paramId: 503627 +#Mass median diameter of dust for mode 3 +'MMD_DUSTC' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 220 ; + constituentType = 62001 ; + modeNumber = 3 ; + typeOfDistributionFunction = 8 ; + } + +#paramId: 503638 +#Number of hazel (corylus) pollen in the reservoir (previous timestep) +'CORYreso' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 192 ; + constituentType = 62104 ; + } + +#paramId: 503639 +#Number of hazel (corylus) pollen released into the reservoir (new) +'CORYresn' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 193 ; + constituentType = 62104 ; + } + +#paramId: 503640 +#State of the hazel (corylus) season (eq.zero before and after season, the higher, the more plants are flowering) +'CORYsdes' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 194 ; + constituentType = 62104 ; + } + +#paramId: 503641 +#Height correction for emission (decreasing emission with height) for hazel (corylus) +'CORYhcem' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 195 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503642 +#Sum of released hazel (corylus) pollen into the reservoir (daily sum) +'CORYress' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 11 ; + constituentType = 62104 ; + } + +#paramId: 503644 +#Cumulated weighted 2m temperature sum of daily values for hazel (corylus) pollen +'CORYctsum' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 196 ; + constituentType = 62104 ; + } + +#paramId: 503645 +#Cumulated 2m temperature sum threshold for the start of hazel (corylus) pollen season (climatological) +'CORYtthrs' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 197 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503646 +#Cumulated 2m temperature sum threshold for the end of hazel (corylus) pollen season (climatological) +'CORYtthre' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 198 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503647 +#Number of days since the start of hazel (corylus) pollen season (if present day is in the season: zero outside season) +'CORYsaisn' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 199 ; + constituentType = 62104 ; + } + +#paramId: 503648 +#Length of hazel (corylus) pollen season +'CORYsaisl' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 201 ; + constituentType = 62104 ; + } + +#paramId: 503649 +#Pollen number emission flux for hazel (corylus) +'CORYfe' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 202 ; + constituentType = 62104 ; + } + +#paramId: 503650 +#Number of days since the start of hazel (corylus) pollen season (if present day is outside the season: length of current season) +'CORYsaisa' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 200 ; + constituentType = 62104 ; + } + +#paramId: 503652 +#Emission tuning factor for birch (betula) pollen +'BETUtune' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62101 ; + } + +#paramId: 503653 +#Emission tuning factor for alder (alnus) pollen +'ALNUtune' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62100 ; + } + +#paramId: 503654 +#Emission tuning factor for grasses (poaceae) pollen +'POACtune' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62300 ; + } + +#paramId: 503655 +#Emission tuning factor for ragweed (ambrosia) pollen +'AMBRtune' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62200 ; + } + +#paramId: 503656 +#Emission tuning factor for hazel (corylus) pollen +'CORYtune' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62104 ; + } + +#paramId: 503658 +#Height of new snow (without settling) +'H_NEWSNOW_M' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 207 ; + } + +#paramId: 503659 +#Volumetric ice content of snow layer - multi level +'ICEinSNW_VC_M' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + constituentType = 63000 ; + } + +#paramId: 503660 +#Volumetric water content of snow layer - multi level +'H2OinSNW_VC_M' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + constituentType = 62002 ; + } + +#paramId: 503661 +#Volumetric air content of snow layer - multi level +'AIRinSNW_VC_M' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + constituentType = 63001 ; + } + +#paramId: 503663 +#Number of snow layer - multi level +'N_SNOW_M' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 206 ; + } + +#paramId: 503665 +#Building area fraction (proportion: 0=no building, 1=whole urban area) +'URB_FR_BLD' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 0 ; + } + +#paramId: 503666 +#Street canyon aspect (height - width) ratio +'URB_H2W' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 1 ; + } + +#paramId: 503667 +#Height of building +'URB_H_BLD' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 2 ; + } + +#paramId: 503668 +#Urban material thermal albedo +'URB_ALB_TH' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 3 ; + } + +#paramId: 503669 +#Urban material shortwave (solar) albedo +'URB_ALB_SO' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 4 ; + } + +#paramId: 503670 +#Volumetric heat capacity of urban material (capacity x density) +'URB_HCAP' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 5 ; + } + +#paramId: 503671 +#Heat conductivity of urban material +'URB_HCON' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 6 ; + } + +#paramId: 503704 +#Potential flight distance PFD (gliding) +'POT_FLT_DIST' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 240 ; + } + +#paramId: 503705 +#Lifting ratio VST (gliding) +'LIFT_RATIO' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 241 ; + } + +#paramId: 503710 +#U-component of mean wind (vertical mean over specified layer) +'U_MEAN' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 212 ; + } + +#paramId: 503711 +#V-component of mean wind (vertical mean over specified layer) +'V_MEAN' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 213 ; + } + +#paramId: 503712 +#Extreme weather index of snow amount, grid-scale plus convective +'TOT_SNOW_EWI' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 240 ; + typeOfStatisticalProcessing = 1 ; + } + +#paramId: 503713 +#Extreme weather index of maximum Wind 10m +'VMAX_10M_EWI' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 214 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + } + +#paramId: 503714 +#Extreme weather index of total precipitation (Accumulation) +'TOT_PREC_EWI' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 239 ; + typeOfStatisticalProcessing = 1 ; + } + +#paramId: 503715 +#Cloud cover for use in radiative transfer (modified where large hydrometeors are present) +'CLC_RAD' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 215 ; + } + +#paramId: 503716 +#Snow temperature at node (i.e. at snow layer interface or boundary) - multi level +'TofSNW_NODE_M' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 208 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503717 +#Volumetric ice content of snow layer (for use in tile approach) - multi level +'ICEinSNW_VC_T_M' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 209 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503718 +#Volumetric water content of snow layer (for use in tile approach) - multi level +'H2OinSNW_VC_T_M' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503719 +#Volumetric air content of snow layer (for use in tile approach) - multi level +'AIRinSNW_VC_T_M' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 211 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503720 +#Probability for freezing precipitation/wet snow +'FP' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 242 ; + } + +#paramId: 503721 +#Probability for freezing precipitation with wind +'FPW' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 243 ; + } + diff --git a/definitions/grib2/localConcepts/edzw/units.def b/definitions/grib2/localConcepts/edzw/units.def index 54b9c9931..7f652d7df 100644 --- a/definitions/grib2/localConcepts/edzw/units.def +++ b/definitions/grib2/localConcepts/edzw/units.def @@ -1,4 +1,4 @@ -# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE, do not edit! 2020-11-05 10:29 +# Automatically generated by get_definitionsALL.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER@MIRAKEL.DWD.DE, do not edit! 2023-08-17 13:41 #paramId: 500000 #Pressure (S) (not reduced) 'Pa' = { @@ -3471,118 +3471,6 @@ parameterNumber = 8 ; } -#paramId: 500779 -#Effective radius of cloud water -'m' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 129 ; - } - -#paramId: 500780 -#Effective radius of rain -'m' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 130 ; - } - -#paramId: 500781 -#Effective radius of cloud ice -'m' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 131 ; - } - -#paramId: 500782 -#Effective radius of snow -'m' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 132 ; - } - -#paramId: 500783 -#Effective radius of graupel -'m' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 133 ; - } - -#paramId: 500784 -#Effective radius of hail -'m' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 134 ; - } - -#paramId: 500785 -#Effective radius of subgrid liquid clouds -'m' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 135 ; - } - -#paramId: 500786 -#Effective radius of subgrid ice clouds -'m' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 136 ; - } - -#paramId: 500787 -#Effective aspect ratio of rain -'' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 137 ; - } - -#paramId: 500788 -#Effective aspect ratio of cloud ice -'' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 138 ; - } - -#paramId: 500789 -#Effective aspect ratio of snow -'' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 139 ; - } - -#paramId: 500790 -#Effective aspect ratio of graupel -'' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 140 ; - } - -#paramId: 500791 -#Effective aspect ratio of hail -'' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 141 ; - } - -#paramId: 500792 -#Effective aspect ratio of subgrid ice clouds -'' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 142 ; - } - #paramId: 500905 #Specific Humidity (S) 'kg kg-1' = { @@ -8267,6 +8155,815 @@ typeOfFirstFixedSurface = 1 ; } +#paramId: 503563 +#Temperature tendency perturbation due to stochastic model of model error +'K s-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfGeneratingProcess = 221 ; + } + +#paramId: 503564 +#Zonal wind tendency perturbation due to stochastic model of model error +'m s-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 39 ; + typeOfGeneratingProcess = 221 ; + } + +#paramId: 503565 +#Meridional wind tendency perturbation due to stochastic model of model error +'m s-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 40 ; + typeOfGeneratingProcess = 221 ; + } + +#paramId: 503566 +#Effective radius of cloud water +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 129 ; + } + +#paramId: 503567 +#Effective radius of rain +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 130 ; + } + +#paramId: 503568 +#Effective radius of cloud ice +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 131 ; + } + +#paramId: 503569 +#Effective radius of snow +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 132 ; + } + +#paramId: 503570 +#Effective radius of graupel +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 133 ; + } + +#paramId: 503571 +#Effective radius of hail +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 134 ; + } + +#paramId: 503572 +#Effective radius of subgrid liquid clouds +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 135 ; + } + +#paramId: 503573 +#Effective radius of subgrid ice clouds +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 136 ; + } + +#paramId: 503574 +#Effective aspect ratio of rain +'' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 137 ; + } + +#paramId: 503575 +#Effective aspect ratio of cloud ice +'' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 138 ; + } + +#paramId: 503576 +#Effective aspect ratio of snow +'' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 139 ; + } + +#paramId: 503577 +#Effective aspect ratio of graupel +'' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 140 ; + } + +#paramId: 503578 +#Effective aspect ratio of hail +'' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 141 ; + } + +#paramId: 503579 +#Effective aspect ratio of subgrid ice clouds +'' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 142 ; + } + +#paramId: 503580 +#Relative Humidity in lowest model layer - time-filtered assimilation increment +'Proportion' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503581 +#Temperature in lowest model layer - time-filtered assimilation increment +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503583 +#Wind speed (time average) +'m s-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } + +#paramId: 503584 +#10m wind speed (time average) +'m s-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + } + +#paramId: 503587 +#Total cloud cover (time average) +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } + +#paramId: 503593 +#Clear-sky net solar radiation flux (at the surface) +'W m-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503594 +#Clear-sky net thermal radiation flux (at the surface) +'W m-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503595 +#Clear-sky net solar radiation flux (on model top) +'W m-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503596 +#Clear-sky net thermal radiation flux (on model top) +'W m-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503597 +#Clear-sky net solar radiation flux (at the surface) - time average +'W m-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503598 +#Clear-sky net thermal radiation flux (at the surface) - time average +'W m-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503599 +#Clear-sky net solar radiation flux (on model top) - time average +'W m-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503600 +#Clear-sky net thermal radiation flux (on model top) - time average +'W m-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503601 +#TOA downward solar radiation (time average) +'W m-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 8 ; + } + +#paramId: 503602 +#Volumetric saturation of soil moisture +'m3 m-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfSecondFixedSurface = 106 ; + typeOfFirstFixedSurface = 106 ; + } + +#paramId: 503616 +#Pressure in lowest model layer - time-filtered assimilation increment +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503617 +#Maximum amplitude of updraft helicity in tropospheric column of low height +'m2 s-2' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 102 ; + scaleFactorOfSecondFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 3000 ; + typeOfFirstFixedSurface = 102 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 0 ; + } + +#paramId: 503618 +#Maximum amplitude of updraft helicity in tropospheric column of medium height +'m2 s-2' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 102 ; + scaleFactorOfSecondFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 5000 ; + typeOfFirstFixedSurface = 102 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2000 ; + } + +#paramId: 503621 +#Large-scale precipitation rate +'kg m-2 s-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + } + +#paramId: 503624 +#Total lightning flash density - maximum +'km-2 day-1' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 8 ; + typeOfFirstFixedSurface = 1 ; + } + +#paramId: 503628 +#Smoke - high absorption (mass mixing ratio) +'kg kg-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62020 ; + } + +#paramId: 503629 +#Smoke - high absorption (mass density) +'kg m-3' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62020 ; + } + +#paramId: 503630 +#Smoke - high absorption (specific number concentration) +'kg-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62020 ; + } + +#paramId: 503631 +#Smoke - low absorption (mass mixing ratio) +'kg kg-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62021 ; + } + +#paramId: 503632 +#Smoke - low absorption (mass density) +'kg m-3' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62021 ; + } + +#paramId: 503633 +#Smoke - low absorption (specific number concentration) +'kg-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62021 ; + } + +#paramId: 503634 +#Sulphur dioxide (SO2) - volume mixing ratio +'mol mol-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 52 ; + constituentType = 8 ; + } + +#paramId: 503635 +#Sulphur dioxide (SO2) - mass density +'kg m-3' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 8 ; + } + +#paramId: 503636 +#Hazel (corylus) pollen concentration +'m-3' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 59 ; + constituentType = 62104 ; + } + +#paramId: 503637 +#Fraction of land occupied by hazel (corylus) +'%' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503643 +#Precipitation reservoir (liquid water on the flowers, preventing them from flowering) of hazel (corylus) +'kg m-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + constituentType = 62104 ; + } + +#paramId: 503651 +#Hazel (corylus) pollen specific number concentration +'kg-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62104 ; + } + +#paramId: 503657 +#Temperature in lowest model layer - time-filtered assimilation increment, weighted with cos(2pi loc.time/day) +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 208 ; + } + +#paramId: 503662 +#Thickness of snow layer - multi level +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503664 +#Snow temperature of layer (defined at layer top) - multi level +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503672 +#Lightning Potential Index from convection scheme +'J kg-1' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 5 ; + } + +#paramId: 503673 +#Maximum Lightning Potential Index from convection scheme +'J kg-1' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 2 ; + } + +#paramId: 503674 +#Wind speed in lowest model layer - time-filtered assimilation increment +'m s-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 207 ; + } + +#paramId: 503675 +#Eddy Dissipation Parameter +'m2/3 s-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 30 ; + } + +#paramId: 503676 +#Icing Severity (0=None, 1=Trace, 2=Light, 3=Moderate, 4=Severe) +'Code Table 4.228' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 37 ; + } + +#paramId: 503677 +#U-component surface Stokes drift +'m s-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + } + +#paramId: 503678 +#V-component surface Stokes drift +'m s-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + } + +#paramId: 503679 +#Peak wave direction +'degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 46 ; + } + +#paramId: 503680 +#Significant wave height of first swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 47 ; + } + +#paramId: 503681 +#Significant wave height of second swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 48 ; + } + +#paramId: 503682 +#Significant wave height of third swell partition +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 49 ; + } + +#paramId: 503683 +#Mean wave period of first swell partition +'s ' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 50 ; + } + +#paramId: 503684 +#Mean wave period of second swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 51 ; + } + +#paramId: 503685 +#Mean wave period of third swell partition +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 52 ; + } + +#paramId: 503686 +#Mean wave direction of first swell partition +'degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + } + +#paramId: 503687 +#Mean wave direction of second swell partition +'degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + } + +#paramId: 503688 +#Mean wave direction of third swell partition +'degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + } + +#paramId: 503689 +#Diagnostic total mass concentration of mineral dust aerosol +'kg m-3' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62001 ; + } + +#paramId: 503690 +#Diagnostic total mass concentration of sea salt aerosol +'kg m-3' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62008 ; + } + +#paramId: 503691 +#Diagnostic total mass concentration of black carbon aerosol (soot) +'kg m-3' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 0 ; + constituentType = 62009 ; + } + +#paramId: 503692 +#Diagnostic black carbon aerosol (soot) optical depth +'Numeric' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + aerosolType = 62009 ; + } + +#paramId: 503693 +#Total atmosphere optical depth due to mineral dust aerosol +'Numeric' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62001 ; + } + +#paramId: 503694 +#Total atmosphere optical depth due to sea salt aerosol +'Numeric' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62008 ; + } + +#paramId: 503695 +#Total atmosphere optical depth due to volcanic ash aerosol +'Numeric' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62025 ; + } + +#paramId: 503696 +#Total atmosphere optical depth due to black carbon aerosol (soot) +'Numeric' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 102 ; + typeOfFirstFixedSurface = 10 ; + aerosolType = 62009 ; + } + +#paramId: 503697 +#Modal prognostic mass mixing ratio of mineral dust aerosol (all modes) +'kg kg-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62001 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503698 +#Modal prognostic mass mixing ratio of sea salt aerosol (all modes) +'kg kg-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62008 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503699 +#Modal prognostic mass mixing ratio of black carbon aerosol (soot) (all modes) +'kg kg-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62009 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503700 +#Modal prognostic specific number concentration of black carbon aerosol (soot) (all modes) +'kg-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62009 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503701 +#Modal prognostic mass mixing ratio of volcanic ash aerosol (all modes) +'kg kg-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 62025 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503702 +#Modal prognostic specific number concentration of total aerosol (all modes) +'kg-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 60 ; + constituentType = 62000 ; + typeOfDistributionFunction = 7 ; + } + +#paramId: 503703 +#Base reflectivity - low layer maximum +'dBZ' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 4 ; + typeOfSecondFixedSurface = 103 ; + scaleFactorOfSecondFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 500 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2500 ; + } + +#paramId: 503706 +#Sea water density +'kg m-3' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 16 ; + } + +#paramId: 503707 +#Sea water potential temperature +'K' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 18 ; + } + +#paramId: 503708 +#Sea water potential density +'kg m-3' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 19 ; + } + +#paramId: 503709 +#Sea water practical salinity +'Numeric' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 21 ; + } + #paramId: 500092 #Solar radiation heating rate 'K s-1' = { @@ -11069,6 +11766,118 @@ parameterNumber = 128 ; } +#paramId: 500779 +#DUMMY_129 +'' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 129 ; + } + +#paramId: 500780 +#DUMMY_130 +'' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 130 ; + } + +#paramId: 500781 +#DUMMY_131 +'' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 131 ; + } + +#paramId: 500782 +#DUMMY_132 +'' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 132 ; + } + +#paramId: 500783 +#DUMMY_133 +'' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 133 ; + } + +#paramId: 500784 +#DUMMY_134 +'' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 134 ; + } + +#paramId: 500785 +#DUMMY_135 +'' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 135 ; + } + +#paramId: 500786 +#DUMMY_136 +'' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 136 ; + } + +#paramId: 500787 +#DUMMY_137 +'' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 137 ; + } + +#paramId: 500788 +#DUMMY_138 +'' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 138 ; + } + +#paramId: 500789 +#DUMMY_139 +'' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 139 ; + } + +#paramId: 500790 +#DUMMY_140 +'' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 140 ; + } + +#paramId: 500791 +#DUMMY_141 +'' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 141 ; + } + +#paramId: 500792 +#DUMMY_142 +'' = { + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 142 ; + } + #paramId: 500793 #DUMMY_143 '' = { @@ -13807,3 +14616,655 @@ parameterNumber = 211 ; } +#paramId: 503582 +#Frequency of winds in defined wind sector for defined time interval +'Numeric' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 11 ; + typeOfSecondFixedSurface = 233 ; + typeOfFirstFixedSurface = 233 ; + } + +#paramId: 503585 +#10m wind speed in wind sector (time average) +'m s-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + typeOfSecondFixedSurface = 233 ; + typeOfFirstFixedSurface = 233 ; + } + +#paramId: 503586 +#10m wind speed in wind sector (time maximum) +'m s-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 2 ; + typeOfSecondFixedSurface = 233 ; + typeOfFirstFixedSurface = 233 ; + } + +#paramId: 503588 +#Downward direct short-wave radiation flux at surface on a plane normal to the sun (time average) +'W m-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 198 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 206 ; + } + +#paramId: 503589 +#Downward direct short-wave radiation flux at surface on a plane normal to the sun without orographic shading (time average) +'W m-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 198 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 207 ; + } + +#paramId: 503590 +#Solar elevation angle +'Degree' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 202 ; + } + +#paramId: 503591 +#Solar azimuth angle +'Degree' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 203 ; + } + +#paramId: 503592 +#Turbulence intensity (time maximum) +'Numeric' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 236 ; + typeOfStatisticalProcessing = 2 ; + } + +#paramId: 503603 +#Soil water mass flux at layer interfaces (sum of conductive and diffusive fluxes) +'kg m-2 s-1' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 106 ; + } + +#paramId: 503604 +#Ground water runoff rate, aquifer +'kg m-3 s-1' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + typeOfSecondFixedSurface = 106 ; + typeOfFirstFixedSurface = 106 ; + } + +#paramId: 503605 +#Water table depth +'m' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 177 ; + } + +#paramId: 503606 +#Soil moisture saturation level +'-' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 177 ; + } + +#paramId: 503607 +#Slope of orography (using average of maximum gradient in different directions) +'Numeric' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 198 ; + } + +#paramId: 503608 +#Total column zonal water flux +'kg m-1 s-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 236 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503609 +#Total column meridional water flux +'kg m-1 s-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 237 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503610 +#Total column zonal water flux - time average +'kg m-1 s-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 236 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503611 +#Total column meridional water flux - time average +'kg m-1 s-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 237 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 10 ; + } + +#paramId: 503612 +#Number of active clouds per horizontal unit area +'m-2' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 210 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503613 +#Number of passive clouds per horizontal unit area +'m-2' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 211 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503614 +#Cloud base mass flux associated with active clouds +'kg m-2 s-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503615 +#Cloud base mass flux associated with passive clouds +'kg m-2 s-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 2 ; + } + +#paramId: 503619 +#Single scan reflectivity - observation +'dB' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 200 ; + typeOfGeneratingProcess = 8 ; + } + +#paramId: 503620 +#Single scan reflectivity - simulation +'dB' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 198 ; + } + +#paramId: 503622 +#Lightning Potential Index from convection scheme, modified by convection index +'J kg-1' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 193 ; + } + +#paramId: 503623 +#Maximum Lightning Potential Index from convection scheme, modified by convection index +'J kg-1' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 2 ; + } + +#paramId: 503625 +#Mass median diameter of dust for mode 1 +'m' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 220 ; + constituentType = 62001 ; + modeNumber = 1 ; + typeOfDistributionFunction = 8 ; + } + +#paramId: 503626 +#Mass median diameter of dust for mode 2 +'m' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 220 ; + constituentType = 62001 ; + modeNumber = 2 ; + typeOfDistributionFunction = 8 ; + } + +#paramId: 503627 +#Mass median diameter of dust for mode 3 +'m' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 220 ; + constituentType = 62001 ; + modeNumber = 3 ; + typeOfDistributionFunction = 8 ; + } + +#paramId: 503638 +#Number of hazel (corylus) pollen in the reservoir (previous timestep) +'m-2' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 192 ; + constituentType = 62104 ; + } + +#paramId: 503639 +#Number of hazel (corylus) pollen released into the reservoir (new) +'m-2' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 193 ; + constituentType = 62104 ; + } + +#paramId: 503640 +#State of the hazel (corylus) season (eq.zero before and after season, the higher, the more plants are flowering) +'0-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 194 ; + constituentType = 62104 ; + } + +#paramId: 503641 +#Height correction for emission (decreasing emission with height) for hazel (corylus) +'0-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 195 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503642 +#Sum of released hazel (corylus) pollen into the reservoir (daily sum) +'m-2' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 11 ; + constituentType = 62104 ; + } + +#paramId: 503644 +#Cumulated weighted 2m temperature sum of daily values for hazel (corylus) pollen +'deg C' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 196 ; + constituentType = 62104 ; + } + +#paramId: 503645 +#Cumulated 2m temperature sum threshold for the start of hazel (corylus) pollen season (climatological) +'deg C' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 197 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503646 +#Cumulated 2m temperature sum threshold for the end of hazel (corylus) pollen season (climatological) +'deg C' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 198 ; + typeOfGeneratingProcess = 9 ; + constituentType = 62104 ; + } + +#paramId: 503647 +#Number of days since the start of hazel (corylus) pollen season (if present day is in the season: zero outside season) +'d' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 199 ; + constituentType = 62104 ; + } + +#paramId: 503648 +#Length of hazel (corylus) pollen season +'d' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 201 ; + constituentType = 62104 ; + } + +#paramId: 503649 +#Pollen number emission flux for hazel (corylus) +'m-2 s-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 202 ; + constituentType = 62104 ; + } + +#paramId: 503650 +#Number of days since the start of hazel (corylus) pollen season (if present day is outside the season: length of current season) +'d' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 200 ; + constituentType = 62104 ; + } + +#paramId: 503652 +#Emission tuning factor for birch (betula) pollen +'Numeric' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62101 ; + } + +#paramId: 503653 +#Emission tuning factor for alder (alnus) pollen +'Numeric' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62100 ; + } + +#paramId: 503654 +#Emission tuning factor for grasses (poaceae) pollen +'Numeric' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62300 ; + } + +#paramId: 503655 +#Emission tuning factor for ragweed (ambrosia) pollen +'Numeric' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62200 ; + } + +#paramId: 503656 +#Emission tuning factor for hazel (corylus) pollen +'Numeric' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 211 ; + constituentType = 62104 ; + } + +#paramId: 503658 +#Height of new snow (without settling) +'m' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 207 ; + } + +#paramId: 503659 +#Volumetric ice content of snow layer - multi level +'m3 m-3' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + constituentType = 63000 ; + } + +#paramId: 503660 +#Volumetric water content of snow layer - multi level +'m3 m-3' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + constituentType = 62002 ; + } + +#paramId: 503661 +#Volumetric air content of snow layer - multi level +'m3 m-3' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + constituentType = 63001 ; + } + +#paramId: 503663 +#Number of snow layer - multi level +'Numeric' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 206 ; + } + +#paramId: 503665 +#Building area fraction (proportion: 0=no building, 1=whole urban area) +'Proportion' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 0 ; + } + +#paramId: 503666 +#Street canyon aspect (height - width) ratio +'m m-1' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 1 ; + } + +#paramId: 503667 +#Height of building +'m' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 2 ; + } + +#paramId: 503668 +#Urban material thermal albedo +'%' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 3 ; + } + +#paramId: 503669 +#Urban material shortwave (solar) albedo +'%' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 4 ; + } + +#paramId: 503670 +#Volumetric heat capacity of urban material (capacity x density) +'J m-3 K-1' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 5 ; + } + +#paramId: 503671 +#Heat conductivity of urban material +'W m-1 K-1' = { + discipline = 2 ; + parameterCategory = 192 ; + parameterNumber = 6 ; + } + +#paramId: 503704 +#Potential flight distance PFD (gliding) +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 240 ; + } + +#paramId: 503705 +#Lifting ratio VST (gliding) +'m s-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 241 ; + } + +#paramId: 503710 +#U-component of mean wind (vertical mean over specified layer) +'m s-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 212 ; + } + +#paramId: 503711 +#V-component of mean wind (vertical mean over specified layer) +'m s-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 213 ; + } + +#paramId: 503712 +#Extreme weather index of snow amount, grid-scale plus convective +'kg m-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 240 ; + typeOfStatisticalProcessing = 1 ; + } + +#paramId: 503713 +#Extreme weather index of maximum Wind 10m +'m s-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 214 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + } + +#paramId: 503714 +#Extreme weather index of total precipitation (Accumulation) +'kg m-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 239 ; + typeOfStatisticalProcessing = 1 ; + } + +#paramId: 503715 +#Cloud cover for use in radiative transfer (modified where large hydrometeors are present) +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 215 ; + } + +#paramId: 503716 +#Snow temperature at node (i.e. at snow layer interface or boundary) - multi level +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 208 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503717 +#Volumetric ice content of snow layer (for use in tile approach) - multi level +'m3 m-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 209 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503718 +#Volumetric water content of snow layer (for use in tile approach) - multi level +'m3 m-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 210 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503719 +#Volumetric air content of snow layer (for use in tile approach) - multi level +'m3 m-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 211 ; + typeOfSecondFixedSurface = 114 ; + typeOfFirstFixedSurface = 114 ; + } + +#paramId: 503720 +#Probability for freezing precipitation/wet snow +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 242 ; + } + +#paramId: 503721 +#Probability for freezing precipitation with wind +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 243 ; + } + diff --git a/definitions/grib2/tables/local/edzw/1/2.120.table b/definitions/grib2/tables/local/edzw/1/2.120.table new file mode 100644 index 000000000..73eb1a926 --- /dev/null +++ b/definitions/grib2/tables/local/edzw/1/2.120.table @@ -0,0 +1,26 @@ +# This file is automatically generated, don't edit! +# +# Table 2.120 contains (additional) scaled metadata +# for single radar volume scans for local use +# +# IMPORTANT "Meaning" must not contain numbers and parentheses, except in the "(unit)"!!! +# +# 2*(Code figure) Meaning +# +0 0 Undetected value +1 1 Missing value +# 2-5 Reserved (for further indicators of special data points) +6 6 Station height above mean sea level - mod (m) +7 7 Station height above mean sea level - true (m) +8 8 Reflectivity calibration constant (dB) +9 9 Reference reflectivity for echo top (dB) +10 10 Extended Nyquist (s-1) +11 11 High Nyquist (s-1) +12 12 Dual PRF ratio (proportion) +13 13 Range gate length (m) +14 14 Number of ranges averaged over (numeric) +15 15 Number of pulses averaged over (numeric) +16 16 ppiStartAzimuth (degree) +17 17 ppiConstantElevation (degree) +255 255 Missing + diff --git a/definitions/grib2/tables/local/edzw/1/4.2.0.1.table b/definitions/grib2/tables/local/edzw/1/4.2.0.1.table index 1005b6373..988d80980 100644 --- a/definitions/grib2/tables/local/edzw/1/4.2.0.1.table +++ b/definitions/grib2/tables/local/edzw/1/4.2.0.1.table @@ -43,4 +43,8 @@ 233 233 Percentage of precipitation in snow (from total prec.)(%) 234 234 Standard deviation of saturation deficit(Numeric) 235 235 Maximum snow height during contiguous accumulating snow period (coupled with snow age)(m) +236 236 Vertically-integrated zonal water flux (kg m-1 s-1) +237 237 Vertically-integrated meridional water flux (kg m-1 s-1) 238 238 Hail diameter (mm) +239 239 Extreme weather index (EWI) of total precipitation rate (kg m-2 s-1) +240 240 Extreme weather index (EWI) of snow precipitation rate (kg m-2 s-1) diff --git a/definitions/grib2/tables/local/edzw/1/4.2.0.15.table b/definitions/grib2/tables/local/edzw/1/4.2.0.15.table index a80a93e1f..515f55529 100644 --- a/definitions/grib2/tables/local/edzw/1/4.2.0.15.table +++ b/definitions/grib2/tables/local/edzw/1/4.2.0.15.table @@ -6,3 +6,4 @@ 196 196 Radar quality information (Proportion) 197 197 Radar blacklist (Numeric) 198 198 Height of radar beam above ground (m) +200 200 Reflectivity (dB) diff --git a/definitions/grib2/tables/local/edzw/1/4.2.0.17.table b/definitions/grib2/tables/local/edzw/1/4.2.0.17.table index f2b51a037..971ace852 100644 --- a/definitions/grib2/tables/local/edzw/1/4.2.0.17.table +++ b/definitions/grib2/tables/local/edzw/1/4.2.0.17.table @@ -1,2 +1,3 @@ # This file is automatically generated, don't edit! 192 192 Lightning potential index (J kg-1) +193 193 Lightning Potential Index from convection scheme, modified by convection index (J kg-1) diff --git a/definitions/grib2/tables/local/edzw/1/4.2.0.19.table b/definitions/grib2/tables/local/edzw/1/4.2.0.19.table index 27dcb9b57..24fb050ad 100644 --- a/definitions/grib2/tables/local/edzw/1/4.2.0.19.table +++ b/definitions/grib2/tables/local/edzw/1/4.2.0.19.table @@ -30,10 +30,15 @@ 226 226 Eddy Dissipation Rate Total Col-Max. Upper UIR ( 15mm, -3 < T_2M < 1 ?C +243 243 Probability for freezing precipitation with wind, TOT_PREC > 3mm, -3 < T_2M < 1 ?C, VMAX_10M > 10 m/s diff --git a/definitions/grib2/tables/local/edzw/1/4.2.0.191.table b/definitions/grib2/tables/local/edzw/1/4.2.0.191.table index 10e26b5ba..06686dd87 100644 --- a/definitions/grib2/tables/local/edzw/1/4.2.0.191.table +++ b/definitions/grib2/tables/local/edzw/1/4.2.0.191.table @@ -9,3 +9,5 @@ 199 199 Swiss coordinate (west-east) (m) 200 200 Swiss coordinate LV 95 (south-north) (m) 201 201 Swiss coordinate LV 95 (west-east) (m) +202 202 Solar elevation angle (degree) +203 203 Solar azimuth angle (degree) diff --git a/definitions/grib2/tables/local/edzw/1/4.2.0.191.table_alt b/definitions/grib2/tables/local/edzw/1/4.2.0.191.table_alt new file mode 100644 index 000000000..b329a8234 --- /dev/null +++ b/definitions/grib2/tables/local/edzw/1/4.2.0.191.table_alt @@ -0,0 +1,9 @@ +# This file is automatically generated, dont edit! +192 192 solution of 2-d Helmholtz equations - needed for restart(Numeric) +193 193 Area weights for regular lon-lat grid(Numeric) +194 194 Gauss Boaga Coordinates West to East,East Sector(m) +195 195 Gauss Boaga Coordinates South to North,East Sector(m) +196 196 Gauss Boaga Coordinates West to East, West Sector(m) +197 197 Gauss Boaga Coordinates South to North, West Sector(m) +198 198 Swiss coodinate (south-north)(m) +199 199 Swiss coodinate (west-east)(m) diff --git a/definitions/grib2/tables/local/edzw/1/4.2.0.2.table b/definitions/grib2/tables/local/edzw/1/4.2.0.2.table index 4fb548fd7..34f308d4d 100644 --- a/definitions/grib2/tables/local/edzw/1/4.2.0.2.table +++ b/definitions/grib2/tables/local/edzw/1/4.2.0.2.table @@ -19,3 +19,6 @@ 209 209 V-component of (vertical) wind shear vector between two levels (m s-1) 210 210 Updraft duration(s) 211 211 Updraft mask(Numeric) +212 212 U-component of mean wind (vertical mean over specified layer) (m s-1) +213 213 V-component of mean wind (vertical mean over specified layer) (m s-1) +214 214 Extreme weather index (EWI) of wind speed (gust) (m s-1) diff --git a/definitions/grib2/tables/local/edzw/1/4.2.0.20.table b/definitions/grib2/tables/local/edzw/1/4.2.0.20.table index be9d530d5..293389ec8 100644 --- a/definitions/grib2/tables/local/edzw/1/4.2.0.20.table +++ b/definitions/grib2/tables/local/edzw/1/4.2.0.20.table @@ -17,3 +17,6 @@ 207 207 Wet deposition of number concentration if rain reaches the surface (m-2 s-1) 208 208 Sedimentation of number concentration (m-2 s-1) 209 209 Aerosol backscatter (not attenuated) for given wavelength (m-1 sr-1) +210 210 Volumetric content of constituent in snow (m3 m-3) +211 211 Emission tuning factor for pollen (Numeric) +220 220 Mass median diameter (m) diff --git a/definitions/grib2/tables/local/edzw/1/4.2.0.3.table b/definitions/grib2/tables/local/edzw/1/4.2.0.3.table index 7ff056e8c..d489efae9 100644 --- a/definitions/grib2/tables/local/edzw/1/4.2.0.3.table +++ b/definitions/grib2/tables/local/edzw/1/4.2.0.3.table @@ -5,3 +5,6 @@ 195 195 3 hour pressure change(Pa-3h) 196 196 Height of -10 degree Celsius isotherm(m) 197 197 Pressure difference between two specific levels (Pa) +198 198 Slope of orography (using average of maximum gradient in different directions) (Numeric) +199 199 Updraught mass flux associated with passive clouds (kg m-2 s-1) +200 200 Updraught mass flux associated with active clouds (kg m-2 s-1) diff --git a/definitions/grib2/tables/local/edzw/1/4.2.0.6.table b/definitions/grib2/tables/local/edzw/1/4.2.0.6.table index 7ad7ab5f8..39b0172a1 100644 --- a/definitions/grib2/tables/local/edzw/1/4.2.0.6.table +++ b/definitions/grib2/tables/local/edzw/1/4.2.0.6.table @@ -13,3 +13,6 @@ 204 204 Mass density of cloud ice(kg m-3) 205 205 Possible astronomical sunshine duration (s) 206 206 Relative duration of sunshine (DURSUN * 100 / DURSUN_M)(%) +210 210 Number of active clouds per horizontal unit area (m-2) +211 211 Number of passive clouds per horizontal unit area (m-2) +215 215 Cloud cover for use in radiative transfer (modified where large hydrometeors are present) (%) diff --git a/definitions/grib2/tables/local/edzw/1/4.2.1.0.table b/definitions/grib2/tables/local/edzw/1/4.2.1.0.table index a6590ff82..289b20add 100644 --- a/definitions/grib2/tables/local/edzw/1/4.2.1.0.table +++ b/definitions/grib2/tables/local/edzw/1/4.2.1.0.table @@ -1,2 +1,5 @@ # This file is automatically generated, don't edit! 192 192 Tidal tendencies (s2 m-2) +193 193 Water table depth (m) +194 194 Soil moisture saturation level (-) +195 195 Ground water runoff rate, aquifer (kg m-3 s-1) diff --git a/definitions/grib2/tables/local/edzw/1/4.2.2.192.table b/definitions/grib2/tables/local/edzw/1/4.2.2.192.table new file mode 100644 index 000000000..9129b5e3b --- /dev/null +++ b/definitions/grib2/tables/local/edzw/1/4.2.2.192.table @@ -0,0 +1,8 @@ +# This file is automatically generated, don't edit! +0 0 Building area fraction (proportion: 0=no building, 1=whole urban area) +1 1 Street canyon aspect (height - width) ratio +2 2 Height of building (m) +3 3 Urban material thermal albedo (%) +4 4 Urban material shortwave (solar) albedo (%) +5 5 Volumetric heat capacity of urban material (capacity x density) (J m-3 K-1) +6 6 Heat conductivity of urban material (W m-1 K-1) diff --git a/definitions/grib2/tables/local/edzw/1/4.2.2.3.table b/definitions/grib2/tables/local/edzw/1/4.2.2.3.table index 2ad91b4db..ffd24e82e 100644 --- a/definitions/grib2/tables/local/edzw/1/4.2.2.3.table +++ b/definitions/grib2/tables/local/edzw/1/4.2.2.3.table @@ -8,3 +8,10 @@ 198 198 Covariance of soil moisture content (kg2 m-4) 199 199 Surface emissivity (Numeric) 200 200 Soil moisture index (multilayers) (Numeric) +201 201 Soil water mass flux (sum of conductive and diffusive fluxes) (kg m-2 s-1) +206 206 Number of snow layer (Numeric) +207 207 Height of new snow (without settling) +208 208 Temperature at interface or boundary of snow layers (e.g. in a multi-level/layer snow model) (K) +209 209 Volumetric ice content of snow layer (m3 m-3) +210 210 Volumetric water content of snow layer (m3 m-3) +211 211 Volumetric air content of snow layer (m3 m-3) diff --git a/definitions/grib2/tables/local/edzw/1/4.2.215.5.table b/definitions/grib2/tables/local/edzw/1/4.2.215.5.table index 1cff0f7ce..86d8cd9b3 100644 --- a/definitions/grib2/tables/local/edzw/1/4.2.215.5.table +++ b/definitions/grib2/tables/local/edzw/1/4.2.215.5.table @@ -1,4 +1,4 @@ -# This file is automatically generated, dont edit! +# This file is automatically generated, don't edit! 1 1 Downward long-wave radiation flux at surface based on T_2M(W m-2 ) 2 2 Downward long-wave radiation flux at surface based on T_G(W m-2 ) 3 3 Downward long-wave radiation flux at surface based on T_SO(0)(W m-2 ) diff --git a/definitions/grib2/tables/local/edzw/1/4.230.table b/definitions/grib2/tables/local/edzw/1/4.230.table new file mode 100644 index 000000000..7ebd85ff7 --- /dev/null +++ b/definitions/grib2/tables/local/edzw/1/4.230.table @@ -0,0 +1,4 @@ +# Code table 4.230 - Atmospheric chemical constituent type +63000 63000 Ice in ambient (a composite of different constituents) +63001 63001 Air in ambient (a composite of different constituents) + diff --git a/definitions/grib2/tables/local/edzw/1/4.3.table b/definitions/grib2/tables/local/edzw/1/4.3.table index d845e448f..79637aa98 100644 --- a/definitions/grib2/tables/local/edzw/1/4.3.table +++ b/definitions/grib2/tables/local/edzw/1/4.3.table @@ -1,3 +1,4 @@ +# This file is automatically generated, don't edit! 192 192 bias corrected ensemble forecast 193 193 calibrated forecast 194 194 calibrated ensemble f. @@ -6,12 +7,17 @@ 197 197 smoothed forecast 198 198 smoothed and calibrated forecast 199 199 probability forecast derived by neighbourhood method -201 201 diff. analysis - first guess 200 200 diff. init. analysis - analysis* +201 201 diff. analysis - first guess 202 202 nudging 203 203 nudgecast 204 204 product derived by statistical model 205 205 deterministic forecast on ensemble mean(DOM) 206 206 time filtered bias +207 207 Time-filtered assimilation increment +208 208 Time-filtered assimilation increment, weighted with cos(2pi loc.time/day) 220 220 postprocessing +221 221 Stochastic model of the model error +225 225 EMVORADO +226 226 Dual Pol Doppler Radar 255 255 Missing diff --git a/definitions/grib2/tables/local/edzw/1/4.5.table b/definitions/grib2/tables/local/edzw/1/4.5.table index c545958ed..4cfa7a984 100644 --- a/definitions/grib2/tables/local/edzw/1/4.5.table +++ b/definitions/grib2/tables/local/edzw/1/4.5.table @@ -3,7 +3,8 @@ 192 ML ML start level of mixed layer parcel(CAPE/CIN) 193 MU MU start level of most unstable parcel(CAPE/CIN) 194 LFC Level of free convection -#195-198 reserved +#195-197 reserved +198 radarElev radarElev Radar antenna elevation angle (degree) 199 radarElevComposite radarElevComposite radarElevComposite #200 reserved 201 hor Surface: horizontal plane diff --git a/definitions/grib2/tables/local/edzw/1/generatingProcessIdentifier.table b/definitions/grib2/tables/local/edzw/1/generatingProcessIdentifier.table index 209928e41..2596d361d 100644 --- a/definitions/grib2/tables/local/edzw/1/generatingProcessIdentifier.table +++ b/definitions/grib2/tables/local/edzw/1/generatingProcessIdentifier.table @@ -11,12 +11,12 @@ 011 icXla icXla (ICON LAM) 012 icXln icXln (ICON LAM nest) 013 icXls icXls (ICON LAM sub-nest) -014 dwd dwd (reserved ICON DWD) -015 dwd dwd (reserved ICON DWD) -016 dwd dwd (reserved ICON DWD) -017 dwd dwd (reserved ICON DWD) -018 dwd dwd (reserved ICON DWD) -019 dwd dwd (reserved ICON DWD) +014 icXls2 icXls2 (ICON LAM sub-nest 2) +015 icXls3 icXls3 (ICON LAM sub-nest 3) +016 rucXla rucXla (ICON LAM RUC) +017 rucXln rucXln (ICON LAM RUC nest) +018 rucXls rucXls (ICON LAM RUC sub-nest) +019 rucXls2 rucXls2 (ICON LAM RUC sub-nest 2) 020 icX1b icX1b (ICON Bw 1) 021 bw bw (reserved ICON Bw) 022 bw bw (reserved ICON Bw) From 713c3b8950a1122f73e6d51fac5777379297567a Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 9 Oct 2023 11:12:44 +0100 Subject: [PATCH 348/372] ECC-1700: Fix tests --- definitions/grib2/boot.def | 2 +- definitions/grib2/tables/32/4.0.table | 109 ------------------ tests/CMakeLists.txt | 2 +- ...ib_ecpoint_dgov-242.sh => grib_ecpoint.sh} | 13 ++- 4 files changed, 9 insertions(+), 117 deletions(-) delete mode 100644 definitions/grib2/tables/32/4.0.table rename tests/{grib_ecpoint_dgov-242.sh => grib_ecpoint.sh} (87%) diff --git a/definitions/grib2/boot.def b/definitions/grib2/boot.def index f453a714d..296dba179 100644 --- a/definitions/grib2/boot.def +++ b/definitions/grib2/boot.def @@ -11,7 +11,7 @@ # See https://community.wmo.int/activity-areas/wmo-codes/manual-codes/latest-version constant tablesVersionLatestOfficial = 31 : edition_specific; # If this is different from the official version, then it is the pre-operational version -constant tablesVersionLatest = 32 : edition_specific; +constant tablesVersionLatest = 31 : edition_specific; constant million = 1000000 : hidden; constant grib2divider = 1000000; diff --git a/definitions/grib2/tables/32/4.0.table b/definitions/grib2/tables/32/4.0.table deleted file mode 100644 index cfbb61fd1..000000000 --- a/definitions/grib2/tables/32/4.0.table +++ /dev/null @@ -1,109 +0,0 @@ -# Code table 4.0 - Product definition template number -0 0 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time -1 1 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time -2 2 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer at a point in time -3 3 Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time -4 4 Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time -5 5 Probability forecasts at a horizontal level or in a horizontal layer at a point in time -6 6 Percentile forecasts at a horizontal level or in a horizontal layer at a point in time -7 7 Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time -8 8 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval -9 9 Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval -10 10 Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval -11 11 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval -12 12 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval -13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval -14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval -15 15 Average, accumulation, extreme values or other statistically processed values over a spatial area at a horizontal level or in a horizontal layer at a point in time -# 16-19 Reserved -20 20 Radar product -# 21-29 Reserved -30 30 Satellite product (deprecated) -31 31 Satellite product -32 32 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data -33 33 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data -34 34 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for simulated (synthetic) satellite data -35 35 Satellite product with or without associated quality values -# 36-39 Reserved -40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents -41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents -42 42 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents -43 43 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents -44 44 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for aerosol -45 45 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for aerosol -46 46 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol -47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol -48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol -49 49 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol -# 50 Reserved -51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time -# 52 Reserved -53 53 Partitioned parameters at a horizontal level or in a horizontal layer at a point in time -54 54 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for partitioned parameters -55 55 Spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time -56 56 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters (deprecated) -57 57 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function -58 58 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function -59 59 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters (corrected version of template 4.56) -60 60 Individual ensemble reforecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time -61 61 Individual ensemble reforecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval -62 62 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time -63 63 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for spatio-temporal changing tiles -# 64-66 Reserved -67 67 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents based on a distribution function -68 68 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents based on a distribution function -# 69 Reserved -70 70 Post-processing analysis or forecast at a horizontal level or in a horizontal layer at a point in time -71 71 Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time -72 72 Post-processing average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval -73 73 Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval -# 74-75 Reserved -76 76 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents with source or sink -77 77 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents with source or sink -78 78 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents with source or sink -79 79 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents with source or sink -80 80 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol with source or sink -81 81 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol with source or sink -82 82 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol with source or sink -83 83 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol with source or sink -84 84 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol with source or sink -85 85 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol -86 86 Quantile forecasts at a horizontal level or in a horizontal layer at a point in time -87 87 Quantile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval -88 88 Analysis or forecast at a horizontal level or in a horizontal layer at a specified local time -89 89 Post-processed quantile forecasts at a horizontal level or in a horizontal layer at a point in time -90 90 Post-processed quantile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval -91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval -92 92 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a specified local time -93 93 Post-processing analysis or forecast at a horizontal level or in a horizontal layer at a specified local time -94 94 Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a specified local time -95 95 Average, accumulation, extreme values or other statiscally processed value at a horizontal level or in a horizontal layer at a specified local time -96 96 Average, accumulation, extreme values or other statistically processed values of an individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a specified local time -97 97 Average, accumulation, extreme values or other statistically processed values of post-processing analysis or forecast at a horizontal level or in a horizontal layer at a specified local time -98 98 Average, accumulation, extreme values or other statistically processed values of a post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a specified local time -99 99 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for wave 2D spectra with explicit list of frequencies and directions -100 100 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for wave 2D spectra with explicit list of frequencies and directions -101 101 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for wave 2D spectra with frequencies and directions defined by formulae -102 102 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for wave 2D spectra with frequencies and directions defined by formulae -103 103 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for waves selected by period range -104 104 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for waves selected by period range -105 105 Anomalies, significance and other derived products from an analysis or forecast in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval -106 106 Anomalies, significance and other derived products from an individual ensemble forecast, control and perturbed in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval -107 107 Anomalies, significance and other derived products from derived forecasts based on all ensemble members in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval -108 108 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for generic optical products -109 109 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for generic optical products -110 110 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for generic optical products -111 111 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for generic optical products -112 112 Anomalies, significance and other derived products as probability forecasts in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval -# 113-253 Reserved -254 254 CCITT IA5 character string -# 255-999 Reserved -1000 1000 Cross-section of analysis and forecast at a point in time -1001 1001 Cross-section of averaged or otherwise statistically processed analysis or forecast over a range of time -1002 1002 Cross-section of analysis and forecast, averaged or otherwise statistically processed over latitude or longitude -# 1003-1099 Reserved -1100 1100 Hovmoller-type grid with no averaging or other statistical processing -1101 1101 Hovmoller-type grid with averaging or other statistical processing -# 1102-32767 Reserved -# 32768-65534 Reserved for local use -65535 65535 Missing diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 4f691fca0..595baae99 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -95,7 +95,7 @@ if( HAVE_BUILD_TOOLS ) grib_packing_order filter_substr grib_uerra - grib_ecpoint_dgov-242 + grib_ecpoint grib_s2s grib_fire # grib_true_imagery diff --git a/tests/grib_ecpoint_dgov-242.sh b/tests/grib_ecpoint.sh similarity index 87% rename from tests/grib_ecpoint_dgov-242.sh rename to tests/grib_ecpoint.sh index 95af43d4e..6e12571cc 100755 --- a/tests/grib_ecpoint_dgov-242.sh +++ b/tests/grib_ecpoint.sh @@ -10,16 +10,15 @@ . ./include.ctest.sh -REDIRECT=/dev/null -label="grib_ecPoint_DGOV-242_test" # Change prod to bufr or grib etc +label="grib_ecPoint_test" tempGrib=temp.$label.grib sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl # 1. bias-corrected ## we check if we can set PDTN 73 and typeOfPostProcessing to ecPoint, ecPoint versioning and MARS type -${tools_dir}/grib_set -s tablesVersion=33,productDefinitionTemplateNumber=73,backgroundProcess=1,\ +${tools_dir}/grib_set -s tablesVersion=31,productDefinitionTemplateNumber=73,backgroundProcess=1,\ setLocalDefinition=1,grib2LocalSectionNumber=1,type=gbf,class=od,stream=enfo,\ generatingProcessIdentifier=2,typeOfPostProcessing=206 $sample_grib2 $tempGrib grib_check_key_equals $tempGrib backgroundProcess,generatingProcessIdentifier,typeOfPostProcessing,type "1 2 206 gbf" @@ -27,7 +26,7 @@ rm -f $tempGrib # 2. Point values ## we check if we can set PDTN 90 and typeOfPostProcessing to ecPoint, ecPoint versioning, MARS type, quantile -${tools_dir}/grib_set -s tablesVersion=33,productDefinitionTemplateNumber=90,backgroundProcess=1,\ +${tools_dir}/grib_set -s tablesVersion=31,productDefinitionTemplateNumber=90,backgroundProcess=1,\ setLocalDefinition=1,grib2LocalSectionNumber=1,type=pfc,class=od,stream=enfo,\ totalNumberOfQuantiles=1000,quantileValue=995,\ generatingProcessIdentifier=2,typeOfPostProcessing=206 $sample_grib2 $tempGrib @@ -36,7 +35,7 @@ rm -f $tempGrib # 3. Point value metrics ## we check if we can set PDTN 90 and typeOfPostProcessing to ecPoint, ecPoint versioning, MARS type, quantile -${tools_dir}/grib_set -s tablesVersion=33,productDefinitionTemplateNumber=90,backgroundProcess=1,\ +${tools_dir}/grib_set -s tablesVersion=31,productDefinitionTemplateNumber=90,backgroundProcess=1,\ setLocalDefinition=1,grib2LocalSectionNumber=1,type=ppm,class=od,stream=enfo,\ totalNumberOfQuantiles=1000,quantileValue=995,\ generatingProcessIdentifier=2,typeOfPostProcessing=206 $sample_grib2 $tempGrib @@ -45,8 +44,10 @@ rm -f $tempGrib # 4. weather types ## we check if we can set PDTN 73 and typeOfPostProcessing to ecPoint, ecPoint versioning and MARS type -${tools_dir}/grib_set -s tablesVersion=33,productDefinitionTemplateNumber=73,backgroundProcess=1,\ +${tools_dir}/grib_set -s tablesVersion=31,productDefinitionTemplateNumber=73,backgroundProcess=1,\ setLocalDefinition=1,grib2LocalSectionNumber=1,type=gwt,class=od,stream=enfo,\ generatingProcessIdentifier=2,typeOfPostProcessing=206 $sample_grib2 $tempGrib grib_check_key_equals $tempGrib backgroundProcess,generatingProcessIdentifier,typeOfPostProcessing,type "1 2 206 gwt" + +# Clean up rm -f $tempGrib From 1dfb8b4325ebdd75e6f7453f1a7bc79eb6ea3cf1 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 9 Oct 2023 11:33:48 +0100 Subject: [PATCH 349/372] ECC-1700: Testing --- tests/grib_ecpoint.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/grib_ecpoint.sh b/tests/grib_ecpoint.sh index 6e12571cc..875d3cfd4 100755 --- a/tests/grib_ecpoint.sh +++ b/tests/grib_ecpoint.sh @@ -16,9 +16,11 @@ tempGrib=temp.$label.grib sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +latest=`${tools_dir}/grib_get -p tablesVersionLatest $sample_grib2` + # 1. bias-corrected ## we check if we can set PDTN 73 and typeOfPostProcessing to ecPoint, ecPoint versioning and MARS type -${tools_dir}/grib_set -s tablesVersion=31,productDefinitionTemplateNumber=73,backgroundProcess=1,\ +${tools_dir}/grib_set -s tablesVersion=$latest,productDefinitionTemplateNumber=73,backgroundProcess=1,\ setLocalDefinition=1,grib2LocalSectionNumber=1,type=gbf,class=od,stream=enfo,\ generatingProcessIdentifier=2,typeOfPostProcessing=206 $sample_grib2 $tempGrib grib_check_key_equals $tempGrib backgroundProcess,generatingProcessIdentifier,typeOfPostProcessing,type "1 2 206 gbf" @@ -26,7 +28,7 @@ rm -f $tempGrib # 2. Point values ## we check if we can set PDTN 90 and typeOfPostProcessing to ecPoint, ecPoint versioning, MARS type, quantile -${tools_dir}/grib_set -s tablesVersion=31,productDefinitionTemplateNumber=90,backgroundProcess=1,\ +${tools_dir}/grib_set -s tablesVersion=$latest,productDefinitionTemplateNumber=90,backgroundProcess=1,\ setLocalDefinition=1,grib2LocalSectionNumber=1,type=pfc,class=od,stream=enfo,\ totalNumberOfQuantiles=1000,quantileValue=995,\ generatingProcessIdentifier=2,typeOfPostProcessing=206 $sample_grib2 $tempGrib @@ -35,7 +37,7 @@ rm -f $tempGrib # 3. Point value metrics ## we check if we can set PDTN 90 and typeOfPostProcessing to ecPoint, ecPoint versioning, MARS type, quantile -${tools_dir}/grib_set -s tablesVersion=31,productDefinitionTemplateNumber=90,backgroundProcess=1,\ +${tools_dir}/grib_set -s tablesVersion=$latest,productDefinitionTemplateNumber=90,backgroundProcess=1,\ setLocalDefinition=1,grib2LocalSectionNumber=1,type=ppm,class=od,stream=enfo,\ totalNumberOfQuantiles=1000,quantileValue=995,\ generatingProcessIdentifier=2,typeOfPostProcessing=206 $sample_grib2 $tempGrib @@ -44,7 +46,7 @@ rm -f $tempGrib # 4. weather types ## we check if we can set PDTN 73 and typeOfPostProcessing to ecPoint, ecPoint versioning and MARS type -${tools_dir}/grib_set -s tablesVersion=31,productDefinitionTemplateNumber=73,backgroundProcess=1,\ +${tools_dir}/grib_set -s tablesVersion=$latest,productDefinitionTemplateNumber=73,backgroundProcess=1,\ setLocalDefinition=1,grib2LocalSectionNumber=1,type=gwt,class=od,stream=enfo,\ generatingProcessIdentifier=2,typeOfPostProcessing=206 $sample_grib2 $tempGrib grib_check_key_equals $tempGrib backgroundProcess,generatingProcessIdentifier,typeOfPostProcessing,type "1 2 206 gwt" From e47d12e6461549f00eeddb63baac0c2d1c32c2f4 Mon Sep 17 00:00:00 2001 From: Eugen Betke Date: Mon, 9 Oct 2023 11:48:15 +0000 Subject: [PATCH 350/372] Document init_ibm_float() and init_ieee_float() --- src/grib_ibmfloat.cc | 5 +++++ src/grib_ieeefloat.cc | 26 ++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/grib_ibmfloat.cc b/src/grib_ibmfloat.cc index d8dc76206..d28331a21 100644 --- a/src/grib_ibmfloat.cc +++ b/src/grib_ibmfloat.cc @@ -51,6 +51,11 @@ struct ibm_table_t static ibm_table_t ibm_table = { 0, {0,}, {0,}, 0, 0 }; + +/** + * @brief (see the documentation for init_ieee_float() in grib_ieeefloat.cc) + */ + static void init_ibm_table() { if (!ibm_table.inited) { diff --git a/src/grib_ieeefloat.cc b/src/grib_ieeefloat.cc index 8be76e556..20a6a827b 100644 --- a/src/grib_ieeefloat.cc +++ b/src/grib_ieeefloat.cc @@ -56,12 +56,34 @@ struct ieee_table_t static ieee_table_t ieee_table = { 0, {0,}, {0,}, 0, 0 }; + +/** + * @brief Initializes the ieee_table with IEE754 single precision (32-bit) values. + * + * Nearest smaller values (e.g., reference values for grid_simple and grid_ccsds) + * are taken from this table. + * + * @details The table layout is as follows: + * + * | idx (i) | multiplier (e) | value (v = mmin * e) | + * |---------|----------------|----------------------| + * | 1 | 2^(-149) | 0x800000 * 2^(-149) | + * | 2 | 2^(-148) | 0x800000 * 2^(-148) | + * | ... | ... | ... | + * | 253 | 2^103 | 0x800000 * 2^103 | + * | 254 | 2^104 | 0x800000 * 2^104 | + * + * The vmin and vmax boundaries are defined as: + * - vmin = 0x800000 * 2^(-149) + * - vmax = 0xffffff * 2^104 + */ + static void init_ieee_table() { if (!ieee_table.inited) { unsigned long i; - unsigned long mmin = 0x800000; - unsigned long mmax = 0xffffff; + unsigned long mmin = 0x800000; // minimum mantissa + unsigned long mmax = 0xffffff; // maximum mantissa double e = 1; for (i = 1; i <= 104; i++) { e *= 2; From 9af40cac08573cefb36db3373d854a983f56482a Mon Sep 17 00:00:00 2001 From: Eugen Betke Date: Mon, 9 Oct 2023 11:58:12 +0000 Subject: [PATCH 351/372] Change documentation format from Doxygen to ReadTheDocs --- src/grib_ibmfloat.cc | 5 +++-- src/grib_ieeefloat.cc | 46 +++++++++++++++++++++++++------------------ 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/grib_ibmfloat.cc b/src/grib_ibmfloat.cc index d28331a21..a4b54b358 100644 --- a/src/grib_ibmfloat.cc +++ b/src/grib_ibmfloat.cc @@ -53,8 +53,9 @@ static ibm_table_t ibm_table = { 0, {0,}, {0,}, 0, 0 }; /** - * @brief (see the documentation for init_ieee_float() in grib_ieeefloat.cc) - */ +.. seealso:: + Documentation for ``init_ieee_float()`` in ``grib_ieeefloat.cc`` +*/ static void init_ibm_table() { diff --git a/src/grib_ieeefloat.cc b/src/grib_ieeefloat.cc index 20a6a827b..e638ab4e9 100644 --- a/src/grib_ieeefloat.cc +++ b/src/grib_ieeefloat.cc @@ -58,25 +58,33 @@ static ieee_table_t ieee_table = { 0, {0,}, {0,}, 0, 0 }; /** - * @brief Initializes the ieee_table with IEE754 single precision (32-bit) values. - * - * Nearest smaller values (e.g., reference values for grid_simple and grid_ccsds) - * are taken from this table. - * - * @details The table layout is as follows: - * - * | idx (i) | multiplier (e) | value (v = mmin * e) | - * |---------|----------------|----------------------| - * | 1 | 2^(-149) | 0x800000 * 2^(-149) | - * | 2 | 2^(-148) | 0x800000 * 2^(-148) | - * | ... | ... | ... | - * | 253 | 2^103 | 0x800000 * 2^103 | - * | 254 | 2^104 | 0x800000 * 2^104 | - * - * The vmin and vmax boundaries are defined as: - * - vmin = 0x800000 * 2^(-149) - * - vmax = 0xffffff * 2^104 - */ +.. _init_ieee_table: + +Init IEEE Table +=============== + +Initializes the ieee_table with IEEE754 single precision (32-bit) values. Nearest smaller values (e.g., reference values for grid_simple and grid_ccsds) are taken from this table. + +Details +------- + +The table layout is as follows: + ++-------+----------------+----------------------+ +| idx (i) | multiplier (e) | value (v = mmin * e) | ++-------+----------------+----------------------+ +| 1 | 2^(-149) | 0x800000 * 2^(-149) | +| 2 | 2^(-148) | 0x800000 * 2^(-148) | +| ... | ... | ... | +| 253 | 2^103 | 0x800000 * 2^103 | +| 254 | 2^104 | 0x800000 * 2^104 | ++-------+----------------+----------------------+ + +The vmin and vmax boundaries are defined as: + +- vmin = 0x800000 * 2^(-149) +- vmax = 0xffffff * 2^104 +*/ static void init_ieee_table() { From 087b15a79842451f4a8176bd813139024c61ae2f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Mon, 9 Oct 2023 14:15:19 +0100 Subject: [PATCH 352/372] ECC-1699: Bitmap problem for ERA5 BUFR data --- src/grib_accessor_class_bufr_data_array.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/grib_accessor_class_bufr_data_array.cc b/src/grib_accessor_class_bufr_data_array.cc index a48c81737..0b2982491 100644 --- a/src/grib_accessor_class_bufr_data_array.cc +++ b/src/grib_accessor_class_bufr_data_array.cc @@ -2152,7 +2152,7 @@ static grib_accessor* create_accessor_from_descriptor(const grib_accessor* a, gr #define IS_COORDINATE_DESCRIPTOR(a) (a == 8 || a == 1 || a == 2 || a == 4 || a == 5 || a == 6 || a == 7) #define NUMBER_OF_QUALIFIERS_PER_CATEGORY 256 #define NUMBER_OF_QUALIFIERS_CATEGORIES 7 -#define MAX_NUMBER_OF_BITMAPS 5 +#define MAX_NUMBER_OF_BITMAPS 8 // See ECC-1699 static const int number_of_qualifiers = NUMBER_OF_QUALIFIERS_PER_CATEGORY * NUMBER_OF_QUALIFIERS_CATEGORIES; static const int significanceQualifierIndexArray[] = { -1, 0, 1, -1, 2, 3, 4, 5, 6 }; From f99afd4a66dc22a1d19a26e1445ba276de7d56f3 Mon Sep 17 00:00:00 2001 From: Eugen Betke Date: Tue, 10 Oct 2023 08:12:53 +0000 Subject: [PATCH 353/372] Compile time initializatin of IBM an IEEE tables --- src/grib_ibmfloat.cc | 102 ++-------------------------------- src/grib_ibmfloat.h | 74 +++++++++++++++++++++++++ src/grib_ieeefloat.cc | 125 +++--------------------------------------- src/grib_ieeefloat.h | 61 +++++++++++++++++++++ src/grib_scaling.h | 4 +- 5 files changed, 147 insertions(+), 219 deletions(-) create mode 100644 src/grib_ibmfloat.h diff --git a/src/grib_ibmfloat.cc b/src/grib_ibmfloat.cc index a4b54b358..47f0eda35 100644 --- a/src/grib_ibmfloat.cc +++ b/src/grib_ibmfloat.cc @@ -9,91 +9,9 @@ */ #include "grib_api_internal.h" +#include "grib_ibmfloat.h" -#if GRIB_PTHREADS -static pthread_once_t once = PTHREAD_ONCE_INIT; -static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; - -static void init() -{ - pthread_mutexattr_t attr; - pthread_mutexattr_init(&attr); - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); - pthread_mutex_init(&mutex, &attr); - pthread_mutexattr_destroy(&attr); -} -#elif GRIB_OMP_THREADS -static int once = 0; -static omp_nest_lock_t mutex; - -static void init() -{ - GRIB_OMP_CRITICAL(lock_grib_ibmfloat_c) - { - if (once == 0) { - omp_init_nest_lock(&mutex); - once = 1; - } - } -} -#endif - -typedef struct ibm_table_t ibm_table_t; - -struct ibm_table_t -{ - int inited; - double e[128]; - double v[128]; - double vmin; - double vmax; -}; - -static ibm_table_t ibm_table = { 0, {0,}, {0,}, 0, 0 }; - - -/** -.. seealso:: - Documentation for ``init_ieee_float()`` in ``grib_ieeefloat.cc`` -*/ - -static void init_ibm_table() -{ - if (!ibm_table.inited) { - unsigned long i; - unsigned long mmin = 0x100000; - unsigned long mmax = 0xffffff; - double e = 1; - for (i = 1; i <= 57; i++) { - e *= 16; - ibm_table.e[i + 70] = e; - ibm_table.v[i + 70] = e * mmin; - } - ibm_table.e[70] = 1; - ibm_table.v[70] = mmin; - e = 1; - for (i = 1; i <= 70; i++) { - e /= 16; - ibm_table.e[70 - i] = e; - ibm_table.v[70 - i] = e * mmin; - } - ibm_table.vmin = ibm_table.v[0]; - ibm_table.vmax = ibm_table.e[127] * mmax; - ibm_table.inited = 1; - /*for (i=0;i<128;i++) printf("++++ ibm_table.v[%d]=%g\n",i,ibm_table.v[i]);*/ - } -} - -static void init_table_if_needed() -{ - GRIB_MUTEX_INIT_ONCE(&once, &init); - GRIB_MUTEX_LOCK(&mutex); - - if (!ibm_table.inited) - init_ibm_table(); - - GRIB_MUTEX_UNLOCK(&mutex); -} +constexpr auto ibm_table = IbmTable{}; static void binary_search(const double xx[], const unsigned long n, double x, unsigned long* j) { @@ -122,8 +40,6 @@ unsigned long grib_ibm_to_long(double x) unsigned long e = 0; double rmmax = mmax + 0.5; - init_table_if_needed(); - /* printf("\ngrib_ibm_to_long: x=%.20e\n",x); */ if (x < 0) { s = 1; @@ -143,7 +59,7 @@ unsigned long grib_ibm_to_long(double x) return 0; } - binary_search(ibm_table.v, 127, x, &e); + binary_search(ibm_table.v.data(), 127, x, &e); /* printf("grib_ibm_to_long: e=%ld\n",e); */ @@ -180,8 +96,6 @@ double grib_ibmfloat_error(double x) { unsigned long e = 0; - init_table_if_needed(); - if (x < 0) x = -x; @@ -196,7 +110,7 @@ double grib_ibmfloat_error(double x) return 0; } - binary_search(ibm_table.v, 127, x, &e); + binary_search(ibm_table.v.data(), 127, x, &e); return ibm_table.e[e]; } @@ -209,8 +123,6 @@ double grib_long_to_ibm(unsigned long x) double val = m; - init_table_if_needed(); - /*if(x == 0) return 0;*/ if (c == 0 && m <= 1) return 0; @@ -225,13 +137,11 @@ double grib_long_to_ibm(unsigned long x) double grib_ibm_table_e(unsigned long e) { - init_table_if_needed(); return ibm_table.e[e]; } double grib_ibm_table_v(unsigned long e) { - init_table_if_needed(); return ibm_table.v[e]; } @@ -247,8 +157,6 @@ unsigned long grib_ibm_nearest_smaller_to_long(double x) if (x == 0) return 0; - init_table_if_needed(); - l = grib_ibm_to_long(x); y = grib_long_to_ibm(l); @@ -293,8 +201,6 @@ int grib_nearest_smaller_ibm_float(double a, double* ret) { unsigned long l = 0; - init_table_if_needed(); - if (a > ibm_table.vmax) return GRIB_INTERNAL_ERROR; diff --git a/src/grib_ibmfloat.h b/src/grib_ibmfloat.h new file mode 100644 index 000000000..a15736331 --- /dev/null +++ b/src/grib_ibmfloat.h @@ -0,0 +1,74 @@ +/* + * (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. + */ + +#pragma once + +#include "grib_api_internal.h" +#include "grib_scaling.h" + +#include +#include +#include + + +/** +.. _init_ieee_table: + +Init IBM Floats Table +=============== + +Initializes the ibm_table with IBM Float values. Nearest smaller values (e.g., reference values for grid_simple) are taken from this table. + +Details +------- + +The table layout is as follows: + ++-------+----------------+----------------------+ +| idx (i) | multiplier (e) | value (v = mmin * e) | ++-------+----------------+----------------------+ +| 0 | 16^(-70) | 0x100000 * 2^(-70) | +| 1 | 16^(-69) | 0x100000 * 2^(-69) | +| ... | ... | ... | +| 126 | 16^56 | 0x100000 * 2^56 | +| 127 | 16^57 | 0x100000 * 2^57 | ++-------+----------------+----------------------+ + +The vmin and vmax boundaries are defined as: + +- vmin = 0x100000 * 2^(-70) +- vmax = 0xffffff * 2^57 +*/ + +struct IbmTable { +private: + using ValueType = double; + static constexpr uint8_t TABLESIZE = 128; + static constexpr uint32_t mantissa_min = 0x100000; + static constexpr uint32_t mantissa_max = 0xffffff; + +public: + static constexpr std::array e = []() { + std::array multiplier{}; + for (uint8_t i = 1; i < TABLESIZE; ++i) { + multiplier[i] = codes_power(i - 70, 16); + } + return multiplier; + }(); + static constexpr std::array v = []() { + std::array values{}; + for (uint8_t i = 0; i < TABLESIZE; ++i) { + values[i] = e[i] * mantissa_min; + } + return values; + }(); + static constexpr ValueType vmin = e[0] * mantissa_min; + static constexpr ValueType vmax = e[127] * mantissa_max; +}; diff --git a/src/grib_ieeefloat.cc b/src/grib_ieeefloat.cc index e638ab4e9..c473f81e8 100644 --- a/src/grib_ieeefloat.cc +++ b/src/grib_ieeefloat.cc @@ -13,116 +13,9 @@ ***************************************************************************/ #include "grib_ieeefloat.h" -#if GRIB_PTHREADS -static pthread_once_t once = PTHREAD_ONCE_INIT; -static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; - -static void init() -{ - pthread_mutexattr_t attr; - pthread_mutexattr_init(&attr); - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); - pthread_mutex_init(&mutex, &attr); - pthread_mutexattr_destroy(&attr); -} -#elif GRIB_OMP_THREADS -static int once = 0; -static omp_nest_lock_t mutex; - -static void init() -{ - GRIB_OMP_CRITICAL(lock_grib_ieeefloat_c) - { - if (once == 0) { - omp_init_nest_lock(&mutex); - once = 1; - } - } -} -#endif - /* See old implementation in src/deprecated/grib_ieeefloat.c */ -typedef struct ieee_table_t ieee_table_t; - -struct ieee_table_t -{ - int inited; - double e[255]; - double v[255]; - double vmin; - double vmax; -}; - -static ieee_table_t ieee_table = { 0, {0,}, {0,}, 0, 0 }; - - -/** -.. _init_ieee_table: - -Init IEEE Table -=============== - -Initializes the ieee_table with IEEE754 single precision (32-bit) values. Nearest smaller values (e.g., reference values for grid_simple and grid_ccsds) are taken from this table. - -Details -------- - -The table layout is as follows: - -+-------+----------------+----------------------+ -| idx (i) | multiplier (e) | value (v = mmin * e) | -+-------+----------------+----------------------+ -| 1 | 2^(-149) | 0x800000 * 2^(-149) | -| 2 | 2^(-148) | 0x800000 * 2^(-148) | -| ... | ... | ... | -| 253 | 2^103 | 0x800000 * 2^103 | -| 254 | 2^104 | 0x800000 * 2^104 | -+-------+----------------+----------------------+ - -The vmin and vmax boundaries are defined as: - -- vmin = 0x800000 * 2^(-149) -- vmax = 0xffffff * 2^104 -*/ - -static void init_ieee_table() -{ - if (!ieee_table.inited) { - unsigned long i; - unsigned long mmin = 0x800000; // minimum mantissa - unsigned long mmax = 0xffffff; // maximum mantissa - double e = 1; - for (i = 1; i <= 104; i++) { - e *= 2; - ieee_table.e[i + 150] = e; - ieee_table.v[i + 150] = e * mmin; - } - ieee_table.e[150] = 1; - ieee_table.v[150] = mmin; - e = 1; - for (i = 1; i < 150; i++) { - e /= 2; - ieee_table.e[150 - i] = e; - ieee_table.v[150 - i] = e * mmin; - } - ieee_table.vmin = ieee_table.v[1]; - ieee_table.vmax = ieee_table.e[254] * mmax; - ieee_table.inited = 1; - /*for (i=0;i<128;i++) printf("++++ ieee_table.v[%d]=%g\n",i,ieee_table.v[i]);*/ - } -} - -static void init_table_if_needed() -{ - GRIB_MUTEX_INIT_ONCE(&once, &init); - GRIB_MUTEX_LOCK(&mutex); - - if (!ieee_table.inited) - init_ieee_table(); - - GRIB_MUTEX_UNLOCK(&mutex); -} +constexpr auto ieee_table = IeeeTable(); static void binary_search(const double xx[], const unsigned long n, double x, unsigned long* j) { @@ -144,13 +37,11 @@ static void binary_search(const double xx[], const unsigned long n, double x, un double grib_ieee_table_e(unsigned long e) { - init_table_if_needed(); return ieee_table.e[e]; } double grib_ieee_table_v(unsigned long e) { - init_table_if_needed(); return ieee_table.v[e]; } @@ -163,8 +54,6 @@ unsigned long grib_ieee_to_long(double x) unsigned long e = 0; double rmmax = mmax + 0.5; - init_table_if_needed(); - /* printf("\ngrib_ieee_to_long: x=%.20e\n",x); */ if (x < 0) { s = 1; @@ -184,7 +73,7 @@ unsigned long grib_ieee_to_long(double x) return 0; } - binary_search(ieee_table.v, 254, x, &e); + binary_search(ieee_table.v.data(), 254, x, &e); /* printf("grib_ieee_to_long: e=%ld\n",e); */ @@ -221,7 +110,7 @@ double grib_ieeefloat_error(double x) { unsigned long e = 0; - init_table_if_needed(); + //init_table_if_needed(); if (x < 0) x = -x; @@ -237,7 +126,7 @@ double grib_ieeefloat_error(double x) return 0; } - binary_search(ieee_table.v, 254, x, &e); + binary_search(ieee_table.v.data(), 254, x, &e); return ieee_table.e[e]; } @@ -256,7 +145,7 @@ double grib_long_to_ieee(unsigned long x) Assert(0); } #endif - init_table_if_needed(); + //init_table_if_needed(); if (c == 0 && m == 0) return 0; @@ -288,7 +177,7 @@ unsigned long grib_ieee_nearest_smaller_to_long(double x) if (x == 0) return 0; - init_table_if_needed(); + //init_table_if_needed(); l = grib_ieee_to_long(x); y = grib_long_to_ieee(l); @@ -334,7 +223,7 @@ int grib_nearest_smaller_ieee_float(double a, double* ret) { unsigned long l = 0; - init_table_if_needed(); + //init_table_if_needed(); if (a > ieee_table.vmax) { grib_context* c = grib_context_get_default(); diff --git a/src/grib_ieeefloat.h b/src/grib_ieeefloat.h index 74944f2ac..b81ec7b21 100644 --- a/src/grib_ieeefloat.h +++ b/src/grib_ieeefloat.h @@ -11,5 +11,66 @@ #pragma once #include "grib_api_internal.h" +#include "grib_scaling.h" + +#include +#include +#include template int grib_ieee_decode_array(grib_context* c, unsigned char* buf, size_t nvals, int bytes, T* val); + +/** +.. _init_ieee_table: + +Init IEEE Table +=============== + +Initializes the ieee_table with IEEE754 single precision (32-bit) values. Nearest smaller values (e.g., reference values for grid_simple and grid_ccsds) are taken from this table. + +Details +------- + +The table layout is as follows: + ++-------+----------------+----------------------+ +| idx (i) | multiplier (e) | value (v = mmin * e) | ++-------+----------------+----------------------+ +| 1 | 2^(-149) | 0x800000 * 2^(-149) | +| 2 | 2^(-148) | 0x800000 * 2^(-148) | +| ... | ... | ... | +| 253 | 2^103 | 0x800000 * 2^103 | +| 254 | 2^104 | 0x800000 * 2^104 | ++-------+----------------+----------------------+ + +The vmin and vmax boundaries are defined as: + +- vmin = 0x800000 * 2^(-149) +- vmax = 0xffffff * 2^104 +*/ + +template +struct IeeeTable { +private: + static_assert(std::is_floating_point::value, "ValueType must be a floating point type"); + static constexpr uint8_t TABLESIZE = 255; + static constexpr uint32_t mantissa_min = 0x800000; + static constexpr uint32_t mantissa_max = 0xffffff; + +public: + static constexpr std::array e = []() { + std::array multiplier{}; + for (uint8_t i = 1; i < TABLESIZE; ++i) { + multiplier[i] = codes_power(i - 150, 2); + } + return multiplier; + }(); + static constexpr std::array v = []() { + std::array values{}; + for (uint8_t i = 1; i < TABLESIZE; ++i) { + values[i] = e[i] * mantissa_min; + } + return values; + }(); + static constexpr ValueType vmin = e[1] * mantissa_min; + static constexpr ValueType vmax = e[254] * mantissa_max; +}; diff --git a/src/grib_scaling.h b/src/grib_scaling.h index 53e3b1d4d..c48b3aa2c 100644 --- a/src/grib_scaling.h +++ b/src/grib_scaling.h @@ -1,10 +1,8 @@ #pragma once -template T codes_power(long s, long n); - /* Return n to the power of s */ template -T codes_power(long s, long n) +constexpr T codes_power(long s, long n) { T divisor = 1.0; if (s == 0) From ced0d8187061b8a3776c0169b42dabf03b36929a Mon Sep 17 00:00:00 2001 From: Eugen Betke Date: Tue, 10 Oct 2023 10:59:22 +0000 Subject: [PATCH 354/372] Clean up unused grib_ieee_table_e() and grib_ieee_table_v() --- src/eccodes_prototypes.h | 2 -- src/grib_ieeefloat.cc | 10 ---------- 2 files changed, 12 deletions(-) diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 278fdcf7e..3b405a05a 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -765,8 +765,6 @@ unsigned long grib_ibm_nearest_smaller_to_long(double x); int grib_nearest_smaller_ibm_float(double a, double* ret); /* grib_ieeefloat.cc*/ -double grib_ieee_table_e(unsigned long e); -double grib_ieee_table_v(unsigned long e); unsigned long grib_ieee_to_long(double x); double grib_ieeefloat_error(double x); double grib_long_to_ieee(unsigned long x); diff --git a/src/grib_ieeefloat.cc b/src/grib_ieeefloat.cc index c473f81e8..a8bfd557a 100644 --- a/src/grib_ieeefloat.cc +++ b/src/grib_ieeefloat.cc @@ -35,16 +35,6 @@ static void binary_search(const double xx[], const unsigned long n, double x, un *j = jl; } -double grib_ieee_table_e(unsigned long e) -{ - return ieee_table.e[e]; -} - -double grib_ieee_table_v(unsigned long e) -{ - return ieee_table.v[e]; -} - unsigned long grib_ieee_to_long(double x) { unsigned long s = 0; From 86d85d60c198dd0366ecfad925653431416966a5 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 10 Oct 2023 11:27:00 +0000 Subject: [PATCH 355/372] Testing: Decode integer key as string --- tests/grib_filter.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/grib_filter.sh b/tests/grib_filter.sh index dee06e373..6a7ebb38f 100755 --- a/tests/grib_filter.sh +++ b/tests/grib_filter.sh @@ -378,6 +378,14 @@ cat >$tempFilt < $tempOut +# Decode an integer key as string +cat >$tempFilt < $tempOut +cat $tempOut +grep "MISSING" $tempOut + # Clean up rm -f $tempGrib $tempFilt $tempOut $tempRef From 119de10a9da811ca0ddd8cf06f6f4fac99e568bd Mon Sep 17 00:00:00 2001 From: Eugen Betke Date: Tue, 10 Oct 2023 14:31:51 +0000 Subject: [PATCH 356/372] Use Visual Studio 2022 --- .appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 4b0a3eaaa..9320dead6 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -9,7 +9,7 @@ branches: - develop - master -image: Visual Studio 2015 +image: Visual Studio 2022 environment: CONDA: c:\Miniconda37-x64 @@ -63,7 +63,7 @@ platform: before_build: - cmd: call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 - - cmd: call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64 + - cmd: call "C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 build_script: - cmd: cd %ECCODES_SRC% From a620a9ec4be3929695761d12a7c5d81181a19737 Mon Sep 17 00:00:00 2001 From: Eugen Betke Date: Tue, 10 Oct 2023 14:43:05 +0000 Subject: [PATCH 357/372] Remove path to the SetEnv.bat --- .appveyor.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.appveyor.yml b/.appveyor.yml index 9320dead6..ddb857542 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -62,7 +62,6 @@ platform: - x64 before_build: - - cmd: call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 - cmd: call "C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 build_script: From bcb2606740b9cf22bb8d50a015a54745de4c0d64 Mon Sep 17 00:00:00 2001 From: Eugen Betke Date: Tue, 10 Oct 2023 14:49:46 +0000 Subject: [PATCH 358/372] Change path to vcvarsall.bat --- .appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.appveyor.yml b/.appveyor.yml index ddb857542..096e0e4c8 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -62,7 +62,7 @@ platform: - x64 before_build: - - cmd: call "C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 + - cmd: call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 build_script: - cmd: cd %ECCODES_SRC% From 5a1f65bed0b88d19796cf0ff585499e6bff032ff Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 10 Oct 2023 17:49:20 +0100 Subject: [PATCH 359/372] Windows: Upgrade to Visual Studio 2022 --- .appveyor.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 4b0a3eaaa..096e0e4c8 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -9,7 +9,7 @@ branches: - develop - master -image: Visual Studio 2015 +image: Visual Studio 2022 environment: CONDA: c:\Miniconda37-x64 @@ -62,8 +62,7 @@ platform: - x64 before_build: - - cmd: call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 - - cmd: call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64 + - cmd: call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 build_script: - cmd: cd %ECCODES_SRC% From 5b702b03fcd9413087de63dc157d14f283cbe72b Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 10 Oct 2023 18:31:23 +0100 Subject: [PATCH 360/372] Testing --- tests/grib_to_netcdf.sh | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/grib_to_netcdf.sh b/tests/grib_to_netcdf.sh index 9e2151b7c..7a2a6f7ad 100755 --- a/tests/grib_to_netcdf.sh +++ b/tests/grib_to_netcdf.sh @@ -36,19 +36,19 @@ if command -v "ncdump" >/dev/null 2>&1; then NC_DUMPER="ncdump" fi -echo "Test ECC-1041: One parameter with different expvers ..." -# ------------------------------------------------------------ -# This has 5 messages, all 'tp'. Change the first message to have a different expver -input=${data_dir}/tp_ecmwf.grib -${tools_dir}/grib_set -w stepRange=12 -s experimentVersionNumber=0005 $input $tempGrib -${tools_dir}/grib_to_netcdf -o $tempNetcdf $tempGrib -if test "x$NC_DUMPER" != "x"; then - $NC_DUMPER -h $tempNetcdf > $tempText - grep -q "short tp_0005" $tempText - grep -q "short tp_0001" $tempText -fi - if [ $ECCODES_ON_WINDOWS -eq 0 ]; then + echo "Test ECC-1041: One parameter with different expvers ..." + # ------------------------------------------------------------ + # This has 5 messages, all 'tp'. Change the first message to have a different expver + input=${data_dir}/tp_ecmwf.grib + ${tools_dir}/grib_set -w stepRange=12 -s experimentVersionNumber=0005 $input $tempGrib + ${tools_dir}/grib_to_netcdf -o $tempNetcdf $tempGrib + if test "x$NC_DUMPER" != "x"; then + $NC_DUMPER -h $tempNetcdf > $tempText + grep -q "short tp_0005" $tempText + grep -q "short tp_0001" $tempText + fi + echo "Test HDF5 decoding ..." # --------------------------- # Note: this is only available in NetCDF-4. So need to check if the command worked with -k3 From 71c091f8f95318f45ad29107c2356b32378c9b3a Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Tue, 10 Oct 2023 21:46:57 +0100 Subject: [PATCH 361/372] Testing: grib_to_netcdf --- tests/CMakeLists.txt | 2 +- tests/grib_to_netcdf.sh | 52 ++++++++++++++++++++--------------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 595baae99..a2abbfdc3 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -425,7 +425,7 @@ if( HAVE_BUILD_TOOLS ) ecbuild_add_test( TARGET eccodes_t_grib_to_netcdf TYPE SCRIPT - CONDITION HAVE_NETCDF AND ENABLE_EXTRA_TESTS + CONDITION HAVE_NETCDF AND ENABLE_EXTRA_TESTS AND NOT ECCODES_ON_WINDOWS COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/grib_to_netcdf.sh TEST_DEPENDS eccodes_download_gribs ) diff --git a/tests/grib_to_netcdf.sh b/tests/grib_to_netcdf.sh index 7a2a6f7ad..e83f9a620 100755 --- a/tests/grib_to_netcdf.sh +++ b/tests/grib_to_netcdf.sh @@ -36,35 +36,35 @@ if command -v "ncdump" >/dev/null 2>&1; then NC_DUMPER="ncdump" fi -if [ $ECCODES_ON_WINDOWS -eq 0 ]; then - echo "Test ECC-1041: One parameter with different expvers ..." - # ------------------------------------------------------------ - # This has 5 messages, all 'tp'. Change the first message to have a different expver - input=${data_dir}/tp_ecmwf.grib - ${tools_dir}/grib_set -w stepRange=12 -s experimentVersionNumber=0005 $input $tempGrib - ${tools_dir}/grib_to_netcdf -o $tempNetcdf $tempGrib - if test "x$NC_DUMPER" != "x"; then - $NC_DUMPER -h $tempNetcdf > $tempText - grep -q "short tp_0005" $tempText - grep -q "short tp_0001" $tempText - fi - echo "Test HDF5 decoding ..." - # --------------------------- - # Note: this is only available in NetCDF-4. So need to check if the command worked with -k3 - input=${data_dir}/sample.grib2 - set +e - ${tools_dir}/grib_to_netcdf -k3 -o $tempNetcdf $input 2>/dev/null - stat=$? - set -e - if [ $stat -eq 0 ]; then - have_netcdf4=1 - ${tools_dir}/grib_dump -TA -O $tempNetcdf - res=`${tools_dir}/grib_get -TA -p identifier $tempNetcdf` - [ "$res" = "HDF5" ] - fi +echo "Test ECC-1041: One parameter with different expvers ..." +# ------------------------------------------------------------ +# This has 5 messages, all 'tp'. Change the first message to have a different expver +input=${data_dir}/tp_ecmwf.grib +${tools_dir}/grib_set -w stepRange=12 -s experimentVersionNumber=0005 $input $tempGrib +${tools_dir}/grib_to_netcdf -o $tempNetcdf $tempGrib +if test "x$NC_DUMPER" != "x"; then + $NC_DUMPER -h $tempNetcdf > $tempText + grep -q "short tp_0005" $tempText + grep -q "short tp_0001" $tempText fi +echo "Test HDF5 decoding ..." +# --------------------------- +# Note: this is only available in NetCDF-4. So need to check if the command worked with -k3 +input=${data_dir}/sample.grib2 +set +e +${tools_dir}/grib_to_netcdf -k3 -o $tempNetcdf $input 2>/dev/null +stat=$? +set -e +if [ $stat -eq 0 ]; then + have_netcdf4=1 + ${tools_dir}/grib_dump -TA -O $tempNetcdf + res=`${tools_dir}/grib_get -TA -p identifier $tempNetcdf` + [ "$res" = "HDF5" ] +fi + + grib_files="\ regular_latlon_surface.grib2 \ regular_latlon_surface.grib1 \ From aee89904a8818221fcc78474060e283bdca1a55e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 12 Oct 2023 11:38:40 +0100 Subject: [PATCH 362/372] ECC-1701: Compile-time initialisation of IBM/IEEE float tables --- src/grib_ibmfloat.h | 20 +++++++++----------- src/grib_ieeefloat.cc | 12 +----------- src/grib_ieeefloat.h | 16 ++++++++-------- 3 files changed, 18 insertions(+), 30 deletions(-) diff --git a/src/grib_ibmfloat.h b/src/grib_ibmfloat.h index a15736331..e979d4e9b 100644 --- a/src/grib_ibmfloat.h +++ b/src/grib_ibmfloat.h @@ -10,19 +10,17 @@ #pragma once -#include "grib_api_internal.h" #include "grib_scaling.h" #include #include #include - /** .. _init_ieee_table: Init IBM Floats Table -=============== +===================== Initializes the ibm_table with IBM Float values. Nearest smaller values (e.g., reference values for grid_simple) are taken from this table. @@ -31,15 +29,15 @@ Details The table layout is as follows: -+-------+----------------+----------------------+ ++-------+----------------+------------------------+ | idx (i) | multiplier (e) | value (v = mmin * e) | -+-------+----------------+----------------------+ -| 0 | 16^(-70) | 0x100000 * 2^(-70) | -| 1 | 16^(-69) | 0x100000 * 2^(-69) | -| ... | ... | ... | -| 126 | 16^56 | 0x100000 * 2^56 | -| 127 | 16^57 | 0x100000 * 2^57 | -+-------+----------------+----------------------+ ++-------+----------------+------------------------+ +| 0 | 16^(-70) | 0x100000 * 2^(-70) | +| 1 | 16^(-69) | 0x100000 * 2^(-69) | +| ... | ... | ... | +| 126 | 16^56 | 0x100000 * 2^56 | +| 127 | 16^57 | 0x100000 * 2^57 | ++-------+----------------+------------------------+ The vmin and vmax boundaries are defined as: diff --git a/src/grib_ieeefloat.cc b/src/grib_ieeefloat.cc index a8bfd557a..5c8ffbb18 100644 --- a/src/grib_ieeefloat.cc +++ b/src/grib_ieeefloat.cc @@ -8,9 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/*************************************************************************** - * Enrico Fucile - 06.01.2009 * - ***************************************************************************/ #include "grib_ieeefloat.h" /* See old implementation in src/deprecated/grib_ieeefloat.c */ @@ -100,8 +97,6 @@ double grib_ieeefloat_error(double x) { unsigned long e = 0; - //init_table_if_needed(); - if (x < 0) x = -x; @@ -135,7 +130,6 @@ double grib_long_to_ieee(unsigned long x) Assert(0); } #endif - //init_table_if_needed(); if (c == 0 && m == 0) return 0; @@ -167,8 +161,6 @@ unsigned long grib_ieee_nearest_smaller_to_long(double x) if (x == 0) return 0; - //init_table_if_needed(); - l = grib_ieee_to_long(x); y = grib_long_to_ieee(l); @@ -213,10 +205,8 @@ int grib_nearest_smaller_ieee_float(double a, double* ret) { unsigned long l = 0; - //init_table_if_needed(); - if (a > ieee_table.vmax) { - grib_context* c = grib_context_get_default(); + const grib_context* c = grib_context_get_default(); grib_context_log(c, GRIB_LOG_ERROR, "Number is too large: x=%e > xmax=%e (IEEE float)", a, ieee_table.vmax); return GRIB_INTERNAL_ERROR; diff --git a/src/grib_ieeefloat.h b/src/grib_ieeefloat.h index b81ec7b21..29e1011ad 100644 --- a/src/grib_ieeefloat.h +++ b/src/grib_ieeefloat.h @@ -32,15 +32,15 @@ Details The table layout is as follows: -+-------+----------------+----------------------+ ++-------+----------------+------------------------+ | idx (i) | multiplier (e) | value (v = mmin * e) | -+-------+----------------+----------------------+ -| 1 | 2^(-149) | 0x800000 * 2^(-149) | -| 2 | 2^(-148) | 0x800000 * 2^(-148) | -| ... | ... | ... | -| 253 | 2^103 | 0x800000 * 2^103 | -| 254 | 2^104 | 0x800000 * 2^104 | -+-------+----------------+----------------------+ ++-------+----------------+------------------------+ +| 1 | 2^(-149) | 0x800000 * 2^(-149) | +| 2 | 2^(-148) | 0x800000 * 2^(-148) | +| ... | ... | ... | +| 253 | 2^103 | 0x800000 * 2^103 | +| 254 | 2^104 | 0x800000 * 2^104 | ++-------+----------------+------------------------+ The vmin and vmax boundaries are defined as: From 43ae680c47758ef8b51c6acd3a6677eed234b2c4 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 12 Oct 2023 16:49:25 +0100 Subject: [PATCH 363/372] Error messages --- src/grib_expression.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/grib_expression.cc b/src/grib_expression.cc index 9a443c67c..c3cd36305 100644 --- a/src/grib_expression.cc +++ b/src/grib_expression.cc @@ -19,7 +19,7 @@ int grib_expression_native_type(grib_handle* h, grib_expression* g) c = c->super ? *(c->super) : NULL; } if (g->cclass) - grib_context_log(h->context, GRIB_LOG_ERROR, "No native_type() in %s\n", g->cclass->name); + grib_context_log(h->context, GRIB_LOG_ERROR, "No native_type() in %s", g->cclass->name); Assert(1 == 0); return 0; } @@ -55,7 +55,7 @@ const char* grib_expression_evaluate_string(grib_handle* h, grib_expression* g, c = c->super ? *(c->super) : NULL; } if (g->cclass) - grib_context_log(h->context, GRIB_LOG_ERROR, "No evaluate_string() in %s\n", g->cclass->name); + grib_context_log(h->context, GRIB_LOG_ERROR, "No evaluate_string() in %s", g->cclass->name); *err = GRIB_INVALID_TYPE; return 0; From 7101651b466ced8f07412e421a0b8c40aa348463 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 12 Oct 2023 17:49:21 +0000 Subject: [PATCH 364/372] ECC-1703 --- ...ta_g1second_order_constant_width_packing.cc | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/grib_accessor_class_data_g1second_order_constant_width_packing.cc b/src/grib_accessor_class_data_g1second_order_constant_width_packing.cc index eba3ecc24..c3f74204d 100644 --- a/src/grib_accessor_class_data_g1second_order_constant_width_packing.cc +++ b/src/grib_accessor_class_data_g1second_order_constant_width_packing.cc @@ -258,14 +258,22 @@ static int unpack_double(grib_accessor* a, double* values, size_t* len) return ret; secondaryBitmap = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfSecondOrderPackedValues); + if (!secondaryBitmap) + return GRIB_OUT_OF_MEMORY; + grib_decode_long_array(buf, &pos, 1, numberOfSecondOrderPackedValues, secondaryBitmap); pos = 8 * ((pos + 7) / 8); firstOrderValues = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfGroups); + if (!firstOrderValues) + return GRIB_OUT_OF_MEMORY; + grib_decode_long_array(buf, &pos, widthOfFirstOrderValues, numberOfGroups, firstOrderValues); pos = 8 * ((pos + 7) / 8); X = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfSecondOrderPackedValues); + if (!X) + return GRIB_OUT_OF_MEMORY; if (groupWidth > 0) { grib_decode_long_array(buf, &pos, groupWidth, numberOfSecondOrderPackedValues, X); @@ -273,7 +281,10 @@ static int unpack_double(grib_accessor* a, double* values, size_t* len) i = -1; while (n < numberOfSecondOrderPackedValues) { i += secondaryBitmap[n]; - X[n] = firstOrderValues[i] + X[n]; + long fovi = 0; + if ( i >=0 && i < numberOfGroups ) + fovi = firstOrderValues[i]; + X[n] = fovi + X[n]; n++; } } @@ -282,7 +293,10 @@ static int unpack_double(grib_accessor* a, double* values, size_t* len) i = -1; while (n < numberOfSecondOrderPackedValues) { i += secondaryBitmap[n]; - X[n] = firstOrderValues[i]; + long fovi = 0; + if ( i >=0 && i < numberOfGroups ) + fovi = firstOrderValues[i]; + X[n] = fovi; n++; } } From fa9f8ea763ec304d444d61df0bb10fb7de3a6731 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Thu, 12 Oct 2023 17:50:18 +0000 Subject: [PATCH 365/372] ECC-1703: GRIB: AddressSanitizer: heap-buffer-overflow --- ..._accessor_class_data_g1second_order_constant_width_packing.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/grib_accessor_class_data_g1second_order_constant_width_packing.cc b/src/grib_accessor_class_data_g1second_order_constant_width_packing.cc index c3f74204d..079e91829 100644 --- a/src/grib_accessor_class_data_g1second_order_constant_width_packing.cc +++ b/src/grib_accessor_class_data_g1second_order_constant_width_packing.cc @@ -282,6 +282,7 @@ static int unpack_double(grib_accessor* a, double* values, size_t* len) while (n < numberOfSecondOrderPackedValues) { i += secondaryBitmap[n]; long fovi = 0; + // ECC-1703 if ( i >=0 && i < numberOfGroups ) fovi = firstOrderValues[i]; X[n] = fovi + X[n]; From 00cc6dd2504797db3f91e705638ce497e1c5c595 Mon Sep 17 00:00:00 2001 From: Eugen Betke Date: Thu, 12 Oct 2023 12:42:17 +0000 Subject: [PATCH 366/372] Fix index in IbmTable --- src/grib_ibmfloat.h | 8 +++++--- src/grib_ieeefloat.h | 9 ++++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/grib_ibmfloat.h b/src/grib_ibmfloat.h index e979d4e9b..e521076f5 100644 --- a/src/grib_ibmfloat.h +++ b/src/grib_ibmfloat.h @@ -48,21 +48,23 @@ The vmin and vmax boundaries are defined as: struct IbmTable { private: using ValueType = double; - static constexpr uint8_t TABLESIZE = 128; + static constexpr int TABLESIZE = 128; static constexpr uint32_t mantissa_min = 0x100000; static constexpr uint32_t mantissa_max = 0xffffff; public: static constexpr std::array e = []() { std::array multiplier{}; - for (uint8_t i = 1; i < TABLESIZE; ++i) { + multiplier[0] = 0; + for (int i = 0; i < TABLESIZE; ++i) { multiplier[i] = codes_power(i - 70, 16); } return multiplier; }(); static constexpr std::array v = []() { std::array values{}; - for (uint8_t i = 0; i < TABLESIZE; ++i) { + values[0] = 0; + for (int i = 0; i < TABLESIZE; ++i) { values[i] = e[i] * mantissa_min; } return values; diff --git a/src/grib_ieeefloat.h b/src/grib_ieeefloat.h index 29e1011ad..fb198a3cb 100644 --- a/src/grib_ieeefloat.h +++ b/src/grib_ieeefloat.h @@ -35,6 +35,7 @@ The table layout is as follows: +-------+----------------+------------------------+ | idx (i) | multiplier (e) | value (v = mmin * e) | +-------+----------------+------------------------+ +| 0 | 0 | 0 | | 1 | 2^(-149) | 0x800000 * 2^(-149) | | 2 | 2^(-148) | 0x800000 * 2^(-148) | | ... | ... | ... | @@ -52,21 +53,23 @@ template struct IeeeTable { private: static_assert(std::is_floating_point::value, "ValueType must be a floating point type"); - static constexpr uint8_t TABLESIZE = 255; + static constexpr int TABLESIZE = 255; static constexpr uint32_t mantissa_min = 0x800000; static constexpr uint32_t mantissa_max = 0xffffff; public: static constexpr std::array e = []() { std::array multiplier{}; - for (uint8_t i = 1; i < TABLESIZE; ++i) { + multiplier[0] = 0; + for (int i = 1; i < TABLESIZE; ++i) { multiplier[i] = codes_power(i - 150, 2); } return multiplier; }(); static constexpr std::array v = []() { std::array values{}; - for (uint8_t i = 1; i < TABLESIZE; ++i) { + values[0] = 0; + for (int i = 1; i < TABLESIZE; ++i) { values[i] = e[i] * mantissa_min; } return values; From bfbf8bf22903edd698f3f3a1da1d69aa0a597d5e Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 13 Oct 2023 09:21:15 +0100 Subject: [PATCH 367/372] Testing: Re-enable grib_to_netcdf for Windows --- tests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index a2abbfdc3..595baae99 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -425,7 +425,7 @@ if( HAVE_BUILD_TOOLS ) ecbuild_add_test( TARGET eccodes_t_grib_to_netcdf TYPE SCRIPT - CONDITION HAVE_NETCDF AND ENABLE_EXTRA_TESTS AND NOT ECCODES_ON_WINDOWS + CONDITION HAVE_NETCDF AND ENABLE_EXTRA_TESTS COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/grib_to_netcdf.sh TEST_DEPENDS eccodes_download_gribs ) From 4bf67c7afc3ddbdea1ae6f527ebfc9e93470f683 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 13 Oct 2023 10:46:14 +0100 Subject: [PATCH 368/372] Testing: Disable grib_to_netcdf for Windows --- tests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 595baae99..a2abbfdc3 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -425,7 +425,7 @@ if( HAVE_BUILD_TOOLS ) ecbuild_add_test( TARGET eccodes_t_grib_to_netcdf TYPE SCRIPT - CONDITION HAVE_NETCDF AND ENABLE_EXTRA_TESTS + CONDITION HAVE_NETCDF AND ENABLE_EXTRA_TESTS AND NOT ECCODES_ON_WINDOWS COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/grib_to_netcdf.sh TEST_DEPENDS eccodes_download_gribs ) From db19ba940592464b017732e6b7d909e11c5a4ad7 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 13 Oct 2023 12:17:50 +0100 Subject: [PATCH 369/372] ECC-1704: GRIB: Implement unpack_string for validityTime --- src/grib_accessor_class_validity_time.cc | 25 +++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/grib_accessor_class_validity_time.cc b/src/grib_accessor_class_validity_time.cc index 36af6cb98..e07e71e15 100644 --- a/src/grib_accessor_class_validity_time.cc +++ b/src/grib_accessor_class_validity_time.cc @@ -17,6 +17,7 @@ CLASS = accessor SUPER = grib_accessor_class_long IMPLEMENTS = unpack_long + IMPLEMENTS = unpack_string IMPLEMENTS = init;dump MEMBERS=const char* date MEMBERS=const char* time @@ -39,6 +40,7 @@ or edit "accessor.class" and rerun ./make_class.pl */ static int unpack_long(grib_accessor*, long* val, size_t* len); +static int unpack_string(grib_accessor*, char*, size_t* len); static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); @@ -84,7 +86,7 @@ static grib_accessor_class _grib_accessor_class_validity_time = { 0, /* unpack_double */ 0, /* unpack_float */ 0, /* pack_string */ - 0, /* unpack_string */ + &unpack_string, /* unpack_string */ 0, /* pack_string_array */ 0, /* unpack_string_array */ 0, /* pack_bytes */ @@ -227,3 +229,24 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) return GRIB_SUCCESS; } + +static int unpack_string(grib_accessor* a, char* val, size_t* len) +{ + int err = 0; + long v = 0; + size_t lsize = 1; + + err = unpack_long(a, &v, &lsize); + if (err) return err; + + if (*len < 5) { + grib_context_log(a->context, GRIB_LOG_ERROR, "Key %s (unpack_string): Buffer too small", a->name); + *len = 5; + return GRIB_BUFFER_TOO_SMALL; + } + + snprintf(val, 64, "%04ld", v); + + len[0] = 5; + return GRIB_SUCCESS; +} From 993cc42e4c032299ffd627c6973550304567c73f Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 13 Oct 2023 12:28:32 +0100 Subject: [PATCH 370/372] ECC-1704: Test --- tests/grib_step.sh | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tests/grib_step.sh b/tests/grib_step.sh index 2b1ca37b6..0a5cf7425 100755 --- a/tests/grib_step.sh +++ b/tests/grib_step.sh @@ -17,6 +17,9 @@ tempGrb=${data_dir}/temp.$label.out.grib templog=${data_dir}/temp.$label.log rm -f $templog $tempGrb +grib1_sample=$ECCODES_SAMPLES_PATH/GRIB1.tmpl +grib2_sample=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + for i in 0 10 do for s in 0 1200 600 6000 @@ -83,8 +86,6 @@ hourEnd=$1; dayEnd=$2 # ECC-134 case-sensitivity # -------------------------- -grib1_sample=$ECCODES_SAMPLES_PATH/GRIB1.tmpl -grib2_sample=$ECCODES_SAMPLES_PATH/GRIB2.tmpl temp=temp.step.$$.grib # M is for Month (code 3) ${tools_dir}/grib_set -s indicatorOfUnitOfTimeRange=M $grib1_sample $temp @@ -147,6 +148,14 @@ grib_check_key_equals $input "dataDate,dataTime,step" "20061205 1200 6" grib_check_key_equals $input "validityDate,validityTime" "20061205 1800" grib_check_key_equals $input "validityDateTime:s" "20061205 001800" +# ECC-1704: Key validityTime as string +# ----------------------------------------------- +result=$( ${tools_dir}/grib_get -p validityTime:s -s dataTime=0000 $grib2_sample ) +[ "$result" = "0000" ] +input=$data_dir/simple.grib +grib_check_key_equals $input "validityTime:s" "0600" + + # Key julianDay # ----------------------------------------------- input=${data_dir}/sample.grib2 @@ -157,7 +166,6 @@ grib_check_key_equals $temp day 7 # Seconds (ignored) # ----------------------------------------------- -grib2_sample=$ECCODES_SAMPLES_PATH/GRIB2.tmpl ${tools_dir}/grib_ls -s second=9 -n time $grib2_sample 2>$templog # Something should have been written to stderr [ -s $templog ] From 1c24fa08f50bf13139c52e3eaca06904611d0c02 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 13 Oct 2023 15:34:17 +0100 Subject: [PATCH 371/372] GRIB-488: Tighten the condition for ERA-CLIM data --- src/grib_accessor_class_g2end_step.cc | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/grib_accessor_class_g2end_step.cc b/src/grib_accessor_class_g2end_step.cc index 285a30085..2a044d294 100644 --- a/src/grib_accessor_class_g2end_step.cc +++ b/src/grib_accessor_class_g2end_step.cc @@ -209,18 +209,24 @@ static const int u2s[] = { 1800 /* (15) 30 minutes */ }; -/* See GRIB-488 */ -static int is_special_expver(grib_handle* h) +// See GRIB-488 +static bool is_special_expver(const grib_handle* h) { - int ret = 0; - char strExpVer[50] = {0,}; + int ret = 0; + char strMarsExpVer[50] = {0,}; + char strMarsClass[50] = {0,}; size_t slen = 50; - ret = grib_get_string(h, "experimentVersionNumber", strExpVer, &slen); - if (ret == GRIB_SUCCESS && !strcmp(strExpVer, "1605")) { - return 1; /* Special case of expVer 1605! */ + ret = grib_get_string(h, "mars.class", strMarsClass, &slen); + if (ret == GRIB_SUCCESS && STR_EQUAL(strMarsClass, "em")) { + // em = ERA-CLIM model integration for the 20th-century (ERA-20CM) + slen = 50; + ret = grib_get_string(h, "experimentVersionNumber", strMarsExpVer, &slen); + if (ret == GRIB_SUCCESS && STR_EQUAL(strMarsExpVer, "1605")) { + return true; // Special case of expVer 1605 in class "em" + } } - return 0; + return false; } static int convert_time_range( From 66e68d63f4769ef8a1d1ab380bd25e373d620dae Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 13 Oct 2023 17:07:41 +0000 Subject: [PATCH 372/372] Testing: iScansNegatively=1 --- tests/grib_grid_polar_stereographic.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/grib_grid_polar_stereographic.sh b/tests/grib_grid_polar_stereographic.sh index 2d1e73291..251dd0095 100755 --- a/tests/grib_grid_polar_stereographic.sh +++ b/tests/grib_grid_polar_stereographic.sh @@ -22,6 +22,9 @@ ${tools_dir}/grib_get_data $input > $tempOut ${tools_dir}/grib_ls -l 60,0 $input +# Scanning mode +${tools_dir}/grib_get_data -s iScansNegatively=1 $input > $tempOut + # Clean up rm -f $tempFilter $tempGrib $tempOut