diff --git a/CMakeLists.txt b/CMakeLists.txt index e708666e7..724c9130d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ cmake_minimum_required( VERSION 3.12 FATAL_ERROR ) find_package( ecbuild 3.7 REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../ecbuild) # Initialise project -project( eccodes VERSION 2.27.2 LANGUAGES C ) +project( eccodes VERSION 2.28.0 LANGUAGES C ) ############################################################################### # system checks needed for eccodes_config.h and some options like MEMFS diff --git a/README.md b/README.md index df4413a69..982fd2476 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ ecCodes ======= -[![Linux & macOS: master](https://img.shields.io/github/workflow/status/ecmwf/eccodes/ci/master?label=Linux-and-macOS-master)](https://github.com/ecmwf/eccodes/actions/workflows/ci.yml?query=branch%3Amaster) -[![Linux & macOS: develop](https://img.shields.io/github/workflow/status/ecmwf/eccodes/ci/develop?label=Linux-and-macOS-develop)](https://github.com/ecmwf/eccodes/actions/workflows/ci.yml?query=branch%3Adevelop) +[![Linux & macOS: master](https://img.shields.io/github/actions/workflow/status/ecmwf/eccodes/ci.yml?branch=master&label=Linux%20%26%20MacOS%3A%20master)](https://github.com/ecmwf/eccodes/actions/workflows/ci.yml?query=branch%3Amaster) +[![Linux & macOS: develop](https://img.shields.io/github/actions/workflow/status/ecmwf/eccodes/ci.yml?branch=develop&label=Linux%20%26%20MacOS%3A%20develop)](https://github.com/ecmwf/eccodes/actions/workflows/ci.yml?query=branch%3Adevelop) -[![Windows: master](https://img.shields.io/appveyor/ci/ecmwf/eccodes/master.svg?label=Windows-master)](https://ci.appveyor.com/project/ecmwf/eccodes/branch/master) -[![Windows: develop](https://img.shields.io/appveyor/ci/ecmwf/eccodes/develop.svg?label=Windows-dev)](https://ci.appveyor.com/project/ecmwf/eccodes/branch/develop) +[![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) 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: diff --git a/data/bitmap.diff b/data/bitmap.diff index a9d7527d0..918301a75 100644 --- a/data/bitmap.diff +++ b/data/bitmap.diff @@ -15,12 +15,9 @@ GRIB { # Unknown code table entry (grib1/0.ecmf.table) subCentre = 0; paramId = 130; - #-READ ONLY- cfNameECMF = air_temperature; #-READ ONLY- cfName = air_temperature; - #-READ ONLY- cfVarNameECMF = t; #-READ ONLY- cfVarName = t; #-READ ONLY- units = K; - #-READ ONLY- nameECMF = Temperature; #-READ ONLY- name = Temperature; decimalScaleFactor = 0; dataDate = 20080206; @@ -141,11 +138,11 @@ GRIB { #-READ ONLY- maximum = 224.455; #-READ ONLY- minimum = 160.252; #-READ ONLY- average = 194.458; - #-READ ONLY- numberOfMissing = 0; #-READ ONLY- standardDeviation = 12.8976; #-READ ONLY- skewness = -0.807543; #-READ ONLY- kurtosis = 0.45733; #-READ ONLY- isConstant = 0; + #-READ ONLY- numberOfMissing = 0; gridType = reduced_gg; #-READ ONLY- getNumberOfValues = 6114; } diff --git a/data/no_bitmap.diff b/data/no_bitmap.diff index a79a11110..f8d8ae331 100644 --- a/data/no_bitmap.diff +++ b/data/no_bitmap.diff @@ -15,12 +15,9 @@ GRIB { # Unknown code table entry (grib1/0.ecmf.table) subCentre = 0; paramId = 130; - #-READ ONLY- cfNameECMF = air_temperature; #-READ ONLY- cfName = air_temperature; - #-READ ONLY- cfVarNameECMF = t; #-READ ONLY- cfVarName = t; #-READ ONLY- units = K; - #-READ ONLY- nameECMF = Temperature; #-READ ONLY- name = Temperature; decimalScaleFactor = 0; dataDate = 20080206; @@ -140,11 +137,11 @@ GRIB { #-READ ONLY- maximum = 224.455; #-READ ONLY- minimum = 160.252; #-READ ONLY- average = 194.458; - #-READ ONLY- numberOfMissing = 0; #-READ ONLY- standardDeviation = 12.8976; #-READ ONLY- skewness = -0.807543; #-READ ONLY- kurtosis = 0.45733; #-READ ONLY- isConstant = 0; + #-READ ONLY- numberOfMissing = 0; gridType = reduced_gg; #-READ ONLY- getNumberOfValues = 6114; } diff --git a/data/tigge_pf_ecmwf.grib2.ref b/data/tigge_pf_ecmwf.grib2.ref index f7fdbb09b..838b9b75a 100644 --- a/data/tigge_pf_ecmwf.grib2.ref +++ b/data/tigge_pf_ecmwf.grib2.ref @@ -3,7 +3,7 @@ ecmf 166 10v m s**-1 10 metre V wind component ecmf 59 cape J kg**-1 Convective available potential energy ecmf 156 gh gpm Geopotential height ecmf 151 msl Pa Mean sea level pressure -ecmf 179 ttr J m**-2 Top net thermal radiation +ecmf 179 ttr J m**-2 Top net long-wave (thermal) radiation ecmf 3 pt K Potential temperature ecmf 60 pv K m**2 kg**-1 s**-1 Potential vorticity ecmf 235 skt K Skin temperature @@ -18,15 +18,15 @@ ecmf 121 mx2t6 K Maximum temperature at 2 metres in the last 6 hours ecmf 122 mn2t6 K Minimum temperature at 2 metres in the last 6 hours ecmf 167 2t K 2 metre temperature ecmf 147 slhf J m**-2 Surface latent heat flux -ecmf 176 ssr J m**-2 Surface net solar radiation -ecmf 177 str J m**-2 Surface net thermal radiation +ecmf 176 ssr J m**-2 Surface net short-wave (solar) radiation +ecmf 177 str J m**-2 Surface net long-wave (thermal) radiation ecmf 134 sp Pa Surface pressure ecmf 146 sshf J m**-2 Surface sensible heat flux ecmf 130 t K Temperature -ecmf 179 ttr J m**-2 Top net thermal radiation +ecmf 179 ttr J m**-2 Top net long-wave (thermal) radiation ecmf 147 slhf J m**-2 Surface latent heat flux -ecmf 176 ssr J m**-2 Surface net solar radiation -ecmf 177 str J m**-2 Surface net thermal radiation +ecmf 176 ssr J m**-2 Surface net short-wave (solar) radiation +ecmf 177 str J m**-2 Surface net long-wave (thermal) radiation ecmf 146 sshf J m**-2 Surface sensible heat flux ecmf 228164 tcc % Total Cloud Cover ecmf 136 tcw kg m**-2 Total column water diff --git a/definitions/add_params_from_tsv.pl b/definitions/add_params_from_tsv.pl index dee5de952..e13b7b86e 100755 --- a/definitions/add_params_from_tsv.pl +++ b/definitions/add_params_from_tsv.pl @@ -27,15 +27,17 @@ use Getopt::Long; my $SANITY_CHECK = 0; my $WRITE_TO_FILES = 0; my $WRITE_TO_PARAMDB = 0; # Be careful. Fill in $contactId before proceeding +my $contactId; # JIRA issue ID # Process arguments. Must be at least one file if (scalar @ARGV < 1) { &usage; } my $result = GetOptions ( - "s" => \$SANITY_CHECK, - "f" => \$WRITE_TO_FILES, - "p" => \$WRITE_TO_PARAMDB + "s" => \$SANITY_CHECK, + "f" => \$WRITE_TO_FILES, + "p" => \$WRITE_TO_PARAMDB, + "c:s" => \$contactId ); $ARGV[0] or &usage; @@ -78,7 +80,6 @@ my $dbh = 0; my $centre_wmo = -3; # WMO centre ID my $centre_ecmwf = 98; # ECMWF centre ID my $edition = 2; # GRIB edition 2 -my $contactId; # JIRA issue ID my $PARAMID_FILENAME = "paramId.def"; my $SHORTNAME_FILENAME = "shortName.def"; @@ -391,9 +392,10 @@ sub is_integer { sub usage { print <= 3000 FEET AND/OR VISIBILITY >= 5 MILES +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20008.table b/definitions/bufr/tables/0/wmo/39/codetables/20008.table new file mode 100644 index 000000000..966bcc2fa --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20008.table @@ -0,0 +1,19 @@ +0 0 SKY CLEAR +1 1 FEW +2 2 SCATTERED +3 3 BROKEN +4 4 OVERCAST +5 5 RESERVED +6 6 SCATTERED/BROKEN +7 7 BROKEN/OVERCAST +8 8 ISOLATED +9 9 ISOLATED EMBEDDED +10 10 OCCASIONAL +11 11 OCCASIONAL EMBEDDED +12 12 FREQUENT +13 13 DENSE +14 14 LAYERS +15 15 OBSCURED (OBSC) +16 16 EMBEDDED (EMBD) +17 17 FREQUENT EMBEDDED +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20009.table b/definitions/bufr/tables/0/wmo/39/codetables/20009.table new file mode 100644 index 000000000..c3f1d7435 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20009.table @@ -0,0 +1,7 @@ +0 0 RESERVED +1 1 NSC NIL SIGNIFICANT CLOUD +2 2 CAVOK +3 3 SKC SKY CLEAR +4 4 NSW NIL SIGNIFICANT WEATHER +5 5 NCD NO CLOUDS DETECTED +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2001.table b/definitions/bufr/tables/0/wmo/39/codetables/2001.table new file mode 100644 index 000000000..470fcccb7 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2001.table @@ -0,0 +1,4 @@ +0 0 AUTOMATIC +1 1 MANNED +2 2 HYBRID: BOTH MANNED AND AUTOMATIC +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20011.table b/definitions/bufr/tables/0/wmo/39/codetables/20011.table new file mode 100644 index 000000000..06c6e106c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20011.table @@ -0,0 +1,16 @@ +0 0 0 +1 1 1 OKTA OR LESS, BUT NOT ZERO +2 2 2 OKTAS +3 3 3 OKTAS +4 4 4 OKTAS +5 5 5 OKTAS +6 6 6 OKTAS +7 7 7 OKTAS OR MORE, BUT NOT 8 OKTAS +8 8 8 OKTAS +9 9 SKY OBSCURED BY FOG AND/OR OTHER METEOROLOGICAL PHENOMENA +10 10 SKY PARTIALLY OBSCURED BY FOG AND/OR OTHER METEOROLOGICAL PHENOMENA +11 11 SCATTERED +12 12 BROKEN +13 13 FEW +14 14 RESERVED +15 15 CLOUD COVER IS INDISCERNIBLE FOR REASONS OTHER THAN FOG OR OTHER METEOROLOGICAL PHENOMENA, OR OBSERVATION IS NOT MADE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20012.table b/definitions/bufr/tables/0/wmo/39/codetables/20012.table new file mode 100644 index 000000000..07984f399 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20012.table @@ -0,0 +1,55 @@ +0 0 CIRRUS (CI) +1 1 CIRROCUMULUS (CC) +2 2 CIRROSTRATUS (CS) +3 3 ALTOCUMULUS (AC) +4 4 ALTOSTRATUS (AS) +5 5 NIMBOSTRATUS (NS) +6 6 STRATOCUMULUS (SC) +7 7 STRATUS (ST) +8 8 CUMULUS (CU) +9 9 CUMULONIMBUS (CB) +10 10 NO CH CLOUDS +11 11 CIRRUS FIBRATUS, SOMETIMES UNCINUS, NOT PROGRESSIVELY INVADING THE SKY +12 12 CIRRUS SPISSATUS, IN PATCHES OR ENTANGLED SHEAVES, WHICH USUALLY DO NOT INCREASE AND SOMETIMES SEEM TO BE THE REMAINS OF THE UPPER PART OF A CUMULONIMBUS; OR CIRRUS CASTELLANUS OR FLOCCUS +13 13 CIRRUS SPISSATUS CUMULONIMBOGENITUS +14 14 CIRRUS UNCINUS OR FIBRATUS, OR BOTH, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN AS A WHOLE +15 15 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS ALONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN AS A WHOLE, BUT THE CONTINUOUS VEIL DOES NOT REACH 45 DEGREES ABOVE THE HORIZON +16 16 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS ALONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN AS A WHOLE; THE CONTINUOUS VEIL EXTENDS MORE THAN 45 DEGREES ABOVE THE HORIZON, WITHOUT THE SKY BEING TOTALLY COVERED +17 17 CIRROSTRATUS COVERING THE WHOLE SKY +18 18 CIRROSTRATUS NOT PROGRESSIVELY INVADING THE SKY AND NOT ENTIRELY COVERING IT +19 19 CIRROCUMULUS ALONE, OR CIRROCUMULUS PREDOMINANT AMONG THE CH CLOUDS +20 20 NO CM CLOUDS +21 21 ALTOSTRATUS TRANSLUCIDUS +22 22 ALTOSTRATUS OPACUS OR NIMBOSTRATUS +23 23 ALTOCUMULUS TRANSLUCIDUS AT A SINGLE LEVEL +24 24 PATCHES (OFTEN LENTICULAR) OF ALTOCUMULUS TRANSLUCIDUS, CONTINUALLY CHANGING AND OCCURRING AT ONE OR MORE LEVELS +25 25 ALTOCUMULUS TRANSLUCIDUS IN BANDS, OR ONE OR MORE LAYERS OF ALTOCUMULUS TRANSLUCIDUS OR OPACUS, PROGRESSIVELY INVADING THE SKY; THESE ALTOCUMULUS CLOUDS GENERALLY THICKEN AS A WHOLE +26 26 ALTOCUMULUS CUMULOGENITUS (OR CUMULONIMBOGENITUS) +27 27 ALTOCUMULUS TRANSLUCIDUS OR OPACUS IN TWO OR MORE LAYERS, OR ALTOCUMULUS OPACUS IN A SINGLE LAYER, NOT PROGRESSIVELY INVADING THE SKY, OR ALTOCUMULUS WITH ALTOSTRATUS OR NIMBOSTRATUS +28 28 ALTOCUMULUS CASTELLANUS OR FLOCCUS +29 29 ALTOCUMULUS OF A CHAOTIC SKY, GENERALLY AT SEVERAL LEVELS +30 30 NO CL CLOUDS +31 31 CUMULUS HUMILIS OR CUMULUS FRACTUS OTHER THAN OF BAD WEATHER, OR BOTH +32 32 CUMULUS MEDIOCRIS OR CONGESTUS, TOWERING CUMULUS (TCU), WITH OR WITHOUT CUMULUS OF SPECIES FRACTUS OR HUMILIS OR STRATOCUMULUS, ALL HAVING THEIR BASES AT THE SAME LEVEL +33 33 CUMULONIMBUS CALVUS, WITH OR WITHOUT CUMULUS, STRATOCUMULUS OR STRATUS +34 34 STRATOCUMULUS CUMULOGENITUS +35 35 STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGENITUS +36 36 STRATUS NEBULOSUS OR STRATUS FRACTUS OTHER THAN OF BAD WEATHER, OR BOTH +37 37 STRATUS FRACTUS OR CUMULUS FRACTUS OF BAD WEATHER, OR BOTH (PANNUS), USUALLY BELOW ALTOSTRATUS OR NIMBOSTRATUS +38 38 CUMULUS AND STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGENITUS, WITH BASES AT DIFFERENT LEVELS +39 39 CUMULONIMBUS CAPILLATUS (OFTEN WITH AN ANVIL), WITH OR WITHOUT CUMULONIMBUS CALVUS, CUMULUS, STRATOCUMULUS, STRATUS OR PANNUS +40 40 CH +41 41 CM +42 42 CL +43 43 CLEAR +44 44 LIQUID WATER +45 45 SUPERCOOLED LIQUID WATER +46 46 MIXED PHASE +47 47 OPTICALLY THICK ICE +48 48 OPTICALLY THIN ICE +49 49 MULTILAYERED ICE +59 59 CLOUD NOT VISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDSTORM, OR OTHER ANALOGOUS PHENOMENA +60 60 CH CLOUDS INVISIBLE OWING TO DARKNESS, FOG, BLOWING DUST OR SAND, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS LAYER OF LOWER CLOUDS +61 61 CM CLOUDS INVISIBLE OWING TO DARKNESS, FOG, BLOWING DUST OR SAND, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF CONTINUOUS LAYER OF LOWER CLOUDS +62 62 CL CLOUDS INVISIBLE OWING TO DARKNESS, FOG, BLOWING DUST OR SAND, OR OTHER SIMILAR PHENOMENA +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20017.table b/definitions/bufr/tables/0/wmo/39/codetables/20017.table new file mode 100644 index 000000000..5ec10bd41 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20017.table @@ -0,0 +1,11 @@ +0 0 ISOLATED CLOUD FRAGMENTS OF CLOUDS +1 1 CONTINUOUS CLOUD +2 2 BROKEN CLOUD - SMALL BREAKS +3 3 BROKEN CLOUD - LARGE BREAKS +4 4 CONTINUOUS CLOUD +5 5 BROKEN CLOUD - SMALL BREAKS +6 6 BROKEN CLOUD - LARGE BREAKS +7 7 CONTINUOUS OR ALMOST CONTINUOUS WAVES WITH TOWERING CLOUDS ABOVE THE TOP OF THE LAYER +8 8 GROUPS OF WAVES WITH TOWERING CLOUDS ABOVE THE TOP OF THE LAYER +9 9 TWO OR MORE LAYERS AT DIFFERENT LEVELS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20018.table b/definitions/bufr/tables/0/wmo/39/codetables/20018.table new file mode 100644 index 000000000..c0ffc3693 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20018.table @@ -0,0 +1,4 @@ +0 0 INCREASING (U) +1 1 DECREASING (D) +2 2 NO DISTINCT CHANGE (N) +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2002.table b/definitions/bufr/tables/0/wmo/39/codetables/2002.table new file mode 100644 index 000000000..a701e1e40 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2002.table @@ -0,0 +1,3 @@ +1 1 CERTIFIED INSTRUMENTS +2 2 ORIGINALLY MEASURED IN KNOTS +3 3 ORIGINALLY MEASURED IN KM H-1 diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20021.table b/definitions/bufr/tables/0/wmo/39/codetables/20021.table new file mode 100644 index 000000000..747a7591e --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20021.table @@ -0,0 +1,23 @@ +1 1 PRECIPITATION - UNKNOWN TYPE +2 2 LIQUID PRECIPITATION NOT FREEZING +3 3 LIQUID FREEZING PRECIPITATION +4 4 DRIZZLE +5 5 RAIN +6 6 SOLID PRECIPITATION +7 7 SNOW +8 8 SNOW GRAINS +9 9 SNOW PELLETS +10 10 ICE PELLETS +11 11 ICE CRYSTALS +12 12 DIAMOND DUST +13 13 SMALL HAIL +14 14 HAIL +15 15 GLAZE +16 16 RIME +17 17 SOFT RIME +18 18 HARD RIME +19 19 CLEAR ICE +20 20 WET SNOW +21 21 HOAR FROST +22 22 DEW +23 23 WHITE DEW diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20022.table b/definitions/bufr/tables/0/wmo/39/codetables/20022.table new file mode 100644 index 000000000..a551aac0e --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20022.table @@ -0,0 +1,7 @@ +0 0 NO PRECIPITATION +1 1 CONTINUOUS +2 2 INTERMITTENT +3 3 SHOWER +4 4 NOT REACHING GROUND +5 5 DEPOSITION +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20023.table b/definitions/bufr/tables/0/wmo/39/codetables/20023.table new file mode 100644 index 000000000..97670dfbb --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20023.table @@ -0,0 +1,14 @@ +1 1 DUST/SAND WHIRL +2 2 SQUALLS +3 3 SANDSTORM +4 4 DUSTSTORM +5 5 LIGHTNING - CLOUD TO SURFACE +6 6 LIGHTNING - CLOUD TO CLOUD +7 7 LIGHTNING - DISTANT +8 8 THUNDERSTORM +9 9 FUNNEL CLOUD NOT TOUCHING SURFACE +10 10 FUNNEL CLOUD TOUCHING SURFACE +11 11 SPRAY +12 12 WATERSPOUT +13 13 WIND SHEAR +14 14 DUST DEVILS diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20024.table b/definitions/bufr/tables/0/wmo/39/codetables/20024.table new file mode 100644 index 000000000..13aba873e --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20024.table @@ -0,0 +1,8 @@ +0 0 NO PHENOMENA +1 1 LIGHT +2 2 MODERATE +3 3 HEAVY +4 4 VIOLENT +5 5 SEVERE +6 6 VERY SEVERE +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20025.table b/definitions/bufr/tables/0/wmo/39/codetables/20025.table new file mode 100644 index 000000000..4d70e338f --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20025.table @@ -0,0 +1,13 @@ +1 1 FOG +2 2 ICE FOG +3 3 STEAM FOG +7 7 MIST +8 8 HAZE +9 9 SMOKE +10 10 VOLCANIC ASH +11 11 DUST +12 12 SAND +13 13 SNOW +14 14 CLOUD +15 15 PRECIPITATION +16 16 IMPOSSIBLE TO DETERMINE WHETHER SNOW IS FALLING OR NOT diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20026.table b/definitions/bufr/tables/0/wmo/39/codetables/20026.table new file mode 100644 index 000000000..285209472 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20026.table @@ -0,0 +1,16 @@ +0 0 NO CHANGE +1 1 SHALLOW +2 2 PATCHES +3 3 PARTIAL +4 4 FREEZING +5 5 LOW DRIFTING +6 6 BLOWING +7 7 INCREASING +8 8 DECREASING +9 9 IN SUSPENSION IN THE AIR +10 10 WALL +11 11 DENSE +12 12 WHITEOUT +13 13 DRIFTING AND BLOWING +14 14 RESERVED +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20027.table b/definitions/bufr/tables/0/wmo/39/codetables/20027.table new file mode 100644 index 000000000..c337f16a7 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20027.table @@ -0,0 +1,8 @@ +1 1 AT TIME OF OBSERVATION +2 2 IN PAST HOUR +3 3 IN TIME PERIOD FOR PAST WEATHER W1W2 +4 4 IN TIME PERIOD SPECIFIED +5 5 RESERVED +6 6 BELOW STATION LEVEL +7 7 AT THE STATION +8 8 IN THE VICINITY diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20028.table b/definitions/bufr/tables/0/wmo/39/codetables/20028.table new file mode 100644 index 000000000..6b701a2b6 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20028.table @@ -0,0 +1,4 @@ +0 0 NO CHANGE (NC) +1 1 FORECAST TO WEAKEN (WKN) +2 2 FORECAST TO INTENSIFY (INTSF) +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20029.table b/definitions/bufr/tables/0/wmo/39/codetables/20029.table new file mode 100644 index 000000000..8b46da891 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20029.table @@ -0,0 +1,4 @@ +0 0 NO RAIN +1 1 RAIN +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2003.table b/definitions/bufr/tables/0/wmo/39/codetables/2003.table new file mode 100644 index 000000000..f364d1811 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2003.table @@ -0,0 +1,13 @@ +0 0 PRESSURE INSTRUMENT ASSOCIATED WITH WIND MEASURING EQUIPMENT +1 1 OPTICAL THEODOLITE +2 2 RADIO THEODOLITE +3 3 RADAR +4 4 VLF-OMEGA +5 5 LORAN C +6 6 WIND PROFILER +7 7 SATELLITE NAVIGATION +8 8 RADIO-ACOUSTIC SOUNDING SYSTEM (RASS) +9 9 SODAR +10 10 LIDAR +14 14 PRESSURE INSTRUMENT ASSOCIATED WITH WIND MEASURING EQUIPMENT BUT PRESSURE ELEMENT FAILED DURING ASCENT +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20032.table b/definitions/bufr/tables/0/wmo/39/codetables/20032.table new file mode 100644 index 000000000..fd37c1e76 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20032.table @@ -0,0 +1,6 @@ +0 0 ICE NOT BUILDING UP +1 1 ICE BUILDING UP SLOWLY +2 2 ICE BUILDING UP RAPIDLY +3 3 ICE MELTING OR BREAKING UP SLOWLY +4 4 ICE MELTING OR BREAKING UP RAPIDLY +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20033.table b/definitions/bufr/tables/0/wmo/39/codetables/20033.table new file mode 100644 index 000000000..817873323 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20033.table @@ -0,0 +1,3 @@ +1 1 ICING FROM OCEAN SPRAY +2 2 ICING FROM FOG +3 3 ICING FROM RAIN diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20034.table b/definitions/bufr/tables/0/wmo/39/codetables/20034.table new file mode 100644 index 000000000..668e91671 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20034.table @@ -0,0 +1,12 @@ +0 0 NO SEA ICE IN SIGHT +1 1 SHIP IN OPEN LEAD MORE THAN 1.0 NAUTICAL MILE WIDE, OR SHIP IN FAST ICE WITH BOUNDARY BEYOND LIMIT OF VISIBILITY +2 2 SEA ICE PRESENT IN CONCENTRATIONS LESS THAN 3/10 (3/8), OPEN WATER OR VERY OPEN PACK ICE +3 3 4/10 TO 6/10 (3/8 TO LESS THAN 6/8), OPEN PACK ICE +4 4 7/10 TO 8/10 (6/8 TO LESS THAN 7/8), CLOSE PACK ICE +5 5 9/10 OR MORE, BUT NOT 10/10 (7/8 TO LESS THAN 8/8), VERY CLOSE PACK ICE +6 6 STRIPS AND PATCHES OF PACK ICE WITH OPEN WATER BETWEEN +7 7 STRIPS AND PATCHES OF CLOSE OR VERY CLOSE PACK ICE WITH AREAS OF LESSER CONCENTRATION BETWEEN +8 8 FAST ICE WITH OPEN WATER, VERY OPEN OR OPEN PACK ICE TO SEAWARD OF THE ICE BOUNDARY +9 9 FAST ICE WITH CLOSE OR VERY CLOSE PACK ICE TO SEAWARD OF THE BOUNDARY +14 14 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY, OR BECAUSE SHIP IS MORE THAN 0.5 NAUTICAL MILE AWAY FROM ICE EDGE +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20035.table b/definitions/bufr/tables/0/wmo/39/codetables/20035.table new file mode 100644 index 000000000..07a4a0284 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20035.table @@ -0,0 +1,12 @@ +0 0 NO ICE OF LAND ORIGIN +1 1 1-5 ICEBERGS, NO GROWLERS OR BERGY BITS +2 2 6-10 ICEBERGS, NO GROWLERS OR BERGY BITS +3 3 11-20 ICEBERGS, NO GROWLERS OR BERGY BITS +4 4 UP TO AND INCLUDING 10 GROWLERS AND BERGY BITS - NO ICEBERGS +5 5 MORE THAN 10 GROWLERS AND BERGY BITS - NO ICEBERGS +6 6 1-5 ICEBERGS, WITH GROWLERS AND BERGY BITS +7 7 6-10 ICEBERGS, WITH GROWLERS AND BERGY BITS +8 8 11-20 ICEBERGS, WITH GROWLERS AND BERGY BITS +9 9 MORE THAN 20 ICEBERGS, WITH GROWLERS AND BERGY BITS - A MAJOR HAZARD TO NAVIGATION +14 14 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR BECAUSE ONLY SEA ICE IS VISIBLE +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20036.table b/definitions/bufr/tables/0/wmo/39/codetables/20036.table new file mode 100644 index 000000000..b4cc874bd --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20036.table @@ -0,0 +1,12 @@ +0 0 SHIP IN OPEN WATER WITH FLOATING ICE IN SIGHT +1 1 SHIP IN EASILY PENETRABLE ICE; CONDITIONS IMPROVING +2 2 SHIP IN EASILY PENETRABLE ICE; CONDITIONS NOT CHANGING +3 3 SHIP IN EASILY PENETRABLE ICE; CONDITIONS WORSENING +4 4 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS IMPROVING +5 5 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS NOT CHANGING +6 6 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING. ICE FORMING AND FLOES FREEZING TOGETHER +7 7 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING. ICE UNDER SLIGHT PRESSURE +8 8 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING. ICE UNDER MODERATE OR SEVERE PRESSURE +9 9 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING. SHIP BESET +30 30 UNABLE TO REPORT, BECAUSE OF DARKNESS OR LACK OF VISIBILITY +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20037.table b/definitions/bufr/tables/0/wmo/39/codetables/20037.table new file mode 100644 index 000000000..474eeaae2 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20037.table @@ -0,0 +1,12 @@ +0 0 NEW ICE ONLY (FRAZIL ICE, GREASE ICE, SLUSH, SHUGA) +1 1 NILAS OR ICE RIND, LESS THAN 10 CM THICK +2 2 YOUNG ICE (GREY ICE, GREY-WHITE ICE), 10-30 CM THICK +3 3 PREDOMINANTLY NEW AND/OR YOUNG ICE WITH SOME FIRST-YEAR ICE +4 4 PREDOMINANTLY THIN FIRST-YEAR ICE WITH SOME NEW AND/OR YOUNG ICE +5 5 ALL THIN FIRST-YEAR ICE (30-70 CM THICK) +6 6 PREDOMINANTLY MEDIUM FIRST-YEAR ICE (70-120 CM THICK) AND THICK FIRST-YEAR ICE (>120 CM THICK) WITH SOME THINNER (YOUNGER) FIRST-YEAR ICE +7 7 ALL MEDIUM AND THICK FIRST-YEAR ICE +8 8 PREDOMINANTLY MEDIUM AND THICK FIRST-YEAR ICE WITH SOME OLD ICE (USUALLY MORE THAN 2 METRES THICK) +9 9 PREDOMINANTLY OLD ICE +30 30 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR BECAUSE ONLY ICE OF LAND ORIGIN IS VISIBLE OR BECAUSE SHIP IS MORE THAN 0.5 NAUTICAL MILE AWAY FROM ICE EDGE +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2004.table b/definitions/bufr/tables/0/wmo/39/codetables/2004.table new file mode 100644 index 000000000..a55de6c58 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2004.table @@ -0,0 +1,11 @@ +0 0 USA OPEN PAN EVAPORIMETER (WITHOUT COVER) +1 1 USA OPEN PAN EVAPORIMETER (MESH COVERED) +2 2 GGI-3000 EVAPORIMETER (SUNKEN) +3 3 20 M2 TANK +4 4 OTHERS +5 5 RICE +6 6 WHEAT +7 7 MAIZE +8 8 SORGHUM +9 9 OTHER CROPS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20040.table b/definitions/bufr/tables/0/wmo/39/codetables/20040.table new file mode 100644 index 000000000..889393bf8 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20040.table @@ -0,0 +1,9 @@ +0 0 DRIFT SNOW ENDED BEFORE THE HOUR OF OBSERVATION +1 1 INTENSITY DIMINISHING +2 2 NO CHANGE +3 3 INTENSITY INCREASING +4 4 CONTINUES, APART FROM INTERRUPTION LASTING LESS THAN 30 MINUTES +5 5 GENERAL DRIFT SNOW HAS BECOME DRIFT SNOW NEAR THE GROUND +6 6 DRIFT SNOW NEAR THE GROUND HAS BECOME GENERAL DRIFT SNOW +7 7 DRIFT SNOW HAS STARTED AGAIN AFTER AN INTERRUPTION OF MORE THAN 30 MINUTES +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20041.table b/definitions/bufr/tables/0/wmo/39/codetables/20041.table new file mode 100644 index 000000000..fc571208d --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20041.table @@ -0,0 +1,14 @@ +0 0 NO ICING +1 1 LIGHT ICING +2 2 LIGHT ICING IN CLOUD +3 3 LIGHT ICING IN PRECIPITATION +4 4 MODERATE ICING +5 5 MODERATE ICING IN CLOUD +6 6 MODERATE ICING IN PRECIPITATION +7 7 SEVERE ICING +8 8 SEVERE ICING IN CLOUD +9 9 SEVERE ICING IN PRECIPITATION +10 10 TRACE OF ICING +11 11 TRACE OF ICING IN CLOUD +12 12 TRACE OF ICING IN PRECIPITATION +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20042.table b/definitions/bufr/tables/0/wmo/39/codetables/20042.table new file mode 100644 index 000000000..2493af725 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20042.table @@ -0,0 +1,4 @@ +0 0 NO ICING +1 1 ICING PRESENT +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20045.table b/definitions/bufr/tables/0/wmo/39/codetables/20045.table new file mode 100644 index 000000000..91ae63f48 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20045.table @@ -0,0 +1,4 @@ +0 0 NO SLD CONDITIONS PRESENT +1 1 SLD CONDITIONS PRESENT +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20048.table b/definitions/bufr/tables/0/wmo/39/codetables/20048.table new file mode 100644 index 000000000..4a5488266 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20048.table @@ -0,0 +1,5 @@ +0 0 STABILITY +1 1 DIMINUTION +2 2 INTENSIFICATION +3 3 UNKNOWN +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20050.table b/definitions/bufr/tables/0/wmo/39/codetables/20050.table new file mode 100644 index 000000000..3f8654ed5 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20050.table @@ -0,0 +1,10 @@ +0 0 RESERVED +1 1 1ST LOW CLOUD +2 2 2ND LOW CLOUD +3 3 3RD LOW CLOUD +4 4 1ST MEDIUM CLOUD +5 5 2ND MEDIUM CLOUD +6 6 3RD MEDIUM CLOUD +7 7 1ST HIGH CLOUD +8 8 2ND HIGH CLOUD +255 255 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20055.table b/definitions/bufr/tables/0/wmo/39/codetables/20055.table new file mode 100644 index 000000000..ea06427f6 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20055.table @@ -0,0 +1,12 @@ +0 0 CUMULUS, IF ANY, ARE QUITE SMALL; GENERALLY LESS THAN 2/8 COVERAGE, EXCEPT ON WINDWARD SLOPES OF ELEVATED TERRAIN; AVERAGE WIDTH OF CLOUD IS AT LEAST AS GREAT AS ITS VERTICAL THICKNESS +1 1 CUMULUS OF INTERMEDIATE SIZE WITH CLOUD COVER LESS THAN 5/8; AVERAGE CLOUD WIDTH IS MORE THAN ITS VERTICAL THICKNESS; TOWERS ARE VERTICAL WITH LITTLE OR NO EVIDENCE OF PRECIPITATION, EXCEPT ALONG SLOPES OF ELEVATED TERRAIN; A GENERAL ABSENCE OF MIDDLE AND UPPER CLOUDS +2 2 SWELLING CUMULUS WITH RAPIDLY GROWING TALL TURRETS WHICH DECREASE IN SIZE WITH HEIGHT AND WHOSE TOPS TEND TO SEPARATE FROM THE LONGER CLOUD BODY AND EVAPORATE WITHIN MINUTES OF THE SEPARATION +3 3 SWELLING CUMULUS WITH TOWERS HAVING A PRONOUNCED TILT IN A DOWNWIND DIRECTION; VERTICAL CLOUD THICKNESS IS MORE THAN ONE AND A HALF TIMES THAT OF ITS AVERAGE WIDTH +4 4 SWELLING CUMULUS WITH TOWERS HAVING A PRONOUNCED TILT IN AN UPWIND DIRECTION; VERTICAL CLOUD THICKNESS IS MORE THAN ONE AND A HALF TIMES THAT OF ITS AVERAGE WIDTH +5 5 TALL CUMULUS CONGESTUS WITH VERTICAL THICKNESS MORE THAN TWICE THE AVERAGE WIDTH; NOT ORGANIZED IN CLUSTERS OR LINES; ONE OR MORE LAYERS OF CLOUDS EXTEND OUT FROM THE CLOUD TOWERS, ALTHOUGH NO CONTINUOUS CLOUD LAYERS EXIST +6 6 ISOLATED CUMULONIMBUS OR LARGE CLUSTERS OF CUMULUS TURRETS SEPARATED BY WIDE AREAS IN WHICH CLOUDS ARE ABSENT; CLOUD BASES ARE GENERALLY DARK WITH SHOWERS OBSERVED IN MOST CELLS; SOME SCATTERED MIDDLE AND UPPER CLOUDS MAY BE PRESENT; INDIVIDUAL CUMULUS CELLS ARE ONE TO TWO TIMES HIGHER THAN THEY ARE WIDE +7 7 NUMEROUS CUMULUS EXTENDING THROUGH THE MIDDLE TROPOSPHERE WITH BROKEN TO OVERCAST SHEETS OF MIDDLE CLOUDS AND/OR CIRROSTRATUS; CUMULUS TOWERS DO NOT DECREASE GENERALLY IN SIZE WITH HEIGHT; RAGGED DARK CLOUD BASES WITH SOME SHOWERS PRESENT +8 8 CONTINUOUS DENSE MIDDLE CLOUDS AND/OR CIRROSTRATUS CLOUD SHEETS WITH SOME LARGE ISOLATED CUMULONIMBUS OR CUMULUS CONGESTUS CLOUDS PENETRATING THESE SHEETS; LIGHT RAIN OCCASIONALLY OBSERVED FROM THE ALTOSTRATUS; CUMULONIMBUS BASES RAGGED AND DARK WITH SHOWERS VISIBLE +9 9 CONTINUOUS SHEETS OF MIDDLE CLOUDS AND/OR CIRROSTRATUS WITH CUMULONIMBUS AND CUMULUS CONGESTUS IN ORGANIZED LINES OR CLOUD BANDS; RAIN IS GENERALLY OBSERVED FROM ALTOSTRATUS SHEETS AND HEAVY SHOWERS FROM CUMULONIMBUS; WIND HAS A SQUALLY CHARACTER +10 10 STATE OF SKY UNKNOWN OR NOT DESCRIBED BY ANY OF THE ABOVE +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20056.table b/definitions/bufr/tables/0/wmo/39/codetables/20056.table new file mode 100644 index 000000000..204b220b8 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20056.table @@ -0,0 +1,8 @@ +0 0 UNKNOWN +1 1 WATER +2 2 ICE +3 3 MIXED +4 4 CLEAR +5 5 SUPERCOOLED LIQUID WATER +6 6 RESERVED +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2006.table b/definitions/bufr/tables/0/wmo/39/codetables/2006.table new file mode 100644 index 000000000..93b791469 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2006.table @@ -0,0 +1,9 @@ +0 0 RESERVED +1 1 ELASTIC BACKSCATTER LIDAR +2 2 RAMAN BACKSCATTER LIDAR +3 3 RADAR WIND PROFILER +4 4 LIDAR WIND PROFILER +5 5 SODAR WIND PROFILER +6 6 WIND PROFILER +7 7 LIDAR +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20062.table b/definitions/bufr/tables/0/wmo/39/codetables/20062.table new file mode 100644 index 000000000..24d96c46f --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20062.table @@ -0,0 +1,21 @@ +0 0 SURFACE OF GROUND DRY (WITHOUT CRACKS AND NO APPRECIABLE AMOUNT OF DUST OR LOOSE SAND) +1 1 SURFACE OF GROUND MOIST +2 2 SURFACE OF GROUND WET (STANDING WATER IN SMALL OR LARGE POOLS ON SURFACE) +3 3 FLOODED +4 4 SURFACE OF GROUND FROZEN +5 5 GLAZE ON GROUND +6 6 LOOSE DRY DUST OR SAND NOT COVERING GROUND COMPLETELY +7 7 THIN COVER OF LOOSE DRY DUST OR SAND COVERING GROUND COMPLETELY +8 8 MODERATE OR THICK COVER OF LOOSE DRY DUST OR SAND COVERING GROUND COMPLETELY +9 9 EXTREMELY DRY WITH CRACKS +10 10 GROUND PREDOMINANTLY COVERED BY ICE +11 11 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING LESS THAN ONE HALF OF THE GROUND +12 12 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING AT LEAST ONE HALF OF THE GROUND BUT GROUND NOT COMPLETELY COVERED +13 13 EVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND COMPLETELY +14 14 UNEVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND COMPLETELY +15 15 LOOSE DRY SNOW COVERING LESS THAN ONE HALF OF THE GROUND +16 16 LOOSE DRY SNOW COVERING AT LEAST ONE HALF OF THE GROUND BUT GROUND NOT COMPLETELY COVERED +17 17 EVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY +18 18 UNEVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY +19 19 SNOW COVERING GROUND COMPLETELY; DEEP DRIFTS +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20063.table b/definitions/bufr/tables/0/wmo/39/codetables/20063.table new file mode 100644 index 000000000..d1622860b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20063.table @@ -0,0 +1,72 @@ +0 0 RESERVED +1 1 HIGHEST WIND SPEED GUSTS GREATER THAN 11.5 M/S +2 2 HIGHEST MEAN WIND SPEED GREATER THAN 17.5 M/S +7 7 VISIBILITY GREATER THAN 100 000 M +10 10 MIRAGE - NO SPECIFICATION +11 11 MIRAGE - IMAGE OF DISTANT OBJECT RAISED (LOOMING) +12 12 MIRAGE - IMAGE OF DISTANT OBJECT RAISED CLEAR ABOVE THE HORIZON +13 13 MIRAGE - INVERTED IMAGE OF DISTANT OBJECT +14 14 MIRAGE - COMPLEX, MULTIPLE IMAGES OF DISTANT OBJECT (IMAGES NOT INVERTED) +15 15 MIRAGE - COMPLEX, MULTIPLE IMAGES OF DISTANT OBJECT (SOME IMAGES BEING INVERTED) +16 16 MIRAGE - SUN OR MOON SEEN APPRECIABLY DISTORTED +17 17 MIRAGE - SUN VISIBLE, ALTHOUGH ASTRONOMICALLY BELOW THE HORIZON +18 18 MIRAGE - MOON VISIBLE, ALTHOUGH ASTRONOMICALLY BELOW THE HORIZON +19 19 RESERVED +20 20 DAY DARKNESS, BAD, WORST IN DIRECTION SPECIFIED +21 21 DAY DARKNESS, VERY BAD, WORST IN DIRECTION SPECIFIED +22 22 DAY DARKNESS, BLACK, WORST IN DIRECTION SPECIFIED +31 31 SLIGHT COLORATION OF CLOUDS AT SUNRISE ASSOCIATED WITH A TROPICAL DISTURBANCE +32 32 DEEP-RED COLORATION OF CLOUDS AT SUNRISE ASSOCIATED WITH A TROPICAL DISTURBANCE +33 33 SLIGHT COLORATION OF CLOUDS AT SUNSET ASSOCIATED WITH A TROPICAL DISTURBANCE +34 34 DEEP-RED COLORATION OF CLOUDS AT SUNSET ASSOCIATED WITH A TROPICAL DISTURBANCE +35 35 CONVERGENCE OF CH CLOUDS AT A POINT BELOW 45 DEG FORMING OR INCREASING AND ASSOCIATED WITH A TROPICAL DISTURBANCE +36 36 CONVERGENCE OF CH CLOUDS AT A POINT ABOVE 45 DEG FORMING OR INCREASING AND ASSOCIATED WITH A TROPICAL DISTURBANCE +37 37 CONVERGENCE OF CH CLOUDS AT A POINT BELOW 45 DEG DISSOLVING OR DIMINISHING AND ASSOCIATED WITH A TROPICAL DISTURBANCE +38 38 CONVERGENCE OF CH CLOUDS AT A POINT ABOVE 45 DEG DISSOLVING OR DIMINISHING AND ASSOCIATED WITH A TROPICAL DISTURBANCE +39 39 RESERVED +40 40 HOAR FROST ON HORIZONTAL SURFACES +41 41 HOAR FROST ON HORIZONTAL AND VERTICAL SURFACES +42 42 PRECIPITATION CONTAINING SAND OR DESERT DUST +43 43 PRECIPITATION CONTAINING VOLCANIC ASH +50 50 CALM OR LIGHT WIND FOLLOWED BY A SQUALL +51 51 CALM OR LIGHT WIND FOLLOWED BY A SUCCESSION OF SQUALLS +52 52 GUSTY WEATHER FOLLOWED BY A SQUALL +53 53 GUSTY WEATHER FOLLOWED BY A SUCCESSION OF SQUALLS +54 54 SQUALL FOLLOWED BY GUSTY WEATHER +55 55 GENERAL GUSTY WEATHER WITH SQUALL AT INTERVALS +56 56 SQUALL APPROACHING STATION +57 57 LINE SQUALL +58 58 SQUALL WITH DRIFTING OR BLOWING DUST OR SAND +59 59 LINE SQUALL WITH DRIFTING OR BLOWING DUST OR SAND +60 60 TEMPERATURE STEADY +61 61 TEMPERATURE FALLING, WITHOUT GOING BELOW 0 DEG C +62 62 TEMPERATURE RISING, WITHOUT GOING ABOVE 0 DEG C +63 63 TEMPERATURE FALLING TO A VALUE BELOW 0 DEG C +64 64 TEMPERATURE RISING TO A VALUE ABOVE 0 DEG C +65 65 IRREGULAR VARIATION, OSCILLATIONS OF TEMPERATURE PASSING THROUGH 0 DEG C +66 66 IRREGULAR VARIATION, OSCILLATIONS OF TEMPERATURE NOT PASSING THROUGH 0 DEG C +67 67 VARIATION OF TEMPERATURE NOT OBSERVED +68 68 NOT ALLOCATED +69 69 VARIATION OF TEMPERATURE UNKNOWN OWING TO LACK OF THERMOGRAPH +70 70 VISIBILITY HAS NOT VARIED (SUN VISIBLE) TOWARDS DIRECTION SPECIFIED +71 71 VISIBILITY HAS NOT VARIED (SUN INVISIBLE) TOWARDS DIRECTION SPECIFIED +72 72 VISIBILITY HAS INCREASED (SUN VISIBLE) TOWARDS DIRECTION SPECIFIED +73 73 VISIBILITY HAS INCREASED (SUN INVISIBLE) TOWARDS DIRECTION SPECIFIED +74 74 VISIBILITY HAS DECREASED (SUN VISIBLE) TOWARDS DIRECTION SPECIFIED +75 75 VISIBILITY HAS DECREASED (SUN INVISIBLE) TOWARDS DIRECTION SPECIFIED +76 76 FOG COMING FROM DIRECTION SPECIFIED +77 77 FOG HAS LIFTED, WITHOUT DISSIPATING +78 78 FOG HAS DISPERSED WITHOUT REGARD TO DIRECTION +79 79 MOVING PATCHES OR BANKS OF FOG +80 80 BROCKEN SPECTRE +81 81 RAINBOW +82 82 SOLAR OR LUNAR HALO +83 83 PARHELIA OR ANTHELIA +84 84 SUN PILLAR +85 85 CORONA +86 86 TWILIGHT GLOW +87 87 TWILIGHT GLOW ON THE MOUNTAINS (ALPENGLUEHEN) +88 88 MIRAGE +89 89 ZODIACAL LIGHT +90 90 ST ELMO'S FIRE +1023 1023 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2007.table b/definitions/bufr/tables/0/wmo/39/codetables/2007.table new file mode 100644 index 000000000..05b4c6bd1 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2007.table @@ -0,0 +1,11 @@ +0 0 RESERVED +1 1 SHAFT ENCODER FLOAT SYSTEM +2 2 ULTRASONIC +3 3 RADAR +4 4 PRESSURE (SINGLE TRANSDUCER) +5 5 PRESSURE (MULTIPLE TRANSDUCER) +6 6 PRESSURE (IN STILLING WELL) +7 7 BUBBLER PRESSURE +8 8 ACOUSTIC (WITH SOUNDING TUBE) +9 9 ACOUSTIC (IN OPEN AIR) +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20071.table b/definitions/bufr/tables/0/wmo/39/codetables/20071.table new file mode 100644 index 000000000..72367bf8b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20071.table @@ -0,0 +1,11 @@ +0 0 NO ASSESSMENT +1 1 LESS THAN 50 KM +2 2 BETWEEN 50 AND 200 KM +3 3 MORE THAN 200 KM +4 4 LESS THAN 50 KM +5 5 BETWEEN 50 AND 200 KM +6 6 MORE THAN 200 KM +7 7 LESS THAN 50 KM +8 8 BETWEEN 50 AND 200 KM +9 9 MORE THAN 200 KM +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2008.table b/definitions/bufr/tables/0/wmo/39/codetables/2008.table new file mode 100644 index 000000000..e669727ec --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2008.table @@ -0,0 +1,7 @@ +0 0 FIXED PLATFORM +1 1 MOBILE OFFSHORE DRILL SHIP +2 2 JACK-UP RIG +3 3 SEMI-SUBMERSIBLE PLATFORM +4 4 FLOATING PRODUCTION STORAGE AND OFFLOADING (FPSO) UNIT +5 5 LIGHT VESSEL +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20085.table b/definitions/bufr/tables/0/wmo/39/codetables/20085.table new file mode 100644 index 000000000..f929e878d --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20085.table @@ -0,0 +1,3 @@ +0 0 CLEARED (CLRD//) +1 1 ALL RUNWAYS CLOSED (SNOCLO) +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20086.table b/definitions/bufr/tables/0/wmo/39/codetables/20086.table new file mode 100644 index 000000000..b5433303a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20086.table @@ -0,0 +1,11 @@ +0 0 CLEAR AND DRY +1 1 DAMP +2 2 WET WITH WATER PATCHES +3 3 RIME AND FROST COVERED (DEPTH NORMALLY LESS THAN 1 MM) +4 4 DRY SNOW +5 5 WET SNOW +6 6 SLUSH +7 7 ICE +8 8 COMPACTED OR ROLLED SNOW +9 9 FROZEN RUTS OR RIDGES +15 15 MISSING OR NOT REPORTED (E.G. DUE TO RUNWAY CLEARANCE IN PROGRESS) diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20087.table b/definitions/bufr/tables/0/wmo/39/codetables/20087.table new file mode 100644 index 000000000..ee7971ab6 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20087.table @@ -0,0 +1,6 @@ +0 0 RESERVED +1 1 LESS THAN 10% OF RUNWAY COVERED +2 2 11% TO 25% OF RUNWAY COVERED +5 5 26% TO 50% OF RUNWAY COVERED +9 9 51% TO 100% OF RUNWAY COVERED +15 15 MISSING OR NOT REPORTED (E.G. DUE TO RUNWAY CLEARANCE IN PROGRESS) diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20089.table b/definitions/bufr/tables/0/wmo/39/codetables/20089.table new file mode 100644 index 000000000..f616c622c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20089.table @@ -0,0 +1,11 @@ +0 0 0.00 +1 1 0.01 +89 89 0.89 +90 90 0.90 +91 91 BRAKING ACTION POOR +92 92 BRAKING ACTION MEDIUM TO POOR +93 93 BRAKING ACTION MEDIUM +94 94 BRAKING ACTION MEDIUM TO GOOD +95 95 BRAKING ACTION GOOD +99 99 UNRELIABLE +127 127 MISSING, NOT REPORTED AND/OR RUNWAY NOT OPERATIONAL diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20090.table b/definitions/bufr/tables/0/wmo/39/codetables/20090.table new file mode 100644 index 000000000..d13502ec4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20090.table @@ -0,0 +1,7 @@ +0 0 RESERVED +1 1 NACREOUS CLOUDS +2 2 NOCTILUCENT CLOUDS +3 3 CLOUDS FROM WATERFALLS +4 4 CLOUDS FROM FIRES +5 5 CLOUDS FROM VOLCANIC ERUPTIONS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20101.table b/definitions/bufr/tables/0/wmo/39/codetables/20101.table new file mode 100644 index 000000000..abe89f5fe --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20101.table @@ -0,0 +1,11 @@ +0 0 RESERVED +1 1 SCHISTOCERCA GREGARIA +2 2 LOCUSTA MIGRATORIA +3 3 NOMADACRIS SEPTEMFASCIATA +4 4 OEDALEUS SENEGALENSIS +5 5 ANRACRIDIUM SPP +6 6 OTHER LOCUSTS +7 7 OTHER GRASSHOPPERS +8 8 OTHER CRICKETS +9 9 SPODOPTERA EXEMPTA +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20102.table b/definitions/bufr/tables/0/wmo/39/codetables/20102.table new file mode 100644 index 000000000..6a53039e9 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20102.table @@ -0,0 +1,11 @@ +0 0 GREEN +1 1 GREEN OR BLACK +2 2 BLACK +3 3 YELLOW AND BLACK +4 4 STRAW/GREY +5 5 PINK +6 6 DARK RED/BROWN +7 7 MIXED RED AND YELLOW +8 8 YELLOW +9 9 OTHER +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20103.table b/definitions/bufr/tables/0/wmo/39/codetables/20103.table new file mode 100644 index 000000000..9c4f68920 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20103.table @@ -0,0 +1,11 @@ +0 0 HOPPERS (NYMPHS, LARVAE), STAGE 1 +1 1 HOPPERS (NYMPHS, LARVAE), STAGE 2 OR MIXED 1, 2 INSTARS (STAGES) +2 2 HOPPERS (NYMPHS, LARVAE), STAGE 3 OR MIXED 2, 3 INSTARS +3 3 HOPPERS (NYMPHS, LARVAE), STAGE 4 OR MIXED 3, 4 INSTARS +4 4 HOPPERS (NYMPHS, LARVAE), STAGE 5 OR MIXED 4, 5 INSTARS +5 5 HOPPERS (NYMPHS, LARVAE), STAGE MIXED, ALL OR MANY INSTARS +6 6 FLEDGLINGS (WINGS TOO SOFT FOR SUSTAINED FLIGHT) +7 7 IMMATURE ADULTS +8 8 MIXED MATURITY ADULTS +9 9 MATURE ADULTS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20104.table b/definitions/bufr/tables/0/wmo/39/codetables/20104.table new file mode 100644 index 000000000..15ca8acd4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20104.table @@ -0,0 +1,11 @@ +0 0 HOPPERS ONLY, MAINLY IN BANDS OR CLUSTERS +1 1 WINGED ADULTS IN THE VICINITY MORE THAN 10 KILOMETRES FROM POINT OF OBSERVATION +2 2 LOCUSTS IN FLIGHT, A FEW SEEN AT THE STATION +3 3 LOCUSTS AT THE STATION, MOST OF THEM ON THE GROUND +4 4 LOCUSTS, SOME ON GROUND AND OTHERS IN FLIGHT AT A HEIGHT LESS THAN 10 METRES +5 5 LOCUSTS, SOME ON GROUND AND OTHERS IN FLIGHT AT A HEIGHT GREATER THAN 10 METRES +6 6 LOCUSTS, MOST IN FLIGHT AT A HEIGHT LESS THAN 10 METRES +7 7 LOCUSTS, MOST IN FLIGHT AT A HEIGHT GREATER THAN 10 METRES +8 8 LOCUSTS, ALL OVER INFLICTING SEVERE DAMAGE TO VEGETATION, NO EXTERMINATION OPERATION +9 9 LOCUSTS, ALL OVER INFLICTING SEVERE DAMAGE TO VEGETATION, EXTERMINATION OPERATION IN PROGRESS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20105.table b/definitions/bufr/tables/0/wmo/39/codetables/20105.table new file mode 100644 index 000000000..b7406c09c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20105.table @@ -0,0 +1,12 @@ +0 0 SMALL SWARM LESS THAN 1 KM2 OR ADULTS IN GROUND, TENS OR HUNDREDS OF INDIVIDUALS VISIBLE SIMULTANEOUSLY, DURATION OF PASSAGE LESS THAN 1 HOUR AGO +1 1 SMALL SWARM LESS THAN 1 KM2 OR ADULTS IN GROUND, TENS OR HUNDREDS OF INDIVIDUALS VISIBLE SIMULTANEOUSLY, DURATION OF PASSAGE 1 TO 6 HOURS AGO +2 2 SMALL SWARM LESS THAN 1 KM2 OR ADULTS IN GROUND, TENS OR HUNDREDS OF INDIVIDUALS VISIBLE SIMULTANEOUSLY, DURATION OF PASSAGE OVER 6 HOURS AGO +3 3 MEDIUM SWARM OR SCATTERED ADULTS, SEVERAL VISIBLE SIMULTANEOUSLY, DURATION OF PASSAGE LESS THAN 1 HOUR AGO +4 4 MEDIUM SWARM OR SCATTERED ADULTS, SEVERAL VISIBLE SIMULTANEOUSLY, DURATION OF PASSAGE 1 TO 6 HOURS AGO +5 5 MEDIUM SWARM OR SCATTERED ADULTS, SEVERAL VISIBLE SIMULTANEOUSLY, DURATION OF PASSAGE OVER 6 HOURS AGO +6 6 LARGE SWARM OR ISOLATED ADULTS, SEEN SINGLY, DURATION OF PASSAGE LESS THAN 1 HOUR AGO +7 7 LARGE SWARM OR ISOLATED ADULTS, SEEN SINGLY, DURATION OF PASSAGE 1 TO 6 HOURS AGO +8 8 LARGE SWARM OR ISOLATED ADULTS, SEEN SINGLY, DURATION OF PASSAGE OVER 6 HOURS AGO +9 9 MORE THAN ONE SWARM OF LOCUSTS +10 10 SIZE OF SWARM AND/OR DURATION OF PASSAGE NOT DETERMINED OWING TO DARKNESS OR SIMILAR PHENOMENA +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20106.table b/definitions/bufr/tables/0/wmo/39/codetables/20106.table new file mode 100644 index 000000000..2a8c4a098 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20106.table @@ -0,0 +1,7 @@ +0 0 RESERVED +1 1 THIN DENSITY SWARM (SWARM VISIBLE ONLY WHEN NEAR ENOUGH FOR INDIVIDUAL LOCUSTS TO BE DISCERNED) +2 2 MEDIUM DENSITY SWARM +3 3 DENSE SWARM (OBSCURING NEARBY FEATURES, E.G. TREES) +4 4 ISOLATED HOPPERS SEEN SINGLY +5 5 SCATTERED HOPPERS, SEVERAL VISIBLE SIMULTANEOUSLY +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20107.table b/definitions/bufr/tables/0/wmo/39/codetables/20107.table new file mode 100644 index 000000000..0bea30ad5 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20107.table @@ -0,0 +1,11 @@ +0 0 RESERVED +1 1 GENERALLY IN THE DIRECTION NE +2 2 GENERALLY IN THE DIRECTION E +3 3 GENERALLY IN THE DIRECTION SE +4 4 GENERALLY IN THE DIRECTION S +5 5 GENERALLY IN THE DIRECTION SW +6 6 GENERALLY IN THE DIRECTION W +7 7 GENERALLY IN THE DIRECTION NW +8 8 GENERALLY IN THE DIRECTION N +9 9 SPECIFIC DIRECTION INDETERMINABLE +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20108.table b/definitions/bufr/tables/0/wmo/39/codetables/20108.table new file mode 100644 index 000000000..4404614cb --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20108.table @@ -0,0 +1,9 @@ +0 0 BARE GROUND +1 1 DRY, PRESENCE OF FEW AND ISOLATED SHRUBS +2 2 SPARSE VEGETATION (SPROUTING) +3 3 DENSE VEGETATION (SPROUTING) +4 4 SPARSE VEGETATION (GROWING) +5 5 DENSE VEGETATION (GROWING) +6 6 SPARSE VEGETATION IN FLOWER +7 7 DENSE VEGETATION IN FLOWER +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2011.table b/definitions/bufr/tables/0/wmo/39/codetables/2011.table new file mode 100644 index 000000000..ba29b6770 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2011.table @@ -0,0 +1,100 @@ +0 0 RESERVED +1 1 NOT VACANT +2 2 NO RADIOSONDE - PASSIVE TARGET (E.G. REFLECTOR) +3 3 NO RADIOSONDE - ACTIVE TARGET (E.G. TRANSPONDER) +4 4 NO RADIOSONDE - PASSIVE TEMPERATURE-HUMIDITY PROFILER +5 5 NO RADIOSONDE - ACTIVE TEMPERATURE-HUMIDITY PROFILER +6 6 NO RADIOSONDE - RADIO-ACOUSTIC SOUNDER +7 7 NOT VACANT +8 8 NO RADIOSONDE -... (RESERVED) +9 9 NO RADIOSONDE - SYSTEM UNKNOWN OR NOT SPECIFIED +10 10 SIPPICAN LMS5 W/CHIP THERMISTOR, DUCT MOUNTED CAPACITANCE RELATIVE HUMIDITY SENSOR AND DERIVED PRESSURE FROM GPS HEIGHT +11 11 SIPPICAN LMS6 W/CHIP THERMISTOR, EXTERNAL BOOM MOUNTED CAPACITANCE RELATIVE HUMIDITY SENSOR, AND DERIVED PRESSURE FROM GPS HEIGHT +12 12 JIN YANG RSG-20A WITH DERIVED PRESSURE FROM GPS HEIGHT/GL-5000P (REPUBLIC OF KOREA) +13 13 VAISALA RS92/MARWIN MW32 (FINLAND) +14 14 VAISALA RS92/DIGICORA MW41 (FINLAND) +15 15 PAZA-12M/RADIOTHEODOLITE-UL (UKRAINE) +16 16 PAZA-22/AVK-1 (UKRAINE) +17 17 GRAW DFM-09 (GERMANY) +18 18 NOT VACANT +19 19 POLUS-MRZ-N1 (RUSSIAN FEDERATION) +20 20 NOT VACANT +21 21 JIN YANG 1524LA LORAN-C/GL5000 (REPUBLIC OF KOREA) +22 22 MEISEI RS-11G GPS RADIOSONDE W/THERMISTOR, CAPACITANCE RELATIVE HUMIDITY SENSOR, AND DERIVED PRESSURE FROM GPS HEIGHT (JAPAN) +23 23 VAISALA RS41/DIGICORA MW41 (FINLAND) +24 24 VAISALA RS41/AUTOSONDE (FINLAND) +25 25 VAISALA RS41/MARWIN MW32 (FINLAND) +26 26 METEOLABOR SRS-C34/ARGUS 37 (SWITZERLAND) +27 27 NOT VACANT +28 28 AVK - AK2-02 (RUSSIAN FEDERATION) +29 29 MARL-A OR VEKTOR-M - AK2-02 (RUSSIAN FEDERATION) +30 30 MEISEI RS-06G (JAPAN) +31 31 TAIYUAN GTS1-1/GFE(L) (CHINA ) +32 32 SHANGHAI GTS1/GFE(L) (CHINA) +33 33 NANJING GTS1-2/GFE(L) (CHINA) +34 34 IMET-4 GPS RADIOSONDE (USA) +35 35 MEISEI IMS-100 GPS RADIOSONDE W/THERMISTOR SENSOR, CAPACITANCE RELATIVE HUMIDITY SENSOR, AND DERIVED PRESSURE FROM GPS HEIGHT (JAPAN) +36 36 MEISEI IMDS-17 GPS DROPSONDE W/THERMISTOR SENSOR, CAPACITANCE RELATIVE HUMIDITY SENSOR, AND CAPACITANCE PRESSURE SENSOR (JAPAN) +37 37 NOT VACANT +38 38 VIZ LOCATE LORAN-C (UNITED STATES) +39 39 SPRENGER E076 (GERMANY) +40 40 SPRENGER E084 (GERMANY) +41 41 VAISALA RS41 WITH PRESSURE DERIVED FROM GPS HEIGHT/DIGICORA MW41 (FINLAND) +42 42 VAISALA RS41 WITH PRESSURE DERIVED FROM GPS HEIGHT/AUTOSONDE (FINLAND) +43 43 NANJING DAQIAO XGP-3G (CHINA)* +44 44 TIANJIN HUAYUNTIANYI GTS(U)1 (CHINA)* +45 45 BEIJING CHANGFENG CF-06 (CHINA)* +46 46 SHANGHAI CHANGWANG GTS3 (CHINA)* +47 47 NOT VACANT +48 48 PAZA-22M/MARL-A +49 49 NOT VACANT +50 50 METEOLABOR SRS-C50/ARGUS (SWITZERLAND) +51 51 NOT VACANT +52 52 VAISALA RS92-NGP/INTERMET IMS-2000 (UNITED STATES) +53 53 AVK - I-2012 (RUSSIAN FEDERATION) +54 54 GRAW DFM-17 (GERMANY) +55 55 MEISEI RS-01G (JAPAN) +56 56 M2K2 (FRANCE) +57 57 MODEM M2K2-DC (FRANCE) +58 58 AVK-BAR (RUSSIAN FEDERATION) +59 59 MODEM M2K2-R 1680 MHZ RDF RADIOSONDE WITH PRESSURE SENSOR CHIP (FRANCE) +60 60 MARL-A OR VEKTOR-M - I-2012 (RUSSIAN FEDERATION) +61 61 NOT VACANT +62 62 MARL-A OR VEKTOR-M - MRZ-3MK (RUSSIAN FEDERATION) +63 63 MODEM M20 RADIOSONDE W/THERMISTOR SENSOR, CAPACITANCE RELATIVE HUMIDITY SENSOR, AND DERIVED PRESSURE FROM GPS HEIGHT (FRANCE) +64 64 MODEM PILOTSONDE GPS RADIOSONDE (FRANCE) +65 65 METEOSIS MTS-01 (TURKEY) +66 66 VACANT +67 67 VAISALA RS80/DIGICORA III (FINLAND) +68 68 AVK-RZM-2 (RUSSIAN FEDERATION) +69 69 MARL-A OR VEKTOR-M-RZM-2 (RUSSIAN FEDERATION) +70 70 VAISALA RS92/STAR (FINLAND) +71 71 VAISALA RS90/LORAN/DIGICORA I, II OR MARWIN (FINLAND) +72 72 VAISALA RS90/PC-CORA (FINLAND) +73 73 VAISALA RS90/AUTOSONDE (FINLAND) +74 74 VAISALA RS90/STAR (FINLAND) +75 75 AVK-MRZ-ARMA (RUSSIAN FEDERATION) +76 76 AVK-RF95-ARMA (RUSSIAN FEDERATION) +77 77 MODEM GPSONDE M10 (FRANCE) +78 78 VAISALA RS90/DIGICORA III (FINLAND) +79 79 VAISALA RS92/DIGICORA I,II OR MARWIN (FINLAND) +80 80 VAISALA RS92/DIGICORA III (FINLAND) +81 81 VAISALA RS92/AUTOSONDE (FINLAND) +82 82 LOCKHEED MARTIN LMS-6 W/CHIP THERMISTOR; EXTERNAL BOOM MOUNTED POLYMER CAPACITIVE RELATIVE HUMIDITY SENSOR; CAPACITIVE PRESSURE SENSOR AND GPS WIND +83 83 VAISALA RS92-D/INTERMET IMS 1500 W/SILICON CAPACITIVE PRESSURE SENSOR, CAPACITIVE WIRE TEMPERATURE SENSOR, TWIN THIN-FILM HEATED POLYMER CAPACITIVE RELATIVE HUMIDITY SENSOR AND RDF WIND +84 84 IMET-54/IMET-3200/3400 GPS RADIOSONDE WITH DERIVED PRESSURE FROM GPS HEIGHT (SOUTH AFRICA) +85 85 SIPPICAN MARK IIA WITH CHIP THERMISTOR, CARBON ELEMENT AND DERIVED PRESSURE FROM GPS HEIGHT +86 86 SIPPICAN MARK II WITH CHIP THERMISTOR, PRESSURE AND CARBON ELEMENT +87 87 SIPPICAN MARK IIA WITH CHIP THERMISTOR, PRESSURE AND CARBON ELEMENT +88 88 MARL-A OR VEKTOR-M-MRZ (RUSSIAN FEDERATION) +89 89 MARL-A OR VEKTOR-M-BAR (RUSSIAN FEDERATION) +90 90 RADIOSONDE NOT SPECIFIED OR UNKNOWN +91 91 PRESSURE ONLY RADIOSONDE +92 92 PRESSURE ONLY RADIOSONDE PLUS TRANSPONDER +93 93 PRESSURE ONLY RADIOSONDE PLUS RADAR REFLECTOR +94 94 NO PRESSURE RADIOSONDE PLUS TRANSPONDER +95 95 NO PRESSURE RADIOSONDE PLUS RADAR REFLECTOR +96 96 DESCENDING RADIOSONDE +97 97 IMET-2/IMET-1500 RDF RADIOSONDE WITH PRESSURE SENSOR CHIP (SOUTH AFRICA) +98 98 IMET-2/IMET-1500 GPS RADIOSONDE WITH DERIVED PRESSURE FROM GPS HEIGHT (SOUTH AFRICA) +99 99 IMET-2/IMET-3200 GPS RADIOSONDE WITH DERIVED PRESSURE FROM GPS HEIGHT (SOUTH AFRICA) diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20119.table b/definitions/bufr/tables/0/wmo/39/codetables/20119.table new file mode 100644 index 000000000..4a4b40f87 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20119.table @@ -0,0 +1,4 @@ +0 0 NOT DEFINED +1 1 POSITIVE +2 2 NEGATIVE +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20124.table b/definitions/bufr/tables/0/wmo/39/codetables/20124.table new file mode 100644 index 000000000..f78eacb17 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20124.table @@ -0,0 +1,4 @@ +0 0 NOT DEFINED +1 1 LIGHTNING STROKE +2 2 LIGHTNING FLASH, BY MANUAL OBSERVATION, OR IF EQUIPMENT INSENSITIVE TO STROKE RESOLUTION +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2013.table b/definitions/bufr/tables/0/wmo/39/codetables/2013.table new file mode 100644 index 000000000..91ce6501d --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2013.table @@ -0,0 +1,11 @@ +0 0 NO CORRECTION +1 1 CIMO SOLAR CORRECTED AND CIMO INFRARED CORRECTED +2 2 CIMO SOLAR CORRECTED AND INFRARED CORRECTED +3 3 CIMO SOLAR CORRECTED ONLY +4 4 SOLAR AND INFRARED CORRECTED AUTOMATICALLY BY RADIOSONDE SYSTEM +5 5 SOLAR CORRECTED AUTOMATICALLY BY RADIOSONDE SYSTEM +6 6 SOLAR AND INFRARED CORRECTED AS SPECIFIED BY COUNTRY +7 7 SOLAR CORRECTED AS SPECIFIED BY COUNTRY +8 8 SOLAR AND INFRARED CORRECTED AS SPECIFIED BY GRUAN +9 9 SOLAR CORRECTED AS SPECIFIED BY GRUAN +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20136.table b/definitions/bufr/tables/0/wmo/39/codetables/20136.table new file mode 100644 index 000000000..42c012b50 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20136.table @@ -0,0 +1,44 @@ +0 0 ISOLATED CUMULUS HUMILIS AND/OR CUMULUS MEDIOCRIS OF VERTICAL DEVELOPMENT +1 1 NUMEROUS CUMULUS HUMILIS AND/OR CUMULUS MEDIOCRIS OF VERTICAL DEVELOPMENT +2 2 ISOLATED CUMULUS CONGESTUS OF VERTICAL DEVELOPMENT +3 3 NUMEROUS CUMULUS CONGESTUS OF VERTICAL DEVELOPMENT +4 4 ISOLATED CUMULONIMBUS OF VERTICAL DEVELOPMENT +5 5 NUMEROUS CUMULONIMBUS OF VERTICAL DEVELOPMENT +6 6 ISOLATED CUMULUS AND CUMULONIMBUS OF VERTICAL DEVELOPMENT +7 7 NUMEROUS CUMULUS AND CUMULONIMBUS OF VERTICAL DEVELOPMENT +10 10 RESERVED +11 11 ISOLATED OROGRAPHIC CLOUDS, PILEUS, INCUS, FORMING +12 12 ISOLATED OROGRAPHIC CLOUDS, PILEUS, INCUS, NOT CHANGING +13 13 ISOLATED OROGRAPHIC CLOUDS, PILEUS, INCUS, DISSOLVING +14 14 IRREGULAR BANKS OF OROGRAPHIC CLOUD, FOEHN BANK, ETC., FORMING +15 15 IRREGULAR BANKS OF OROGRAPHIC CLOUD, FOEHN BANK, ETC., NOT CHANGING +16 16 IRREGULAR BANKS OF OROGRAPHIC CLOUD, FOEHN BANK, ETC., DISSOLVING +17 17 COMPACT LAYER OF OROGRAPHIC CLOUD, FOEHN BANK, ETC., FORMING +18 18 COMPACT LAYER OF OROGRAPHIC CLOUD, FOEHN BANK, ETC., NOT CHANGING +19 19 COMPACT LAYER OF OROGRAPHIC CLOUD, FOEHN BANK, ETC., DISSOLVING +20 20 ALL MOUNTAINS OPEN, ONLY SMALL AMOUNTS OF CLOUD PRESENT +21 21 MOUNTAINS PARTLY COVERED WITH DETACHED CLOUDS (NOT MORE THAN HALF THE PEAKS CAN BE SEEN) +22 22 ALL MOUNTAIN SLOPES COVERED, PEAKS AND PASSES FREE +23 23 MOUNTAINS OPEN ON OBSERVER’S SIDE (ONLY SMALL AMOUNTS OF CLOUD PRESENT), BUT A CONTINUOUS WALL OF CLOUD ON THE OTHER SIDE +24 24 CLOUDS LOW ABOVE THE MOUNTAINS, BUT ALL SLOPES AND MOUNTAINS OPEN (ONLY SMALL AMOUNTS OF CLOUD ON THE SLOPES) +25 25 CLOUDS LOW ABOVE THE MOUNTAINS, PEAKS PARTLY COVERED BY PRECIPITATION TRAILS OR CLOUDS +26 26 ALL PEAKS COVERED BUT PASSES OPEN, SLOPES EITHER OPEN OR COVERED +27 27 MOUNTAINS GENERALLY COVERED BUT SOME PEAKS FREE, SLOPES WHOLLY OR PARTIALLY COVERED +28 28 ALL PEAKS, PASSES AND SLOPES COVERED +29 29 MOUNTAINS CANNOT BE SEEN OWING TO DARKNESS, FOG, SNOWSTORM, PRECIPITATION, ETC. +35 35 NON-PERSISTENT CONDENSATION TRAILS +36 36 PERSISTENT CONDENSATION TRAILS COVERING LESS THAN 1/8 OF THE SKY +37 37 PERSISTENT CONDENSATION TRAILS COVERING 1/8 OF THE SKY +38 38 PERSISTENT CONDENSATION TRAILS COVERING 2/8 OF THE SKY +39 39 PERSISTENT CONDENSATION TRAILS COVERING 3/8 OR MORE OF THE SKY +40 40 NO CLOUD OR MIST OBSERVED FROM A HIGHER LEVEL +41 41 MIST, CLEAR ABOVE OBSERVED FROM A HIGHER LEVEL +42 42 FOG PATCHES OBSERVED FROM A HIGHER LEVEL +43 43 LAYER OF SLIGHT FOG OBSERVED FROM A HIGHER LEVEL +44 44 LAYER OF THICK FOG OBSERVED FROM A HIGHER LEVEL +45 45 SOME ISOLATED CLOUDS OBSERVED FROM A HIGHER LEVEL +46 46 ISOLATED CLOUDS AND FOG BELOW OBSERVED FROM A HIGHER LEVEL +47 47 MANY ISOLATED CLOUDS OBSERVED FROM A HIGHER LEVEL +48 48 SEA OF CLOUDS OBSERVED FROM A HIGHER LEVEL +49 49 BAD VISIBILITY OBSCURING THE DOWNWARD VIEW OBSERVED FROM A HIGHER LEVEL +511 511 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20137.table b/definitions/bufr/tables/0/wmo/39/codetables/20137.table new file mode 100644 index 000000000..adda88054 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20137.table @@ -0,0 +1,11 @@ +0 0 NO CHANGE +1 1 CUMULIFICATION +2 2 SLOW ELEVATION +3 3 RAPID ELEVATION +4 4 ELEVATION AND STRATIFICATION +5 5 SLOW LOWERING +6 6 RAPID LOWERING +7 7 STRATIFICATION +8 8 STRATIFICATION AND LOWERING +9 9 RAPID CHANGE +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/20138.table b/definitions/bufr/tables/0/wmo/39/codetables/20138.table new file mode 100644 index 000000000..ed9b315fc --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/20138.table @@ -0,0 +1,9 @@ +0 0 DRY +1 1 MOIST +2 2 WET +3 3 RIME +4 4 SNOW +5 5 ICE +6 6 GLAZE +7 7 NOT DRY +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2014.table b/definitions/bufr/tables/0/wmo/39/codetables/2014.table new file mode 100644 index 000000000..bc5c5fcb8 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2014.table @@ -0,0 +1,51 @@ +0 0 NO WIND FINDING +1 1 AUTOMATIC WITH AUXILIARY OPTICAL DIRECTION FINDING +2 2 AUTOMATIC WITH AUXILIARY RADIO DIRECTION FINDING +3 3 AUTOMATIC WITH AUXILIARY RANGING +4 4 NOT USED +5 5 AUTOMATIC WITH MULTIPLE VLF-OMEGA SIGNALS +6 6 AUTOMATIC CROSS CHAIN LORAN-C +7 7 AUTOMATIC WITH AUXILIARY WIND PROFILER +8 8 AUTOMATIC SATELLITE NAVIGATION +19 19 TRACKING TECHNIQUE NOT SPECIFIED +20 20 VESSEL STOPPED +21 21 VESSEL DIVERTED FROM ORIGINAL DESTINATION +22 22 VESSEL'S ARRIVAL DELAYED +23 23 CONTAINER DAMAGED +24 24 POWER FAILURE TO CONTAINER +29 29 OTHER PROBLEMS +30 30 MAJOR POWER PROBLEMS +31 31 UPS INOPERATIVE +32 32 RECEIVER HARDWARE PROBLEMS +33 33 RECEIVER SOFTWARE PROBLEMS +34 34 PROCESSOR HARDWARE PROBLEMS +35 35 PROCESSOR SOFTWARE PROBLEMS +36 36 NAVAID SYSTEM DAMAGED +37 37 SHORTAGE OF LIFTING GAS +38 38 RESERVED +39 39 OTHER PROBLEMS +40 40 MECHANICAL DEFECT +41 41 MATERIAL DEFECT (HAND LAUNCHER) +42 42 POWER FAILURE +43 43 CONTROL FAILURE +44 44 PNEUMATIC/HYDRAULIC FAILURE +45 45 OTHER PROBLEMS +46 46 COMPRESSOR PROBLEMS +47 47 BALLOON PROBLEMS +48 48 BALLOON RELEASE PROBLEMS +49 49 LAUNCHER DAMAGED +50 50 R/S RECEIVER ANTENNA DEFECT +51 51 NAVAID ANTENNA DEFECT +52 52 R/S RECEIVER CABLING (ANTENNA) DEFECT +53 53 NAVAID ANTENNA CABLING DEFECT +59 59 OTHER PROBLEMS +60 60 ASAP COMMUNICATIONS DEFECT +61 61 COMMUNICATIONS FACILITY REJECTED DATA +62 62 NO POWER AT TRANSMITTING ANTENNA +63 63 ANTENNA CABLE BROKEN +64 64 ANTENNA CABLE DEFECT +65 65 MESSAGE TRANSMITTED POWER BELOW NORMAL +69 69 OTHER PROBLEMS +70 70 ALL SYSTEMS IN NORMAL OPERATION +99 99 STATUS OF SYSTEM AND ITS COMPONENTS NOT SPECIFIED +127 127 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2015.table b/definitions/bufr/tables/0/wmo/39/codetables/2015.table new file mode 100644 index 000000000..7b0ccaf86 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2015.table @@ -0,0 +1,7 @@ +0 0 RESERVED +1 1 PRESSURE ONLY RADIOSONDE +2 2 PRESSURE ONLY RADIOSONDE PLUS TRANSPONDER +3 3 PRESSURE ONLY RADIOSONDE PLUS RADAR REFLECTOR +4 4 NO-PRESSURE RADIOSONDE PLUS TRANSPONDER +5 5 NO-PRESSURE RADIOSONDE PLUS RADAR REFLECTOR +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2016.table b/definitions/bufr/tables/0/wmo/39/codetables/2016.table new file mode 100644 index 000000000..4a3022611 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2016.table @@ -0,0 +1,4 @@ +1 1 TRAIN REGULATOR +2 2 LIGHT UNIT +3 3 PARACHUTE +4 4 ROOFTOP RELEASE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2017.table b/definitions/bufr/tables/0/wmo/39/codetables/2017.table new file mode 100644 index 000000000..7fac2e10f --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2017.table @@ -0,0 +1,6 @@ +0 0 NO CORRECTIONS +1 1 TIME LAG CORRECTION PROVIDED BY THE MANUFACTURER +2 2 SOLAR RADIATION CORRECTION PROVIDED BY THE MANUFACTURER +3 3 SOLAR RADIATION AND TIME LAG CORRECTION PROVIDED BY THE MANUFACTURER +7 7 GRUAN SOLAR RADIATION AND TIME LAG CORRECTION +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2019.table b/definitions/bufr/tables/0/wmo/39/codetables/2019.table new file mode 100644 index 000000000..bedca6336 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2019.table @@ -0,0 +1,392 @@ +8 8 SSM/T +9 9 SSM/T2 +10 10 AATSR +11 11 ATSR +12 12 ATSR-2 +13 13 MWR +14 14 PMR +15 15 SCR +30 30 ARGOS +40 40 LASER REFLECTORS +41 41 DORIS +42 42 DORIS-NG +47 47 POSEIDON-1 (SSALT1) +48 48 POSEIDON-2 (SSALT2) +49 49 POSEIDON-3 (SSALT3) +50 50 ATSR/M +51 51 HRG +52 52 HRV +53 53 HRVIR +54 54 SCARAB/MV2 +55 55 POLDER +56 56 IIR +57 57 POSEIDON-4 +60 60 VEGETATION +61 61 WINDII +62 62 ALTIKA +63 63 SWIM +80 80 RADARSAT DTT +81 81 RADARSAT TTC +85 85 SAR (CSA) +90 90 MOPITT +91 91 OSIRIS +92 92 ACE-FTS +97 97 PANCHROMATIC IMAGER +98 98 GPS RECEIVER +102 102 CHAMP GPS SOUNDER +103 103 IGOR +104 104 TRI-G +116 116 CHAMP GRAVITY PACKAGE (ACCELEROMETER+GPS) +117 117 CHAMP MAGNETOMETRY PACKAGE (1 SCALAR+2 VECTOR MAGNETOMETER) +120 120 ENVISAT COMMS +121 121 ERS COMMS +130 130 ALADIN +131 131 ATLID +140 140 AMI/SAR/IMAGE +141 141 AMI/SAR/WAVE +142 142 AMI/SCATTEROMETER +143 143 ASAR +144 144 ASAR +145 145 ASAR +146 146 CPR +147 147 RA-2/MWR +148 148 RA/MWR +150 150 SCATTEROMETER +151 151 SAR-C +152 152 SW +161 161 MIPAS +162 162 MWR-2 +163 163 SOPRANO +170 170 GOME +172 172 GOMOS +173 173 ALTIUS +174 174 MERIS +175 175 SCIAMACHY +176 176 MIRAS +177 177 SIRAL +178 178 SRAL +179 179 OLCI +180 180 SLSTR +181 181 METEOSAT COMMS +182 182 MSG COMMS +190 190 ASCAT +200 200 GERB +202 202 GRAS +203 203 MHS +205 205 MVIRI +207 207 SEVIRI +208 208 VIRI +210 210 FCI +211 211 LI +212 212 IRS +213 213 S4 +220 220 GOME-2 +221 221 IASI +230 230 3MI +231 231 IASI-NG +232 232 METIMAGE +233 233 MWS +234 234 RO +235 235 S5/UVNS +236 236 ICI +237 237 MWI +238 238 SCA +240 240 DCP +245 245 CCD +246 246 HSB +248 248 OBA +250 250 WFI +255 255 IRMSS +260 260 BSS & FSS TRANSPONDERS +261 261 DRT-S&R +262 262 INSAT COMMS +268 268 HR-PAN +269 269 MSMR +270 270 VHRR +271 271 WIFS +275 275 AWIFS +276 276 LISS-I +277 277 LISS-II +278 278 LISS-III +279 279 LISS-IV +284 284 PAN +285 285 MOS +286 286 OCM +287 287 ROSA +288 288 SCAT +289 289 IMG +290 290 MTSAT COMMS +291 291 HIMAWARI COMMS +294 294 JAMI +295 295 IMAGER/MTSAT-2 +296 296 VISSR +297 297 AHI +300 300 GLAS +301 301 LRA +302 302 MBLA +303 303 CALIOP +309 309 CPR (CLOUDSAT) +312 312 NSCAT +313 313 SEAWINDS +314 314 RAPIDSCAT +330 330 ACRIM +334 334 BUV +336 336 ALI +347 347 ASTER +348 348 CERES-2 +351 351 GPSDR +353 353 HIRDLS +354 354 HRDI +356 356 LIS +358 358 PEM +359 359 SEAWIFS +360 360 SUSIM (UARS) +363 363 SBUV/1 +365 365 TMI +366 366 JMR +367 367 AMR +369 369 LIMS +370 370 LRIR +371 371 EPIC +372 372 NISTAR +373 373 PLASMA-MAG +374 374 XPS +375 375 VIRS +376 376 POLDER II +377 377 TIM +379 379 WFC +382 382 CLAES +383 383 HALOE +384 384 ISAMS +385 385 MISR +386 386 MLS +387 387 MLS (EOS-AURA) +389 389 MODIS +393 393 HAIRS +394 394 OMI +395 395 ATMOSPHERIC CORRECTOR +396 396 HYPERION +397 397 HRIR +398 398 MRIR +399 399 SAGE I +400 400 SAGE II +401 401 SAGE III +402 402 SAMS +403 403 SAM-II +404 404 IRIS +405 405 GIFTS +420 420 AIRS +421 421 SIRS-A +422 422 SIRS-B +426 426 SOLSTICE +430 430 TES +431 431 TOMS +432 432 OCO +433 433 TMS +434 434 SMAP +450 450 ADEOS COMMS +451 451 DCS (JAXA) +453 453 GMS COMMS +454 454 JERS-1 COMMS +460 460 RIS +461 461 PR +462 462 SAR +470 470 PALSAR +478 478 AMSR2 +479 479 AMSR-E +480 480 PRISM (ALOS) +481 481 AMSR +482 482 AVNIR +483 483 AVNIR-2 +484 484 GLI +485 485 MESSR +486 486 MSR +487 487 OCTS +488 488 OPS +489 489 VISSR (GMS-5) +490 490 VTIR +510 510 ILAS-I +511 511 ILAS-II +512 512 IMG +514 514 SEM +515 515 SOFIS +516 516 TANSO-FTS +517 517 TANSO-CAI +518 518 DPR +519 519 GMI +520 520 SMMR +526 526 CION-A +527 527 CION-B +528 528 CION-C +529 529 CION-D +530 530 SGNOS-A +531 531 SGNOS-B +532 532 SGNOS-C +533 533 SGNOS-D +534 534 PYXIS-A +535 535 PYXIS-B +540 540 DCS (NOAA) +541 541 GOES COMMS +542 542 LANDSAT COMMS +543 543 NOAA COMMS +544 544 S&R (GOES) +545 545 S&R (NOAA) +546 546 WEFAX +547 547 SEM (GOES) +550 550 SSM +551 551 SSJ/4 +552 552 SSIES-2 +553 553 SSB/X-2 +570 570 AMSU-A +574 574 AMSU-B +580 580 ATOVS (HIRS/3 + AMSU + AVHRR/3) +590 590 AVHRR/2 +591 591 AVHRR/3 +592 592 AVHRR/4 +600 600 ERBE +601 601 ETM+ +604 604 HIRS/1 +605 605 HIRS/2 +606 606 HIRS/3 +607 607 HIRS/4 +615 615 IMAGER +616 616 VIIRS +617 617 ABI +618 618 GLM +620 620 CRIRS/NP +621 621 ATMS +622 622 MSS +623 623 MSU +624 624 SBUV/2 +625 625 SBUV/3 +626 626 SOUNDER +627 627 SSU +628 628 TM +629 629 TOVS (HIRS/2 + MSU + SSU) +630 630 VAS +631 631 SSZ +645 645 SEM +650 650 MVIRSR (10 CHANNEL) +651 651 MVIRSR (3 CHANNEL) +652 652 MVIRSR (5 CHANNEL) +670 670 RLSBO +680 680 MSU-EU +681 681 MSU-UM +682 682 RM-08 +683 683 SU-UMS +684 684 SU-VR +685 685 TRASSER +686 686 SCAT +687 687 ALT +688 688 MWI +700 700 KONDOR-2 +701 701 BRK +710 710 ALISSA +712 712 BALKAN-2 LIDAR +715 715 MK-4 +716 716 MK-4M +730 730 GREBEN +731 731 SAR-10 +732 732 SAR-3 +733 733 SAR-70 +740 740 SLR-3 +745 745 TRAVERS SAR +750 750 174-K +751 751 BTVK +752 752 CHAIKA +753 753 DELTA-2 +755 755 IKAR-D +756 756 IKAR-N +757 757 IKAR-P +760 760 ISP +761 761 KFA-1000 +762 762 KFA-200 +763 763 KFA-3000 +770 770 KLIMAT +771 771 KLIMAT-2 +775 775 MIRAS +776 776 MIVZA +777 777 MIVZA-M +780 780 MR-2000 +781 781 MR-2000M +785 785 MR-900 +786 786 MR-900B +790 790 MSU-E +791 791 MSU-E1 +792 792 MSU-E2 +793 793 MSU-M +794 794 MSU-S +795 795 MSU-SK +796 796 MSU-V +810 810 MTZA +815 815 MZOAS +820 820 R-225 +821 821 R-400 +822 822 R-600 +830 830 RMS +835 835 TV CAMERA +836 836 SILVA +840 840 SROSMO +850 850 BUFS-2 +851 851 BUFS-4 +855 855 ISTOK-1 +856 856 SFM-2 +857 857 DOPI +858 858 KGI-4 +859 859 OZON-M +860 860 RMK-2 +861 861 MTVZA-GY +862 862 IKFS-2 +900 900 MAXIE +901 901 OLS +905 905 SSM/I +906 906 SSM/T-1 +907 907 SSM/T-2 +908 908 SSMIS +909 909 VTPR +910 910 SXI +930 930 EHIC +931 931 X-RAY ASTRONOMY PAYLOAD +932 932 IVISSR (FY-2) +933 933 IRAS +934 934 MWAS +935 935 IMWAS +936 936 MWHS +937 937 MVIRS +938 938 MWRI +940 940 MTVZA-OK +941 941 SAPHIR +942 942 MADRAS +943 943 SCAT (ON CFOSAT) +944 944 ALT +945 945 TSIS +946 946 CMIS +947 947 OMPS +948 948 GPSOS +949 949 SESS +950 950 VIRR +951 951 TOM +952 952 OP +953 953 MWHS-2 +954 954 MWTS-2 +955 955 HIRAS +956 956 SBUS +957 957 TOU +958 958 GNOS +959 959 SMR +960 960 +961 961 AGRI +962 962 GIIRS +963 963 LMI +964 964 SEP +965 965 GNOS-2 +966 966 MWTS-3 +980 980 AMI +981 981 MI +982 982 KSEM +990 990 SMMR +991 991 THIR +992 992 NEMS +993 993 SCAMS +994 994 ESMR +2047 2047 diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2020.table b/definitions/bufr/tables/0/wmo/39/codetables/2020.table new file mode 100644 index 000000000..fd3c93626 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2020.table @@ -0,0 +1,37 @@ +0 0 NIMBUS +1 1 VTPR +2 2 TIROS 1 (TIROS, NOAA-6 TO NOAA-13) +3 3 TIROS 2 (NOAA-14 ONWARDS) +10 10 EOS +20 20 GPM-CORE +31 31 DMSP +61 61 EUMETSAT POLAR SYSTEM (EPS) +62 62 EUMETSAT POLAR SYSTEM (EPS-SG) +91 91 ERS +92 92 SENTINEL-3 +121 121 ADEOS +122 122 GCOM +241 241 GOES +251 251 TROPICS +261 261 JASON +271 271 GMS +272 272 MTSAT +273 273 HIMAWARI +281 281 COMS +301 301 INSAT +331 331 METEOSAT OPERATIONAL PROGRAMME (MOP) +332 332 METEOSAT TRANSITIONAL PROGRAMME (MTP) +333 333 METEOSAT SECOND GENERATION PROGRAMME (MSG) +334 334 METEOSAT THIRD GENERATION PROGRAMME (MTG) +351 351 GOMS +352 352 METEOR-M N2 +380 380 FY-1 +381 381 FY-2 +382 382 FY-3 +383 383 FY-4 +401 401 GPS +402 402 GLONASS +403 403 GALILEO +404 404 BDS (BEIDOU NAVIGATION SATELLITE SYSTEM) +405 405 QUASI-ZENITH SATELLITE SYSTEM (QZSS) +511 511 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2021.table b/definitions/bufr/tables/0/wmo/39/codetables/2021.table new file mode 100644 index 000000000..b95fdc989 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2021.table @@ -0,0 +1,8 @@ +1 1 HIGH-RESOLUTION INFRARED SOUNDER (HIRS) +2 2 MICROWAVE SOUNDING UNIT (MSU) +3 3 STRATOSPHERIC SOUNDING UNIT (SSU) +4 4 AMI (ADVANCED MICROWAVE INSTRUMENT) WIND MODE +5 5 AMI (ADVANCED MICROWAVE INSTRUMENT) WAVE MODE +6 6 AMI (ADVANCED MICROWAVE INSTRUMENT) IMAGE MODE +7 7 RADAR ALTIMETER +8 8 ATSR (ALONG-TRACK SCANNING RADIOMETER) diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2022.table b/definitions/bufr/tables/0/wmo/39/codetables/2022.table new file mode 100644 index 000000000..5068e7fd7 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2022.table @@ -0,0 +1,5 @@ +1 1 PROCESSING TECHNIQUE NOT DEFINED +2 2 AUTOMATED STATISTICAL REGRESSION +3 3 CLEAR PATH +4 4 PARTLY CLOUDY PATH +5 5 CLOUDY PATH diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2023.table b/definitions/bufr/tables/0/wmo/39/codetables/2023.table new file mode 100644 index 000000000..be7eb84e4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2023.table @@ -0,0 +1,11 @@ +0 0 RESERVED +1 1 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE INFRARED CHANNEL +2 2 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE VISIBLE CHANNEL +3 3 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE WATER VAPOUR CHANNEL +4 4 WIND DERIVED FROM MOTION OBSERVED IN A COMBINATION OF SPECTRAL CHANNELS +5 5 WIND DERIVED FROM MOTION OBSERVED IN THE WATER VAPOUR CHANNEL IN CLEAR AIR +6 6 WIND DERIVED FROM MOTION OBSERVED IN THE OZONE CHANNEL +7 7 WIND DERIVED FROM MOTION OBSERVED IN WATER VAPOUR CHANNEL (CLOUD OR CLEAR AIR NOT SPECIFIED) +13 13 ROOT-MEAN-SQUARE +14 14 RESERVED +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2024.table b/definitions/bufr/tables/0/wmo/39/codetables/2024.table new file mode 100644 index 000000000..00ec80ef6 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2024.table @@ -0,0 +1,4 @@ +0 0 RESERVED +1 1 TABLE WITH FULL RANGE OF HUMIDITY VARIATION IN LAYER +2 2 REGRESSION TECHNIQUE ON 2 HUMIDITY VALUES IN LAYER +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2025.table b/definitions/bufr/tables/0/wmo/39/codetables/2025.table new file mode 100644 index 000000000..045416aac --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2025.table @@ -0,0 +1,16 @@ +1 1 RESERVED +2 2 HIRS +3 3 MSU +6 6 HIRS +7 7 MSU +10 10 HIRS (1, 2, 3, 8, 9, 16, 17) +11 11 HIRS (1, 2, 3, 9, 17) +12 12 MSU +15 15 HIRS +16 16 HIRS* +17 17 MSU +18 18 SKINTK (OCEAN ONLY) +21 21 HIRS +22 22 SSU +23 23 MSU (3, 4) +24 24 RESERVED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2030.table b/definitions/bufr/tables/0/wmo/39/codetables/2030.table new file mode 100644 index 000000000..2777bbcd3 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2030.table @@ -0,0 +1,8 @@ +0 0 RESERVED +1 1 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER) +2 2 GEK (GEOMAGNETIC ELECTROKINETOGRAPH) +3 3 SHIP'S SET AND DRIFT DETERMINED BY FIXES 3-6 HOURS APART +4 4 SHIP'S SET AND DRIFT DETERMINED BY FIXES MORE THAN 6 HOURS BUT LESS THAN 12 HOURS APART +5 5 DRIFT OF BUOY +6 6 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER) +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2031.table b/definitions/bufr/tables/0/wmo/39/codetables/2031.table new file mode 100644 index 000000000..c096d370c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2031.table @@ -0,0 +1,21 @@ +0 0 RESERVED +1 1 INSTANTANEOUS +2 2 AVERAGED OVER 3 MIN OR LESS +3 3 AVERAGED OVER MORE THAN 3 MIN, BUT 6 MIN AT THE MOST +4 4 AVERAGED OVER MORE THAN 6 MIN, BUT 12 MIN AT THE MOST +5 5 INSTANTANEOUS +6 6 AVERAGED OVER 3 MIN OR LESS +7 7 AVERAGED OVER MORE THAN 3 MIN, BUT 6 MIN AT THE MOST +8 8 AVERAGED OVER MORE THAN 6 MIN, BUT 12 MIN AT THE MOST +9 9 VECTOR OR DOPPLER CURRENT PROFILING METHOD NOT USED +10 10 RESERVED +11 11 1 HOUR OR LESS +12 12 MORE THAN 1 HOUR BUT 2 HOURS AT THE MOST +13 13 MORE THAN 2 HOURS BUT 4 HOURS AT THE MOST +14 14 MORE THAN 4 HOURS BUT 8 HOURS AT THE MOST +15 15 MORE THAN 8 HOURS BUT 12 HOURS AT THE MOST +16 16 MORE THAN 12 HOURS BUT 18 HOURS AT THE MOST +17 17 MORE THAN 18 HOURS BUT 24 HOURS AT THE MOST +18 18 RESERVED +19 19 DRIFT METHOD NOT USED +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2032.table b/definitions/bufr/tables/0/wmo/39/codetables/2032.table new file mode 100644 index 000000000..7e9310db0 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2032.table @@ -0,0 +1,4 @@ +0 0 VALUES AT SELECTED DEPTHS (DATA POINTS FIXED BY THE INSTRUMENT OR SELECTED BY ANY OTHER METHOD) +1 1 VALUES AT SELECTED DEPTHS (DATA POINTS TAKEN FROM TRACES AT SIGNIFICANT DEPTHS) +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2033.table b/definitions/bufr/tables/0/wmo/39/codetables/2033.table new file mode 100644 index 000000000..d590a8454 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2033.table @@ -0,0 +1,5 @@ +0 0 NO SALINITY MEASURED +1 1 IN SITU SENSOR, ACCURACY BETTER THAN 0.02 0/00 +2 2 IN SITU SENSOR, ACCURACY LESS THAN 0.02 0/00 +3 3 SAMPLE ANALYSIS +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2034.table b/definitions/bufr/tables/0/wmo/39/codetables/2034.table new file mode 100644 index 000000000..06cdd52d2 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2034.table @@ -0,0 +1,7 @@ +0 0 UNSPECIFIED DROGUE +1 1 HOLEY SOCK +2 2 TRISTAR +3 3 WINDOW SHADE +4 4 PARACHUTE +5 5 NON-LAGRANGIAN SEA ANCHOR +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2036.table b/definitions/bufr/tables/0/wmo/39/codetables/2036.table new file mode 100644 index 000000000..7782d302a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2036.table @@ -0,0 +1,4 @@ +0 0 DRIFTING BUOY +1 1 FIXED BUOY +2 2 SUBSURFACE FLOAT (MOVING) +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2037.table b/definitions/bufr/tables/0/wmo/39/codetables/2037.table new file mode 100644 index 000000000..729c40e63 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2037.table @@ -0,0 +1,8 @@ +0 0 RESERVED +1 1 MANUAL READING FROM VERTICAL TIDE STAFF +2 2 MANUAL READING FROM SINGLE AUTOMATIC RECORDER AT STATION +3 3 MANUAL READING FROM MULTIPLE AUTOMATIC RECORDERS AT STATION +4 4 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION WITHOUT LEVEL REFERENCE CHECK +5 5 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION WITH LEVEL REFERENCE CHECK, OR FROM MULTIPLE AUTOMATIC RECORDERS +6 6 RESERVED +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2038.table b/definitions/bufr/tables/0/wmo/39/codetables/2038.table new file mode 100644 index 000000000..458f14169 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2038.table @@ -0,0 +1,16 @@ +0 0 SHIP INTAKE +1 1 BUCKET +2 2 HULL CONTACT SENSOR +3 3 REVERSING THERMOMETER +4 4 STD/CTD SENSOR +5 5 MECHANICAL BT +6 6 EXPENDABLE BT +7 7 DIGITAL BT +8 8 THERMISTOR CHAIN +9 9 INFRARED SCANNER +10 10 MICROWAVE SCANNER +11 11 INFRARED RADIOMETER +12 12 IN-LINE THERMOSALINOGRAPH +13 13 TOWED BODY +14 14 OTHER +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2039.table b/definitions/bufr/tables/0/wmo/39/codetables/2039.table new file mode 100644 index 000000000..0a94982b5 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2039.table @@ -0,0 +1,5 @@ +0 0 MEASURED WET-BULB TEMPERATURE +1 1 ICED BULB MEASURED WET-BULB TEMPERATURE +2 2 COMPUTED WET-BULB TEMPERATURE +3 3 ICED BULB COMPUTED WET-BULB TEMPERATURE +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2040.table b/definitions/bufr/tables/0/wmo/39/codetables/2040.table new file mode 100644 index 000000000..78b291706 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2040.table @@ -0,0 +1,8 @@ +0 0 SHIP'S MOTION REMOVED BY AVERAGING +1 1 SHIP'S MOTION REMOVED BY MOTION COMPENSATION +2 2 SHIP'S MOTION NOT REMOVED +3 3 SHIP'S MOTION REMOVED BY AVERAGING +4 4 SHIP'S MOTION REMOVED BY MOTION COMPENSATION +5 5 SHIP'S MOTION NOT REMOVED +6 6 DOPPLER CURRENT PROFILING METHOD NOT USED +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2041.table b/definitions/bufr/tables/0/wmo/39/codetables/2041.table new file mode 100644 index 000000000..ef5bf86b3 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2041.table @@ -0,0 +1,6 @@ +0 0 INFORMATION BASED ON MANUAL ANALYSIS +1 1 INFORMATION BASED ON COMPUTER ANALYSIS +2 2 INFORMATION BASED ON DATA ASSIMILATION +3 3 INFORMATION BASED ON COMPUTER ANALYSIS OR DATA ASSIMILATION MANUALLY MODIFIED +10 10 INFORMATION BASED ON THE NUMERICAL WEATHER PREDICTION +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2042.table b/definitions/bufr/tables/0/wmo/39/codetables/2042.table new file mode 100644 index 000000000..eb2445b83 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2042.table @@ -0,0 +1,4 @@ +0 0 VALUE ORIGINALLY REPORTED IN M/S +1 1 VALUE ORIGINALLY REPORTED IN KNOTS +2 2 NO SEA CURRENT DATA AVAILABLE +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2044.table b/definitions/bufr/tables/0/wmo/39/codetables/2044.table new file mode 100644 index 000000000..0e10ed8e1 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2044.table @@ -0,0 +1,6 @@ +0 0 RESERVED FOR FUTURE USE +1 1 LONGUET-HIGGINS (1964) +2 2 LONGUET-HIGGINS (F3 METHOD) +3 3 MAXIMUM LIKELIHOOD METHOD +4 4 MAXIMUM ENTROPY METHOD +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2045.table b/definitions/bufr/tables/0/wmo/39/codetables/2045.table new file mode 100644 index 000000000..374e4f27e --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2045.table @@ -0,0 +1,5 @@ +0 0 SEA STATION +1 1 AUTOMATIC DATA BUOY +2 2 AIRCRAFT +3 3 SATELLITE +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2046.table b/definitions/bufr/tables/0/wmo/39/codetables/2046.table new file mode 100644 index 000000000..57fb9d6be --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2046.table @@ -0,0 +1,4 @@ +0 0 RESERVED FOR FUTURE USE +1 1 HEAVE SENSOR +2 2 SLOPE SENSOR +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2047.table b/definitions/bufr/tables/0/wmo/39/codetables/2047.table new file mode 100644 index 000000000..821393179 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2047.table @@ -0,0 +1,9 @@ +0 0 RESERVED +1 1 DART II (PMEL) +2 2 DART ETD +3 3 SAIC TSUNAMI BUOY (STB) +4 4 GFZ - POTSDAM +5 5 INCOIS (INDIA) +6 6 INABUOY (INDONESIA) +7 7 ENVIRTECH +127 127 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2048.table b/definitions/bufr/tables/0/wmo/39/codetables/2048.table new file mode 100644 index 000000000..e4325f83b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2048.table @@ -0,0 +1,16 @@ +0 0 HIRS +1 1 MSU +2 2 SSU +3 3 AMSU-A +4 4 AMSU-B +5 5 AVHRR +6 6 SSMI +7 7 NSCAT +8 8 SEAWINDS +9 9 POSEIDON ALTIMETER +10 10 JMR (JASON MICROWAVE RADIOMETER) +11 11 MHS +12 12 ASCAT +13 13 OSCAT2 +14 14 RESERVED +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2049.table b/definitions/bufr/tables/0/wmo/39/codetables/2049.table new file mode 100644 index 000000000..ade5cac86 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2049.table @@ -0,0 +1,4 @@ +1 1 PROCESSING TECHNIQUE NOT DEFINED +2 2 SIMULTANEOUS PHYSICAL RETRIEVAL +3 3 CLEAR SOUNDING +4 4 CLOUDY SOUNDING diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2050.table b/definitions/bufr/tables/0/wmo/39/codetables/2050.table new file mode 100644 index 000000000..fbcce617d --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2050.table @@ -0,0 +1,19 @@ +1 1 1 +2 2 2 +3 3 3 +4 4 4 +5 5 5 +6 6 6 +7 7 7 +8 8 8 +9 9 9 +10 10 10 +11 11 11 +12 12 12 +13 13 13 +14 14 14 +15 15 15 +16 16 16 +17 17 17 +18 18 18 +19 19 19 diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2051.table b/definitions/bufr/tables/0/wmo/39/codetables/2051.table new file mode 100644 index 000000000..3524ae72d --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2051.table @@ -0,0 +1,5 @@ +0 0 RESERVED +1 1 MAXIMUM/MINIMUM THERMOMETERS +2 2 AUTOMATED INSTRUMENTS +3 3 THERMOGRAPH +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2052.table b/definitions/bufr/tables/0/wmo/39/codetables/2052.table new file mode 100644 index 000000000..8b6262caa --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2052.table @@ -0,0 +1,5 @@ +1 1 1 +2 2 2 +3 3 3 +4 4 4 +5 5 5 diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2053.table b/definitions/bufr/tables/0/wmo/39/codetables/2053.table new file mode 100644 index 000000000..03e5e295e --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2053.table @@ -0,0 +1,5 @@ +0 0 OBSERVED BRIGHTNESS TEMPERATURE +1 1 BRIGHTNESS TEMPERATURE WITH BIAS CORRECTION APPLIED +2 2 BRIGHTNESS TEMPERATURE CALCULATED FROM FIRST GUESS +3 3 BRIGHTNESS TEMPERATURE CALCULATED FROM SOUNDING +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2054.table b/definitions/bufr/tables/0/wmo/39/codetables/2054.table new file mode 100644 index 000000000..0995688ba --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2054.table @@ -0,0 +1,6 @@ +0 0 PARAMETER DERIVED USING OBSERVED SOUNDER BRIGHTNESS TEMPERATURES +1 1 PARAMETER DERIVED USING OBSERVED IMAGER BRIGHTNESS TEMPERATURES +2 2 PARAMETER DERIVED USING FIRST GUESS INFORMATION +3 3 PARAMETER DERIVED USING NMC ANALYSIS INFORMATION +4 4 PARAMETER DERIVED USING RADIOSONDE INFORMATION +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2055.table b/definitions/bufr/tables/0/wmo/39/codetables/2055.table new file mode 100644 index 000000000..ce06f0089 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2055.table @@ -0,0 +1,10 @@ +0 0 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS RADIOSONDE +1 1 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS FIRST GUESS +2 2 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS FIRST GUESS +3 3 STATISTICS GENERATED COMPARING OBSERVED VERSUS RETRIEVAL +4 4 STATISTICS GENERATED COMPARING OBSERVED VERSUS FIRST GUESS +5 5 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS IMAGER +6 6 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS SOUNDER +7 7 STATISTICS GENERATED FOR RADIOSONDE +8 8 STATISTICS GENERATED FOR FIRST GUESS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2056.table b/definitions/bufr/tables/0/wmo/39/codetables/2056.table new file mode 100644 index 000000000..86eb98302 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2056.table @@ -0,0 +1,6 @@ +0 0 SUMS OF DIFFERENCES +1 1 SUMS OF SQUARED DIFFERENCES +2 2 SAMPLE SIZE +3 3 MINIMUM DIFFERENCE +4 4 MAXIMUM DIFFERENCE +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2057.table b/definitions/bufr/tables/0/wmo/39/codetables/2057.table new file mode 100644 index 000000000..681e6bd08 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2057.table @@ -0,0 +1,7 @@ +0 0 NESTED GRID MODEL (NGM) +1 1 AVIATION MODEL (AVN) +2 2 MEDIUM RANGE FORECAST (MRF) MODEL +3 3 GLOBAL DATA ASSIMILATION SYSTEM (GDAS) FORECAST MODEL +4 4 PRIOR SOUNDINGS (WITHIN 3 HOURS OF CURRENT TIME) +5 5 CLIMATOLOGY +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2058.table b/definitions/bufr/tables/0/wmo/39/codetables/2058.table new file mode 100644 index 000000000..6c45eda11 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2058.table @@ -0,0 +1,5 @@ +0 0 12 HOUR AND 18 HOUR +1 1 18 HOUR AND 24 HOUR +2 2 6 HOUR AND 12 HOUR +3 3 GREATER THAN 24 HOURS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2059.table b/definitions/bufr/tables/0/wmo/39/codetables/2059.table new file mode 100644 index 000000000..8f089d3c4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2059.table @@ -0,0 +1,5 @@ +0 0 NCEP NESTED GRID MODEL (NGM) ANALYSIS +1 1 NCEP AVIATION MODEL (AVN) ANALYSIS +2 2 NCEP MEDIUM RANGE FORECAST (MRF) MODEL ANALYSIS +3 3 NCEP GLOBAL DATA ASSIMILATION SYSTEM (GDAS) FORECAST MODEL ANALYSIS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2060.table b/definitions/bufr/tables/0/wmo/39/codetables/2060.table new file mode 100644 index 000000000..6f846987b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2060.table @@ -0,0 +1,7 @@ +0 0 CURRENT SURFACE HOURLY REPORTS +1 1 CURRENT SHIP REPORTS +2 2 CURRENT BUOY REPORTS +3 3 ONE HOUR OLD SURFACE HOURLY REPORTS +4 4 ONE HOUR OLD SHIP REPORTS +5 5 ONE HOUR OLD BUOY REPORTS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2061.table b/definitions/bufr/tables/0/wmo/39/codetables/2061.table new file mode 100644 index 000000000..592d51eb4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2061.table @@ -0,0 +1,3 @@ +0 0 INERTIAL NAVIGATION SYSTEM +1 1 OMEGA +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2062.table b/definitions/bufr/tables/0/wmo/39/codetables/2062.table new file mode 100644 index 000000000..2d0f4e202 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2062.table @@ -0,0 +1,7 @@ +0 0 ASDAR +1 1 ASDAR (ACARS ALSO AVAILABLE BUT NOT OPERATIVE) +2 2 ASDAR (ACARS ALSO AVAILABLE AND OPERATIVE) +3 3 ACARS +4 4 ACARS (ASDAR ALSO AVAILABLE BUT NOT OPERATIVE) +5 5 ACARS (ASDAR ALSO AVAILABLE AND OPERATIVE) +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2064.table b/definitions/bufr/tables/0/wmo/39/codetables/2064.table new file mode 100644 index 000000000..741430292 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2064.table @@ -0,0 +1,4 @@ +0 0 GOOD +1 1 BAD +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2066.table b/definitions/bufr/tables/0/wmo/39/codetables/2066.table new file mode 100644 index 000000000..a3865dc68 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2066.table @@ -0,0 +1,9 @@ +0 0 INTERMET IMS 2000 +1 1 INTERMET IMS 1500C +2 2 SHANGHAI GTC1 +3 3 NANJING GTC2 +4 4 NANJING GFE(L)1 +5 5 MARL-A RADAR +6 6 VEKTOR-M RADAR +62 62 OTHER +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2070.table b/definitions/bufr/tables/0/wmo/39/codetables/2070.table new file mode 100644 index 000000000..5a098ea26 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2070.table @@ -0,0 +1,13 @@ +0 0 ACTUAL LOCATION IN SECONDS +1 1 ACTUAL LOCATION IN MINUTES +2 2 ACTUAL LOCATION IN DEGREES +3 3 ACTUAL LOCATION IN DECIDEGREES +4 4 ACTUAL LOCATION IN CENTIDEGREES +5 5 REFERENCED TO CHECKPOINT IN SECONDS +6 6 REFERENCED TO CHECKPOINT IN MINUTES +7 7 REFERENCED TO CHECKPOINT IN DEGREES +8 8 REFERENCED TO CHECKPOINT IN DECIDEGREES +9 9 REFERENCED TO CHECKPOINT IN CENTIDEGREES +10 10 ACTUAL LOCATION IN TENTHS OF A MINUTE +11 11 REFERENCED TO CHECKPOINT IN TENTHS OF A MINUTE +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2080.table b/definitions/bufr/tables/0/wmo/39/codetables/2080.table new file mode 100644 index 000000000..c68a39dd6 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2080.table @@ -0,0 +1,7 @@ +0 0 KAYSAM +1 1 TOTEX +2 2 KKS +3 3 GUANGZHOU SHUANGYI (CHINA) +4 4 CHEMCHINA ZHUZHOU (CHINA) +62 62 OTHER +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2081.table b/definitions/bufr/tables/0/wmo/39/codetables/2081.table new file mode 100644 index 000000000..dfe9551a9 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2081.table @@ -0,0 +1,11 @@ +0 0 GP26 +1 1 GP28 +2 2 GP30 +3 3 HM26 +4 4 HM28 +5 5 HM30 +6 6 SV16 +7 7 TOTEX TA TYPE BALLOONS +8 8 TOTEX TX TYPE BALLOONS +30 30 OTHER +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2083.table b/definitions/bufr/tables/0/wmo/39/codetables/2083.table new file mode 100644 index 000000000..611c5bf64 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2083.table @@ -0,0 +1,7 @@ +0 0 HIGH BAY +1 1 LOW BAY +2 2 BALLOON-INFLATED LAUNCH SYSTEM (BILS) +3 3 ROOF-TOP BILS +4 4 AUTOMATED UNMANNED SOUNDING SYSTEM +14 14 OTHER +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2084.table b/definitions/bufr/tables/0/wmo/39/codetables/2084.table new file mode 100644 index 000000000..be6430ae6 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2084.table @@ -0,0 +1,5 @@ +0 0 HYDROGEN +1 1 HELIUM +2 2 NATURAL GAS +14 14 OTHER +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2092.table b/definitions/bufr/tables/0/wmo/39/codetables/2092.table new file mode 100644 index 000000000..b171b55c8 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2092.table @@ -0,0 +1,4 @@ +0 0 UV CHANNEL BASED RETRIEVAL +1 1 VISIBLE CHANNEL BASED RETRIEVAL +2 2 COMBINED UV BASED RETRIEVAL AND VISIBLE BASED RETRIEVAL +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2095.table b/definitions/bufr/tables/0/wmo/39/codetables/2095.table new file mode 100644 index 000000000..580fe930c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2095.table @@ -0,0 +1,7 @@ +0 0 CAPACITANCE ANEROID +1 1 DERIVED FROM GPS +2 2 RESISTIVE STRAIN GAUGE +3 3 SILICON CAPACITOR +4 4 DERIVED FROM RADAR HEIGHT +30 30 OTHER +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2096.table b/definitions/bufr/tables/0/wmo/39/codetables/2096.table new file mode 100644 index 000000000..9f1b1027c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2096.table @@ -0,0 +1,9 @@ +0 0 ROD THERMISTOR +1 1 BEAD THERMISTOR +2 2 CAPACITANCE BEAD +3 3 CAPACITANCE WIRE +4 4 RESISTIVE SENSOR +5 5 CHIP THERMISTOR +6 6 MERCURY +7 7 ALCOHOL/GLYCOL +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2097.table b/definitions/bufr/tables/0/wmo/39/codetables/2097.table new file mode 100644 index 000000000..309ef642a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2097.table @@ -0,0 +1,26 @@ +0 0 VIZ MARK II CARBON HYGRISTOR +1 1 VIZ B2 HYGRISTOR +2 2 VAISALA A-HUMICAP +3 3 VAISALA H-HUMICAP +4 4 CAPACITANCE SENSOR +5 5 VAISALA RS90 +6 6 SIPPICAN MARK IIA CARBON HYGRISTOR +7 7 TWIN ALTERNATIVELY HEATED HUMICAP CAPACITANCE SENSOR +8 8 HUMICAP CAPACITANCE SENSOR WITH ACTIVE DE-ICING METHOD +9 9 CARBON HYGRISTOR +10 10 PSYCHROMETER +11 11 CAPACITIVE (POLYMER) +12 12 CAPACITIVE (CERAMIC, INCLUDING METAL OXIDE) +13 13 RESISTIVE (GENERIC) +14 14 RESISTIVE (SALT POLYMER) +15 15 RESISTIVE (CONDUCTIVE POLYMER) +16 16 THERMAL CONDUCTIVITY +17 17 GRAVIMETRIC +18 18 PAPER-METAL COIL +19 19 ORDINARY HUMAN HAIR +20 20 ROLLED HAIR (TORSION) +21 21 GOLDBEATER'S SKIN +22 22 CHILLED MIRROR HYGROMETER +23 23 DEW CELL +24 24 OPTICAL ABSORPTION SENSOR +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2099.table b/definitions/bufr/tables/0/wmo/39/codetables/2099.table new file mode 100644 index 000000000..74cb817c9 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2099.table @@ -0,0 +1,5 @@ +0 0 HH POLARIZATION +1 1 VV POLARIZATION +2 2 HV POLARIZATION REAL VALUED COMPONENT +3 3 HV POLARIZATION IMAGINARY VALUED COMPONENT +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2101.table b/definitions/bufr/tables/0/wmo/39/codetables/2101.table new file mode 100644 index 000000000..efdb3ec56 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2101.table @@ -0,0 +1,10 @@ +0 0 CENTRE FRONT-FED PARABOLOID +1 1 OFFSET FRONT-FED PARABOLOID +2 2 CENTRE CASSEGRAIN PARABOLOID +3 3 OFFSET CASSEGRAIN PARABOLOID +4 4 PLANAR ARRAY +5 5 COAXIAL-COLLINEAR ARRAY +6 6 YAGI ELEMENTS ARRAY +7 7 MICROSTRIP +14 14 OTHER +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2103.table b/definitions/bufr/tables/0/wmo/39/codetables/2103.table new file mode 100644 index 000000000..417d2c9a4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2103.table @@ -0,0 +1 @@ +1 1 RADAR ANTENNA IS PROTECTED BY A RADOME diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2104.table b/definitions/bufr/tables/0/wmo/39/codetables/2104.table new file mode 100644 index 000000000..e39a15365 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2104.table @@ -0,0 +1,9 @@ +0 0 HORIZONTAL POLARIZATION +1 1 VERTICAL POLARIZATION +2 2 RIGHT CIRCULAR POLARIZATION +3 3 LEFT CIRCULAR POLARIZATION +4 4 HORIZONTAL AND VERTICAL POLARIZATION +5 5 RIGHT AND LEFT CIRCULAR POLARIZATION +6 6 QUASI-HORIZONTAL POLARIZATION +7 7 QUASI-VERTICAL POLARIZATION +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21066.table b/definitions/bufr/tables/0/wmo/39/codetables/21066.table new file mode 100644 index 000000000..9bcafea2a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21066.table @@ -0,0 +1,11 @@ +1 1 PROCESSING EQUIPMENT NOT WORKING +2 2 EQUIPMENT FAILED +3 3 PRF CODE CHANGED DURING IMAGE GENERATION +4 4 SAMPLING WINDOW CHANGED DURING IMAGE GENERATION +5 5 GAIN CHANGED DURING IMAGE GENERATION +6 6 CHIRP REPLICA EXCEEDS SPECIFIED VALUE +7 7 INPUT DATA MEAN AND STANDARD DEVIATION OF IN-PHASE AND QUADRATURE OUT OF RANGE +8 8 DOPPLER CENTROID CONFIDENCE > MMCC VALUE +9 9 DOPPLER CENTROID ABSOLUTE VALUE > PRF/2 +10 10 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE +11 11 OUTPUT DATA MEAN AND STANDARD DEVIATION =< MMCC VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21067.table b/definitions/bufr/tables/0/wmo/39/codetables/21067.table new file mode 100644 index 000000000..a0ed399e4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21067.table @@ -0,0 +1,12 @@ +1 1 NO FOREBEAM CALCULATION +2 2 NO MIDBEAM CALCULATION +3 3 NO AFTBEAM CALCULATION +4 4 FOREBEAM ARCING DETECTED +5 5 MIDBEAM ARCING DETECTED +6 6 AFTBEAM ARCING DETECTED +7 7 ANY BEAM NOISE CONTENT ABOVE OR EQUAL TO THRESHOLD +8 8 LAND (ANY LAND IN CELL FOOTPRINT) +9 9 AUTONOMOUS AMBIGUITY REMOVAL NOT USED +10 10 METEOROLOGICAL BACKGROUND NOT USED +11 11 MINIMUM RESIDUAL EXCEEDED THRESHOLD +12 12 FRAME CHECKSUM ERROR DETECTED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21068.table b/definitions/bufr/tables/0/wmo/39/codetables/21068.table new file mode 100644 index 000000000..102171f44 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21068.table @@ -0,0 +1,7 @@ +1 1 STANDARD DEVIATION OF WIND SPEED OUTSIDE MMCC LIMIT +2 2 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT OUTSIDE MMCC LIMIT +3 3 STANDARD DEVIATION OF ALTITUDE OUTSIDE MMCC LIMIT +4 4 MEAN PEAKINESS OUTSIDE MMCC LIMIT +5 5 FRAME CHECKSUM ERROR DETECTED +6 6 HEIGHT-TIME LOOP TIME CONSTANT CORRECTION NOT PERFORMED +7 7 NOT ENOUGH MEASUREMENTS (N < 10) diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21069.table b/definitions/bufr/tables/0/wmo/39/codetables/21069.table new file mode 100644 index 000000000..b258fae22 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21069.table @@ -0,0 +1,9 @@ +1 1 12.0 MICRON CHANNEL PRESENT IN SOURCE DATA +2 2 11.0 MICRON CHANNEL PRESENT IN SOURCE DATA +3 3 3.7 MICRON CHANNEL PRESENT IN SOURCE DATA +4 4 1.6 MICRON CHANNEL PRESENT IN SOURCE DATA +5 5 CLOUD IDENTIFICATION USED 1.6 MICRON HISTOGRAM REFLECTANCE CLOUD TEST +6 6 1.6 MICRON HISTOGRAM REFLECTANCE CLOUD TEST USED DYNAMIC THRESHOLD +7 7 SUN GLINT DETECTED BY 1.6 MICRON REFLECTANCE CLOUD TEST +8 8 3.7 MICRON CHANNEL USED IN SEA-SURFACE TEMPERATURE RETRIEVAL +9 9 SEA-SURFACE TEMPERATURE DERIVATION USED DAYTIME DATA (NIGHT-TIME IF ZERO) diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21070.table b/definitions/bufr/tables/0/wmo/39/codetables/21070.table new file mode 100644 index 000000000..669655f00 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21070.table @@ -0,0 +1,22 @@ +1 1 CELL 1: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL +2 2 CELL 2: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL +3 3 CELL 3: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL +4 4 CELL 4: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL +5 5 CELL 5: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL +6 6 CELL 6: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL +7 7 CELL 7: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL +8 8 CELL 8: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL +9 9 CELL 9: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL +10 10 CELL 1: DUAL VIEW SST USED 3.7 MICRON CHANNEL +11 11 CELL 2: DUAL VIEW SST USED 3.7 MICRON CHANNEL +12 12 CELL 3: DUAL VIEW SST USED 3.7 MICRON CHANNEL +13 13 CELL 4: DUAL VIEW SST USED 3.7 MICRON CHANNEL +14 14 CELL 5: DUAL VIEW SST USED 3.7 MICRON CHANNEL +15 15 CELL 6: DUAL VIEW SST USED 3.7 MICRON CHANNEL +16 16 CELL 7: DUAL VIEW SST USED 3.7 MICRON CHANNEL +17 17 CELL 8: DUAL VIEW SST USED 3.7 MICRON CHANNEL +18 18 CELL 9: DUAL VIEW SST USED 3.7 MICRON CHANNEL +19 19 NADIR VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO) +20 20 FORWARD VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO) +21 21 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS ACQUIRED WHEN ERS PLATFORM NOT IN YAW-STEERING MODE +22 22 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS FOR WHICH PRODUCT CONFIDENCE DATA SHOW QUALITY IS POOR OR UNKNOWN diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21072.table b/definitions/bufr/tables/0/wmo/39/codetables/21072.table new file mode 100644 index 000000000..99e4b1c29 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21072.table @@ -0,0 +1,3 @@ +1 1 HEIGHT ERROR CORRECTION APPLIED INSTEAD OF OPEN LOOP CALIBRATION +2 2 MICROWAVE SOUNDER USED FOR TROPOSPHERE CORRECTION +3 3 AGC OUTPUT CORRECTION APPLIED INSTEAD OF OPEN LOOP CALIBRATION diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21073.table b/definitions/bufr/tables/0/wmo/39/codetables/21073.table new file mode 100644 index 000000000..9538fa553 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21073.table @@ -0,0 +1,8 @@ +1 1 BLANK DATA RECORD +2 2 TEST +3 3 CALIBRATION (CLOSED LOOP) +4 4 BITE +5 5 ACQUISITION ON ICE +6 6 ACQUISITION ON OCEAN +7 7 TRACKING ON ICE +8 8 TRACKING ON OCEAN diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21076.table b/definitions/bufr/tables/0/wmo/39/codetables/21076.table new file mode 100644 index 000000000..bc52ac558 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21076.table @@ -0,0 +1,4 @@ +0 0 LINEAR +1 1 LOGARITHMIC (BASE E) +2 2 LOGARITHMIC (BASE 10) +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21109.table b/definitions/bufr/tables/0/wmo/39/codetables/21109.table new file mode 100644 index 000000000..deb577aa0 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21109.table @@ -0,0 +1,7 @@ +1 1 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL +2 2 POOR AZIMUTH DIVERSITY AMONG SIGMA-0 FOR WIND RETRIEVAL +8 8 SOME PORTION OF WIND VECTOR CELL IS OVER LAND +9 9 SOME PORTION OF WIND VECTOR CELL IS OVER ICE +10 10 WIND RETRIEVAL NOT PERFORMED FOR WIND VECTOR CELL +11 11 REPORTED WIND SPEED IS GREATER THAN 30 M S-1 +12 12 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M S-1 diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21115.table b/definitions/bufr/tables/0/wmo/39/codetables/21115.table new file mode 100644 index 000000000..9e90133cd --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21115.table @@ -0,0 +1,10 @@ +1 1 SIGMA-0 MEASUREMENT IS NOT USABLE +2 2 SIGNAL TO NOISE RATIO IS LOW +3 3 SIGMA-0 IS NEGATIVE +4 4 SIGMA-0 IS OUTSIDE OF ACCEPTABLE RANGE +5 5 SCATTEROMETER PULSE QUALITY IS NOT ACCEPTABLE +6 6 SIGMA-0 CELL LOCATION ALGORITHM DOES NOT CONVERGE +7 7 FREQUENCY SHIFT LIES BEYOND THE RANGE OF THE X FACTOR TABLE +8 8 SPACECRAFT TEMPERATURE IS BEYOND CALIBRATION COEFFICIENT RANGE +9 9 NO APPLICABLE ALTITUDE RECORDS WERE FOUND FOR THIS SIGMA-0 +10 10 INTERPOLATED EPHEMERIS DATA ARE NOT ACCEPTABLE FOR THIS SIGMA-0 diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21116.table b/definitions/bufr/tables/0/wmo/39/codetables/21116.table new file mode 100644 index 000000000..08d5412e4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21116.table @@ -0,0 +1,16 @@ +1 1 CALIBRATION/MEASUREMENT PULSE FLAG (1) +2 2 CALIBRATION/MEASUREMENT PULSE FLAG (2) +3 3 OUTER ANTENNA BEAM +4 4 SIGMA-0 CELL IS AFT OF SPACECRAFT +5 5 CURRENT MODE (1) +6 6 CURRENT MODE (2) +7 7 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1) +8 8 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2) +9 9 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3) +10 10 LOW-RESOLUTION MODE - WHOLE PULSE DATA +11 11 SCATTEROMETER ELECTRONIC SUBSYSTEM B +12 12 ALTERNATE SPIN RATE - 19.8 RPM +13 13 RECEIVER PROTECTION ON +14 14 SLICES PER COMPOSITE FLAG (1) +15 15 SLICES PER COMPOSITE FLAG (2) +16 16 SLICES PER COMPOSITE FLAG (3) diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21119.table b/definitions/bufr/tables/0/wmo/39/codetables/21119.table new file mode 100644 index 000000000..e17e3c04a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21119.table @@ -0,0 +1,14 @@ +0 0 RESERVED +1 1 SASS +2 2 SASS2 +3 3 NSCAT0 +4 4 NSCAT1 +5 5 NSCAT2 +6 6 QSCAT0 +7 7 QSCAT1 +31 31 CMOD1 +32 32 CMOD2 +33 33 CMOD3 +34 34 CMOD4 +35 35 CMOD5 +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21144.table b/definitions/bufr/tables/0/wmo/39/codetables/21144.table new file mode 100644 index 000000000..1f082e6d9 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21144.table @@ -0,0 +1 @@ +1 1 RAIN diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21148.table b/definitions/bufr/tables/0/wmo/39/codetables/21148.table new file mode 100644 index 000000000..11413ed72 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21148.table @@ -0,0 +1,2 @@ +1 1 NON SHORT SCALE VARIATION +2 2 SHORT SCALE VARIATION diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2115.table b/definitions/bufr/tables/0/wmo/39/codetables/2115.table new file mode 100644 index 000000000..c7e866c7a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2115.table @@ -0,0 +1,7 @@ +0 0 PDB +1 1 RSOIS +2 2 ASOS +3 3 PSYCHROMETER +4 4 F420 +30 30 OTHER +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21150.table b/definitions/bufr/tables/0/wmo/39/codetables/21150.table new file mode 100644 index 000000000..851004635 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21150.table @@ -0,0 +1,4 @@ +0 0 DATA FROM SINGLE GROUND STATION (NO CO-LOCATION) +1 1 DATA FROM MULTIPLE GROUND STATION (CO-LOCATED DATA) +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21155.table b/definitions/bufr/tables/0/wmo/39/codetables/21155.table new file mode 100644 index 000000000..a7837cfa7 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21155.table @@ -0,0 +1,16 @@ +1 1 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL +2 2 POOR AZIMUTH DIVERSITY AMONG SIGMA-0 FOR WIND RETRIEVAL +3 3 ANY BEAM NOISE CONTENT ABOVE THRESHOLD +4 4 PRODUCT MONITORING NOT USED +5 5 PRODUCT MONITORING FLAG +6 6 KNMI QUALITY CONTROL FAILS +7 7 VARIATIONAL QUALITY CONTROL FAILS +8 8 SOME PORTION OF WIND VECTOR CELL IS OVER LAND +9 9 SOME PORTION OF WIND VECTOR CELL IS OVER ICE +10 10 WIND RETRIEVAL NOT PERFORMED FOR WIND VECTOR CELL +11 11 REPORTED WIND SPEED IS GREATER THAN 30 M/S +12 12 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S +13 13 RAIN FLAG FOR THE WIND VECTOR CELL IS NOT USABLE +14 14 RAIN FLAG ALGORITHM DETECTS RAIN +15 15 NO METEOROLOGICAL BACKGROUND USED +16 16 DATA ARE REDUNDANT diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21158.table b/definitions/bufr/tables/0/wmo/39/codetables/21158.table new file mode 100644 index 000000000..dd53c5159 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21158.table @@ -0,0 +1,4 @@ +0 0 ACCEPTABLE +1 1 NOT ACCEPTABLE +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21159.table b/definitions/bufr/tables/0/wmo/39/codetables/21159.table new file mode 100644 index 000000000..1703f9b8e --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21159.table @@ -0,0 +1,4 @@ +0 0 GOOD +1 1 USABLE +2 2 BAD +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/21169.table b/definitions/bufr/tables/0/wmo/39/codetables/21169.table new file mode 100644 index 000000000..9b93444ce --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/21169.table @@ -0,0 +1,4 @@ +0 0 NO ICE PRESENT +1 1 ICE PRESENT +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2119.table b/definitions/bufr/tables/0/wmo/39/codetables/2119.table new file mode 100644 index 000000000..0640af68b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2119.table @@ -0,0 +1,8 @@ +0 0 INTERMEDIATE FREQUENCY CALIBRATION MODE (IF CAL) +1 1 BUILT-IN TEST EQUIPMENT DIGITAL (BITE DGT) +2 2 BUILT-IN TEST EQUIPMENT RADIO FREQUENCY (BITE RF) +3 3 PRESET TRACKING (PSET TRK) +4 4 PRESET LOOP OUT +5 5 ACQUISITION +6 6 TRACKING +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2131.table b/definitions/bufr/tables/0/wmo/39/codetables/2131.table new file mode 100644 index 000000000..f4336ef79 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2131.table @@ -0,0 +1 @@ +1 1 STC OPERATIONAL diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2137.table b/definitions/bufr/tables/0/wmo/39/codetables/2137.table new file mode 100644 index 000000000..40d33fdd3 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2137.table @@ -0,0 +1,4 @@ +1 1 3:2 +2 2 4:3 +3 3 5:4 +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2138.table b/definitions/bufr/tables/0/wmo/39/codetables/2138.table new file mode 100644 index 000000000..a574506ad --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2138.table @@ -0,0 +1,3 @@ +1 1 CLOCKWISE ROTATION +2 2 COUNTERCLOCKWISE ROTATION +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2139.table b/definitions/bufr/tables/0/wmo/39/codetables/2139.table new file mode 100644 index 000000000..f6cf80294 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2139.table @@ -0,0 +1,3 @@ +0 0 SIRAL NOMINAL +1 1 SIRAL REDUNDANT +2 2 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2143.table b/definitions/bufr/tables/0/wmo/39/codetables/2143.table new file mode 100644 index 000000000..975d068be --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2143.table @@ -0,0 +1,21 @@ +0 0 RESERVED +1 1 BREWER SPECTROPHOTOMETER +2 2 CAVER TEICHERT +3 3 DOBSON +4 4 DOBSON (JAPAN) +5 5 EHMET +6 6 FECKER TELESCOPE +7 7 HOELPER +8 8 JODMETER +9 9 FILTER OZONOMETER M-83 +10 10 MAST +11 11 OXFORD +12 12 PAETZOLD +13 13 REGENER +14 14 RESERVED FOR FUTURE USE +15 15 VASSY FILTER OZONOMETER +16 16 CARBON IODIDE +17 17 SURFACE OZONE BUBBLER +18 18 FILTER OZONOMETER M-124 +19 19 ECC SONDE +127 127 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2144.table b/definitions/bufr/tables/0/wmo/39/codetables/2144.table new file mode 100644 index 000000000..5b0f37b34 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2144.table @@ -0,0 +1,8 @@ +0 0 DIRECT SUN +1 1 DIRECT SUN, ATTENUATOR #1 +2 2 DIRECT SUN, ATTENUATOR #2 +3 3 FOCUSED MOON +4 4 FOCUSED SUN +5 5 FOCUSED SUN CORRECTED WITH ADJACENT SKY MEASUREMENTS +6 6 ZENITH SKY +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2145.table b/definitions/bufr/tables/0/wmo/39/codetables/2145.table new file mode 100644 index 000000000..1944e69fc --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2145.table @@ -0,0 +1,9 @@ +0 0 WAVELENGTHS AD ORDINARY SETTING +1 1 WAVELENGTHS BD ORDINARY SETTING +2 2 WAVELENGTHS CD ORDINARY SETTING +3 3 WAVELENGTHS CC' ORDINARY SETTING +4 4 WAVELENGTHS AD FOCUSED IMAGE +5 5 WAVELENGTHS BD FOCUSED IMAGE +6 6 WAVELENGTHS CD FOCUSED IMAGE +7 7 WAVELENGTHS CC' FOCUSED IMAGE +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2146.table b/definitions/bufr/tables/0/wmo/39/codetables/2146.table new file mode 100644 index 000000000..871b35709 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2146.table @@ -0,0 +1,11 @@ +0 0 ON DIRECT SUN +1 1 ON DIRECT MOON +2 2 ON BLUE ZENITH SKY +3 3 ON ZENITH CLOUD (UNIFORM STRATIFIED LAYER OF SMALL OPACITY) +4 4 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF MEDIUM OPACITY) +5 5 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF LARGE OPACITY) +6 6 ON ZENITH CLOUD (HIGHLY VARIABLE OPACITY, WITH OR WITHOUT PRECIPITATION) +7 7 ON ZENITH CLOUD (FOG) +8 8 ON ZENITH HAZE +9 9 ON DIRECT SUN THROUGH THIN CLOUD, FOG OR HAZE +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2147.table b/definitions/bufr/tables/0/wmo/39/codetables/2147.table new file mode 100644 index 000000000..5ef81f4a8 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2147.table @@ -0,0 +1,11 @@ +0 0 RESERVED +1 1 DIRECT LEASED CIRCUIT +2 2 DIALLED UP CONNECTION +3 3 INTERNET ISP +4 4 DCP VIA SATELLITE (MTSAT, METEOSAT, ETC.) +5 5 VSAT +6 6 GAN, BGAN +7 7 THISS TERMINAL +8 8 IRIDIUM SATELLITES +9 9 MOBILE TELEPHONY +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2148.table b/definitions/bufr/tables/0/wmo/39/codetables/2148.table new file mode 100644 index 000000000..7d8ca51e3 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2148.table @@ -0,0 +1,12 @@ +0 0 RESERVED +1 1 ARGOS +2 2 GPS +3 3 GOES DCP +4 4 METEOSAT DCP +5 5 ORBCOMM +6 6 INMARSAT +7 7 IRIDIUM +8 8 IRIDIUM AND GPS +9 9 ARGOS-3 +10 10 ARGOS-4 +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2149.table b/definitions/bufr/tables/0/wmo/39/codetables/2149.table new file mode 100644 index 000000000..04638d229 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2149.table @@ -0,0 +1,38 @@ +0 0 UNSPECIFIED DRIFTING BUOY +1 1 STANDARD LAGRANGIAN DRIFTER (GLOBAL DRIFTER PROGRAMME) +2 2 STANDARD FGGE TYPE DRIFTING BUOY (NON-LAGRANGIAN METEOROLOGICAL DRIFTING BUOY) +3 3 WIND MEASURING FGGE TYPE DRIFTING BUOY (NON-LAGRANGIAN METEOROLOGICAL DRIFTING BUOY) +4 4 ICE DRIFTER +5 5 SVPG STANDARD LAGRANGIAN DRIFTER WITH GPS +6 6 SVP-HR DRIFTER WITH HIGH-RESOLUTION TEMPERATURE OR THERMISTOR STRING +7 7 RESERVED +8 8 UNSPECIFIED SUBSURFACE FLOAT +9 9 SOFAR +10 10 ALACE +11 11 MARVOR +12 12 RAFOS +13 13 PROVOR +14 14 SOLO +15 15 APEX +16 16 UNSPECIFIED MOORED BUOY +17 17 NOMAD +18 18 3-METRE DISCUS +19 19 10-12-METRE DISCUS +20 20 ODAS 30 SERIES +21 21 ATLAS (E.G. TAO AREA) +22 22 TRITON BUOY +23 23 FLEX MOORING (E.G. TIP AREA) +24 24 OMNIDIRECTIONAL WAVERIDER +25 25 DIRECTIONAL WAVERIDER +26 26 SUBSURFACE ARGO FLOAT +27 27 PALACE +28 28 NEMO +29 29 NINJA +30 30 ICE BUOY/FLOAT (POPS OR ITP) +34 34 MOORING OCEANOGRAPHIC +35 35 MOORING METEOROLOGICAL +36 36 MOORING MULTIDISCIPLINARY (OCEANSITES) +37 37 MOORING TIDE GAUGE OR TSUNAMI BUOY +38 38 ICE BEACON +39 39 ICE MASS BALANCE BUOY +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2150.table b/definitions/bufr/tables/0/wmo/39/codetables/2150.table new file mode 100644 index 000000000..8193b575a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2150.table @@ -0,0 +1,55 @@ +0 0 RESERVED +1 1 HIRS 1 +2 2 HIRS 2 +3 3 HIRS 3 +4 4 HIRS 4 +5 5 HIRS 5 +6 6 HIRS 6 +7 7 HIRS 7 +8 8 HIRS 8 +9 9 HIRS 9 +10 10 HIRS 10 +11 11 HIRS 11 +12 12 HIRS 12 +13 13 HIRS 13 +14 14 HIRS 14 +15 15 HIRS 15 +16 16 HIRS 16 +17 17 HIRS 17 +18 18 HIRS 18 +19 19 HIRS 19 +20 20 HIRS 20 +21 21 MSU 1 +22 22 MSU 2 +23 23 MSU 3 +24 24 MSU 4 +25 25 SSU 1 +26 26 SSU 2 +27 27 SSU 3 +28 28 AMSU-A 1 +29 29 AMSU-A 2 +30 30 AMSU-A 3 +31 31 AMSU-A 4 +32 32 AMSU-A 5 +33 33 AMSU-A 6 +34 34 AMSU-A 7 +35 35 AMSU-A 8 +36 36 AMSU-A 9 +37 37 AMSU-A 10 +38 38 AMSU-A 11 +39 39 AMSU-A 12 +40 40 AMSU-A 13 +41 41 AMSU-A 14 +42 42 AMSU-A 15 +43 43 AMSU-B 1 / MHS 1 +44 44 AMSU-B 2 / MHS 2 +45 45 AMSU-B 3 / MHS 3 +46 46 AMSU-B 4 / MHS 4 +47 47 AMSU-B 5 / MHS 5 +48 48 AVHRR 1 +49 49 AVHRR 2 +50 50 AVHRR 3A +51 51 AVHRR 3B +52 52 AVHRR 4 +53 53 AVHRR 5 +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2151.table b/definitions/bufr/tables/0/wmo/39/codetables/2151.table new file mode 100644 index 000000000..45c80df10 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2151.table @@ -0,0 +1,11 @@ +0 0 HIRS +1 1 MSU +2 2 SSU +3 3 AMSU-A1-1 +4 4 AMSU-A1-2 +5 5 AMSU-A2 +6 6 AMSU-B +7 7 AVHRR +8 8 RESERVED +9 9 MHS +2047 2047 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2152.table b/definitions/bufr/tables/0/wmo/39/codetables/2152.table new file mode 100644 index 000000000..880c384cf --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2152.table @@ -0,0 +1,13 @@ +1 1 HIGH-RESOLUTION INFRARED SOUNDER (HIRS) +2 2 MICROWAVE SOUNDING UNIT (MSU) +3 3 STRATOSPHERIC SOUNDING UNIT (SSU) +4 4 AMI WIND MODE +5 5 AMI WAVE MODE +6 6 AMI IMAGE MODE +7 7 RADAR ALTIMETER +8 8 ATSR +9 9 GEOSTATIONARY IMAGER +10 10 GEOSTATIONARY SOUNDER +11 11 GEOSTATIONARY EARTH RADIATION (GERB) +12 12 MULTI-CHANNEL SCANNING RADIOMETER +13 13 POLAR-ORBITING IMAGER diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2158.table b/definitions/bufr/tables/0/wmo/39/codetables/2158.table new file mode 100644 index 000000000..97c4449c5 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2158.table @@ -0,0 +1,8 @@ +1 1 MISMATCH IN RED VEC HPA +2 2 MISMATCH IN RED VEC RFSS +3 3 PTR CALIBRATION BAND 320 MHZ (KU) +4 4 PTR CALIBRATION BAND 80 MHZ (KU) +5 5 PTR CALIBRATION BAND 20 MHZ (KU) +6 6 PTR CALIBRATION BAND 160 MHZ (S) +7 7 KU FLIGHT CALIBRATION PARAMETERS AVAILABLE +8 8 S FLIGHT CALIBRATION PARAMETERS AVAILABLE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2159.table b/definitions/bufr/tables/0/wmo/39/codetables/2159.table new file mode 100644 index 000000000..63cb87c78 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2159.table @@ -0,0 +1,7 @@ +1 1 TEMPERATURE INCONSISTENCY +2 2 DATA IS MISSING +3 3 REDUNDANCY CHANNEL +4 4 POWER BUS PROTECTION +5 5 OVERVOLTAGE/OVERLOAD PROTECTION +6 6 RESERVED +7 7 RESERVED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2160.table b/definitions/bufr/tables/0/wmo/39/codetables/2160.table new file mode 100644 index 000000000..fd7f37274 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2160.table @@ -0,0 +1,11 @@ +0 0 RESERVED +1 1 10 TO LESS THAN 20 MM +2 2 RESERVED +3 3 20 TO LESS THAN 40 MM +4 4 RESERVED +5 5 40 TO LESS THAN 60 MM +6 6 RESERVED +7 7 60 TO LESS THAN 90 MM +8 8 90 TO LESS THAN 110 MM +9 9 110 MM AND GREATER +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2161.table b/definitions/bufr/tables/0/wmo/39/codetables/2161.table new file mode 100644 index 000000000..55b88f4de --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2161.table @@ -0,0 +1,5 @@ +11 11 WIND HEIGHT CALCULATED FROM MEDIAN CLOUD-TOP PRESSURE OF TARGET +12 12 TARGET IS CLOUDY +13 13 LOW-LEVEL INVERSION +14 14 CROSS CORRELATION CONTRIBUTION (CCC) METHOD +15 15 NESTED TRACKING diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2162.table b/definitions/bufr/tables/0/wmo/39/codetables/2162.table new file mode 100644 index 000000000..510f09aa3 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2162.table @@ -0,0 +1,19 @@ +0 0 AUTO EDITOR +1 1 IRW HEIGHT ASSIGNMENT +2 2 WV HEIGHT ASSIGNMENT +3 3 H2O INTERCEPT HEIGHT ASSIGNMENT +4 4 CO2 SLICING HEIGHT ASSIGNMENT +5 5 LOW PIXEL MAX GRADIENT +6 6 HIGHER PIXEL MAX GRADIENT +7 7 PRIMARY HEIGHT ASSIGNMENT +8 8 LAYER THICKNESS ASSIGNMENT +9 9 CUMULATIVE CONTRIBUTION FUNCTION - 10 PER CENT HEIGHT +10 10 CUMULATIVE CONTRIBUTION FUNCTION - 50 PER CENT HEIGHT +11 11 CUMULATIVE CONTRIBUTION FUNCTION - 90 PER CENT HEIGHT +12 12 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF MAXIMUM GRADIENT +13 13 IR/TWO WV CHANNEL RATIONING METHOD +14 14 COMPOSITE HEIGHT ASSIGNMENT +15 15 OPTIMAL ESTIMATION +16 16 INVERSION CORRECTION +17 17 GEOMETRIC HEIGHT ASSIGNMENT +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2163.table b/definitions/bufr/tables/0/wmo/39/codetables/2163.table new file mode 100644 index 000000000..8cac63196 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2163.table @@ -0,0 +1,16 @@ +0 0 AUTO EDITOR +1 1 IRW HEIGHT ASSIGNMENT +2 2 WV HEIGHT ASSIGNMENT +3 3 H2O INTERCEPT HEIGHT ASSIGNMENT +4 4 CO2 SLICING HEIGHT ASSIGNMENT +5 5 LOW PIXEL MAX GRADIENT +6 6 HIGHER PIXEL MAX GRADIENT +7 7 PRIMARY HEIGHT ASSIGNMENT +8 8 LAYER THICKNESS ASSIGNMENT +9 9 CUMULATIVE CONTRIBUTION FUNCTION - 10 PER CENT HEIGHT +10 10 CUMULATIVE CONTRIBUTION FUNCTION - 50 PER CENT HEIGHT +11 11 CUMULATIVE CONTRIBUTION FUNCTION - 90 PER CENT HEIGHT +12 12 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF MAXIMUM GRADIENT +13 13 IR / TWO WV CHANNEL RATIOING METHOD +14 14 COMPOSITE HEIGHT ASSIGNMENT +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2164.table b/definitions/bufr/tables/0/wmo/39/codetables/2164.table new file mode 100644 index 000000000..4bf9aa961 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2164.table @@ -0,0 +1,5 @@ +0 0 LP - NORMS LEAST SQUARE MINIMUM +1 1 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION +2 2 CC - CROSS CORRELATION +3 3 STEREO MATCHING +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2165.table b/definitions/bufr/tables/0/wmo/39/codetables/2165.table new file mode 100644 index 000000000..628be0e75 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2165.table @@ -0,0 +1,7 @@ +1 1 CLEAR PATH +2 2 PARTLY CLOUDY PATH +3 3 CLOUDY PATH +4 4 APODIZED +5 5 UNAPODIZED +6 6 RECONSTRUCTED +7 7 CLOUD CLEARED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2166.table b/definitions/bufr/tables/0/wmo/39/codetables/2166.table new file mode 100644 index 000000000..efac38f8d --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2166.table @@ -0,0 +1,6 @@ +0 0 TYPE NOT DEFINED +1 1 AUTOMATED STATISTICAL REGRESSION +2 2 CLEAR PATH +3 3 PARTLY CLOUDY PATH +4 4 CLOUDY PATH +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2167.table b/definitions/bufr/tables/0/wmo/39/codetables/2167.table new file mode 100644 index 000000000..acb2f9d9c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2167.table @@ -0,0 +1,4 @@ +0 0 METHOD NOT DEFINED +1 1 1B RAW RADIANCE +2 2 PROCESSED RADIANCE +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2169.table b/definitions/bufr/tables/0/wmo/39/codetables/2169.table new file mode 100644 index 000000000..bd31667d0 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2169.table @@ -0,0 +1,5 @@ +0 0 CUP ROTOR +1 1 PROPELLER ROTOR +2 2 WIND OBSERVATION THROUGH AMBIENT NOISE (WOTAN) +3 3 SONIC +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2170.table b/definitions/bufr/tables/0/wmo/39/codetables/2170.table new file mode 100644 index 000000000..05bab00d7 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2170.table @@ -0,0 +1,5 @@ +0 0 SPECTRASENSORS WVSS-II, VERSION 1 +1 1 SPECTRASENSORS WVSS-II, VERSION 2 +2 2 SPECTRASENSORS WVSS-II, VERSION 3 +62 62 OTHER +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2172.table b/definitions/bufr/tables/0/wmo/39/codetables/2172.table new file mode 100644 index 000000000..e10ef52b8 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2172.table @@ -0,0 +1,5 @@ +0 0 RESERVED +1 1 RETRIEVAL FROM A NADIR SOUNDING +2 2 RETRIEVAL FROM A LIMB SOUNDING +3 3 RETRIEVAL FROM AN OCCULTATION SOUNDING +255 255 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2175.table b/definitions/bufr/tables/0/wmo/39/codetables/2175.table new file mode 100644 index 000000000..2cf2a3d55 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2175.table @@ -0,0 +1,9 @@ +0 0 MANUAL MEASUREMENT +1 1 TIPPING BUCKET METHOD +2 2 WEIGHING METHOD +3 3 OPTICAL METHOD +4 4 PRESSURE METHOD +5 5 FLOAT METHOD +6 6 DROP COUNTER METHOD +14 14 OTHERS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2176.table b/definitions/bufr/tables/0/wmo/39/codetables/2176.table new file mode 100644 index 000000000..2c27a6f91 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2176.table @@ -0,0 +1,6 @@ +0 0 MANUAL OBSERVATION +1 1 VIDEO CAMERA METHOD +2 2 INFRARED METHOD +3 3 LASER METHOD +14 14 OTHERS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2177.table b/definitions/bufr/tables/0/wmo/39/codetables/2177.table new file mode 100644 index 000000000..e7bb67a7d --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2177.table @@ -0,0 +1,6 @@ +0 0 MANUAL OBSERVATION +1 1 ULTRASONIC METHOD +2 2 VIDEO CAMERA METHOD +3 3 LASER METHOD +14 14 OTHERS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2178.table b/definitions/bufr/tables/0/wmo/39/codetables/2178.table new file mode 100644 index 000000000..f4f8b592c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2178.table @@ -0,0 +1,5 @@ +0 0 MANUAL OBSERVATION +1 1 OPTICAL METHOD +2 2 CAPACITIVE METHOD +14 14 OTHERS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2179.table b/definitions/bufr/tables/0/wmo/39/codetables/2179.table new file mode 100644 index 000000000..9e9ba189a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2179.table @@ -0,0 +1,6 @@ +0 0 MANUAL OBSERVATION +1 1 VAISALA ALGORITHM +2 2 ASOS (FAA) ALGORITHM +3 3 AWOS (CANADA) ALGORITHM +14 14 OTHERS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2180.table b/definitions/bufr/tables/0/wmo/39/codetables/2180.table new file mode 100644 index 000000000..0b21b2c26 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2180.table @@ -0,0 +1,8 @@ +0 0 MANUAL OBSERVATION +1 1 OPTICAL SCATTER SYSTEM COMBINED WITH PRECIPITATION OCCURRENCE SENSING SYSTEM +2 2 FORWARD AND/OR BACKSCATTER SYSTEM OF VISIBLE LIGHT +3 3 FORWARD AND/OR BACKSCATTER SYSTEM OF INFRARED LIGHT +4 4 INFRARED LIGHT EMITTING DIODE (IRED) SYSTEM +5 5 DOPPLER RADAR SYSTEM +14 14 OTHERS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2181.table b/definitions/bufr/tables/0/wmo/39/codetables/2181.table new file mode 100644 index 000000000..5096dc48a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2181.table @@ -0,0 +1,5 @@ +1 1 RAIN DETECTOR +2 2 FREEZING RAIN SENSOR +3 3 ICE DETECTION SENSOR +4 4 HAIL AND ICE PELLET SENSOR +20 20 OTHERS diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2182.table b/definitions/bufr/tables/0/wmo/39/codetables/2182.table new file mode 100644 index 000000000..4ffab2652 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2182.table @@ -0,0 +1,7 @@ +0 0 MANUAL MEASUREMENT +1 1 TRANSMISSOMETER SYSTEM (BASE > 25 M) +2 2 TRANSMISSOMETER SYSTEM (BASE < 25 M) +3 3 FORWARD SCATTER SYSTEM +4 4 BACKSCATTER SYSTEM +14 14 OTHERS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2183.table b/definitions/bufr/tables/0/wmo/39/codetables/2183.table new file mode 100644 index 000000000..a804ea1e1 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2183.table @@ -0,0 +1,9 @@ +0 0 MANUAL OBSERVATION +1 1 CEILOMETER SYSTEM +2 2 INFRARED CAMERA SYSTEM +3 3 MICROWAVE VISUAL CAMERA SYSTEM +4 4 SKY IMAGER SYSTEM +5 5 VIDEO TIME-LAPSED CAMERA SYSTEM +6 6 MICROPULSE LIDAR (MPL) SYSTEM +14 14 OTHERS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2184.table b/definitions/bufr/tables/0/wmo/39/codetables/2184.table new file mode 100644 index 000000000..cf5ee84ac --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2184.table @@ -0,0 +1,9 @@ +0 0 MANUAL OBSERVATION +1 1 LIGHTNING IMAGING SENSOR +2 2 ELECTRICAL STORM IDENTIFICATION SENSOR +3 3 MAGNETIC FINDER SENSOR +4 4 LIGHTNING STRIKE SENSOR +5 5 FLASH COUNTER +6 6 ATDNET VLF WAVEFORM CORRELATED SENSOR +14 14 OTHERS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2185.table b/definitions/bufr/tables/0/wmo/39/codetables/2185.table new file mode 100644 index 000000000..45b081051 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2185.table @@ -0,0 +1,7 @@ +0 0 MANUAL MEASUREMENT +1 1 BALANCED FLOATING METHOD +2 2 PRESSURE METHOD +3 3 ULTRASONIC METHOD +4 4 HYDRAULIC METHOD +14 14 OTHERS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2186.table b/definitions/bufr/tables/0/wmo/39/codetables/2186.table new file mode 100644 index 000000000..2a9e71004 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2186.table @@ -0,0 +1,24 @@ +1 1 PRECIPITATION-UNKNOWN TYPE +2 2 LIQUID PRECIPITATION NOT FREEZING +3 3 LIQUID FREEZING PRECIPITATION +4 4 DRIZZLE +5 5 RAIN +6 6 SOLID PRECIPITATION +7 7 SNOW +8 8 SNOW GRAINS +9 9 SNOW PELLETS +10 10 ICE PELLETS +11 11 ICE CRYSTALS +12 12 DIAMOND DUST +13 13 SMALL HAIL +14 14 HAIL +15 15 GLAZE +16 16 RIME +17 17 SOFT RIME +18 18 HARD RIME +19 19 CLEAR ICE +20 20 WET SNOW +21 21 HOAR FROST +22 22 DEW +23 23 WHITE DEW +24 24 CONVECTIVE PRECIPITATION diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2187.table b/definitions/bufr/tables/0/wmo/39/codetables/2187.table new file mode 100644 index 000000000..def3d2feb --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2187.table @@ -0,0 +1,11 @@ +1 1 DUST/SAND WHIRL +2 2 SQUALLS +3 3 SAND STORM +4 4 DUST STORM +5 5 LIGHTNING - CLOUD TO SURFACE +6 6 LIGHTNING - CLOUD TO CLOUD +7 7 LIGHTNING - DISTANT +8 8 THUNDERSTORM +9 9 FUNNEL CLOUD NOT TOUCHING SURFACE +10 10 FUNNEL CLOUD TOUCHING SURFACE +11 11 SPRAY diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2188.table b/definitions/bufr/tables/0/wmo/39/codetables/2188.table new file mode 100644 index 000000000..bb8114ca8 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2188.table @@ -0,0 +1,10 @@ +1 1 FOG +2 2 ICE FOG +3 3 STEAM FOG +7 7 MIST +8 8 HAZE +9 9 SMOKE +10 10 VOLCANIC ASH +11 11 DUST +12 12 SAND +13 13 SNOW diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2189.table b/definitions/bufr/tables/0/wmo/39/codetables/2189.table new file mode 100644 index 000000000..61ac9e322 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2189.table @@ -0,0 +1,4 @@ +1 1 MANUAL OBSERVATION +2 2 ALL LIGHTNING STRIKES WITHOUT DISCRIMINATION +3 3 LIGHTNING STRIKES CLOUD TO GROUND ONLY +4 4 ALL LIGHTNING STRIKES WITH DISCRIMINATION BETWEEN CLOUD TO GROUND AND CLOUD TO CLOUD diff --git a/definitions/bufr/tables/0/wmo/39/codetables/2191.table b/definitions/bufr/tables/0/wmo/39/codetables/2191.table new file mode 100644 index 000000000..2e96256c7 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/2191.table @@ -0,0 +1,4 @@ +0 0 GEOPOTENTIAL HEIGHT CALCULATED FROM PRESSURE +1 1 GEOPOTENTIAL HEIGHT CALCULATED FROM GPS HEIGHT +2 2 GEOPOTENTIAL HEIGHT CALCULATED FROM RADAR HEIGHT +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/22056.table b/definitions/bufr/tables/0/wmo/39/codetables/22056.table new file mode 100644 index 000000000..28ddbf4e4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/22056.table @@ -0,0 +1,4 @@ +0 0 UPWARDS PROFILE +1 1 DOWNWARDS PROFILE +2 2 HORIZONTAL +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/22060.table b/definitions/bufr/tables/0/wmo/39/codetables/22060.table new file mode 100644 index 000000000..b73ad3235 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/22060.table @@ -0,0 +1,4 @@ +0 0 DROGUE IS DETACHED +1 1 DROGUE IS ATTACHED +2 2 DROGUE STATUS UNKNOWN +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/22061.table b/definitions/bufr/tables/0/wmo/39/codetables/22061.table new file mode 100644 index 000000000..aa8c62bae --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/22061.table @@ -0,0 +1,11 @@ +0 0 CALM (GLASSY) +1 1 CALM (RIPPLED) +2 2 SMOOTH (WAVELETS) +3 3 SLIGHT +4 4 MODERATE +5 5 ROUGH +6 6 VERY ROUGH +7 7 HIGH +8 8 VERY HIGH +9 9 PHENOMENAL +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/22067.table b/definitions/bufr/tables/0/wmo/39/codetables/22067.table new file mode 100644 index 000000000..692c0a2e9 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/22067.table @@ -0,0 +1,116 @@ +1 1 SIPPICAN T-4 +2 2 SIPPICAN T-4 +11 11 SIPPICAN T-5 +21 21 SIPPICAN FAST DEEP +31 31 SIPPICAN T-6 +32 32 SIPPICAN T-6 +41 41 SIPPICAN T-7 +42 42 SIPPICAN T-7 +51 51 SIPPICAN DEEP BLUE +52 52 SIPPICAN DEEP BLUE +61 61 SIPPICAN T-10 +71 71 SIPPICAN T-11 +81 81 SIPPICAN AXBT (300 M PROBES) +201 201 TSK T-4 +202 202 TSK T-4 +211 211 TSK T-6 +212 212 TSK T-6 +221 221 TSK T-7 +222 222 TSK T-7 +231 231 TSK T-5 +241 241 TSK T-10 +251 251 TSK DEEP BLUE +252 252 TSK DEEP BLUE +261 261 TSK AXBT +401 401 SPARTON XBT-1 +411 411 SPARTON XBT-3 +421 421 SPARTON XBT-4 +431 431 SPARTON XBT-5 +441 441 SPARTON XBT-5DB +451 451 SPARTON XBT-6 +461 461 SPARTON XBT-7 +462 462 SPARTON XBT-7 +471 471 SPARTON XBT-7DB +481 481 SPARTON XBT-10 +491 491 SPARTON XBT-20 +501 501 SPARTON XBT-20DB +510 510 SPARTON 536 AXBT +700 700 SIPPICAN XCTD STANDARD +710 710 SIPPICAN XCTD DEEP +720 720 SIPPICAN AXCTD +730 730 SIPPICAN SXCTD +741 741 TSK XCTD/XCTD-1/XCTD-1N +742 742 TSK XCTD-2/XCTD-2N +743 743 TSK XCTD-2F +744 744 TSK XCTD-3/XCTD-3N +745 745 TSK XCTD-4/XCTD-4N +751 751 TSK AXCTD +780 780 SEA-BIRD SBE21 SEACAT THERMOSALINOGRAPH +781 781 SEA-BIRD SBE45 MICROTSG THERMOSALINOGRAPH +800 800 MECHANICAL BT +810 810 HYDROCAST +820 820 THERMISTOR CHAIN +825 825 TEMPERATURE (SONIC) AND PRESSURE PROBES +830 830 CTD +831 831 CTD-P-ALACE FLOAT +834 834 PROVOR V SBE +835 835 PROVOR IV +836 836 PROVOR III +837 837 ARVOR_C, SBE CONDUCTIVITY SENSOR +838 838 ARVOR_D, SBE CONDUCTIVITY SENSOR +839 839 PROVOR-II, SBE CONDUCTIVITY SENSOR +840 840 PROVOR, NO CONDUCTIVITY SENSOR +841 841 PROVOR, SEA-BIRD CONDUCTIVITY SENSOR +842 842 PROVOR, FSI CONDUCTIVITY SENSOR +843 843 POLAR OCEAN PROFILING SYSTEM (POPS), PROVOR, SBE CTD +844 844 PROFILING FLOAT, ARVOR, SEA-BIRD CONDUCTIVITY SENSOR +845 845 WEBB RESEARCH, NO CONDUCTIVITY SENSOR +846 846 WEBB RESEARCH, SEA-BIRD CONDUCTIVITY SENSOR +847 847 WEBB RESEARCH, FSI CONDUCTIVITY SENSOR +848 848 APEX-EM, SBE CONDUCTIVITY SENSOR +849 849 APEX_D, SBE CONDUCTIVITY SENSOR +850 850 SOLO, NO CONDUCTIVITY SENSOR +851 851 SOLO, SEA-BIRD CONDUCTIVITY SENSOR +852 852 SOLO, FSI CONDUCTIVITY SENSOR +853 853 PROFILING FLOAT, SOLO2 (SCRIPPS), SEA-BIRD CONDUCTIVITY SENSOR +854 854 S2A, SBE CONDUCTIVITY SENSOR +855 855 PROFILING FLOAT, NINJA, NO CONDUCTIVITY SENSOR +856 856 PROFILING FLOAT, NINJA, SBE CONDUCTIVITY SENSOR +857 857 PROFILING FLOAT, NINJA, FSI CONDUCTIVITY SENSOR +858 858 PROFILING FLOAT, NINJA, TSK CONDUCTIVITY SENSOR +859 859 PROFILING FLOAT, NEMO, NO CONDUCTIVITY SENSOR +860 860 PROFILING FLOAT, NEMO, SBE CONDUCTIVITY SENSOR +861 861 PROFILING FLOAT, NEMO, FSI CONDUCTIVITY SENSOR +862 862 SOLO_D, SBE CONDUCTIVITY SENSOR +863 863 NAVIS-A, SBE CONDUCTIVITY SENSOR +864 864 NINJA_D, SBE CONDUCTIVITY SENSOR +865 865 NOVA, SBE CONDUCTIVITY SENSOR +866 866 ALAMO, NO CONDUCTIVITY SENSOR +867 867 ALAMO, RBR CONDUCTIVITY SENSOR +868 868 ALAMO, SBE CONDUCTIVITY SENSOR +869 869 RESERVED +870 870 HM2000 +871 871 COPEX +872 872 S2X +873 873 ALTO +874 874 SOLO_D_MRV +875 875 ALTO RBR +876 876 ALTO SBE +877 877 APEX RBR +878 878 ARVOR RBR +879 879 SOLO II RBR +880 880 S2A RBR +900 900 SIPPICAN LMP-5 XBT +901 901 ICE-TETHERED PROFILER (ITP), SBE CTD +902 902 BROOKE OCEAN MOVING VESSEL PROFILER (MVP) +903 903 SEA-BIRD CTD +904 904 AML OCEANOGRAPHIC CTD +905 905 FALMOUTH SCIENTIFIC CTD +906 906 OCEAN SENSORS CTD +907 907 VALEPORT CTD +908 908 OCEANSCIENCE MVP +909 909 IDRONAUT CTD +910 910 SEA-BIRD SBE 38 +995 995 INSTRUMENT ATTACHED TO MARINE MAMMALS +996 996 INSTRUMENT ATTACHED TO ANIMALS OTHER THAN MARINE MAMMALS +1023 1023 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/22068.table b/definitions/bufr/tables/0/wmo/39/codetables/22068.table new file mode 100644 index 000000000..f6ddeb270 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/22068.table @@ -0,0 +1,43 @@ +1 1 SIPPICAN STRIP CHART RECORDER +2 2 SIPPICAN MK2A/SSQ-61 +3 3 SIPPICAN MK-9 +4 4 SIPPICAN AN/BHQ-7/MK8 +5 5 SIPPICAN MK-12 +6 6 SIPPICAN MK-21 +7 7 SIPPICAN MK-8 LINEAR RECORDER +8 8 SIPPICAN MK-10 +10 10 SPARTON SOC BT/SV PROCESSOR MODEL 100 +11 11 LOCKHEED-SANDERS MODEL OL5005 +20 20 ARGOS XBT-ST +21 21 CLS-ARGOS/PROTECNO XBT-ST MODEL-1 +22 22 CLS-ARGOS/PROTECNO XBT-ST MODEL-2 +30 30 BATHY SYSTEMS SA-810 +31 31 SCRIPPS METROBYTE CONTROLLER +32 32 MURAYAMA DENKI Z-60-16 III +33 33 MURAYAMA DENKI Z-60-16 II +34 34 PROTECNO ETSM2 +35 35 NAUTILUS MARINE SERVICE NMS-XBT +40 40 TSK MK-2A +41 41 TSK MK-2S +42 42 TSK MK-30 +43 43 TSK MK-30N +45 45 TSK MK-100 +46 46 TSK MK-130 COMPATIBLE RECORDER FOR BOTH XBT AND XCTD +47 47 TSK MK-130A XCTD RECORDER +48 48 TSK AXBT RECEIVER MK-300 +49 49 TSK MK-150/MK-150N COMPATIBLE RECORDER FOR BOTH XBT AND XCTD +50 50 JMA ASTOS +60 60 ARGOS COMMUNICATIONS, SAMPLING ON UP TRANSIT +61 61 ARGOS COMMUNICATIONS, SAMPLING ON DOWN TRANSIT +62 62 ORBCOMM COMMUNICATIONS, SAMPLING ON UP TRANSIT +63 63 ORBCOMM COMMUNICATIONS, SAMPLING ON DOWN TRANSIT +64 64 IRIDIUM COMMUNICATIONS, SAMPLING ON UP TRANSIT +65 65 IRIDIUM COMMUNICATIONS, SAMPLING ON DOWN TRANSIT +70 70 CSIRO DEVIL-1 XBT ACQUISITION SYSTEM +71 71 CSIRO DEVIL-2 XBT ACQUISITION SYSTEM +72 72 TURO/CSIRO QUOLL XBT ACQUISITION SYSTEM +80 80 APPLIED MICROSYSTEMS LTD., MICRO-SVT&P +81 81 SEA MAMMAL RESEARCH UNIT, UNIV. ST. ANDREWS, UK, UNCORRECTED SALINITY FROM A SEA MAMMAL MOUNTED INSTRUMENT +82 82 SEA MAMMAL RESEARCH UNIT, UNIV. ST. ANDREWS, UK, CORRECTED SALINITY FROM A SEA MAMMAL MOUNTED INSTRUMENT +99 99 UNKNOWN +127 127 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/22120.table b/definitions/bufr/tables/0/wmo/39/codetables/22120.table new file mode 100644 index 000000000..8c747ce66 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/22120.table @@ -0,0 +1,13 @@ +0 0 GOOD DATA +1 1 MAXIMUM (HIGH) WATER LEVEL LIMIT EXCEEDED +2 2 MINIMUM (LOW) WATER LEVEL LIMIT EXCEEDED +3 3 RATE OF CHANGE LIMIT FOR WATER LEVEL EXCEEDED +4 4 FLAT LIMIT FOR WATER LEVEL EXCEEDED +5 5 OBSERVED MINUS PREDICTED WATER LEVEL VALUE LIMIT EXCEEDED +6 6 OBSERVED VALUE FROM PRIMARY WATER LEVEL SENSOR MINUS BACKUP WATER LEVEL SENSOR +7 7 VALUE EXCEEDED SPECIFIED TOLERANCE FROM EXPECTED VALUE +8 8 WATER LEVEL QA PARAMETER (SIGMAS AND/OR OUTLIERS) LIMITS EXCEEDED +9 9 SEA TEMPERATURE OUTSIDE OF EXPECTED RANGE +10 10 MULTIPLE QC CHECKS (ABOVE) FAILED +11 11 NO AUTOMATED WATER LEVEL CHECKS PERFORMED +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/22121.table b/definitions/bufr/tables/0/wmo/39/codetables/22121.table new file mode 100644 index 000000000..7d4dfa821 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/22121.table @@ -0,0 +1,9 @@ +0 0 OPERATIONAL +1 1 POSSIBLE CLOGGING PROBLEM OR OTHERWISE DEGRADED WATER LEVEL DATA +2 2 POSSIBLE DATUM SHIFT +3 3 UNKNOWN STATUS OF WATER LEVEL SENSOR +4 4 SUSPECTED OR KNOWN SEA TEMPERATURE SENSOR PROBLEM +5 5 MULTIPLE POSSIBLE PROBLEMS (ABOVE) +6 6 BAD DATA - DO NOT DISSEMINATE! +7 7 NO MANUAL WATER LEVEL CHECKS PERFORMED +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/22122.table b/definitions/bufr/tables/0/wmo/39/codetables/22122.table new file mode 100644 index 000000000..aa9d5ebbe --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/22122.table @@ -0,0 +1,8 @@ +0 0 GOOD DATA FROM ALL SENSORS +1 1 WIND DIRECTION OUTSIDE OF ALLOWABLE RANGE +2 2 WIND SPEED OUTSIDE OF EXPECTED RANGE +3 3 BAROMETRIC PRESSURE OUTSIDE OF EXPECTED RANGE +4 4 AIR TEMPERATURE OUTSIDE OF EXPECTED RANGE +5 5 MULTIPLE SENSORS FAILED QC CHECKS +6 6 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/22123.table b/definitions/bufr/tables/0/wmo/39/codetables/22123.table new file mode 100644 index 000000000..acfb61609 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/22123.table @@ -0,0 +1,9 @@ +0 0 OPERATIONAL +1 1 SUSPECTED OR KNOWN PROBLEM WITH WIND SENSOR +2 2 SUSPECTED OR KNOWN PROBLEM WITH BAROMETRIC PRESSURE SENSOR +3 3 SUSPECTED OR KNOWN PROBLEM WITH AIR TEMPERATURE SENSOR +4 4 UNKNOWN STATUS OF ALL SENSORS +5 5 SUSPECTED OR KNOWN PROBLEMS WITH MULTIPLE SENSORS +6 6 BAD DATA - DO NOT DISSEMINATE! +7 7 NO MANUAL METEOROLOGICAL DATA CHECKS PERFORMED +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/22178.table b/definitions/bufr/tables/0/wmo/39/codetables/22178.table new file mode 100644 index 000000000..355848cc5 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/22178.table @@ -0,0 +1,12 @@ +0 0 UNKNOWN +1 1 LM-2A DECK-MOUNTED +2 2 LM-3A HAND-HELD +3 3 LM-4A THRU-HULL +10 10 AL-12 TSK AUTOLAUNCHER (UP TO 12 PROBES) +20 20 SIO XBT AUTOLAUNCHER (UP TO 6 PROBES) +30 30 AOML XBT V6 AUTOLAUNCHER (UP TO 6 DEEP BLUE PROBES) +31 31 AOML XBT V8.0 AUTOLAUNCHER (UP TO 8 DEEP BLUE PROBES) +32 32 AOML XBT V8.1 AUTOLAUNCHER (UP TO 8 DEEP BLUE AND FAST DEEP PROBES) +90 90 CSIRO DEVIL AUTOLAUNCHER +100 100 MFSTEP AUTOLAUNCHER (MEDITERRANEAN) +255 255 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/23001.table b/definitions/bufr/tables/0/wmo/39/codetables/23001.table new file mode 100644 index 000000000..92ac5deaf --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/23001.table @@ -0,0 +1,5 @@ +0 0 RESERVED +1 1 ARTICLES 1 AND 2 +2 2 ARTICLE 3 +3 3 ARTICLE 5.2 +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/23002.table b/definitions/bufr/tables/0/wmo/39/codetables/23002.table new file mode 100644 index 000000000..12815c6a8 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/23002.table @@ -0,0 +1,16 @@ +0 0 RESERVED +1 1 NUCLEAR REACTOR ON GROUND +2 2 NUCLEAR REACTOR AT SEA +3 3 NUCLEAR REACTOR IN SPACE +4 4 NUCLEAR FUEL FACILITY +5 5 RADIOACTIVE WASTE MANAGEMENT FACILITY +6 6 TRANSPORT OF NUCLEAR FUEL OR RADIOACTIVE WASTE +7 7 STORAGE OF NUCLEAR FUEL OR RADIOACTIVE WASTE +8 8 MANUFACTURE OF RADIO-ISOTOPES +9 9 USE OF RADIO-ISOTOPES +10 10 STORAGE OF RADIO-ISOTOPES +11 11 DISPOSAL OF RADIO-ISOTOPES +12 12 TRANSPORT OF RADIO-ISOTOPES +13 13 USE OF RADIO-ISOTOPES FOR POWER GENERATION +30 30 OTHER +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/23003.table b/definitions/bufr/tables/0/wmo/39/codetables/23003.table new file mode 100644 index 000000000..e3e891f9b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/23003.table @@ -0,0 +1,8 @@ +0 0 NO RELEASE +1 1 RELEASE TO ATMOSPHERE +2 2 RELEASE TO WATER +3 3 RELEASE TO BOTH ATMOSPHERE AND WATER +4 4 EXPECTED RELEASE TO ATMOSPHERE +5 5 EXPECTED RELEASE TO WATER +6 6 EXPECTED RELEASE TO BOTH ATMOSPHERE AND WATER +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/23004.table b/definitions/bufr/tables/0/wmo/39/codetables/23004.table new file mode 100644 index 000000000..383731cec --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/23004.table @@ -0,0 +1,6 @@ +0 0 NO COUNTERMEASURES +1 1 EVACUATION +2 2 SHELTERING +3 3 PROPHYLAXIS +4 4 WATER +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/23005.table b/definitions/bufr/tables/0/wmo/39/codetables/23005.table new file mode 100644 index 000000000..c5ff5ae75 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/23005.table @@ -0,0 +1,4 @@ +0 0 INCIDENT STATE DOES NOT UNDERSTAND WHAT HAPPENED +1 1 INCIDENT STATE KNOWS THE CAUSE OF THE INCIDENT +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/23006.table b/definitions/bufr/tables/0/wmo/39/codetables/23006.table new file mode 100644 index 000000000..fe7706af4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/23006.table @@ -0,0 +1,8 @@ +0 0 NO IMPROVEMENT +1 1 UNSTABLE +2 2 NO DETERIORATION +3 3 IMPROVING +4 4 STABLE +5 5 DETERIORATING +6 6 RESERVED +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/23007.table b/definitions/bufr/tables/0/wmo/39/codetables/23007.table new file mode 100644 index 000000000..59fc043a8 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/23007.table @@ -0,0 +1,5 @@ +0 0 NO RELEASE +1 1 RELEASE HAS STOPPED +2 2 RELEASE +3 3 RELEASE IS CONTINUING +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/23008.table b/definitions/bufr/tables/0/wmo/39/codetables/23008.table new file mode 100644 index 000000000..4ac5c5837 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/23008.table @@ -0,0 +1,4 @@ +0 0 GASEOUS +1 1 PARTICULATE +2 2 MIXTURE OF GASEOUS AND PARTICULATE +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/23009.table b/definitions/bufr/tables/0/wmo/39/codetables/23009.table new file mode 100644 index 000000000..4ac5c5837 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/23009.table @@ -0,0 +1,4 @@ +0 0 GASEOUS +1 1 PARTICULATE +2 2 MIXTURE OF GASEOUS AND PARTICULATE +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/23016.table b/definitions/bufr/tables/0/wmo/39/codetables/23016.table new file mode 100644 index 000000000..ae84bae45 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/23016.table @@ -0,0 +1,4 @@ +0 0 NO SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT +1 1 SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT POSSIBLE +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/23018.table b/definitions/bufr/tables/0/wmo/39/codetables/23018.table new file mode 100644 index 000000000..ccdcc456d --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/23018.table @@ -0,0 +1,6 @@ +0 0 RELEASE NO LONGER OCCURRING +1 1 RELEASE STILL OCCURRING +2 2 RELEASE EXPECTED TO INCREASE IN NEXT SIX HOURS +3 3 RELEASE EXPECTED TO REMAIN CONSTANT IN NEXT SIX HOURS +4 4 RELEASE EXPECTED TO DECREASE IN NEXT SIX HOURS +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/23031.table b/definitions/bufr/tables/0/wmo/39/codetables/23031.table new file mode 100644 index 000000000..cf20e26ee --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/23031.table @@ -0,0 +1,4 @@ +0 0 PLUME WILL NOT ENCOUNTER RAIN IN INCIDENT STATE +1 1 PLUME WILL ENCOUNTER RAIN IN INCIDENT STATE +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/23032.table b/definitions/bufr/tables/0/wmo/39/codetables/23032.table new file mode 100644 index 000000000..0f439b70d --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/23032.table @@ -0,0 +1,4 @@ +0 0 NO SIGNIFICANT CHANGE EXPECTED WITHIN THE NEXT SIX HOURS +1 1 ANTICIPATED SIGNIFICANT CHANGE EXPECTED WITHIN THE NEXT SIX HOURS +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/24003.table b/definitions/bufr/tables/0/wmo/39/codetables/24003.table new file mode 100644 index 000000000..2daa8104b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/24003.table @@ -0,0 +1,5 @@ +0 0 NOBLE GASES +1 1 IODINES +2 2 CAESIUMS +3 3 TRANSURANICS +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25004.table b/definitions/bufr/tables/0/wmo/39/codetables/25004.table new file mode 100644 index 000000000..dfe451727 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25004.table @@ -0,0 +1,4 @@ +0 0 INCOHERENT +1 1 COHERENT (DOPPLER) +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25005.table b/definitions/bufr/tables/0/wmo/39/codetables/25005.table new file mode 100644 index 000000000..bc693a7bf --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25005.table @@ -0,0 +1,4 @@ +0 0 LOGARITHM - 2.5 DB +1 1 LINEAR +2 2 SPECIAL +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25006.table b/definitions/bufr/tables/0/wmo/39/codetables/25006.table new file mode 100644 index 000000000..bf9d1f52a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25006.table @@ -0,0 +1,5 @@ +0 0 ZH TO R CONVERSION +1 1 (ZH, ZDR) TO (NO, DO) TO R +2 2 (Z (F1), Z (F2)) TO ATTENUATION TO R +6 6 OTHER +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25009.table b/definitions/bufr/tables/0/wmo/39/codetables/25009.table new file mode 100644 index 000000000..bf34fb227 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25009.table @@ -0,0 +1,4 @@ +1 1 NONE +2 2 CALIBRATION TARGET OR SIGNAL +3 3 AGAINST RAINGAUGES +4 4 AGAINST OTHER INSTRUMENTS (DISDROMETER - ATTENUATION) diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25010.table b/definitions/bufr/tables/0/wmo/39/codetables/25010.table new file mode 100644 index 000000000..e88b3ca3c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25010.table @@ -0,0 +1,8 @@ +0 0 NONE +1 1 MAP +2 2 INSERTION OF HIGHER ELEVATION DATA AND MAP +3 3 ANALYSIS OF THE FLUCTUATING LOGARITHM SIGNAL (CLUTTER DETECTION) +4 4 EXTRACTION OF THE FLUCTUATING PART OF LINEAR SIGNAL (CLUTTER SUPPRESSION) +5 5 CLUTTER SUPPRESSION - DOPPLER +6 6 MULTIPARAMETER ANALYSIS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25011.table b/definitions/bufr/tables/0/wmo/39/codetables/25011.table new file mode 100644 index 000000000..f73949830 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25011.table @@ -0,0 +1,4 @@ +0 0 NONE +1 1 MAP OF CORRECTION FACTORS +2 2 INTERPOLATION (AZIMUTH OR ELEVATION) +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25012.table b/definitions/bufr/tables/0/wmo/39/codetables/25012.table new file mode 100644 index 000000000..c869a4ace --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25012.table @@ -0,0 +1,4 @@ +0 0 HARDWARE +1 1 SOFTWARE +2 2 HARDWARE AND SOFTWARE +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25013.table b/definitions/bufr/tables/0/wmo/39/codetables/25013.table new file mode 100644 index 000000000..b91ea71db --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25013.table @@ -0,0 +1 @@ +1 1 BRIGHT-BAND CORRECTION diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25015.table b/definitions/bufr/tables/0/wmo/39/codetables/25015.table new file mode 100644 index 000000000..043e587b6 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25015.table @@ -0,0 +1 @@ +1 1 RADOME ATTENUATION CORRECTION diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25017.table b/definitions/bufr/tables/0/wmo/39/codetables/25017.table new file mode 100644 index 000000000..ed48487e1 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25017.table @@ -0,0 +1 @@ +1 1 PRECIPITATION ATTENUATION CORRECTION diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25020.table b/definitions/bufr/tables/0/wmo/39/codetables/25020.table new file mode 100644 index 000000000..6133da3bf --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25020.table @@ -0,0 +1,4 @@ +0 0 FFT (FAST FOURIER TRANSFORM) +1 1 PPP (PULSE-PAIR PROCESSING) +2 2 VPC (VECTOR-PHASE CHANGE) +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25021.table b/definitions/bufr/tables/0/wmo/39/codetables/25021.table new file mode 100644 index 000000000..314716b3b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25021.table @@ -0,0 +1,5 @@ +1 1 SIMPLE AVERAGE +2 2 CONSENSUS AVERAGE +3 3 MEDIAN CHECK +4 4 VERTICAL CONSISTENCY CHECK +5 5 OTHER diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25022.table b/definitions/bufr/tables/0/wmo/39/codetables/25022.table new file mode 100644 index 000000000..95848784f --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25022.table @@ -0,0 +1,8 @@ +1 1 UNPROCESSED +2 2 LAND SUSPECTED +3 3 WIND SPEED TOO LARGE +4 4 ICE DETECTED +5 5 RAIN DETECTED (MICROWAVE RETRIEVALS ONLY) +6 6 CLOUDY DETECTED (INFRA-RED RETRIEVALS ONLY) +7 7 COSMETIC VALUE +8 8 SST OUT OF RANGE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25023.table b/definitions/bufr/tables/0/wmo/39/codetables/25023.table new file mode 100644 index 000000000..e4840dc8c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25023.table @@ -0,0 +1,8 @@ +1 1 DEFAULT CONFIDENCE VALUE HAS BEEN USED +2 2 DEFAULT BIAS AND STANDARD DEVIATION HAVE BEEN USED +3 3 SUN GLINT SUSPECTED +4 4 SEA ICE RETRIEVAL FOR MICROWAVE DATA +5 5 HIGH WIND SPEED RETRIEVAL +6 6 INACCURATE SST DUE TO LOW SST (< 285K) (ONLY APPLIES TO THE TMI INSTRUMENT) +7 7 RELAXED RAIN CONTAMINATION SUSPECTED +8 8 POTENTIAL SIDE LOBE CONTAMINATION diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25024.table b/definitions/bufr/tables/0/wmo/39/codetables/25024.table new file mode 100644 index 000000000..81b26380c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25024.table @@ -0,0 +1,13 @@ +0 0 UNPROCESSED INFRARED RETRIEVAL +1 1 CLOUDY RETRIEVALS +2 2 BAD: DATA THAT ARE PROBABLY CONTAMINATED BY CLOUD +3 3 SUSPECT DATA +4 4 ACCEPTABLE DATA +5 5 EXCELLENT DATA +6 6 COOL SKIN SUSPECTED +10 10 UNPROCESSED MICROWAVE RETRIEVAL +11 11 QUESTIONABLE MICROWAVE RETRIEVAL THAT MAY BE CONTAMINATED +12 12 ACCEPTABLE MICROWAVE RETRIEVAL +13 13 HIGH PROBABILITY OF DIURNAL VARIABILITY +14 14 RESERVED +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25029.table b/definitions/bufr/tables/0/wmo/39/codetables/25029.table new file mode 100644 index 000000000..fb00d01ca --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25029.table @@ -0,0 +1,5 @@ +1 1 RESERVED +2 2 CALIBRATION TARGET OR SIGNAL +3 3 AGAINST RAINGAUGES +4 4 AGAINST OTHER INSTRUMENTS (DISDROMETER - ATTENUATION) +5 5 RESERVED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25030.table b/definitions/bufr/tables/0/wmo/39/codetables/25030.table new file mode 100644 index 000000000..c3235d6e5 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25030.table @@ -0,0 +1,4 @@ +0 0 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE USAGE CRITERIA NOT MET +1 1 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE DATA NOT AVAILABLE +2 2 RUNNING MEAN SEA-SURFACE TEMPERATURE USED AS PREDICTOR +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25031.table b/definitions/bufr/tables/0/wmo/39/codetables/25031.table new file mode 100644 index 000000000..16ff950a1 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25031.table @@ -0,0 +1,6 @@ +0 0 RESERVED +1 1 NO THINNING APPLIED (ALL NATIVE MODEL LEVELS ARE INCLUDED FROM BASE TO TOP OF PSEUDO-SOUNDING) +2 2 NATIVE MODEL LEVELS ARE PRESENT ONLY IF THEY ARE SIGNIFICANT LEVELS AS PER REGULATIONS B/C 25 FOR CONVENTIONAL TEMP SOUNDINGS +3 3 A PREDEFINED SUBSET OF NATIVE MODEL LEVELS IS PRESENT +4 4 NO NATIVE MODEL LEVELS ARE PRESENT. ALL PROFILE LEVELS ARE INTERPOLATED TO A PREDEFINED SET OF PRESSURE COORDINATE LEVELS +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25032.table b/definitions/bufr/tables/0/wmo/39/codetables/25032.table new file mode 100644 index 000000000..9b894f470 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25032.table @@ -0,0 +1,4 @@ +0 0 RESERVED +1 1 DATA FROM LOW MODE +2 2 DATA FROM HIGH MODE +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25033.table b/definitions/bufr/tables/0/wmo/39/codetables/25033.table new file mode 100644 index 000000000..e7141c078 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25033.table @@ -0,0 +1,4 @@ +0 0 WIND PROFILER OPERATING IN SUBMODE A +1 1 WIND PROFILER OPERATING IN SUBMODE B +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25034.table b/definitions/bufr/tables/0/wmo/39/codetables/25034.table new file mode 100644 index 000000000..473338a40 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25034.table @@ -0,0 +1,3 @@ +1 1 TEST A PERFORMED AND FAILED +2 2 TEST B PERFORMED AND FAILED +3 3 TEST RESULTS INCONCLUSIVE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25035.table b/definitions/bufr/tables/0/wmo/39/codetables/25035.table new file mode 100644 index 000000000..a0c8faa59 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25035.table @@ -0,0 +1,8 @@ +0 0 NOT DEFINED +1 1 INDIVIDUAL VOLTAGE DEFLECTION +2 2 CURRENT BASED, ABOVE A THRESHOLD +3 3 VOLTAGE BASED, ABOVE A THRESHOLD +4 4 CONSENSUS OF SENSORS, CURRENT ABOVE A THRESHOLD +5 5 CONSENSUS OF SENSORS, VOLTAGE ABOVE A THRESHOLD +6 6 RESERVED +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25036.table b/definitions/bufr/tables/0/wmo/39/codetables/25036.table new file mode 100644 index 000000000..79ebd8887 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25036.table @@ -0,0 +1,4 @@ +0 0 NETWORK OF SEVERAL DIRECTION-FINDERS OPERATING ON THE SAME INDIVIDUAL ATMOSPHERICS +1 1 NETWORK OF SEVERAL ARRIVAL-TIME STATIONS OPERATING ON THE SAME INDIVIDUAL ATMOSPHERICS +6 6 SINGLE STATION RANGE BEARING TECHNIQUE +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25040.table b/definitions/bufr/tables/0/wmo/39/codetables/25040.table new file mode 100644 index 000000000..3ddf12e20 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25040.table @@ -0,0 +1,10 @@ +0 0 NON-SPECIFIC MODE +1 1 FIRST GUESS DATA +2 2 CLOUD DATA +3 3 AVERAGE VECTOR DATA +4 4 PRIMARY DATA +5 5 GUESS DATA +6 6 VECTOR DATA +7 7 TRACER DATA; THIS IMAGE +8 8 TRACER DATA TO NEXT IMAGE +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25041.table b/definitions/bufr/tables/0/wmo/39/codetables/25041.table new file mode 100644 index 000000000..f388da0c2 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25041.table @@ -0,0 +1,4 @@ +0 0 DIRECTION ORIGINALLY REPORTED IN TRUE DEGREES +1 1 DIRECTION ORIGINALLY REPORTED USING CODE TABLE 0700, FM 13 +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25042.table b/definitions/bufr/tables/0/wmo/39/codetables/25042.table new file mode 100644 index 000000000..f3cf05999 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25042.table @@ -0,0 +1,4 @@ +0 0 SPEED ORIGINALLY REPORTED IN METRES PER SECOND +1 1 SPEED ORIGINALLY REPORTED USING CODE TABLE 4451, FM 13 +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25053.table b/definitions/bufr/tables/0/wmo/39/codetables/25053.table new file mode 100644 index 000000000..af3413851 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25053.table @@ -0,0 +1,6 @@ +1 1 GOOD +2 2 REDUNDANT +3 3 QUESTIONABLE +4 4 BAD +5 5 EXPERIMENTAL +6 6 PRECIPITATING diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25063.table b/definitions/bufr/tables/0/wmo/39/codetables/25063.table new file mode 100644 index 000000000..a8970eaf4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25063.table @@ -0,0 +1,4 @@ +0 0 NOT DEFINED +1 1 MAIN PROCESSOR +2 2 BACKUP PROCESSOR +255 255 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25069.table b/definitions/bufr/tables/0/wmo/39/codetables/25069.table new file mode 100644 index 000000000..e627613dd --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25069.table @@ -0,0 +1,7 @@ +1 1 SMOOTHED +2 2 BASELINE ADJUSTED +3 3 NORMALIZED TIME INTERVAL +4 4 OUTLIER CHECKED +5 5 PLAUSIBILITY CHECKED +6 6 CONSISTENCY CHECKED +7 7 INTERPOLATED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25086.table b/definitions/bufr/tables/0/wmo/39/codetables/25086.table new file mode 100644 index 000000000..294fa6977 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25086.table @@ -0,0 +1,4 @@ +0 0 DEPTHS ARE NOT CORRECTED +1 1 DEPTHS ARE CORRECTED +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25090.table b/definitions/bufr/tables/0/wmo/39/codetables/25090.table new file mode 100644 index 000000000..77c509d1a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25090.table @@ -0,0 +1,11 @@ +0 0 ORBIT COMPUTED DURING A MANOEUVRE +1 1 ADJUSTED MISSION OPERATIONS ORBIT +2 2 EXTRAPOLATED MISSION OPERATIONS ORBIT +3 3 ADJUSTED (PRELIMINARY/PRECISE) ORBIT +4 4 (PRELIMINARY/PRECISE) ORBIT IS ESTIMATED DURING A MANOEUVRE PERIOD +5 5 (PRELIMINARY/PRECISE) ORBIT IS INTERPOLATED OVER A TRACKING DATA GAP +6 6 (PRELIMINARY/PRECISE) ORBIT IS EXTRAPOLATED FOR A DURATION LESS THAN 1 DAY +7 7 (PRELIMINARY/PRECISE) ORBIT IS EXTRAPOLATED FOR A DURATION THAT RANGES FROM 1 DAY TO 2 DAYS +8 8 (PRELIMINARY/PRECISE) ORBIT IS EXTRAPOLATED FOR A DURATION LARGER THAN 2 DAYS, OR THAT THE ORBIT IS EXTRAPOLATED JUST AFTER A MANOEUVRE +9 9 DORIS DIODE NAVIGATOR ORBIT +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25093.table b/definitions/bufr/tables/0/wmo/39/codetables/25093.table new file mode 100644 index 000000000..e547e6c81 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25093.table @@ -0,0 +1,3 @@ +1 1 NO CORRECTION +2 2 VERTICAL VELOCITY CORRECTION +7 7 ALL CORRECTIONS diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25095.table b/definitions/bufr/tables/0/wmo/39/codetables/25095.table new file mode 100644 index 000000000..c446a5045 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25095.table @@ -0,0 +1 @@ +1 1 ALTIMETER OPERATING (0 IF NOMINAL, 1 IF BACKUP) diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25096.table b/definitions/bufr/tables/0/wmo/39/codetables/25096.table new file mode 100644 index 000000000..89dcc3914 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25096.table @@ -0,0 +1,4 @@ +1 1 MODE INDICATOR (0 IF MODE 2, 1 IF MODE 1) +2 2 MODE 1 CALIBRATION SEQUENCE INDICATOR (0 IF NORMAL DATA TAKING EITHER MODE 1 OR 2, 1 IF MODE 1 CALIBRATION SEQUENCE) BITS 3 AND 4 INDICATE ACTIVE 23.8 GHZ CHANNEL(S): +3 3 CHANNEL 2 (0 IF ON, 1 IF OFF) +4 4 CHANNEL 3 (0 IF ON, 1 IF OFF) diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25097.table b/definitions/bufr/tables/0/wmo/39/codetables/25097.table new file mode 100644 index 000000000..d4e1e4646 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25097.table @@ -0,0 +1,11 @@ +0 0 RANGES BETWEEN 0 AND 30 CM +1 1 RANGES BETWEEN 30 AND 60 CM +2 2 RANGES BETWEEN 60 AND 90 CM +3 3 RANGES BETWEEN 90 AND 120 CM +4 4 RANGES BETWEEN 120 AND 150 CM +5 5 RANGES BETWEEN 150 AND 180 CM +6 6 RANGES BETWEEN 180 AND 210 CM +7 7 RANGES BETWEEN 210 AND 240 CM +8 8 RANGES BETWEEN 240 AND 270 CM +9 9 RANGES LARGER THAN 270 CM +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25098.table b/definitions/bufr/tables/0/wmo/39/codetables/25098.table new file mode 100644 index 000000000..ac736f5c0 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25098.table @@ -0,0 +1,8 @@ +1 1 KU BAND RANGE +2 2 C BAND RANGE +3 3 KU BAND SWH +4 4 C BAND SWH +5 5 KU BAND BACKSCATTER COEFFICIENT +6 6 C BAND BACKSCATTER COEFFICIENT +7 7 OFF NADIR ANGLE FROM KU BAND WAVEFORM PARAMETERS +8 8 OFF NADIR ANGLE FROM PLATFORM diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25099.table b/definitions/bufr/tables/0/wmo/39/codetables/25099.table new file mode 100644 index 000000000..94d679c10 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25099.table @@ -0,0 +1,6 @@ +1 1 KU BAND RANGE INSTRUMENTAL CORRECTION +2 2 C BAND RANGE INSTRUMENTAL CORRECTION +3 3 KU BAND SWH INSTRUMENTAL CORRECTION +4 4 C BAND SWH INSTRUMENTAL CORRECTION +5 5 KU BAND BACKSCATTER COEFFICIENT INSTRUMENTAL CORRECTION +6 6 C BAND BACKSCATTER COEFFICIENT INSTRUMENTAL CORRECTION diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25110.table b/definitions/bufr/tables/0/wmo/39/codetables/25110.table new file mode 100644 index 000000000..912e01f54 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25110.table @@ -0,0 +1,6 @@ +1 1 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION. CORRECTION DONE USING DEFAULT PARAMETERS +2 2 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION. CORRECTION DONE USING RAW DATA ANALYSIS RESULTS +3 3 ANTENNA ELEVATION PATTERN CORRECTION APPLIED +4 4 NOMINAL CHIRP REPLICA USED +5 5 RECONSTRUCTED CHIRP USED +6 6 SLANT RANGE TO GROUND RANGE CONVERSION APPLIED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25112.table b/definitions/bufr/tables/0/wmo/39/codetables/25112.table new file mode 100644 index 000000000..a2a4ec9d3 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25112.table @@ -0,0 +1,5 @@ +1 1 BAND SPECIFIC RANGE +2 2 BAND SPECIFIC SIGNIFICANT WAVE HEIGHT +3 3 BAND SPECIFIC BACKSCATTER COEFFICIENT +4 4 OFF NADIR ANGLE FROM BAND SPECIFIC WAVEFORM PARAMETERS +5 5 OFF NADIR ANGLE FROM PLATFORM diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25113.table b/definitions/bufr/tables/0/wmo/39/codetables/25113.table new file mode 100644 index 000000000..ef394b626 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25113.table @@ -0,0 +1,3 @@ +1 1 BAND SPECIFIC RANGE INSTRUMENTAL CORRECTION +2 2 BAND SPECIFIC SIGNIFICANT WAVE HEIGHT INSTRUMENTAL CORRECTION +3 3 BAND SPECIFIC BACKSCATTER COEFFICIENT INSTRUMENTAL CORRECTION diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25120.table b/definitions/bufr/tables/0/wmo/39/codetables/25120.table new file mode 100644 index 000000000..c45b0addf --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25120.table @@ -0,0 +1,4 @@ +0 0 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL 2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD +1 1 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL 2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25122.table b/definitions/bufr/tables/0/wmo/39/codetables/25122.table new file mode 100644 index 000000000..1085ef980 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25122.table @@ -0,0 +1,4 @@ +0 0 HARDWARE CONFIGURATION FOR RF IS A +1 1 HARDWARE CONFIGURATION FOR RF IS B +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25123.table b/definitions/bufr/tables/0/wmo/39/codetables/25123.table new file mode 100644 index 000000000..70f0670e9 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25123.table @@ -0,0 +1,4 @@ +0 0 HARDWARE CONFIGURATION FOR HPA IS A +1 1 HARDWARE CONFIGURATION FOR HPA IS B +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25124.table b/definitions/bufr/tables/0/wmo/39/codetables/25124.table new file mode 100644 index 000000000..c45b0addf --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25124.table @@ -0,0 +1,4 @@ +0 0 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL 2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD +1 1 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL 2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25139.table b/definitions/bufr/tables/0/wmo/39/codetables/25139.table new file mode 100644 index 000000000..39b215e09 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25139.table @@ -0,0 +1,3 @@ +0 0 L1B +1 1 L2A +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25150.table b/definitions/bufr/tables/0/wmo/39/codetables/25150.table new file mode 100644 index 000000000..7b452c327 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25150.table @@ -0,0 +1,3 @@ +1 1 THE DVORAK'S VIS (VISUAL IMAGERY) INTENSITY ANALYSIS +2 2 THE DVORAK'S EIR (ENHANCED INFRARED IMAGERY) INTENSITY ANALYSIS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25174.table b/definitions/bufr/tables/0/wmo/39/codetables/25174.table new file mode 100644 index 000000000..c8a11b6d7 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25174.table @@ -0,0 +1,13 @@ +1 1 PIXEL IS AFFECTED BY RFI EFFECTS +2 2 PIXEL IS LOCATED IN THE HEXAGONAL ALIAS DIRECTION CENTRED ON SUN ALIAS +3 3 PIXEL IS CLOSE TO THE BORDER DELIMITING THE EXTENDED ALIAS FREE ZONE +4 4 PIXEL IS INSIDE THE EXTENDED ALIAS FREE ZONE +5 5 PIXEL IS INSIDE THE EXCLUSIVE OF ALIAS FREE ZONE +6 6 PIXEL IS LOCATED IN A ZONE WHERE A MOON ALIAS WAS RECONSTRUCTED +7 7 PIXEL IS LOCATED IN A ZONE WHERE SUN REFLECTION HAS BEEN DETECTED +8 8 PIXEL IS LOCATED IN A ZONE WHERE SUN ALIAS WAS RECONSTRUCTED +9 9 FLAT TARGET TRANSFORMATION HAS BEEN PERFORMED DURING IMAGE RECONSTRUCTION OF THIS PIXEL +10 10 SCENE HAS BEEN COMBINED WITH AN ADJUSTMENT SCENE IN OPPOSITE POLARIZATION DURING IMAGE RECONSTRUCTION TO ACCOUNT FOR CROSS-POLARIZATION LEAKAGE +11 11 DIRECT MOON CORRECTION HAS BEEN PERFORMED DURING IMAGE RECONSTRUCTION OF THIS PIXEL +12 12 REFLECTED SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE RECONSTRUCTION OF THIS PIXEL +13 13 DIRECT SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE RECONSTRUCTION OF THIS IMAGE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25181.table b/definitions/bufr/tables/0/wmo/39/codetables/25181.table new file mode 100644 index 000000000..2c1eabf7c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25181.table @@ -0,0 +1,3 @@ +0 0 OK +1 1 PERCENTAGE OF L2B RECORDS FREE OF PROCESSING ERRORS IS LESS THAN ACCEPTABLE THRESHOLD +2 2 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25182.table b/definitions/bufr/tables/0/wmo/39/codetables/25182.table new file mode 100644 index 000000000..9827b1dfd --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25182.table @@ -0,0 +1,3 @@ +0 0 OK +1 1 PERCENTAGE OF L1B RECORDS FREE OF PROCESSING ERRORS IS LESS THAN ACCEPTABLE THRESHOLD +2 2 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25184.table b/definitions/bufr/tables/0/wmo/39/codetables/25184.table new file mode 100644 index 000000000..29005c133 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25184.table @@ -0,0 +1,3 @@ +0 0 OK +1 1 PRODUCT AS A DURATION SHORTER THAN THE INPUT PRODUCT +2 2 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25185.table b/definitions/bufr/tables/0/wmo/39/codetables/25185.table new file mode 100644 index 000000000..ac18abae4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25185.table @@ -0,0 +1,2 @@ +0 0 AES 256 +255 255 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25187.table b/definitions/bufr/tables/0/wmo/39/codetables/25187.table new file mode 100644 index 000000000..683c09709 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25187.table @@ -0,0 +1,3 @@ +0 0 VALID +1 1 INVALID +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25188.table b/definitions/bufr/tables/0/wmo/39/codetables/25188.table new file mode 100644 index 000000000..b18013f21 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25188.table @@ -0,0 +1,6 @@ +0 0 PRESSURE ADJUSTED TO MEAN SEA LEVEL FOLLOWING WMO-NO. 8 FOR LOW LEVEL (< 50 M) STATIONS +1 1 PRESSURE ADJUSTED TO MEAN SEA LEVEL FOLLOWING WMO-NO. 8 FOR STATIONS BELOW 750 M +2 2 PRESSURE ADJUSTED TO SEA LEVEL FOLLOWING NATIONAL PRACTICE +3 3 PRESSURE ADJUSTED TO LOCAL WATER LEVEL FOLLOWING NATIONAL PRACTICE +4 4 PRESSURE NOT CORRECTED FOR HEIGHT +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25190.table b/definitions/bufr/tables/0/wmo/39/codetables/25190.table new file mode 100644 index 000000000..62fbc7616 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25190.table @@ -0,0 +1,7 @@ +0 0 LOW-RESOLUTION MODE (LRM) +1 1 SYNTHETIC APERTURE RADAR (SAR) +2 2 LRM AND SAR (INTERLEAVED) +3 3 RESERVED +4 4 PSEUDO-LRM (PLRM) +5 5 SAR INTERFEROMETRIC MODE (SARIN) +255 255 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/25191.table b/definitions/bufr/tables/0/wmo/39/codetables/25191.table new file mode 100644 index 000000000..ea22b6872 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/25191.table @@ -0,0 +1,4 @@ +0 0 OPEN LOOP +1 1 CLOSED LOOP +2 2 OPEN LOOP FIXED GAIN +255 255 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/26010.table b/definitions/bufr/tables/0/wmo/39/codetables/26010.table new file mode 100644 index 000000000..f825040f4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/26010.table @@ -0,0 +1,25 @@ +1 1 0100 INCLUDED +2 2 0200 INCLUDED +3 3 0300 INCLUDED +4 4 0400 INCLUDED +5 5 0500 INCLUDED +6 6 0600 INCLUDED +7 7 0700 INCLUDED +8 8 0800 INCLUDED +9 9 0900 INCLUDED +10 10 1000 INCLUDED +11 11 1100 INCLUDED +12 12 1200 INCLUDED +13 13 1300 INCLUDED +14 14 1400 INCLUDED +15 15 1500 INCLUDED +16 16 1600 INCLUDED +17 17 1700 INCLUDED +18 18 1800 INCLUDED +19 19 1900 INCLUDED +20 20 2000 INCLUDED +21 21 2100 INCLUDED +22 22 2200 INCLUDED +23 23 2300 INCLUDED +24 24 2400 INCLUDED +25 25 UNKNOWN MIXTURE OF HOURS diff --git a/definitions/bufr/tables/0/wmo/39/codetables/29001.table b/definitions/bufr/tables/0/wmo/39/codetables/29001.table new file mode 100644 index 000000000..884b29a84 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/29001.table @@ -0,0 +1,8 @@ +0 0 GNOMONIC PROJECTION +1 1 POLAR STEREOGRAPHIC PROJECTION +2 2 LAMBERT'S CONFORMAL CONIC PROJECTION +3 3 MERCATOR'S PROJECTION +4 4 SCANNING CONE (RADAR) +5 5 RESERVED +6 6 NO PROJECTION +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/29002.table b/definitions/bufr/tables/0/wmo/39/codetables/29002.table new file mode 100644 index 000000000..1d7efd0c8 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/29002.table @@ -0,0 +1,4 @@ +0 0 CARTESIAN +1 1 POLAR +2 2 OTHER +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3001.table b/definitions/bufr/tables/0/wmo/39/codetables/3001.table new file mode 100644 index 000000000..e9caa2a14 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3001.table @@ -0,0 +1,12 @@ +0 0 LAND STATION (SYNOPTIC NETWORK) +1 1 SHALLOW WATER STATION (FIXED TO SEA/LAKE FLOOR) +2 2 SHIP +3 3 RIG/PLATFORM +4 4 MOORED BUOY +5 5 DRIFTING BUOY (OR DRIFTER) +6 6 ICE BUOY +7 7 LAND STATION (LOCAL NETWORK) +8 8 LAND VEHICLE +9 9 AUTONOMOUS MARINE VEHICLE +10 10 TAG ATTACHED TO MARINE ANIMAL +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3003.table b/definitions/bufr/tables/0/wmo/39/codetables/3003.table new file mode 100644 index 000000000..cf530237f --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3003.table @@ -0,0 +1,8 @@ +0 0 SCREEN +1 1 SLING/WHIRLING +2 2 UNSCREENED +3 3 RADIATION SHIELD +4 4 ASPIRATED (E.G. ASSMANN) +5 5 OTHER SHELTER +6 6 HANDHELD +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/30031.table b/definitions/bufr/tables/0/wmo/39/codetables/30031.table new file mode 100644 index 000000000..80cce26f1 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/30031.table @@ -0,0 +1,13 @@ +0 0 PPI +1 1 COMPOSITE +2 2 CAPPL +3 3 VERTICAL SECTION +4 4 ALPHANUMERIC DATA +5 5 MAP OF SUBJECT CLUTTER +6 6 MAP +7 7 TEST PICTURE +8 8 COMMENTS +9 9 MAP OF GROUND OCCULTATION +10 10 MAP OF RADAR BEAM HEIGHT +14 14 OTHER +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/30032.table b/definitions/bufr/tables/0/wmo/39/codetables/30032.table new file mode 100644 index 000000000..942cb5d7f --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/30032.table @@ -0,0 +1,9 @@ +1 1 MAP +2 2 SATELLITE IR +3 3 SATELLITE VIS +4 4 SATELLITE WV +5 5 SATELLITE MULTISPECTRAL +6 6 SYNOPTIC OBSERVATIONS +7 7 FORECAST PARAMETERS +8 8 LIGHTNING DATA +15 15 OTHER DATA diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3004.table b/definitions/bufr/tables/0/wmo/39/codetables/3004.table new file mode 100644 index 000000000..571e234bf --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3004.table @@ -0,0 +1,11 @@ +0 0 STEVENSON SCREEN +1 1 MARINE STEVENSON SCREEN +2 2 CYLINDRICAL SECTION PLATE SHIELD +3 3 CONCENTRIC TUBE +4 4 RECTANGULAR SECTION SHIELD +5 5 SQUARE SECTION SHIELD +6 6 TRIANGULAR SECTION SHIELD +7 7 OPEN COVERED LEAN-TO +8 8 OPEN COVERED INVERTED V ROOF +9 9 INTEGRATED (E.G. CHILLED MIRROR) +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3008.table b/definitions/bufr/tables/0/wmo/39/codetables/3008.table new file mode 100644 index 000000000..e321d5562 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3008.table @@ -0,0 +1,4 @@ +0 0 NATURAL VENTILATION IN USE +1 1 ARTIFICIAL ASPIRATION IN USE: CONSTANT FLOW AT TIME OF READING +2 2 ARTIFICIAL ASPIRATION IN USE: VARIABLE FLOW AT TIME OF READING +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3010.table b/definitions/bufr/tables/0/wmo/39/codetables/3010.table new file mode 100644 index 000000000..75746a1c3 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3010.table @@ -0,0 +1,12 @@ +0 0 RESERVED +1 1 ADCP +2 2 GEK (GEOMAGNETIC ELECTROKINETOGRAPH) +3 3 SHIP'S SET AND DRIFT DETERMINED BY FIXES 3-6 HOURS APART +4 4 SHIP'S SET AND DRIFT DETERMINED BY FIXES MORE THAN 6 HOURS BUT LESS THAN 12 HOURS APART +5 5 DRIFT OF BUOY +6 6 ADCP +7 7 ADCP BOTTOM TRACKING MODE +8 8 ELECTROMAGNETIC SENSOR +9 9 ROTOR AND VANE +10 10 LOWERED ADCP +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3011.table b/definitions/bufr/tables/0/wmo/39/codetables/3011.table new file mode 100644 index 000000000..748826848 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3011.table @@ -0,0 +1,4 @@ +0 0 DEPTH CALCULATED USING FALL RATE EQUATION +1 1 DEPTH CALCULATED FROM WATER PRESSURE/EQUATION OF STATE +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3012.table b/definitions/bufr/tables/0/wmo/39/codetables/3012.table new file mode 100644 index 000000000..35bdeadd5 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3012.table @@ -0,0 +1,3 @@ +0 0 ANDERRAA OXYGEN OPTODE +1 1 WINKLER BOTTLE +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3016.table b/definitions/bufr/tables/0/wmo/39/codetables/3016.table new file mode 100644 index 000000000..792788f42 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3016.table @@ -0,0 +1,9 @@ +0 0 FAST LANE BETWEEN THE WHEEL TRACKS +1 1 FAST LANE BETWEEN THE WHEEL TRACKS IN THE OPPOSITE DIRECTION +2 2 FAST LANE IN THE WHEEL TRACKS +3 3 FAST LANE IN THE WHEEL TRACKS IN THE OPPOSITE DIRECTION +4 4 SLOW LANE BETWEEN THE WHEEL TRACKS +5 5 SLOW LANE BETWEEN THE WHEEL TRACKS IN THE OPPOSITE DIRECTION +6 6 SLOW LANE IN THE WHEEL TRACKS +7 7 SLOW LANE IN THE WHEEL TRACKS IN THE OPPOSITE DIRECTION +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3017.table b/definitions/bufr/tables/0/wmo/39/codetables/3017.table new file mode 100644 index 000000000..e94c0a449 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3017.table @@ -0,0 +1,5 @@ +1 1 AUTOMATIC +2 2 MANNED +3 3 EVENT TRIGGERED +4 4 LONGER TIME PERIOD THAN THE STANDARD +5 5 RESERVED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3018.table b/definitions/bufr/tables/0/wmo/39/codetables/3018.table new file mode 100644 index 000000000..b3769ae40 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3018.table @@ -0,0 +1,22 @@ +0 0 FREE TRACK WITHOUT FURTHER INFORMATION +1 1 FREE TRACK, EMBANKMENT +2 2 FREE TRACK, FLAT RELATIVE TO SURROUNDINGS +3 3 FREE TRACK, WATER BASIN(S) IN VICINITY +4 4 FREE TRACK, FOREST +5 5 FREE TRACK, CLEFT +6 6 FREE TRACK, ON HILLTOP +7 7 FREE TRACK, ON HILLTOP, FOREST +8 8 FREE TRACK, IN VALLEY +9 9 FREE TRACK, IN VALLEY, FOREST +10 10 FREE TRACK, NORTH INCLINATION +11 11 FREE TRACK, NORTH INCLINATION, FOREST +12 12 FREE TRACK, SOUTH INCLINATION +13 13 FREE TRACK, SOUTH INCLINATION, FOREST +20 20 BRIDGE WITHOUT FURTHER INFORMATION +21 21 BRIDGE ACROSS A VALLEY IN AN URBAN AREA +22 22 BRIDGE ACROSS A VALLEY WITH FOREST/MEADOWS/FIELDS +23 23 BRIDGE ACROSS STREET/TRACK +24 24 BRIDGE ACROSS BIG RIVER/CANAL +25 25 BRIDGE ACROSS RIVER/CANAL OF MEDIUM SIZE +26 26 BRIDGE ACROSS A SMALL STREAM/LOADING CANAL +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3019.table b/definitions/bufr/tables/0/wmo/39/codetables/3019.table new file mode 100644 index 000000000..2f55b0028 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3019.table @@ -0,0 +1,8 @@ +0 0 ASPHALT +1 1 CONCRETE +2 2 CONCRETE CONSTRUCTION +3 3 STEEL-GIRDER CONSTRUCTION +4 4 BOX GIRDER BRIDGE +5 5 ORTHOTROPIC SLAB +6 6 DRAIN ASPHALT +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3020.table b/definitions/bufr/tables/0/wmo/39/codetables/3020.table new file mode 100644 index 000000000..9f0feaea7 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3020.table @@ -0,0 +1,5 @@ +0 0 WOOD +1 1 METAL ALLOY +2 2 PLASTIC/GRP +3 3 REED/GRASS/LEAF +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3021.table b/definitions/bufr/tables/0/wmo/39/codetables/3021.table new file mode 100644 index 000000000..27e1bfad4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3021.table @@ -0,0 +1,4 @@ +0 0 UNHEATED +1 1 HEATED +2 2 NOT APPLICABLE +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3022.table b/definitions/bufr/tables/0/wmo/39/codetables/3022.table new file mode 100644 index 000000000..daf67e27f --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3022.table @@ -0,0 +1,4 @@ +0 0 NATIONAL HYDROMETEOROLOGICAL/WEATHER SERVICE +1 1 OTHER +2 2 STANDARDS INSTITUTE +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3023.table b/definitions/bufr/tables/0/wmo/39/codetables/3023.table new file mode 100644 index 000000000..9e683c891 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3023.table @@ -0,0 +1,8 @@ +0 0 SINGLE V-SECTION LOUVERS +1 1 OVERLAPPING LOUVERS +2 2 DOUBLE V-SECTION LOUVERS +3 3 NON-OVERLAPPING LOUVERS +4 4 VENTED, NON-LOUVERED +5 5 NOT APPLICABLE +6 6 RESERVED FOR FUTURE USE +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3027.table b/definitions/bufr/tables/0/wmo/39/codetables/3027.table new file mode 100644 index 000000000..8280e8602 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3027.table @@ -0,0 +1,8 @@ +0 0 SOLO (SINGLE RADIOSONDE) +1 1 BLOCK +2 2 BAR +3 3 CROSS +4 4 T-RIG +5 5 DOUBLE T-RIG +6 6 COMPLEX +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/3028.table b/definitions/bufr/tables/0/wmo/39/codetables/3028.table new file mode 100644 index 000000000..9cc805953 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/3028.table @@ -0,0 +1,8 @@ +0 0 MULTI POINT MANUAL SNOW SURVEY +1 1 SINGLE POINT MANUAL SNOW WATER EQUIVALENT MEASUREMENT +2 2 SNOW PILLOW OR SNOW SCALE +3 3 PASSIVE GAMMA +4 4 GNSS/GPS METHODS +5 5 COSMIC RAY ATTENUATION +6 6 TIME DOMAIN REFLECTOMETRY +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/31021.table b/definitions/bufr/tables/0/wmo/39/codetables/31021.table new file mode 100644 index 000000000..3b4875d89 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/31021.table @@ -0,0 +1,10 @@ +0 0 RESERVED +1 1 1-BIT INDICATOR OF QUALITY +2 2 2-BIT INDICATOR OF QUALITY +5 5 8-BIT INDICATOR OF QUALITY CONTROL +6 6 4-BIT INDICATOR OF QUALITY CONTROL CLASS ACCORDING TO GTSPP +7 7 PERCENTAGE CONFIDENCE +8 8 0 = NOT SUSPECTED, 1 = SUSPECTED, 2 = RESERVED, 3 = INFORMATION NOT REQUIRED +9 9 0 = DATA PRESENT, GOOD, COLLOCATED, 1 = DATA AVAILABLE BUT OF DEGRADED QUALITY AND NOT USED, 2 = NO SPATIOTEMPORALLY COLLOCATED DATA AVAILABLE, 3-14 = NOT USED (RESERVED), 15 = MISSING VALUE +21 21 1-BIT INDICATOR OF CORRECTION +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/31031.table b/definitions/bufr/tables/0/wmo/39/codetables/31031.table new file mode 100644 index 000000000..d268b380c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/31031.table @@ -0,0 +1 @@ +1 1 0 = DATA PRESENT, 1 = DATA NOT PRESENT diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33002.table b/definitions/bufr/tables/0/wmo/39/codetables/33002.table new file mode 100644 index 000000000..4177c0577 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33002.table @@ -0,0 +1,4 @@ +0 0 DATA NOT SUSPECT +1 1 DATA SUSPECT +2 2 RESERVED +3 3 QUALITY INFORMATION NOT GIVEN diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33003.table b/definitions/bufr/tables/0/wmo/39/codetables/33003.table new file mode 100644 index 000000000..7577129b0 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33003.table @@ -0,0 +1,5 @@ +0 0 DATA NOT SUSPECT +1 1 DATA SLIGHTLY SUSPECT +2 2 DATA HIGHLY SUSPECT +3 3 DATA CONSIDERED UNFIT FOR USE +7 7 QUALITY INFORMATION NOT GIVEN diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33005.table b/definitions/bufr/tables/0/wmo/39/codetables/33005.table new file mode 100644 index 000000000..8d7569ad2 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33005.table @@ -0,0 +1,23 @@ +1 1 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED +2 2 PRESSURE DATA SUSPECT +3 3 WIND DATA SUSPECT +4 4 AIR TEMPERATURE DATA SUSPECT +5 5 WET-BULB TEMPERATURE DATA SUSPECT +6 6 HUMIDITY DATA SUSPECT +7 7 GROUND TEMPERATURE DATA SUSPECT +8 8 SOIL TEMPERATURE (DEPTH 1) DATA SUSPECT +9 9 SOIL TEMPERATURE (DEPTH 2) DATA SUSPECT +10 10 SOIL TEMPERATURE (DEPTH 3) DATA SUSPECT +11 11 SOIL TEMPERATURE (DEPTH 4) DATA SUSPECT +12 12 SOIL TEMPERATURE (DEPTH 5) DATA SUSPECT +13 13 CLOUD DATA SUSPECT +14 14 VISIBILITY DATA SUSPECT +15 15 PRESENT WEATHER DATA SUSPECT +16 16 LIGHTNING DATA SUSPECT +17 17 ICE DEPOSIT DATA SUSPECT +18 18 PRECIPITATION DATA SUSPECT +19 19 STATE OF GROUND DATA SUSPECT +20 20 SNOW DATA SUSPECT +21 21 WATER CONTENT DATA SUSPECT +22 22 EVAPORATION/EVAPOTRANSPIRATION DATA SUSPECT +23 23 SUNSHINE DATA SUSPECT diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33006.table b/definitions/bufr/tables/0/wmo/39/codetables/33006.table new file mode 100644 index 000000000..0ea44a50b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33006.table @@ -0,0 +1,5 @@ +0 0 SELF-CHECK OK +1 1 AT LEAST ONE WARNING ACTIVE, NO ALARMS +2 2 AT LEAST ONE ALARM ACTIVE +3 3 SENSOR FAILURE +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33015.table b/definitions/bufr/tables/0/wmo/39/codetables/33015.table new file mode 100644 index 000000000..f585808d0 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33015.table @@ -0,0 +1,16 @@ +0 0 PASSED ALL CHECKS +1 1 MISSING DATA CHECK +2 2 DESCENDING/REASCENDING BALLOON CHECK +3 3 DATA PLAUSIBILITY CHECK (ABOVE LIMITS) +4 4 DATA PLAUSIBILITY CHECK (BELOW LIMITS) +5 5 SUPERADIABATIC LAPSE RATE CHECK +6 6 LIMITING ANGLES CHECK +7 7 ASCENSION RATE CHECK +8 8 EXCESSIVE CHANGE FROM PREVIOUS FLIGHT +9 9 BALLOON OVERHEAD CHECK +10 10 WIND SPEED CHECK +11 11 WIND DIRECTION CHECK +12 12 DEPENDENCY CHECK +13 13 DATA VALID BUT MODIFIED +14 14 DATA OUTLIER CHECK +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33020.table b/definitions/bufr/tables/0/wmo/39/codetables/33020.table new file mode 100644 index 000000000..ba7a4d4ea --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33020.table @@ -0,0 +1,8 @@ +0 0 GOOD +1 1 INCONSISTENT +2 2 DOUBTFUL +3 3 WRONG +4 4 NOT CHECKED +5 5 HAS BEEN CHANGED +6 6 ESTIMATED +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33021.table b/definitions/bufr/tables/0/wmo/39/codetables/33021.table new file mode 100644 index 000000000..e3e67ae8c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33021.table @@ -0,0 +1,4 @@ +0 0 WITHIN LIMITS +1 1 OUTSIDE LIMITS +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33022.table b/definitions/bufr/tables/0/wmo/39/codetables/33022.table new file mode 100644 index 000000000..50ef65feb --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33022.table @@ -0,0 +1,4 @@ +0 0 GOOD (SEVERAL IDENTICAL REPORTS HAVE BEEN RECEIVED) +1 1 DUBIOUS (NO IDENTICAL REPORTS HAVE BEEN RECEIVED) +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33023.table b/definitions/bufr/tables/0/wmo/39/codetables/33023.table new file mode 100644 index 000000000..896c816a9 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33023.table @@ -0,0 +1,4 @@ +0 0 RELIABLE (LOCATION WAS MADE OVER TWO SATELLITE PASSES) +1 1 LATEST KNOWN (NO LOCATION OVER THE CORRESPONDING PASS) +2 2 DUBIOUS (LOCATION MADE OVER ONE PASS ONLY; A SECOND SOLUTION IS POSSIBLE IN 5 PER CENT OF THE CASES) +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33024.table b/definitions/bufr/tables/0/wmo/39/codetables/33024.table new file mode 100644 index 000000000..771e04b81 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33024.table @@ -0,0 +1,10 @@ +0 0 RESERVED +1 1 EXCELLENT - WITHIN 3 METRES +2 2 GOOD - WITHIN 10 METRES +3 3 FAIR - WITHIN 20 METRES +4 4 POOR - MORE THAN 20 METRES +5 5 EXCELLENT - WITHIN 10 FEET +6 6 GOOD - WITHIN 30 FEET +7 7 FAIR - WITHIN 60 FEET +8 8 POOR - MORE THAN 60 FEET +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33025.table b/definitions/bufr/tables/0/wmo/39/codetables/33025.table new file mode 100644 index 000000000..4da695aa0 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33025.table @@ -0,0 +1,5 @@ +0 0 TIME INTERPOLATED, LATITUDE AND LONGITUDE REPORTED +1 1 TIME REPORTED, LATITUDE AND LONGITUDE INTERPOLATED +2 2 TIME, LATITUDE, AND LONGITUDE INTERPOLATED +3 3 TIME, LATITUDE, AND LONGITUDE REPORTED +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33026.table b/definitions/bufr/tables/0/wmo/39/codetables/33026.table new file mode 100644 index 000000000..08c61254b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33026.table @@ -0,0 +1,17 @@ +0 0 NORMAL OPERATIONS - MEASUREMENT MODE +1 1 NORMAL OPERATIONS - NON-MEASUREMENT MODE +2 2 SMALL RH +3 3 HUMIDITY ELEMENT IS WET +4 4 HUMIDITY ELEMENT CONTAMINATED +5 5 HEATER FAIL +6 6 HEATER FAIL AND WET/CONTAMINATED HUMIDITY ELEMENT +7 7 AT LEAST ONE OF THE INPUT PARAMETERS USED IN THE CALCULATION OF MIXING RATIO IS INVALID +8 8 NUMERIC ERROR +9 9 SENSOR NOT INSTALLED +10 10 CALCULATED RH > 100% +11 11 INPUT LASER POWER TOO LOW +12 12 PROBE WV TEMPERATURE OUT OF RANGE +13 13 PROBE WV PRESSURE OUT OF RANGE +14 14 SPECTRAL LINE OUT OF RANGE +15 15 NO LASER OUTPUT +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33027.table b/definitions/bufr/tables/0/wmo/39/codetables/33027.table new file mode 100644 index 000000000..c563af46f --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33027.table @@ -0,0 +1,6 @@ +0 0 RADIUS >= 1500 M +1 1 500 M =< RADIUS <1500 M +2 2 250 M =< RADIUS < 500 M +3 3 RADIUS < 250 M +4 4 =< 100 M +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33028.table b/definitions/bufr/tables/0/wmo/39/codetables/33028.table new file mode 100644 index 000000000..84bd666f9 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33028.table @@ -0,0 +1,5 @@ +1 1 NOMINAL +2 2 DEGRADED BY SW ERROR; ANY ERROR REPORTED BY THE ALGORITHMS +3 3 DEGRADED BY INSTRUMENT ERROR +4 4 DEGRADED BY CORRUPTED /MISSING ADF +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33030.table b/definitions/bufr/tables/0/wmo/39/codetables/33030.table new file mode 100644 index 000000000..c9e36c0f4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33030.table @@ -0,0 +1,7 @@ +1 1 DO NOT USE SCAN FOR PRODUCT GENERATION +2 2 TIME SEQUENCE ERROR DETECTED WITH THIS SCAN +3 3 DATA GAP PRECEDES THIS SCAN +4 4 NO CALIBRATION +5 5 NO EARTH LOCATION +6 6 FIRST GOOD TIME FOLLOWING A CLOCK UPDATE +7 7 INSTRUMENT STATUS CHANGED WITH THIS SCAN diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33031.table b/definitions/bufr/tables/0/wmo/39/codetables/33031.table new file mode 100644 index 000000000..c11fd4a09 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33031.table @@ -0,0 +1,21 @@ +1 1 TIME FIELD IS BAD BUT CAN PROBABLY BE INFERRED FROM THE PREVIOUS GOOD TIME +2 2 TIME FIELD IS BAD AND CANNOT BE INFERRED FROM THE PREVIOUS GOOD TIME +3 3 THIS RECORD STARTS A SEQUENCE THAT IS INCONSISTENT WITH PREVIOUS TIMES (I.E. THERE IS A TIME DISCONTINUITY). THIS MAY OR MAY NOT BE ASSOCIATED WITH A SPACECRAFT CLOCK UPDATE (SEE SCAN LINE STATUS FLAGS FOR ATOVS) +4 4 START OF A SEQUENCE THAT APPARENTLY REPEATS SCAN TIMES THAT HAVE BEEN PREVIOUSLY ACCEPTED +5 5 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD TIME +6 6 SCAN LINE WAS CALIBRATED USING FEWER THAN THE PREFERRED NUMBER OF SCAN LINES BECAUSE OF PROXIMITY TO START OR END OF DATA OR TO A DATA GAP +7 7 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD OR INSUFFICIENT PRT DATA +8 8 SCAN LINE WAS CALIBRATED BUT WITH MARGINAL PRT DATA +9 9 SOME UNCALIBRATED CHANNELS ON THIS SCAN +10 10 UNCALIBRATED DUE TO INSTRUMENT MODE +11 11 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR OF SPACE VIEW +12 12 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR OF BLACK BODY +13 13 NOT EARTH LOCATED BECAUSE OF BAD TIME +14 14 EARTH LOCATION QUESTIONABLE BECAUSE OF QUESTIONABLE TIME CODE (SEE TIME PROBLEM CODE BITS) +15 15 EARTH LOCATION QUESTIONABLE - ONLY MARGINAL AGREEMENT WITH REASONABLENESS CHECK +16 16 EARTH LOCATION QUESTIONABLE - FAILS REASONABLENESS CHECK +17 17 EARTH LOCATION QUESTIONABLE BECAUSE OF ANTENNA POSITION CHECK +18 18 SCAN LINE CALIBRATION COLD BLACK BODY +19 19 SCAN LINE CALIBRATION WARM BLACK BODY +20 20 SCAN LINE CALIBRATION SPACE VIEW +21 21 EARTH VIEW diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33032.table b/definitions/bufr/tables/0/wmo/39/codetables/33032.table new file mode 100644 index 000000000..33307f50a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33032.table @@ -0,0 +1,7 @@ +1 1 NO GOOD BLACKBODY COUNTS FOR SCAN LINE +2 2 NO GOOD SPACE VIEW COUNTS FOR THIS LINE +3 3 NO GOOD PRTS FOR THIS LINE +4 4 SOME BAD BLACKBODY VIEW COUNTS FOR THIS LINE +5 5 SOME BAD SPACE VIEW COUNTS FOR THIS LINE +6 6 SOME BAD PRT TEMPS ON THIS LINE +7 7 QUALITY FOR THIS SCAN IS REDUCED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33033.table b/definitions/bufr/tables/0/wmo/39/codetables/33033.table new file mode 100644 index 000000000..6fd320510 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33033.table @@ -0,0 +1,3 @@ +1 1 SET IF SECONDARY CALIBRATION USED +22 22 SET IF ALL THE CHANNELS ARE MISSING +23 23 SUSPECT diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33035.table b/definitions/bufr/tables/0/wmo/39/codetables/33035.table new file mode 100644 index 000000000..01996bae4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33035.table @@ -0,0 +1,10 @@ +0 0 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED +1 1 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PASSED +2 2 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DELETED +3 3 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED +4 4 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FAILED +5 5 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE-INSERTED +6 6 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND NOT MANUALLY CHECKED +7 7 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND MANUALLY CHECKED AND FAILED +8 8 MANUALLY CHECKED AND FAILED +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33037.table b/definitions/bufr/tables/0/wmo/39/codetables/33037.table new file mode 100644 index 000000000..9f26652a5 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33037.table @@ -0,0 +1,19 @@ +1 1 U DEPARTURE FROM GUESS +2 2 V DEPARTURE FROM GUESS +3 3 U AND V DEPARTURE FROM GUESS +4 4 U ACCELERATION +5 5 V ACCELERATION +6 6 U AND V ACCELERATION +7 7 POSSIBLE LAND FEATURE +8 8 U ACCELERATION AND POSSIBLE LAND FEATURE +9 9 V ACCELERATION AND POSSIBLE LAND FEATURE +10 10 U AND V ACCELERATION AND POSSIBLE LAND FEATURE +11 11 BAD WIND GUESS +12 12 CORRELATION FAILURE +13 13 SEARCH BOX OFF EDGE OF AREA +14 14 TARGET BOX OFF EDGE OF AREA +15 15 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE) +16 16 TARGET OUTSIDE OF LATITUDE/LONGITUDE BOX +17 17 TARGET OUTSIDE OF PRESSURE MINIMUM/MAXIMUM +18 18 AUTOEDITOR FLAGGED SLOW VECTOR +19 19 AUTOEDITOR FLAGGED VECTORS diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33038.table b/definitions/bufr/tables/0/wmo/39/codetables/33038.table new file mode 100644 index 000000000..3dc1192e8 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33038.table @@ -0,0 +1,9 @@ +1 1 TOTAL ZENITH DELAY QUALITY IS CONSIDERED POOR +2 2 GALILEO SATELLITES USED +3 3 GLONASS SATELLITES USED +4 4 GPS SATELLITES USED +5 5 METEOROLOGICAL DATA APPLIED +6 6 ATMOSPHERIC LOADING CORRECTION APPLIED +7 7 OCEAN TIDE LOADING APPLIED +8 8 CLIMATE QUALITY DATA PROCESSING +9 9 NEAR-REAL TIME DATA PROCESSING diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33039.table b/definitions/bufr/tables/0/wmo/39/codetables/33039.table new file mode 100644 index 000000000..c34540914 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33039.table @@ -0,0 +1,12 @@ +1 1 NON-NOMINAL QUALITY +2 2 OFFLINE PRODUCT +3 3 ASCENDING OCCULTATION FLAG +4 4 EXCESS PHASE PROCESSING NON-NOMINAL +5 5 BENDING ANGLE PROCESSING NON-NOMINAL +6 6 REFRACTIVITY PROCESSING NON-NOMINAL +7 7 METEOROLOGICAL PROCESSING NON-NOMINAL +8 8 OPEN LOOP DATA INCLUDED +9 9 SURFACE REFLECTIONS DETECTED +10 10 L2C GNSS SIGNALS USED +14 14 BACKGROUND PROFILE NON-NOMINAL +15 15 BACKGROUND (I.E. NOT RETRIEVED) PROFILE PRESENT diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33041.table b/definitions/bufr/tables/0/wmo/39/codetables/33041.table new file mode 100644 index 000000000..8bbdba90a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33041.table @@ -0,0 +1,4 @@ +0 0 THE FOLLOWING VALUE IS THE TRUE VALUE +1 1 THE FOLLOWING VALUE IS HIGHER THAN THE TRUE VALUE (THE MEASUREMENT HIT THE LOWER LIMIT OF THE INSTRUMENT) +2 2 THE FOLLOWING VALUE IS LOWER THAN THE TRUE VALUE (THE MEASUREMENT HIT THE HIGHER LIMIT OF THE INSTRUMENT) +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33042.table b/definitions/bufr/tables/0/wmo/39/codetables/33042.table new file mode 100644 index 000000000..b75447a4a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33042.table @@ -0,0 +1,5 @@ +0 0 EXCLUSIVE LOWER LIMIT (>) +1 1 INCLUSIVE LOWER LIMIT (>=) +2 2 EXCLUSIVE UPPER LIMIT (<) +3 3 INCLUSIVE UPPER LIMIT (=<) +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33043.table b/definitions/bufr/tables/0/wmo/39/codetables/33043.table new file mode 100644 index 000000000..398d9ab2c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33043.table @@ -0,0 +1,4 @@ +1 1 SEA MDS. NADIR ONLY SST RETRIEVAL USED 3.7 MICRON CHANNEL. LAND MDS RESERVED +2 2 SEA MDS. DUAL VIEW SST RETRIEVAL USED 3.7 MICRON CHANNEL. LAND MDS RESERVED +3 3 NADIR VIEW CONTAINS DAY TIME DATA +4 4 FORWARD VIEW CONTAINS DAY TIME DATA diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33044.table b/definitions/bufr/tables/0/wmo/39/codetables/33044.table new file mode 100644 index 000000000..01746c795 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33044.table @@ -0,0 +1,14 @@ +1 1 INPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG +2 2 INPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG +3 3 NUMBER OF INPUT DATA GAPS > THRESHOLD VALUE +4 4 PERCENTAGE OF MISSING LINES > THRESHOLD VALUE +5 5 DOPPLER CENTROID UNCERTAIN. CONFIDENCE MEASURE < SPECIFIC VALUE +6 6 DOPPLER AMBIGUITY ESTIMATE UNCERTAIN. CONFIDENCE MEASURE < SPECIFIC VALUE +7 7 OUTPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG +8 8 OUTPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG +9 9 CHIRP RECONSTRUCTION FAILED OR IS OF LOW QUALITY FLAG +10 10 DATA SET MISSING +11 11 INVALID DOWNLINK PARAMETERS +12 12 AZIMUTH CUT-OFF ITERATION COUNT. THE AZIMUTH CUT-OFF FIT DID NOT CONVERGE WITHIN A MINIMUM NUMBER OF ITERATIONS +13 13 AZIMUTH CUT-OFF FIT DID NOT CONVERGE WITHIN A MINIMUM NUMBER OF ITERATIONS +14 14 PHASE INFORMATION CONFIDENCE MEASURE. THE IMAGINARY SPECTRAL PEAK IS LESS THAN A MINIMUM THRESHOLD, OR THE ZERO LAG SHIFT IS GREATER THAN A MINIMUM THRESHOLD diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33047.table b/definitions/bufr/tables/0/wmo/39/codetables/33047.table new file mode 100644 index 000000000..f69b56e18 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33047.table @@ -0,0 +1,27 @@ +1 1 ERROR DETECTED AND ATTEMPTS TO RECOVER MADE +2 2 ANOMALY IN ON-BOARD DATA HANDLING (OBDH) VALUE DETECTED +3 3 ANOMALY IN ULTRA STABLE OSCILLATOR PROCESSING (USOP) VALUE DETECTED +4 4 ERRORS DETECTED BY ON-BOARD COMPUTER +5 5 AUTOMATIC GAIN CONTROL (AGC) OUT OF RANGE +6 6 RECEPTION (RX) DELAY FAULT. RX DISTANCE OUT OF RANGE +7 7 WAVE FORM SAMPLES FAULT IDENTIFIER. ERROR +8 8 S BAND ANOMALY/ERROR DETECTED +12 12 BRIGHTNESS TEMPERATURE (CHANNEL 1) OUT OF RANGE +13 13 BRIGHTNESS TEMPERATURE (CHANNEL 2) OUT OF RANGE +14 14 RESERVED +15 15 KU BAND OCEAN RETRACKING ERROR +16 16 S BAND OCEAN RETRACKING ERROR +17 17 KU BAND ICE 1 RETRACKING ERROR +18 18 S BAND ICE 1 RETRACKING ERROR +19 19 KU BAND ICE 2 RETRACKING ERROR +20 20 S BAND ICE 2 RETRACKING ERROR +21 21 KU BAND SEA ICE RETRACKING ERROR +22 22 ARITHMETIC FAULT ERROR +23 23 METEO DATA STATE. NO MAP +24 24 METEO DATA STATE. 1 MAP +25 25 METEO DATA STATE. 2 MAPS DEGRADED +26 26 METEO DATA STATE. 2 MAPS NOMINAL +27 27 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, SEVERAL ERRORS +28 28 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, WARNING DETECTED +29 29 ORBIT PROPAGATOR STATUS FOR INITIALIZATION MODE, SEVERAL ERRORS +30 30 ORBIT PROPAGATOR STATUS FOR INITIALIZATION MODE, WARNING DETECTED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33048.table b/definitions/bufr/tables/0/wmo/39/codetables/33048.table new file mode 100644 index 000000000..312ba4071 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33048.table @@ -0,0 +1,4 @@ +0 0 INVERSION SUCCESSFUL +1 1 INVERSION NOT SUCCESSFUL +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33049.table b/definitions/bufr/tables/0/wmo/39/codetables/33049.table new file mode 100644 index 000000000..bdde0619b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33049.table @@ -0,0 +1,4 @@ +0 0 EXTERNAL WIND DIRECTION USED DURING INVERSION +1 1 EXTERNAL WIND DIRECTION NOT USED DURING INVERSION +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33050.table b/definitions/bufr/tables/0/wmo/39/codetables/33050.table new file mode 100644 index 000000000..ee7bb6deb --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33050.table @@ -0,0 +1,9 @@ +0 0 UNQUALIFIED +1 1 CORRECT VALUE (ALL CHECKS PASSED) +2 2 PROBABLY GOOD BUT VALUE INCONSISTENT WITH STATISTICS (DIFFER FROM CLIMATOLOGY) +3 3 PROBABLY BAD (SPIKE, GRADIENT, ETC., IF OTHER TESTS PASSED) +4 4 BAD VALUE, IMPOSSIBLE VALUE (OUT OF SCALE, VERTICAL INSTABILITY, CONSTANT PROFILE) +5 5 VALUE MODIFIED DURING QUALITY CONTROL +8 8 INTERPOLATED VALUE +9 9 GOOD FOR OPERATIONAL USE; CAUTION; CHECK LITERATURE FOR OTHER USES +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33055.table b/definitions/bufr/tables/0/wmo/39/codetables/33055.table new file mode 100644 index 000000000..b757af0bb --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33055.table @@ -0,0 +1,13 @@ +11 11 OCEAN SIGMA-0 IS NOT AVAILABLE FOR WIND RETRIEVALS +12 12 BACKGROUND WIND IS NOT AVAILABLE +13 13 BACKGROUND MODEL DETECT LAND +14 14 BACKGROUND MODEL DETECT ICE +15 15 SIGMA-0 IS NOT LAND/ICE FREE +16 16 SIGMA-0 LAND CONTAMINATION +17 17 SIGMA-0 ICE CONTAMINATION +18 18 NOT ENOUGH AZIMUTHAL DIVERSITY +19 19 INVERSION IS NOT DONE +20 20 OVERALL WVC FLAG +21 21 INVERSION IS ATTEMPTED (FLAG IS SET) +22 22 RAINFLAG IS ATTEMPTED (FLAG IS SET) +23 23 RAIN IS DETECTED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33056.table b/definitions/bufr/tables/0/wmo/39/codetables/33056.table new file mode 100644 index 000000000..ce44ca922 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33056.table @@ -0,0 +1,13 @@ +8 8 ASCENDING +9 9 VV POLARISATION +10 10 FORE OF SPACECRAFT +11 11 LAND +12 12 POOR SIGMA-0 (SUMMARY) +13 13 INVALID SIGMA-0 (SUMMARY) +14 14 POOR BT +15 15 INVALID BT +16 16 LAND-SEA BOUNDARY +17 17 NEGATIVE SIGMA-0 +21 21 ICE +22 22 MISSING DATA AT A GIVEN LATITUDE-LONGITUDE FOR SEA-ICE FLAGGING PROCESS FOR 2 OR MORE DAYS +23 23 ICE-OCEAN CONTAMINATION diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33060.table b/definitions/bufr/tables/0/wmo/39/codetables/33060.table new file mode 100644 index 000000000..741430292 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33060.table @@ -0,0 +1,4 @@ +0 0 GOOD +1 1 BAD +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33066.table b/definitions/bufr/tables/0/wmo/39/codetables/33066.table new file mode 100644 index 000000000..a80e6ab9a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33066.table @@ -0,0 +1,4 @@ +20 20 GOOD WIND, BUT AN ALTERNATIVE CHANNEL USED FOR FEATURE TRACKING +21 21 GOOD WIND, BUT AN ALTERNATIVE SET OF CHANNELS USED FOR THE DETERMINATION OF CLOUD-TOP HEIGHT/AMV HEIGHT ASSIGNMENT +22 22 CORRELATION SURFACE CONSTRAINT FAILS +23 23 RESERVED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33070.table b/definitions/bufr/tables/0/wmo/39/codetables/33070.table new file mode 100644 index 000000000..8a0467b65 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33070.table @@ -0,0 +1,14 @@ +0 0 GOOD RETRIEVAL +1 1 BAD AEROSOL INFORMATION FLAG OR NOAA-16 RADIANCE ANOMALY +2 2 SOLAR ZENITH ANGLE GREATER THAN 84 DEGREES +3 3 380 NM RESIDUE GREATER THAN LIMIT +4 4 OZONE INCONSISTENCY +5 5 DIFFERENCE BETWEEN PROFILE OZONE AND STEP 3 TOTAL OZONE EXCEEDS THRESHOLD (SET TO 25 DU) +6 6 STEP 1 OZONE ITERATION DID NOT CONVERGE +7 7 ANY CHANNEL RESIDUE GREATER THAN 16 OR BAD RADIANCE +8 8 INSUFFICIENT PIXELS - NOT PROCESSED +9 9 FIRST GUESS GOOD - OZONE FORECAST DATA USED +10 10 HIGH CLOUD IN PIXEL - NOT PROCESSED +11 11 SUCCESSFUL OZONE RETRIEVAL +12 12 UNSUCCESSFUL OZONE RETRIEVAL +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33071.table b/definitions/bufr/tables/0/wmo/39/codetables/33071.table new file mode 100644 index 000000000..262a46c89 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33071.table @@ -0,0 +1,10 @@ +0 0 GOOD RETRIEVAL +1 1 SOLAR ZENITH ANGLE GREATER THAN 84 DEGREES +2 2 DIFFERENCE BETWEEN STEP 3 AND PROFILE TOTAL OZONE GREATER THAN LIMIT (25 DU) +3 3 AVERAGE FINAL RESIDUE FOR WAVELENGTHS USED IN RETRIEVAL GREATER THAN THRESHOLD +4 4 FINAL RESIDUE GREATER THAN 3 TIMES A PRIORI ERROR +5 5 DIFFERENCE BETWEEN RETRIEVED AND A PRIORI GREATER THAN 3 TIMES A PRIORI ERROR +6 6 NON-CONVERGENT SOLUTION +7 7 UPPER LEVEL PROFILE ANOMALY OR STRAY LIGHT ANOMALY +8 8 INITIAL RESIDUE GREATER THAN 18.0 N-VALUE UNITS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33072.table b/definitions/bufr/tables/0/wmo/39/codetables/33072.table new file mode 100644 index 000000000..fcc7f0972 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33072.table @@ -0,0 +1,18 @@ +0 0 GOOD RETRIEVAL +1 1 REFLECTIVITY OUT OF RANGE +2 2 LARGER PIXELS (NUMBER OF CROSS-TRACK PIXELS LESS THAN 32) OR BACKWARD SCANS ERROR +3 3 SOLAR ZENITH ANGLE GREATER THAN 88 DEGREES +4 4 LATITUDE/LONGITUDE OUT OF RANGE +5 5 VIEWING ZENITH ANGLE OR SOLAR ZENITH ANGLE OUT OF RANGE +6 6 STEP-ONE PROCESS FAILED IN GENERAL +7 7 FIRST GUESS OZONE OUT OF RANGE +8 8 TOO MANY ITERATIONS (EXCEED 8) +9 9 STEP-ONE RESIDUE CALCULATION FAILED +10 10 STEP-TWO PROCESS FAILED IN GENERAL +11 11 FIRST GUESS OZONE PROFILE OUT OF RANGE +12 12 STEP-TWO OZONE VALUE OUT OF RANGE +13 13 STEP-TWO RESIDUE CALCULATION FAILED +14 14 STEP-THREE PROCESS FAILED IN GENERAL +15 15 POLARIZATION CORRECTION ACCURACY ALERT +16 16 RADIANCE OR IRRADIANCE LESS OR EQUAL TO ZERO +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33075.table b/definitions/bufr/tables/0/wmo/39/codetables/33075.table new file mode 100644 index 000000000..23edae628 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33075.table @@ -0,0 +1,5 @@ +1 1 GAP IN RAW DATA RECORD (RDR) DATA DETECTED (I.E., MISSING SCAN(S) PRECEDING THE CURRENT SCAN) +2 2 RECORDED TIME IS NOT IN SEQUENCE (I.E., THE SCAN START TIME IS OUT OF SEQUENCE) +3 3 LAMBDA MONITORED CALCULATION CANNOT BE UPDATED +4 4 THE MEASURED TEMPERATURES OF ANY INSTRUMENT COMPONENTS (E.G., BEAM-SPLITTER, SCAN MIRROR, SCAN BAFFLE) ARE OUTSIDE THE ALLOWABLE RANGES +5 5 AT LEAST ONE OF THE MONITORED INSTRUMENT TEMPERATURES HAS DRIFTED MORE THAN A SPECIFIED TOLERANCE VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33076.table b/definitions/bufr/tables/0/wmo/39/codetables/33076.table new file mode 100644 index 000000000..7100c4a0d --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33076.table @@ -0,0 +1,2 @@ +1 1 LUNAR INTRUSION ON FIRST DEEP SPACE VIEW +2 2 LUNAR INTRUSION ON SECOND DEEP SPACE VIEW diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33077.table b/definitions/bufr/tables/0/wmo/39/codetables/33077.table new file mode 100644 index 000000000..769be02f2 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33077.table @@ -0,0 +1,12 @@ +1 1 DEGRADED SDR QUALITY +2 2 INVALID SDR QUALITY +3 3 INVALID SDR GEOLOCATION INFORMATION +4 4 DEGRADED RADIOMETRIC CALIBRATION +5 5 INVALID RADIOMETRIC CALIBRATION +6 6 DEGRADED SPECTRAL CALIBRATION +7 7 INVALID SPECTRAL CALIBRATION +8 8 FRINGE COUNT ERROR DETECTED AND CORRECTED +9 9 DAY/NIGHT INDICATOR +10 10 INVALID RDR DATA +11 11 SIGNIFICANT FRINGE COUNT ERROR DETECTED +12 12 BIT TRIM FAILED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33078.table b/definitions/bufr/tables/0/wmo/39/codetables/33078.table new file mode 100644 index 000000000..f3a218067 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33078.table @@ -0,0 +1,5 @@ +0 0 NOMINAL - ALTITUDE AND EPHEMERIS DATA AVAILABLE +1 1 MISSING AT MOST A SMALL GAP OF ALTITUDE AND EPHEMERIS DATA +2 2 MISSING MORE THAN A SMALL GAP OF ALTITUDE AND EPHEMERIS DATA, BUT NO MORE THAN A GRANULE BOUNDARY +3 3 MISSING MORE THAN A GRANULE BOUNDARY OF ALTITUDE AND EPHEMERIS DATA +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33079.table b/definitions/bufr/tables/0/wmo/39/codetables/33079.table new file mode 100644 index 000000000..08751431e --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33079.table @@ -0,0 +1,10 @@ +6 6 THE NO. 1-NO. 7 HEALTH CHECKS FAILED +7 7 THE NO. 8-NO. 15 HEALTH CHECKS FAILED +8 8 THE NO. 16-NO. 23 HEALTH CHECKS FAILED +9 9 THE NO. 24-NO. 31 HEALTH CHECKS FAILED +10 10 THE NO. 32-NO. 39 HEALTH CHECKS FAILED +11 11 THE NO. 40-NO. 47 HEALTH CHECKS FAILED +12 12 THE NO. 48-NO. 55 HEALTH CHECKS FAILED +13 13 THE NO. 56-NO. 63 HEALTH CHECKS FAILED +14 14 THE NO. 64-NO. 70 HEALTH CHECKS FAILED +15 15 QUADRATIC CORRECTION APPLIED TO THE RADIOMETRIC TRANSFER FUNCTION FOR NON-LINEARITY CORRECTION diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33080.table b/definitions/bufr/tables/0/wmo/39/codetables/33080.table new file mode 100644 index 000000000..a39dd47ea --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33080.table @@ -0,0 +1,13 @@ +7 7 DIVIDE-BY-ZERO CONDITION OR COMPUTATION LOOP FAILED TO CONVERGE IN THE K/KA AND V (KAV) BAND PRT +8 8 DIVIDE-BY-ZERO CONDITION OR COMPUTATION LOOP FAILED TO CONVERGE IN THE WG BAND PRT +9 9 DIVIDE-BY-ZERO CONDITION OR COMPUTATION LOOP FAILED TO CONVERGE IN THE K/KA, V, W, G BAND RECEIVER SHELF PRT K TEMPERATURE COMPUTATION +10 10 OUT OF RANGE CONDITION FOR THE K/KA AND V BAND PRT +11 11 OUT OF RANGE CONDITION FOR THE WG BAND PRT +12 12 KAV PRT TEMPERATURE INCONSISTENCY +13 13 WG PRT TEMPERATURE INCONSISTENCY +14 14 TIME SEQUENCE ERROR +15 15 DATA GAP - MISSING SCAN(S) PRECEDING THE CURRENT SCAN +16 16 KAV PRT SUFFICIENCY - INSUFFICIENT KAV PRT DATA ARE AVAILABLE +17 17 WG PRT SUFFICIENCY - INSUFFICIENT WG PRT DATA ARE AVAILABLE +18 18 SPACE VIEW ANTENNA POSITION ERROR +19 19 BLACKBODY ANTENNA POSITION ERROR diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33081.table b/definitions/bufr/tables/0/wmo/39/codetables/33081.table new file mode 100644 index 000000000..f8759e0ef --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33081.table @@ -0,0 +1,9 @@ +3 3 MOON IN SPACE VIEW +4 4 GAIN ERROR - THE LOWEST BLACKBODY COUNT IS SMALLER THAN OR EQUAL TO THE HIGHEST SPACE VIEW COUNT IN A SCAN +5 5 CALIBRATION WITH FEWER THAN PREFERRED SAMPLES +6 6 SPACE VIEW DATA SUFFICIENCY CHECK - INSUFFICIENT SPACE VIEW SAMPLES ARE AVAILABLE +7 7 BLACKBODY VIEW DATA SUFFICIENCY CHECK - INSUFFICIENT BLACKBODY VIEW SAMPLES ARE AVAILABLE +8 8 OUT OF RANGE CONDITION FOR THE SPACE VIEW +9 9 OUT OF RANGE CONDITION FOR THE BLACKBODY VIEW +10 10 SPACE VIEW INCONSISTENCY +11 11 BLACKBODY VIEW INCONSISTENCY diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33082.table b/definitions/bufr/tables/0/wmo/39/codetables/33082.table new file mode 100644 index 000000000..467157461 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33082.table @@ -0,0 +1,10 @@ +6 6 WITHIN SOUTH ATLANTIC ANOMALY +7 7 INVALID INPUT DATA (INDICATES THAT ANY OF THE SPACECRAFT EPHEMERIS OR ATTITUDE DATA ARE INVALID) +8 8 BAD POINTING (INDICATES THAT THE SENSOR LOS DOES NOT INTERSECT THE GEOID, IS NEAR THE LIMB, HAS INVALID SENSOR ANGLES OR OTHER SIMILAR CONDITION) +9 9 BAD TERRAIN (INDICATES THAT THE ALGORITHM COULD NOT OBTAIN A VALID TERRAIN VALUE) +10 10 INVALID SOLAR ANGLES +11 11 MISSING AT MOST A SMALL GAP OF ALTITUDE AND EPHEMERIS DATA +12 12 MISSING MORE THAN A SMALL GAP OF ALTITUDE AND EPHEMERIS DATA, BUT NO MORE THAN A GRANULE BOUNDARY +13 13 MISSING MORE THAN A GRANULE BOUNDARY OF ALTITUDE AND EPHEMERIS DATA +14 14 THE NUMBER OF ENCODER PULSE VALUES PER DELTA TIME IS NOT AS EXPECTED +15 15 SOLAR ECLIPSE DURING EARTH VIEW SCAN diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33083.table b/definitions/bufr/tables/0/wmo/39/codetables/33083.table new file mode 100644 index 000000000..ecd8a1abf --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33083.table @@ -0,0 +1,10 @@ +6 6 PIXEL IS AFFECTED BY RADIO-FREQUENCY INTERFERENCE +7 7 POOR CALIBRATION QUALITY DUE TO BAD SPACE VIEW OFFSETS, OBC VIEW OFFSETS, ETC. OR USE OF A PREVIOUS CALIBRATION VIEW +8 8 SATURATED PIXEL +9 9 MISSING DATA -DATA REQUIRED FOR CALIBRATION PROCESSING ARE NOT AVAILABLE FOR PROCESSING +10 10 CALIBRATED PIXEL RADIANCE OUT OF RANGE +11 11 CALIBRATED PIXEL REFLECTANCE OR EBBT OUT OF RANGE +12 12 THE MOON HAS CORRUPTED THE SPACE VIEW +13 13 SCAN DATA IS NOT PRESENT (NO VALID DATA) +14 14 QUALITY FOR THIS SCAN-LINE IS REDUCED. THE VALUE IS DETERMINED BY THE COMBINED NUMBER OF STEPS REQUIRED TO FIND A REPLACEMENT FOR THERMISTOR OR CALIBRATION SOURCE DATA +15 15 BAD DETECTOR diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33084.table b/definitions/bufr/tables/0/wmo/39/codetables/33084.table new file mode 100644 index 000000000..accb209c5 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33084.table @@ -0,0 +1,10 @@ +6 6 BULK SST OUTSIDE OF VALIDATION RANGE +7 7 SKIN SST OUTSIDE OF VALIDATION RANGE +8 8 SENSOR ZENITH ANGLE > 40 DEGREES (PIXEL IS NOT WITHIN 40 DEGREES OF NADIR AND THEREFORE IS NOT OF HIGH QUALITY) +9 9 DEGRADATION - HORIZONTAL CELL SIZE (HCS) > 1.3 KM (HCS > 1.3 KM, SWATH WIDTH > 1 700 KM, SENSOR ZENITH ANGLE > 50.3 DEGREES) +10 10 EXCLUSION: NO OCEAN IN PIXEL +11 11 DEGRADATION: AEROSOL OPTICAL THICKNESS (AOT) > 0.6 (AOT IN HORIZONTAL CELL > 0.6 ON THE SLANT PATH (AOT @550 NM)) +12 12 EXCLUSION: AOT > 1.0 (AOT IN HORIZONTAL CELL > 1.0 ON THE SLANT PATH (AOT @550 NM)) +13 13 SUN GLINT PRESENT IN PIXEL +14 14 ICE CONCENTRATION THRESHOLD EXCEEDED (SST NOT RETRIEVED DUE TO ICE CONCENTRATION EXCEEDING THRESHOLD IN SYSTEM SPEC) +15 15 THIN CIRRUS DETECTED IN PIXEL diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33085.table b/definitions/bufr/tables/0/wmo/39/codetables/33085.table new file mode 100644 index 000000000..844157b20 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33085.table @@ -0,0 +1,14 @@ +4 4 ANGSTROM EXPONENT IS OUTSIDE OF THE SYSTEM SPECIFICATION RANGE +5 5 EXCLUDED, ANGSTROM EXPONENT FOR AOT AT 550 NM < 0.15 +6 6 BRIGHT SURFACE IN CELL (IF OVER LAND), OR SHALLOW OR TURBID WATER IN CELL (IF OVER OCEAN) +7 7 LOW SUN, EXCLUDED, SOLAR ZENITH ANGLE > 80 DEGREES +8 8 LOW SUN, DEGRADED, 65 DEGREES < SOLAR ZENITH ANGLE =< 80 DEGREES +9 9 FIRE DETECTED IN CELL +10 10 SNOW/ICE IN CELL +11 11 CLOUD SHADOW IN CELL +12 12 SUN GLINT IN CELL +13 13 BAD SDR DATA PRESENT IN HORIZONTAL CELL (QUALITY OF AOT/APSP DEGRADED OR AOT/APSP NOT RETRIEVED DUE TO BAD SDR DATA IN HORIZONTAL CELL) +14 14 CIRRUS CONTAMINATION IN CELL +15 15 CLOUD ADJACENT TO CELL +16 16 CLOUD CONTAMINATION IN CELL +17 17 AOT IS OUTSIDE OF THE SYSTEM SPECIFICATION RANGE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33086.table b/definitions/bufr/tables/0/wmo/39/codetables/33086.table new file mode 100644 index 000000000..b7cda3212 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33086.table @@ -0,0 +1,5 @@ +0 0 NOT RETRIEVED +1 1 EXCLUDED +2 2 DEGRADED +3 3 HIGH QUALITY +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33087.table b/definitions/bufr/tables/0/wmo/39/codetables/33087.table new file mode 100644 index 000000000..f3000e258 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33087.table @@ -0,0 +1,10 @@ +0 0 LESS THAN OR EQUAL TO 10% +1 1 GREATER THAN 10% BUT LESS THAN OR EQUAL TO 20% +2 2 GREATER THAN 20% BUT LESS THAN OR EQUAL TO 30% +3 3 GREATER THAN 30% BUT LESS THAN OR EQUAL TO 40% +4 4 GREATER THAN 40% BUT LESS THAN OR EQUAL TO 50% +5 5 GREATER THAN 50% BUT LESS THAN OR EQUAL TO 60% +6 6 GREATER THAN 60% BUT LESS THAN OR EQUAL TO 70% +7 7 GREATER THAN 70% BUT LESS THAN OR EQUAL TO 80% +8 8 GREATER THAN 80% +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33088.table b/definitions/bufr/tables/0/wmo/39/codetables/33088.table new file mode 100644 index 000000000..744a5d31b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33088.table @@ -0,0 +1,12 @@ +6 6 SURFACE REFLECTIVITY OUT OF RANGE +7 7 RESIDUAL TOO LARGE +8 8 AEROSOL INDEX LIMIT EXCEEDED +9 9 SOLAR ECLIPSE PRESENT (ALL OR PART OF THE IFOV IS AFFECTED BY A SOLAR ECLIPSE, UMBRA OR PENUMBRA VIEWING) +10 10 SUN GLINT PRESENT WITHIN IFOV +11 11 SNOW OR ICE SURFACE IS WITHIN THE IFOV +12 12 SOLAR ZENITH ANGLE IN EXCLUDED (NIGHT) CONDITION (SOLAR ZENITH ANGLE >= 88 DEGREES) +13 13 SOLAR ZENITH ANGLE IN DEGRADED CONDITION (80 DEGREES =< SOLAR ZENITH ANGLE < 88 DEGREES) +14 14 SO2 INDEX > 6 DU (DEGRADED CONDITION) +15 15 RESIDUES ARE NOT CONSISTENT (INDICATES WHETHER THE RESIDUES FROM THE 22 WAVELENGTHS ARE CONSISTENT) +16 16 O3 TRIPLET SELECTION IS NOT CONSISTENT WITHIN RETRIEVAL (OZONE TRIPLET CONSISTENCY) +17 17 INPUT DATA QUALITY IS NOT GOOD diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33092.table b/definitions/bufr/tables/0/wmo/39/codetables/33092.table new file mode 100644 index 000000000..2a9557582 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33092.table @@ -0,0 +1,2 @@ +1 1 ALTIMETER OPERATING +2 2 MICROWAVE RADIOMETER (MWR) OPERATING diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33093.table b/definitions/bufr/tables/0/wmo/39/codetables/33093.table new file mode 100644 index 000000000..d872dc664 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33093.table @@ -0,0 +1,19 @@ +1 1 PATH DELAY QUALITY IS CONSIDERED POOR +2 2 GALILEO SATELLITES USED +3 3 GLONASS SATELLITES USED +4 4 GPS SATELLITES USED +5 5 BEIDOU SATELLITES USED +9 9 METEOROLOGICAL DATA APPLIED +10 10 ATMOSPHERIC LOADING CORRECTION APPLIED +11 11 OCEAN TIDE LOADING APPLIED +12 12 SECOND ORDER IONOSPHERE CORRECTIONS APPLIED +13 13 THIRD ORDER IONOSPHERE CORRECTIONS APPLIED +14 14 PPP SOLUTION +15 15 GRADIENTS APPLIED TO PATH DELAY +16 16 MULTIPATH CORRECTIONS APPLIED TO PATH DELAY +17 17 RESIDUAL APPLIED TO PATH DELAY +18 18 CLIMATE QUALITY DATA PROCESSING +19 19 RE-PROCESSING +20 20 POST-PROCESSING +21 21 NEAR-REAL TIME DATA PROCESSING +22 22 REAL TIME DATA PROCESSING diff --git a/definitions/bufr/tables/0/wmo/39/codetables/33094.table b/definitions/bufr/tables/0/wmo/39/codetables/33094.table new file mode 100644 index 000000000..047801771 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/33094.table @@ -0,0 +1,8 @@ +16 16 NON-OCEAN +17 17 LUNAR OR SOLAR INTRUSION +18 18 SPACECRAFT MANEUVER +19 19 COLD CALIBRATION CONSISTENCY +20 20 WARM CALIBRATION CONSISTENCY +21 21 DESCENDING +22 22 NIGHT +23 23 PAYLOAD REAR ORIENTATION diff --git a/definitions/bufr/tables/0/wmo/39/codetables/35000.table b/definitions/bufr/tables/0/wmo/39/codetables/35000.table new file mode 100644 index 000000000..8c57023e3 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/35000.table @@ -0,0 +1 @@ +1023 1023 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/35001.table b/definitions/bufr/tables/0/wmo/39/codetables/35001.table new file mode 100644 index 000000000..bba0c812e --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/35001.table @@ -0,0 +1,4 @@ +0 0 REAL TIME +1 1 NEAR-REAL TIME +2 2 NON-REAL TIME +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/35030.table b/definitions/bufr/tables/0/wmo/39/codetables/35030.table new file mode 100644 index 000000000..5b83f8b81 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/35030.table @@ -0,0 +1,10 @@ +0 0 NO DISCREPANCIES +1 1 NON-COMPLIANCE WITH STANDARD AND RECOMMENDED PRACTICES AND PROCEDURES INCLUDING THOSE OF MONITORING +2 2 CATALOGUES OF METEOROLOGICAL BULLETINS NOT UPDATED IN A TIMELY MANNER +3 3 INCORRECT ROUTING DIRECTORIES +4 4 LACK OF FLEXIBILITY IN THE ROUTING ARRANGEMENTS +5 5 DEFICIENCIES IN THE OPERATION OF GTS CENTRES AND CIRCUITS +6 6 LOSS OF DATA OR DELAYS IN RELAYING DATA ON THE GTS +7 7 ROUTING OF DATA DIFFERENT FROM THE ROUTING PROVIDED IN THE PLAN +8 8 VARIOUS MALPRACTICES +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/35031.table b/definitions/bufr/tables/0/wmo/39/codetables/35031.table new file mode 100644 index 000000000..bdd705ddd --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/35031.table @@ -0,0 +1,20 @@ +1 1 SUFFICIENT AND ALL OF ACCEPTABLE QUALITY +2 2 SUFFICIENT BUT PARTLY OF ACCEPTABLE QUALITY +3 3 INSUFFICIENT BUT ALL OF ACCEPTABLE QUALITY +4 4 INSUFFICIENT AND OF UNACCEPTABLE QUALITY +5 5 SOME MESSAGES NOT COMPLETE +6 6 SUSPECT OR WRONGLY CODED GROUPS COULD NOT BE INTERPRETED CONFIDENTLY +7 7 GROSS CODING ERRORS +8 8 TRANSMISSION SEQUENTIAL ORDER NOT OBSERVED +9 9 REPORT COMPLETELY GARBLED AND THUS DISCARDED +10 10 DEFICIENCIES IDENTIFIED AND RECTIFIED +11 11 DEFICIENCIES IDENTIFIED BUT NOT RECTIFIED +12 12 DEFICIENCIES NOT IDENTIFIED +13 13 MEASURING ERRORS +14 14 MUTUAL INCONSISTENCY +15 15 TEMPORAL INCONSISTENCY +16 16 FORECAST ERROR +17 17 BIAS +18 18 IMPROVE SYSTEM OF QUALITY CONTROL +19 19 EXPAND TRAINING PROGRAMMES +127 127 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/35032.table b/definitions/bufr/tables/0/wmo/39/codetables/35032.table new file mode 100644 index 000000000..7f53a05f9 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/35032.table @@ -0,0 +1,10 @@ +1 1 DATA GROUPS MISSING DUE TO RADIO FADING +2 2 DATA GROUPS MISSING DUE TO OUTAGE OF CENTRE +3 3 DATA GROUPS MISSING DUE TO OUTAGE OF CIRCUIT +4 4 NON-IMPLEMENTATION OR MAINTENANCE OF REQUIRED RBSN DENSITY +5 5 SHORTAGE OF QUALIFIED STAFF TO MAN STATIONS +6 6 LACK OF CONSUMABLES +7 7 INSTRUMENT FAILURE +8 8 NON-ADHERENCE TO TELECOMMUNICATION PROCEDURES +9 9 SOME OBSERVING PROGRAMMES CEASED +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/35033.table b/definitions/bufr/tables/0/wmo/39/codetables/35033.table new file mode 100644 index 000000000..86e9592ef --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/35033.table @@ -0,0 +1,12 @@ +1 1 NO DEFICIENCY +2 2 OBSERVATIONS NOT MADE REGULARLY +3 3 OBSERVATIONS NOT MADE AT RIGHT TIME +4 4 OBSERVATIONS MADE BUT NOT DISSEMINATED +5 5 OBSERVATIONS MADE AND SENT TO INCORRECT USERS +6 6 COLLECTION NOT RECEIVED +7 7 COLLECTION TRANSMITTED LATE +8 8 COLLECTION NOT TRANSMITTED +9 9 DIFFICULTIES IN HF PROPAGATION AND SELECTION OF SUITABLE FREQUENCY +10 10 DIFFICULTIES IN MAINTENANCE OF COMMUNICATION EQUIPMENT AT REMOTE STATIONS +11 11 NO ALTERNATIVE ARRANGEMENT FOR ROUTING METEOROLOGICAL OBSERVATION +123 123 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/35034.table b/definitions/bufr/tables/0/wmo/39/codetables/35034.table new file mode 100644 index 000000000..7297664cf --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/35034.table @@ -0,0 +1,7 @@ +1 1 SLIGHT IMPROVEMENT +2 2 SIGNIFICANT IMPROVEMENT +3 3 MOST SIGNIFICANT IMPROVEMENT +4 4 STEADY +5 5 DECREASING +6 6 EFFORTS REQUIRED TO IMPROVE NIGHT-TIME OBSERVATIONS +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/35035.table b/definitions/bufr/tables/0/wmo/39/codetables/35035.table new file mode 100644 index 000000000..0fce6ddb7 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/35035.table @@ -0,0 +1,20 @@ +0 0 RESERVED +1 1 BALLOON BURST +2 2 BALLOON FORCED DOWN BY ICING +3 3 LEAKING OR FLOATING BALLOON +4 4 WEAK OR FADING SIGNAL +5 5 BATTERY FAILURE +6 6 GROUND EQUIPMENT FAILURE +7 7 SIGNAL INTERFERENCE +8 8 RADIOSONDE FAILURE +9 9 EXCESSIVE MISSING DATA FRAMES +10 10 RESERVED +11 11 EXCESSIVE MISSING TEMPERATURE +12 12 EXCESSIVE MISSING PRESSURE +13 13 USER TERMINATED +14 14 SUDDEN LOSS OF SIGNAL +15 15 TRACKING LOST +16 16 INCREASING PRESSURE +17 17 INVALID AND/OR MISSED DATA TIME LIMITS EXCEEDED +30 30 OTHER +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40005.table b/definitions/bufr/tables/0/wmo/39/codetables/40005.table new file mode 100644 index 000000000..045a4f1b1 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40005.table @@ -0,0 +1,5 @@ +1 1 SOIL MOISTURE BETWEEN -20% AND 0% +2 2 SOIL MOISTURE BETWEEN 100% AND 120% +3 3 CORRECTION OF WET BACKSCATTER REFERENCE +4 4 CORRECTION OF DRY BACKSCATTER REFERENCE +5 5 CORRECTION OF VOLUME SCATTERING IN SAND diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40006.table b/definitions/bufr/tables/0/wmo/39/codetables/40006.table new file mode 100644 index 000000000..d53382eff --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40006.table @@ -0,0 +1,8 @@ +1 1 NOT SOIL +2 2 SENSITIVITY TO SOIL MOISTURE BELOW LIMIT +3 3 AZIMUTHAL NOISE ABOVE LIMIT +4 4 BACKSCATTER FORE-AFT BEAM OUT OF RANGE +5 5 SLOPE MID-FORE BEAM OUT OF RANGE +6 6 SLOPE MID-AFT BEAM OUT OF RANGE +7 7 SOIL MOISTURE BELOW -20% +8 8 SOIL MOISTURE ABOVE 120% diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40011.table b/definitions/bufr/tables/0/wmo/39/codetables/40011.table new file mode 100644 index 000000000..ddc7e8672 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40011.table @@ -0,0 +1,4 @@ +1 1 MEAN SEA-SURFACE (MSS) INTERPOLATION FLAG +2 2 OCEAN TIDE SOLUTION 1 INTERPOLATION FLAG (0 = 4 POINTS OVER OCEAN, 1 = LESS THAN 4 POINTS) +3 3 OCEAN TIDE SOLUTION 2 INTERPOLATION FLAG (0 = 4 POINTS OVER OCEAN, 1 = LESS THAN 4 POINTS) +4 4 METEOROLOGICAL DATA INTERPOLATION FLAG (0 = 4 POINTS OVER OCEAN, 1 = LESS THAN 4 POINTS) diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40012.table b/definitions/bufr/tables/0/wmo/39/codetables/40012.table new file mode 100644 index 000000000..d8ce14d86 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40012.table @@ -0,0 +1,3 @@ +1 1 18.7 GHZ BRIGHTNESS TEMPERATURE +2 2 23.8 GHZ BRIGHTNESS TEMPERATURE +3 3 34 GHZ BRIGHTNESS TEMPERATURE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40013.table b/definitions/bufr/tables/0/wmo/39/codetables/40013.table new file mode 100644 index 000000000..766e93f79 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40013.table @@ -0,0 +1,5 @@ +0 0 INTERPOLATION WITH NO GAP BETWEEN JMR DATA +1 1 INTERPOLATION WITH GAPS BETWEEN JMR DATA +2 2 EXTRAPOLATION OF JMR DATA +3 3 FAILURE OF EXTRAPOLATION AND INTERPOLATION +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40020.table b/definitions/bufr/tables/0/wmo/39/codetables/40020.table new file mode 100644 index 000000000..fa1d1f5c5 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40020.table @@ -0,0 +1,16 @@ +1 1 NZPD AND COMPLEX CALIBRATION ERROR +2 2 BAND 3 AFFECTED BY SPIKE +3 3 BAND 3 AFFECTED BY SATURATION +4 4 BAND 2 AFFECTED BY SPIKE +5 5 BAND 1 AFFECTED BY SPIKE +6 6 OVERFLOW/UNDER FLOW +7 7 ON-BOARD PROCESSING ERROR +8 8 SPECTRAL CALIBRATION ERROR +9 9 RADIOMETRIC CALIBRATION ERROR +10 10 MISSING AVHRR DATA +11 11 MISSING IIS DATA +12 12 MISSING SOUNDER DATA +13 13 GQISFLAGQUAL SUMMARY FLAG FOR ALL BANDS +14 14 ON-GROUND PROCESSING ERROR +15 15 INTER-CALIBRATION ERROR IASI/AVHRR +16 16 SPARE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40023.table b/definitions/bufr/tables/0/wmo/39/codetables/40023.table new file mode 100644 index 000000000..2e4cbfb69 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40023.table @@ -0,0 +1,4 @@ +1 1 BAND SEQUENCE (0 = 3KU_1C_3KU, 1 = 2KU_1C_2KU) +2 2 C BAND FREQUENCY (0 = 320 MHZ, 1 = 100 MHZ) +3 3 C BAND STATUS (0 = ON, 1 = OFF) +4 4 KU BAND STATUS (0 = ON, 1 = OFF) diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40024.table b/definitions/bufr/tables/0/wmo/39/codetables/40024.table new file mode 100644 index 000000000..c8421e5af --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40024.table @@ -0,0 +1,5 @@ +0 0 2 MAPS AVAILABLE (6 HOURS APART) +1 1 2 MAPS AVAILABLE (> 6 HOURS APART) +2 2 1 MAP AVAILABLE; DATA EXTRAPOLATED +3 3 NO MAPS USED +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40025.table b/definitions/bufr/tables/0/wmo/39/codetables/40025.table new file mode 100644 index 000000000..741430292 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40025.table @@ -0,0 +1,4 @@ +0 0 GOOD +1 1 BAD +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40028.table b/definitions/bufr/tables/0/wmo/39/codetables/40028.table new file mode 100644 index 000000000..e094f29dc --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40028.table @@ -0,0 +1,16 @@ +0 0 GOOD DATA +1 1 POSSIBLE SUN GLINT +2 2 POSSIBLE RADIO-FREQUENCY INTERFERENCE +3 3 DEGRADED GEOLOCATION DATA +4 4 DATA CORRECTED FOR WARM LOAD INTRUSION +5 5 SCAN BLANKING ON +6 6 DATA IS MISSING FROM FILE OR UNREADABLE +7 7 UNPHYSICAL BRIGHTNESS TEMPERATURE +8 8 ERROR IN GEOLOCATION DATA +9 9 DATA MISSING IN ONE CHANNEL +10 10 DATA MISSING IN MULTIPLE CHANNELS +11 11 LAT/LON VALUES ARE OUT OF RANGE +12 12 NON-NORMAL STATUS MODES +13 13 DISTANCE TO CORRESPONDING LOW FREQUENCY PIXEL > 7 KM +14 14 RESERVED +15 15 MISSING VALUE (NO QUALITY INFORMATION AVAILABLE) diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40036.table b/definitions/bufr/tables/0/wmo/39/codetables/40036.table new file mode 100644 index 000000000..9a5418e3a --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40036.table @@ -0,0 +1,3 @@ +0 0 CLEAR +1 1 CLOUD +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40043.table b/definitions/bufr/tables/0/wmo/39/codetables/40043.table new file mode 100644 index 000000000..859484624 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40043.table @@ -0,0 +1,4 @@ +0 0 THE PLATFORM IS NOT UNDERGOING A MANOEUVRE +1 1 THE PLATFORM IS UNDERGOING A MANOEUVRE, NOMINAL PROCESSING +2 2 THE PLATFORM IS UNDERGOING A MANOEUVRE, NO PROCESSING +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40045.table b/definitions/bufr/tables/0/wmo/39/codetables/40045.table new file mode 100644 index 000000000..08b600150 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40045.table @@ -0,0 +1,4 @@ +1 1 CLOUD PRODUCTS RETRIEVED WITH THE CHI-SQUARED METHOD +2 2 CLOUD PRODUCTS RETRIEVED WITH THE CO2-SLICING +3 3 HEIGHT ASSIGNMENT PERFORMED WITH STATISTICAL FIRST GUESS RETRIEVAL +4 4 HEIGHT ASSIGNMENT PERFORMED WITH NWP FORECASTS diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40046.table b/definitions/bufr/tables/0/wmo/39/codetables/40046.table new file mode 100644 index 000000000..31077db10 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40046.table @@ -0,0 +1,5 @@ +0 0 THE IASI IFOV IS CLEAR +1 1 SMALL CLOUD CONTAMINATION POSSIBLE +2 2 THE IASI IFOV IS PARTIALLY COVERED BY CLOUDS +3 3 HIGH OR FULL CLOUD COVERAGE +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40047.table b/definitions/bufr/tables/0/wmo/39/codetables/40047.table new file mode 100644 index 000000000..f7f29c7b8 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40047.table @@ -0,0 +1,4 @@ +0 0 THE MEASUREMENTS AND SIDE INFORMATION ARE AVAILABLE AND OF GOOD QUALITY FOR L2 PROCESSING +1 1 THE L1C PRODUCTS ARE OF DEGRADED QUALITY ACCORDING TO L1C FLAGS, NO L2 PROCESSING +2 2 QUALITY CONTROL INDICATES THAT THE L1C DATA ARE OF DEGRADED QUALITY (NOT INDICATED BY THE IASI L1C FLAGS), NO L2 PROCESSING +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40048.table b/definitions/bufr/tables/0/wmo/39/codetables/40048.table new file mode 100644 index 000000000..ee5d4fe0f --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40048.table @@ -0,0 +1,4 @@ +0 0 THE EXPECTED AMSU MEASUREMENTS ARE AVAILABLE, OF GOOD QUALITY AND COLLOCATED WITH IASI FOR PROCESSING +1 1 AMSU-A DATA ARE AVAILABLE BUT OF DEGRADED QUALITY (ACCORDING TO AMSU L1 FLAGS OR QC TESTS) AND NOT USED FOR PROCESSING +2 2 NO COINCIDENT (TIME AND SPACE) AMSU MEASUREMENTS AVAILABLE FOR PROCESSING +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40049.table b/definitions/bufr/tables/0/wmo/39/codetables/40049.table new file mode 100644 index 000000000..19d1fe9d8 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40049.table @@ -0,0 +1,12 @@ +4 4 IASI CLOUD OPTICAL THICKNESS INDICATES A CLOUD +5 5 IASI CLOUD OPTICAL THICKNESS COMPUTED +6 6 AVHRR HETEROGENEITY TEST INDICATES A CLOUD +7 7 AVHRR HETEROGENEITY TEST EXECUTED +8 8 IASI-AVHRR ANN CLOUD TEST INDICATES A CLOUD +9 9 IASI-AVHRR ANN CLOUD TEST EXECUTED +10 10 AVHRR INTEGRATED CLOUD FRACTION INDICATES A CLOUD +11 11 AVHRR INTEGRATED CLOUD FRACTION ASSESSED +12 12 AMSU CLOUD TEST INDICATES A CLOUD +13 13 AMSU CLOUD TEST EXECUTED +14 14 IASI WINDOW CLOUD TEST INDICATES A CLOUD +15 15 IASI WINDOW CLOUD TEST EXECUTED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40050.table b/definitions/bufr/tables/0/wmo/39/codetables/40050.table new file mode 100644 index 000000000..503ab1443 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40050.table @@ -0,0 +1,3 @@ +5 5 MHS INCLUDED +6 6 AMSU INCLUDED +7 7 IASI INCLUDED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40051.table b/definitions/bufr/tables/0/wmo/39/codetables/40051.table new file mode 100644 index 000000000..60542bc0f --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40051.table @@ -0,0 +1,8 @@ +0 0 OPTIMAL ESTIMATION METHODS (OEM) NOT ATTEMPTED +1 1 OEM ABORTED BECAUSE FIRST GUESS RESIDUALS TOO HIGH +2 2 THE MINIMIZATION DID NOT CONVERGE, SOUNDING REJECTED +3 3 THE MINIMIZATION DID NOT CONVERGE, SOUNDING ACCEPTED +4 4 THE MINIMIZATION CONVERGED BUT SOUNDING REJECTED +5 5 THE MINIMIZATION CONVERGED, SOUNDING ACCEPTED +6 6 RESERVED +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40052.table b/definitions/bufr/tables/0/wmo/39/codetables/40052.table new file mode 100644 index 000000000..1f48809c0 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40052.table @@ -0,0 +1,4 @@ +4 4 SUPERSATURATION CONDITIONS IN THE OEM RETRIEVAL +5 5 SUPERADIABATIC CONDITIONS IN THE OEM RETRIEVAL +6 6 SUPERSATURATION CONDITIONS IN THE FIRST GUESS +7 7 SUPERADIABATIC CONDITIONS IN THE FIRST GUESS diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40054.table b/definitions/bufr/tables/0/wmo/39/codetables/40054.table new file mode 100644 index 000000000..a034bc322 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40054.table @@ -0,0 +1,12 @@ +1 1 AN ERROR HAS BEEN DETECTED +2 2 MESSAGE FROM L1 +3 3 MESSAGE FROM L2 +4 4 MESSAGE FROM ANCILLARY DATA +5 5 MESSAGE FROM FITTING PROCEDURE +6 6 FILE OPENING +7 7 FILE READING +8 8 QUALITY FLAG +9 9 LEVEL 2 FROM LINEAR REGRESSION(F_QUAL), REPORT A PIXEL WHERE L2 ARE NOT FULLY TRUSTED +10 10 EMPTY FIELD OR DATA +11 11 MISSING SURFACE PRESSURE VALUE +12 12 RADIANCE FILTERING diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40055.table b/definitions/bufr/tables/0/wmo/39/codetables/40055.table new file mode 100644 index 000000000..7aa99d433 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40055.table @@ -0,0 +1,20 @@ +1 1 RADIANCE FILTERING +2 2 POLAR REGIONS +3 3 LOCATION IN THE NIGHT +4 4 NEGATIVE ALTITUDE SURFACE BELOW MEAN SEA LEVEL +5 5 CLOUD COVERED SCENE +6 6 SCENE ABOVE THE SEA +7 7 SCENE ABOVE DESERT +8 8 SKIN TEMPERATURE +9 9 SKIN TEMPERATURE DIFFERENTIAL +10 10 SPECTRAL LINE CONTRAST TOO WEAK +11 11 MAXIMUM NUMBER OF ITERATIONS EXCEEDED +12 12 NEGATIVE PARTIAL COLUMNS +13 13 MATRIX ILL CONDITIONED +14 14 FIT DIVERGED +15 15 ERROR IN GNU SCIENTIFIC LIBRARY (GSL) USAGE +16 16 RESIDUALS BIASED +17 17 RESIDUALS SLOPED +18 18 RESIDUALS ROOT MEAN SQUARE (RMS) ERROR IS LARGE +19 19 WEIRD AVERAGING KERNELS +20 20 ICE PRESENCE DETECTED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40056.table b/definitions/bufr/tables/0/wmo/39/codetables/40056.table new file mode 100644 index 000000000..f4a31d340 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40056.table @@ -0,0 +1,4 @@ +0 0 USE NOT RECOMMENDED +1 1 USE WITH CAUTION +2 2 BEST QUALITY +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40057.table b/definitions/bufr/tables/0/wmo/39/codetables/40057.table new file mode 100644 index 000000000..c8a50e778 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40057.table @@ -0,0 +1,30 @@ +1 1 AN ERROR HAS BEEN DETECTED +2 2 MESSAGE FROM L1 +3 3 MESSAGE FROM L2 +4 4 MESSAGE FROM ANCILLARY DATA +5 5 MESSAGE FROM FITTING PROCEDURE +6 6 RESERVED +7 7 BAD L1 OR L2 FLAG RAISED +8 8 LEVEL 2 NOT FULLY TRUSTED +9 9 MISSING TEMPERATURE OR HUMIDITY LEVELS IN THE VERTICAL PROFILE +10 10 MISSING SURFACE PRESSURE VALUE +11 11 RADIANCE FILTERING +12 12 POLAR REGIONS +13 13 LOCATION IN THE NIGHT +14 14 NEGATIVE ALTITUDE +15 15 CLOUD COVERED SCENE +16 16 SCENE ABOVE THE SEA +17 17 SCENE ABOVE DESERT +18 18 MISSING SKIN TEMPERATURE +19 19 RETRIEVED SKIN TEMPERATURE TOO DIFFERENT FROM MODEL +20 20 SPECTRAL LINE CONTRAST TOO WEAK +21 21 MAXIMUM NUMBER OF ITERATIONS EXCEEDS +22 22 NEGATIVE PARTIAL COLUMNS +23 23 MATRIX ILL CONDITIONED +24 24 FIT DIVERGED +25 25 ERROR IN GSL USAGE +26 26 RESIDUALS BIASED +27 27 RESIDUALS SLOPED +28 28 RESIDUALS RMS ERROR IS LARGE +29 29 WEIRD AVERAGING KERNELS +30 30 ICE PRESENCE DETECTED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40068.table b/definitions/bufr/tables/0/wmo/39/codetables/40068.table new file mode 100644 index 000000000..0b1484e0b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40068.table @@ -0,0 +1,4 @@ +0 0 VALUES CALCULATED WITH IASI L2 +1 1 PRESSURE AND TEMPERATURE PROFILES MISSING IN IASI L2 DATA; MODEL/FORECAST DATA USED INSTEAD +2 2 BEST QUALITY +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/40074.table b/definitions/bufr/tables/0/wmo/39/codetables/40074.table new file mode 100644 index 000000000..911a95245 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/40074.table @@ -0,0 +1,10 @@ +1 1 INCOMPATIBILITY OF A SCAN ANGLE FOR ELECTROENCEPHALOGRAM +2 2 CALIBRATION FAILURE (LIMIT OF BLACK BODY TEMPERATURE REACHED, NOT ENOUGH SOURCES FOR INTERFEROMETRY, ETC.) +3 3 GEOLOCATION EXECUTED TAKING INTO ACCOUNT THE ORIENTATION OF THE SPACECRAFT AND USING THE STAR CATALOGUE +4 4 HIGH LEVEL OF CRYOGENIC SEDIMENT REACHED, REQUIRING OUTGASSING OF THE RADIATION COOLER. SET WHEN NESR LEVEL OF THE ICE COVER THRESHOLD CROSSED +5 5 INTERFEROMETRY PACKAGE FLAG +6 6 GENERAL ACCURACY FLAG +7 7 NOISE PRESENT DURING THE INTERFEROMETRY +8 8 OUTGASSING OF THE RADIATION COOLER +9 9 FLAG PRECEDING THE FIRST 24 HOURS/DAY MARK (SET TO ON AS A RULE) +10 10 TELEMETRY PACKAGE FLAG diff --git a/definitions/bufr/tables/0/wmo/39/codetables/4059.table b/definitions/bufr/tables/0/wmo/39/codetables/4059.table new file mode 100644 index 000000000..91fc6f4f9 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/4059.table @@ -0,0 +1,5 @@ +1 1 0000 UTC +2 2 0600 UTC +3 3 1200 UTC +4 4 1800 UTC +5 5 OTHER HOURS diff --git a/definitions/bufr/tables/0/wmo/39/codetables/4080.table b/definitions/bufr/tables/0/wmo/39/codetables/4080.table new file mode 100644 index 000000000..84caf2108 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/4080.table @@ -0,0 +1,6 @@ +0 0 SPOT VALUES +1 1 LESS THAN 15 MINUTES +2 2 FROM 15 TO 45 MINUTES +3 3 MORE THAN 45 MINUTES +9 9 DATA NOT AVAILABLE +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/42004.table b/definitions/bufr/tables/0/wmo/39/codetables/42004.table new file mode 100644 index 000000000..15a91da16 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/42004.table @@ -0,0 +1,3 @@ +0 0 WAVE DIRECTION RESOLVED +1 1 180-DEGREE AMBIGUITY NOT RESOLVED +15 15 MISSING diff --git a/definitions/bufr/tables/0/wmo/39/codetables/5069.table b/definitions/bufr/tables/0/wmo/39/codetables/5069.table new file mode 100644 index 000000000..24c2f5bbb --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/5069.table @@ -0,0 +1,4 @@ +0 0 MIE +1 1 RAYLEIGH +2 2 CROSS POLAR +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8001.table b/definitions/bufr/tables/0/wmo/39/codetables/8001.table new file mode 100644 index 000000000..6210da3b3 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8001.table @@ -0,0 +1,6 @@ +1 1 SURFACE +2 2 STANDARD LEVEL +3 3 TROPOPAUSE LEVEL +4 4 MAXIMUM WIND LEVEL +5 5 SIGNIFICANT LEVEL, TEMPERATURE AND/OR RELATIVE HUMIDITY +6 6 SIGNIFICANT LEVEL, WIND diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8002.table b/definitions/bufr/tables/0/wmo/39/codetables/8002.table new file mode 100644 index 000000000..6ab4fd72d --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8002.table @@ -0,0 +1,19 @@ +0 0 OBSERVING RULES FOR BASE OF LOWEST CLOUD AND CLOUD TYPES OF FM 12 SYNOP AND FM 13 SHIP APPLY +1 1 FIRST NON-CUMULONIMBUS SIGNIFICANT LAYER +2 2 SECOND NON-CUMULONIMBUS SIGNIFICANT LAYER +3 3 THIRD NON-CUMULONIMBUS SIGNIFICANT LAYER +4 4 CUMULONIMBUS LAYER +5 5 CEILING +6 6 CLOUDS NOT DETECTED BELOW THE FOLLOWING HEIGHT(S) +7 7 LOW CLOUD +8 8 MIDDLE CLOUD +9 9 HIGH CLOUD +10 10 CLOUD LAYER WITH BASE BELOW AND TOP ABOVE THE STATION +11 11 CLOUD LAYER WITH BASE AND TOP BELOW THE STATION LEVEL +20 20 NO CLOUDS DETECTED BY THE CLOUD DETECTION SYSTEM +21 21 FIRST INSTRUMENT DETECTED CLOUD LAYER +22 22 SECOND INSTRUMENT DETECTED CLOUD LAYER +23 23 THIRD INSTRUMENT DETECTED CLOUD LAYER +24 24 FOURTH INSTRUMENT DETECTED CLOUD LAYER +62 62 VALUE NOT APPLICABLE +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8003.table b/definitions/bufr/tables/0/wmo/39/codetables/8003.table new file mode 100644 index 000000000..373135140 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8003.table @@ -0,0 +1,12 @@ +0 0 SURFACE +1 1 BASE OF SATELLITE SOUNDING +2 2 CLOUD TOP +3 3 TROPOPAUSE +4 4 PRECIPITABLE WATER +5 5 SOUNDING RADIANCES +6 6 MEAN TEMPERATURES +7 7 OZONE +8 8 LOW CLOUD +9 9 MED CLOUD +10 10 HIGH CLOUD +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8004.table b/definitions/bufr/tables/0/wmo/39/codetables/8004.table new file mode 100644 index 000000000..2a8925eeb --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8004.table @@ -0,0 +1,6 @@ +2 2 UNSTEADY (UNS) +3 3 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR) +4 4 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW) +5 5 ASCENDING (ASC) +6 6 DESCENDING (DES) +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8005.table b/definitions/bufr/tables/0/wmo/39/codetables/8005.table new file mode 100644 index 000000000..587ea9924 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8005.table @@ -0,0 +1,7 @@ +0 0 RESERVED +1 1 STORM CENTRE +2 2 OUTER LIMIT OR EDGE OF STORM +3 3 LOCATION OF MAXIMUM WIND +4 4 LOCATION OF THE STORM IN THE PERTURBED ANALYSIS +5 5 LOCATION OF THE STORM IN THE ANALYSIS +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8006.table b/definitions/bufr/tables/0/wmo/39/codetables/8006.table new file mode 100644 index 000000000..9f56c628d --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8006.table @@ -0,0 +1,8 @@ +1 1 SURFACE +2 2 STANDARD LEVEL +3 3 TROPOPAUSE LEVEL +4 4 PROMINENT MAXIMUM LEVEL +5 5 PROMINENT MINIMUM LEVEL +6 6 MINIMUM PRESSURE LEVEL +7 7 RESERVED +8 8 LEVEL OF UNDETERMINED SIGNIFICANCE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8007.table b/definitions/bufr/tables/0/wmo/39/codetables/8007.table new file mode 100644 index 000000000..3e4d2cc3c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8007.table @@ -0,0 +1,5 @@ +0 0 POINT +1 1 LINE +2 2 AREA +3 3 VOLUME +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8008.table b/definitions/bufr/tables/0/wmo/39/codetables/8008.table new file mode 100644 index 000000000..2714b5aa2 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8008.table @@ -0,0 +1,8 @@ +1 1 SURFACE +2 2 STANDARD LEVEL +3 3 TROPOPAUSE LEVEL +4 4 LEVEL OF BETA RADIATION MAXIMUM +5 5 LEVEL OF GAMMA RADIATION MAXIMUM +6 6 MINIMUM PRESSURE LEVEL +7 7 RESERVED +8 8 LEVEL OF UNDETERMINED SIGNIFICANCE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8009.table b/definitions/bufr/tables/0/wmo/39/codetables/8009.table new file mode 100644 index 000000000..b03398230 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8009.table @@ -0,0 +1,16 @@ +0 0 LEVEL FLIGHT, ROUTINE OBSERVATION, UNSTEADY +1 1 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED, UNSTEADY +2 2 UNSTEADY (UNS) +3 3 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR) +4 4 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW) +5 5 ASCENDING (ASC) +6 6 DESCENDING (DES) +7 7 ASCENDING, OBSERVATION INTERVALS SELECTED BY TIME INCREMENTS +8 8 ASCENDING, OBSERVATION INTERVALS SELECTED BY TIME INCREMENTS, UNSTEADY +9 9 ASCENDING, OBSERVATION INTERVALS SELECTED BY PRESSURE INCREMENTS +10 10 ASCENDING, OBSERVATION INTERVALS SELECTED BY PRESSURE INCREMENTS, UNSTEADY +11 11 DESCENDING, OBSERVATION INTERVALS SELECTED BY TIME INCREMENTS +12 12 DESCENDING, OBSERVATION INTERVALS SELECTED BY TIME INCREMENTS, UNSTEADY +13 13 DESCENDING, OBSERVATION INTERVALS SELECTED BY PRESSURE INCREMENTS +14 14 DESCENDING, OBSERVATION INTERVALS SELECTED BY PRESSURE INCREMENTS, UNSTEADY +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8010.table b/definitions/bufr/tables/0/wmo/39/codetables/8010.table new file mode 100644 index 000000000..3c5fe71f3 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8010.table @@ -0,0 +1,14 @@ +0 0 RESERVED +1 1 BARE SOIL +2 2 BARE ROCK +3 3 LAND GRASS COVER +4 4 WATER (LAKE, SEA) +5 5 FLOOD WATER UNDERNEATH +6 6 SNOW +7 7 ICE +8 8 RUNWAY OR ROAD +9 9 SHIP OR PLATFORM DECK IN STEEL +10 10 SHIP OR PLATFORM DECK IN WOOD +11 11 SHIP OR PLATFORM DECK PARTLY COVERED WITH RUBBER MAT +12 12 BUILDING ROOF +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8011.table b/definitions/bufr/tables/0/wmo/39/codetables/8011.table new file mode 100644 index 000000000..e7a822114 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8011.table @@ -0,0 +1,27 @@ +0 0 QUASI-STATIONARY FRONT AT THE SURFACE +1 1 QUASI-STATIONARY FRONT ABOVE THE SURFACE +2 2 WARM FRONT AT THE SURFACE +3 3 WARM FRONT ABOVE THE SURFACE +4 4 COLD FRONT AT THE SURFACE +5 5 COLD FRONT ABOVE THE SURFACE +6 6 OCCLUSION +7 7 INSTABILITY LINE +8 8 INTERTROPICAL FRONT +9 9 CONVERGENCE LINE +10 10 JET STREAM +11 11 CLOUD CLEAR +12 12 CLOUD +13 13 TURBULENCE +14 14 STORM +15 15 AIRFRAME ICING +16 16 PHENOMENON +17 17 VOLCANO +18 18 ATMOSPHERICS +19 19 RESERVED +20 20 SPECIAL CLOUDS +21 21 THUNDERSTORM +22 22 TROPICAL CYCLONE +23 23 MOUNTAIN WAVE +24 24 DUSTSTORM +25 25 SANDSTORM +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8012.table b/definitions/bufr/tables/0/wmo/39/codetables/8012.table new file mode 100644 index 000000000..769bc0bb7 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8012.table @@ -0,0 +1,4 @@ +0 0 LAND +1 1 SEA +2 2 COAST +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8013.table b/definitions/bufr/tables/0/wmo/39/codetables/8013.table new file mode 100644 index 000000000..e18d2959b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8013.table @@ -0,0 +1,4 @@ +0 0 NIGHT +1 1 DAY +2 2 TWILIGHT +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8014.table b/definitions/bufr/tables/0/wmo/39/codetables/8014.table new file mode 100644 index 000000000..e6f2e46b6 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8014.table @@ -0,0 +1,10 @@ +0 0 10-MINUTE MEAN VALUE - NORMAL VALUE +1 1 10-MINUTE MEAN VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENTS OF RVR (P) +2 2 10-MINUTE MEAN VALUE - BELOW THE LOWER LIMIT FOR ASSESSMENTS OF RVR (M) +3 3 ONE-MINUTE MINIMUM VALUE - NORMAL VALUE +4 4 ONE-MINUTE MINIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENTS OF RVR (P) +5 5 ONE-MINUTE MINIMUM VALUE - BELOW THE LOWER LIMIT FOR ASSESSMENTS OF RVR (M) +6 6 ONE-MINUTE MAXIMUM VALUE - NORMAL VALUE +7 7 ONE-MINUTE MAXIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENTS OF RVR (P) +8 8 ONE-MINUTE MAXIMUM VALUE - BELOW THE LOWER LIMIT FOR ASSESSMENTS OF RVR (M) +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8015.table b/definitions/bufr/tables/0/wmo/39/codetables/8015.table new file mode 100644 index 000000000..6830b9591 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8015.table @@ -0,0 +1,4 @@ +0 0 SINGLE SENSOR +1 1 PRIMARY SENSOR +2 2 SECONDARY SENSOR (BACKUP) +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8016.table b/definitions/bufr/tables/0/wmo/39/codetables/8016.table new file mode 100644 index 000000000..6b8a1fa66 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8016.table @@ -0,0 +1,5 @@ +0 0 NOSIG +1 1 BECMG +2 2 TEMPO +3 3 FM +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8017.table b/definitions/bufr/tables/0/wmo/39/codetables/8017.table new file mode 100644 index 000000000..b3156f87e --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8017.table @@ -0,0 +1,4 @@ +0 0 FM +1 1 TL +2 2 AT +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8018.table b/definitions/bufr/tables/0/wmo/39/codetables/8018.table new file mode 100644 index 000000000..f91e554ea --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8018.table @@ -0,0 +1,4 @@ +1 1 LAND IS PRESENT +2 2 SURFACE ICE MAP INDICATES ICE IS PRESENT +11 11 ICE MAP DATA NOT AVAILABLE +12 12 ATTENUATION MAP DATA NOT AVAILABLE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8019.table b/definitions/bufr/tables/0/wmo/39/codetables/8019.table new file mode 100644 index 000000000..4ed413301 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8019.table @@ -0,0 +1,8 @@ +0 0 RESERVED +1 1 ATS (AIR TRAFFIC SERVICE) UNIT SERVING FIR (FLIGHT INFORMATION REGION) +2 2 FIR (FLIGHT INFORMATION REGION) +3 3 UIR (UPPER FLIGHT INFORMATION REGION) +4 4 CTA (CONTROL AREA) +5 5 VAAC (VOLCANIC ASH ADVISORY CENTRE) +6 6 MWO (METEOROLOGICAL WATCH OFFICE) ISSUING SIGMET +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8021.table b/definitions/bufr/tables/0/wmo/39/codetables/8021.table new file mode 100644 index 000000000..8fbd35dd4 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8021.table @@ -0,0 +1,32 @@ +0 0 RESERVED +1 1 TIME SERIES +2 2 TIME AVERAGED +3 3 ACCUMULATED +4 4 FORECAST +5 5 FORECAST TIME SERIES +6 6 FORECAST TIME AVERAGED +7 7 FORECAST ACCUMULATED +8 8 ENSEMBLE MEAN +9 9 ENSEMBLE MEAN TIME SERIES +10 10 ENSEMBLE MEAN TIME AVERAGED +11 11 ENSEMBLE MEAN ACCUMULATED +12 12 ENSEMBLE MEAN FORECAST +13 13 ENSEMBLE MEAN FORECAST TIME SERIES +14 14 ENSEMBLE MEAN FORECAST TIME AVERAGED +15 15 ENSEMBLE MEAN FORECAST ACCUMULATED +16 16 ANALYSIS +17 17 START OF PHENOMENON +18 18 RADIOSONDE LAUNCH TIME +19 19 START OF ORBIT +20 20 END OF ORBIT +21 21 TIME OF ASCENDING NODE +22 22 TIME OF OCCURRENCE OF WIND SHIFT +23 23 MONITORING PERIOD +24 24 AGREED TIME LIMIT FOR REPORT RECEPTION +25 25 NOMINAL REPORTING TIME +26 26 TIME OF LAST KNOWN POSITION +27 27 FIRST GUESS +28 28 START OF SCAN +29 29 END OF SCAN OR TIME OF ENDING +30 30 TIME OF OCCURRENCE +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8023.table b/definitions/bufr/tables/0/wmo/39/codetables/8023.table new file mode 100644 index 000000000..4f78743a5 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8023.table @@ -0,0 +1,15 @@ +2 2 MAXIMUM VALUE +3 3 MINIMUM VALUE +4 4 MEAN VALUE +5 5 MEDIAN VALUE +6 6 MODAL VALUE +7 7 MEAN ABSOLUTE ERROR +8 8 RESERVED +9 9 BEST ESTIMATE OF STANDARD DEVIATION (N-1) +10 10 STANDARD DEVIATION (N) +11 11 HARMONIC MEAN +12 12 ROOT-MEAN-SQUARE VECTOR ERROR +13 13 ROOT-MEAN-SQUARE +14 14 ROOT-MEAN-SQUARE ERROR +32 32 VECTOR MEAN +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8024.table b/definitions/bufr/tables/0/wmo/39/codetables/8024.table new file mode 100644 index 000000000..377858bb1 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8024.table @@ -0,0 +1,12 @@ +2 2 OBSERVED MINUS MAXIMUM +3 3 OBSERVED MINUS MINIMUM +4 4 OBSERVED MINUS MEAN +5 5 OBSERVED MINUS MEDIAN +6 6 OBSERVED MINUS MODE +11 11 OBSERVED MINUS CLIMATOLOGY (ANOMALY) +12 12 OBSERVED MINUS ANALYSED VALUE +13 13 OBSERVED MINUS INITIALIZED ANALYSED VALUE +14 14 OBSERVED MINUS FORECAST VALUE +21 21 OBSERVED MINUS INTERPOLATED VALUE +22 22 OBSERVED MINUS HYDROSTATICALLY CALCULATED VALUE +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8025.table b/definitions/bufr/tables/0/wmo/39/codetables/8025.table new file mode 100644 index 000000000..1d88fa54f --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8025.table @@ -0,0 +1,5 @@ +0 0 UNIVERSAL TIME COORDINATED (UTC) MINUS LOCAL STANDARD TIME (LST) +1 1 LOCAL STANDARD TIME +2 2 UNIVERSAL TIME COORDINATED (UTC) MINUS SATELLITE CLOCK +5 5 TIME DIFFERENCE FROM EDGE OF PROCESSING SEGMENT +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8026.table b/definitions/bufr/tables/0/wmo/39/codetables/8026.table new file mode 100644 index 000000000..9bcef7864 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8026.table @@ -0,0 +1,5 @@ +0 0 AVERAGING KERNEL MATRIX +1 1 CORRELATION MATRIX (C) +2 2 LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L FROM C=LLT) +3 3 INVERSE OF LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L-1) +63 63 MISSING OR UNDEFINED SIGNIFICANCE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8029.table b/definitions/bufr/tables/0/wmo/39/codetables/8029.table new file mode 100644 index 000000000..d0eae5a57 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8029.table @@ -0,0 +1,16 @@ +0 0 OPEN OCEAN OR SEMI-ENCLOSED SEA +1 1 ENCLOSED SEA OR LAKE +2 2 CONTINENTAL ICE +3 3 LAND +4 4 LOW INLAND (BELOW SEA LEVEL) +5 5 MIX OF LAND AND WATER +6 6 MIX OF LAND AND LOW INLAND +11 11 RIVER +12 12 LAKE +13 13 SEA +14 14 GLACIER +15 15 URBAN LAND +16 16 RURAL LAND +17 17 SUBURBAN LAND +18 18 SEA ICE +255 255 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8032.table b/definitions/bufr/tables/0/wmo/39/codetables/8032.table new file mode 100644 index 000000000..712400dd1 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8032.table @@ -0,0 +1,7 @@ +0 0 ROUTINE OPERATION +1 1 EVENT TRIGGERED BY STORM SURGE +2 2 EVENT TRIGGERED BY TSUNAMI +3 3 EVENT TRIGGERED MANUALLY +4 4 INSTALLATION TESTING +5 5 MAINTENANCE TESTING +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8033.table b/definitions/bufr/tables/0/wmo/39/codetables/8033.table new file mode 100644 index 000000000..1c695372b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8033.table @@ -0,0 +1,6 @@ +0 0 RESERVED +1 1 PERCENTAGE CONFIDENCE CALCULATED USING CLOUD FRACTION +2 2 PERCENTAGE CONFIDENCE CALCULATED USING STANDARD DEVIATION OF TEMPERATURE +3 3 PERCENTAGE CONFIDENCE CALCULATED USING PROBABILITY OF CLOUD CONTAMINATION +4 4 PERCENTAGE CONFIDENCE CALCULATED USING NORMALITY OF DISTRIBUTION +127 127 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8034.table b/definitions/bufr/tables/0/wmo/39/codetables/8034.table new file mode 100644 index 000000000..879f27400 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8034.table @@ -0,0 +1,10 @@ +0 0 SECONDARY SAMPLING: AVERAGED +1 1 SECONDARY SAMPLING: DISCRETE +2 2 SECONDARY SAMPLING: MIXED +3 3 NEAR-SURFACE SAMPLING: AVERAGED, PUMPED +4 4 NEAR-SURFACE SAMPLING: AVERAGED, UNPUMPED +5 5 NEAR-SURFACE SAMPLING: DISCRETE, PUMPED +6 6 NEAR-SURFACE SAMPLING: DISCRETE, UNPUMPED +7 7 NEAR-SURFACE SAMPLING: MIXED, PUMPED +8 8 NEAR-SURFACE SAMPLING: MIXED, UNPUMPED +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8035.table b/definitions/bufr/tables/0/wmo/39/codetables/8035.table new file mode 100644 index 000000000..3d641fd15 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8035.table @@ -0,0 +1,8 @@ +0 0 GLOBAL +1 1 REGIONAL +2 2 NATIONAL +3 3 SPECIAL +4 4 BILATERAL +5 5 RESERVED +6 6 RESERVED +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8036.table b/definitions/bufr/tables/0/wmo/39/codetables/8036.table new file mode 100644 index 000000000..6436989e6 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8036.table @@ -0,0 +1,8 @@ +0 0 WMO SECRETARIAT +1 1 WMO +2 2 RSMC +3 3 NMC +4 4 RTH +5 5 OBSERVING SITE +6 6 OTHER +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8037.table b/definitions/bufr/tables/0/wmo/39/codetables/8037.table new file mode 100644 index 000000000..a5f9be382 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8037.table @@ -0,0 +1,4 @@ +0 0 MANUFACTURER'S BASELINE CHECK UNIT +1 1 WEATHER SCREEN +2 2 GRUAN STANDARD HUMIDITY CHAMBER +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8038.table b/definitions/bufr/tables/0/wmo/39/codetables/8038.table new file mode 100644 index 000000000..aa4d7b77b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8038.table @@ -0,0 +1,3 @@ +0 0 VERIFIED INSTRUMENT READING +1 1 REFERENCE INSTRUMENT READING +255 255 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8039.table b/definitions/bufr/tables/0/wmo/39/codetables/8039.table new file mode 100644 index 000000000..f4403c63d --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8039.table @@ -0,0 +1,8 @@ +0 0 ISSUE TIME OF FORECAST +1 1 TIME OF COMMENCEMENT OF PERIOD OF THE FORECAST +2 2 TIME OF ENDING OF PERIOD OF THE FORECAST +3 3 FORECAST TIME OF MAXIMUM TEMPERATURE +4 4 FORECAST TIME OF MINIMUM TEMPERATURE +5 5 TIME OF BEGINNING OF THE FORECAST CHANGE +6 6 TIME OF ENDING OF THE FORECAST CHANGE +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8040.table b/definitions/bufr/tables/0/wmo/39/codetables/8040.table new file mode 100644 index 000000000..42c5af0e5 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8040.table @@ -0,0 +1,49 @@ +0 0 HIGH-RESOLUTION DATA SAMPLE +1 1 WITHIN 20 HPA OF SURFACE +2 2 PRESSURE LESS THAN 10 HPA (I.E., 9, 8, 7, ETC.) WHEN NO OTHER REASON APPLIES +3 3 BASE PRESSURE LEVEL FOR STABILITY INDEX +4 4 BEGIN DOUBTFUL TEMPERATURE, HEIGHT DATA +5 5 BEGIN MISSING DATA (ALL ELEMENTS) +6 6 BEGIN MISSING RELATIVE HUMIDITY DATA +7 7 BEGIN MISSING TEMPERATURE DATA +8 8 HIGHEST LEVEL REACHED BEFORE BALLOON DESCENT BECAUSE OF ICING OR TURBULENCE +9 9 END DOUBTFUL TEMPERATURE, HEIGHT DATA +10 10 END MISSING DATA (ALL ELEMENTS) +11 11 END MISSING RELATIVE HUMIDITY DATA +12 12 END MISSING TEMPERATURE DATA +13 13 ZERO DEGREES CELSIUS CROSSING(S) FOR RADAT +14 14 STANDARD PRESSURE LEVEL +15 15 OPERATOR-ADDED LEVEL +16 16 OPERATOR-DELETED LEVEL +17 17 BALLOON RE-ASCENDED BEYOND PREVIOUS HIGHEST ASCENT LEVEL +18 18 SIGNIFICANT RELATIVE HUMIDITY LEVEL +19 19 RELATIVE HUMIDITY LEVEL SELECTION TERMINATED +20 20 SURFACE LEVEL +21 21 SIGNIFICANT TEMPERATURE LEVEL +22 22 MANDATORY TEMPERATURE LEVEL +23 23 FLIGHT TERMINATION LEVEL +24 24 TROPOPAUSE(S) +25 25 AIRCRAFT REPORT +26 26 INTERPOLATED (GENERATED) LEVEL +27 27 MANDATORY WIND LEVEL +28 28 SIGNIFICANT WIND LEVEL +29 29 MAXIMUM WIND LEVEL +30 30 INCREMENTAL WIND LEVEL (FIXED REGIONAL) +31 31 INCREMENTAL HEIGHT LEVEL (GENERATED) +32 32 WIND TERMINATION LEVEL +33 33 PRESSURE 100 TO 110 HPA, WHEN NO OTHER REASON APPLIES +34 34 FREEZING LEVEL BASE +35 35 FREEZING LEVEL TOP +36 36 FLIGHT LEVEL BASE +37 37 FLIGHT LEVEL TOP +38 38 TOP OF WIND SOUNDING +39 39 BOTTOM OF WIND SOUNDING +40 40 SIGNIFICANT THERMODYNAMIC LEVEL (INVERSION) +41 41 SIGNIFICANT RELATIVE HUMIDITY LEVEL (ACCORDING TO NCDC CRITERIA) +42 42 SIGNIFICANT TEMPERATURE LEVEL (ACCORDING TO NCDC) +43 43 BEGIN MISSING WIND DATA +44 44 END MISSING WIND DATA +60 60 LEVEL OF 80-KNOT ISOTACH ABOVE JET +61 61 LEVEL OF 80-KNOT ISOTACH BELOW JET +62 62 OTHER +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8041.table b/definitions/bufr/tables/0/wmo/39/codetables/8041.table new file mode 100644 index 000000000..1f48fbedc --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8041.table @@ -0,0 +1,15 @@ +0 0 PARENT SITE +1 1 OBSERVATION SITE +2 2 BALLOON MANUFACTURE DATE +3 3 BALLOON LAUNCH POINT +4 4 SURFACE OBSERVATION +5 5 SURFACE OBSERVATION DISPLACEMENT FROM LAUNCH POINT +6 6 FLIGHT LEVEL OBSERVATION +7 7 FLIGHT LEVEL TERMINATION POINT +8 8 IFR CEILING AND VISIBILITY +9 9 MOUNTAIN OBSCURATION +10 10 STRONG SURFACE WIND +11 11 FREEZING LEVEL +12 12 MULTIPLE FREEZING LEVEL +13 13 INSTRUMENT MANUFACTURE DATE +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8042.table b/definitions/bufr/tables/0/wmo/39/codetables/8042.table new file mode 100644 index 000000000..c71709a4c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8042.table @@ -0,0 +1,17 @@ +1 1 SURFACE +2 2 STANDARD LEVEL +3 3 TROPOPAUSE LEVEL +4 4 MAXIMUM WIND LEVEL +5 5 SIGNIFICANT TEMPERATURE LEVEL +6 6 SIGNIFICANT HUMIDITY LEVEL +7 7 SIGNIFICANT WIND LEVEL +8 8 BEGINNING OF MISSING TEMPERATURE DATA +9 9 END OF MISSING TEMPERATURE DATA +10 10 BEGINNING OF MISSING HUMIDITY DATA +11 11 END OF MISSING HUMIDITY DATA +12 12 BEGINNING OF MISSING WIND DATA +13 13 END OF MISSING WIND DATA +14 14 TOP OF WIND SOUNDING +15 15 LEVEL DETERMINED BY REGIONAL DECISION +16 16 FREEZING LEVEL +17 17 PRESSURE LEVEL ORIGINALLY INDICATED BY HEIGHT AS THE VERTICAL COORDINATE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8043.table b/definitions/bufr/tables/0/wmo/39/codetables/8043.table new file mode 100644 index 000000000..b6975ed39 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8043.table @@ -0,0 +1,20 @@ +0 0 OZONE +1 1 WATER VAPOUR +2 2 METHANE +3 3 CARBON DIOXIDE +4 4 CARBON MONOXIDE +5 5 NITROGEN DIOXIDE +6 6 NITROUS OXIDE +7 7 FORMALDEHYDE +8 8 SULPHUR DIOXIDE +9 9 VOLCANIC SULPHUR DIOXIDE +25 25 PARTICULATE MATTER < 1.0 MICRONS +26 26 PARTICULATE MATTER < 2.5 MICRONS +27 27 PARTICULATE MATTER < 10 MICRONS +28 28 AEROSOLS (GENERIC) +29 29 SMOKE (GENERIC) +30 30 CRUSTAL MATERIAL (GENERIC DUST) +31 31 VOLCANIC ASH +32 32 CLOUD +33 33 CLOUD AND AEROSOLS +255 255 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8050.table b/definitions/bufr/tables/0/wmo/39/codetables/8050.table new file mode 100644 index 000000000..4b401f1d2 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8050.table @@ -0,0 +1,11 @@ +0 0 RESERVED +1 1 PRESSURE +2 2 TEMPERATURE +3 3 EXTREME TEMPERATURE +4 4 VAPOUR PRESSURE +5 5 PRECIPITATION +6 6 SUNSHINE DURATION +7 7 MAXIMUM TEMPERATURE +8 8 MINIMUM TEMPERATURE +9 9 WIND +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8051.table b/definitions/bufr/tables/0/wmo/39/codetables/8051.table new file mode 100644 index 000000000..5249fe6a2 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8051.table @@ -0,0 +1,7 @@ +1 1 PRESSURE +2 2 TEMPERATURE +3 3 EXTREME TEMPERATURE +4 4 VAPOUR PRESSURE +5 5 PRECIPITATION +6 6 SUNSHINE DURATION +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8052.table b/definitions/bufr/tables/0/wmo/39/codetables/8052.table new file mode 100644 index 000000000..46dcbbe21 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8052.table @@ -0,0 +1,26 @@ +0 0 MEAN WIND SPEED OVER A 10-MINUTE PERIOD OBSERVED OR RECORDED EQUAL TO OR MORE THAN 10 M S-1 OR 20 KNOTS +1 1 MEAN WIND SPEED OVER A 10-MINUTE PERIOD OBSERVED OR RECORDED EQUAL TO OR MORE THAN 20 M S-1 OR 40 KNOTS +2 2 MEAN WIND SPEED OVER A 10-MINUTE PERIOD OBSERVED OR RECORDED EQUAL TO OR MORE THAN 30 M S-1 OR 60 KNOTS +3 3 MAXIMUM TEMPERATURE LESS THAN 273.15 K +4 4 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 298.15 K +5 5 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 303.15 K +6 6 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 308.15 K +7 7 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 313.15 K +8 8 MINIMUM TEMPERATURE LESS THAN 273.15 K +9 9 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 273.15 K +10 10 PRECIPITATION EQUAL TO OR MORE THAN 1.0 KG M-2 +11 11 PRECIPITATION EQUAL TO OR MORE THAN 5.0 KG M-2 +12 12 PRECIPITATION EQUAL TO OR MORE THAN 10.0 KG M-2 +13 13 PRECIPITATION EQUAL TO OR MORE THAN 50.0 KG M-2 +14 14 PRECIPITATION EQUAL TO OR MORE THAN 100.0 KG M-2 +15 15 PRECIPITATION EQUAL TO OR MORE THAN 150.0 KG M-2 +16 16 SNOW DEPTH MORE THAN 0.00 M +17 17 SNOW DEPTH MORE THAN 0.01 M +18 18 SNOW DEPTH MORE THAN 0.10 M +19 19 SNOW DEPTH MORE THAN 0.50 M +20 20 HORIZONTAL VISIBILITY LESS THAN 50 M +21 21 HORIZONTAL VISIBILITY LESS THAN 100 M +22 22 HORIZONTAL VISIBILITY LESS THAN 1000 M +23 23 HAIL +24 24 THUNDERSTORM +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8053.table b/definitions/bufr/tables/0/wmo/39/codetables/8053.table new file mode 100644 index 000000000..cbc11c9a7 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8053.table @@ -0,0 +1,4 @@ +0 0 VALUE OCCURRED ON ONLY ONE DAY IN THE MONTH +1 1 VALUE OCCURRED ON MORE THAN ONE DAY IN THE MONTH +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8054.table b/definitions/bufr/tables/0/wmo/39/codetables/8054.table new file mode 100644 index 000000000..51b908e08 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8054.table @@ -0,0 +1,3 @@ +0 0 WIND SPEED OR GUST IS AS REPORTED +1 1 WIND SPEED IS GREATER THAN THAT REPORTED (P IN METAR/TAF/SPECI) +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8060.table b/definitions/bufr/tables/0/wmo/39/codetables/8060.table new file mode 100644 index 000000000..2865fece5 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8060.table @@ -0,0 +1,8 @@ +0 0 RESERVED +1 1 RANGE +2 2 AZIMUTH +3 3 HORIZONTAL +4 4 VERTICAL +5 5 NORTH/SOUTH +6 6 EAST/WEST +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8065.table b/definitions/bufr/tables/0/wmo/39/codetables/8065.table new file mode 100644 index 000000000..69b80ea33 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8065.table @@ -0,0 +1,4 @@ +0 0 NO SUN-GLINT +1 1 SUN-GLINT +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8066.table b/definitions/bufr/tables/0/wmo/39/codetables/8066.table new file mode 100644 index 000000000..fcc0252c9 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8066.table @@ -0,0 +1,4 @@ +0 0 OPAQUE +1 1 SEMI-TRANSPARENT +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8070.table b/definitions/bufr/tables/0/wmo/39/codetables/8070.table new file mode 100644 index 000000000..f58061757 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8070.table @@ -0,0 +1,6 @@ +0 0 RESERVED +1 1 RESERVED +2 2 EARTH LOCATED INSTRUMENT COUNTS, CALIBRATION COEFFICIENTS AND HOUSEKEEPING (LEVEL 1B) +3 3 EARTH LOCATED CALIBRATED RADIANCES (LEVEL 1C) +4 4 MAPPED TO A COMMON FOOTPRINT, EARTH LOCATED CALIBRATED RADIANCES (LEVEL 1D) +15 15 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8072.table b/definitions/bufr/tables/0/wmo/39/codetables/8072.table new file mode 100644 index 000000000..7dcd9611b --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8072.table @@ -0,0 +1,6 @@ +0 0 MIXED +1 1 CLEAR +2 2 CLOUDY +3 3 PROBABLY CLEAR +4 4 PROBABLY CLOUDY +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8074.table b/definitions/bufr/tables/0/wmo/39/codetables/8074.table new file mode 100644 index 000000000..5778e6552 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8074.table @@ -0,0 +1,4 @@ +0 0 OPEN OCEAN OR SEMI-ENCLOSED SEA +1 1 NON-OCEAN LIKE +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8075.table b/definitions/bufr/tables/0/wmo/39/codetables/8075.table new file mode 100644 index 000000000..5f5e3a24c --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8075.table @@ -0,0 +1,4 @@ +0 0 ASCENDING ORBIT +1 1 DESCENDING ORBIT +2 2 RESERVED +3 3 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8076.table b/definitions/bufr/tables/0/wmo/39/codetables/8076.table new file mode 100644 index 000000000..431496fbc --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8076.table @@ -0,0 +1,9 @@ +0 0 KU +1 1 C +2 2 LONG-WAVE INFRARED +3 3 MEDIUM-WAVE INFRARED +4 4 SHORT-WAVE INFRARED +5 5 M +6 6 I +7 7 DAY/NIGHT +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8077.table b/definitions/bufr/tables/0/wmo/39/codetables/8077.table new file mode 100644 index 000000000..2c7902bd7 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8077.table @@ -0,0 +1,7 @@ +0 0 LAND +1 1 SEA +2 2 COASTAL +3 3 OPEN OCEAN OR SEMI-ENCLOSED SEA +4 4 ENCLOSED SEA OR LAKE +5 5 CONTINENTAL ICE +127 127 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8079.table b/definitions/bufr/tables/0/wmo/39/codetables/8079.table new file mode 100644 index 000000000..735a09c37 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8079.table @@ -0,0 +1,9 @@ +0 0 NORMAL ISSUE +1 1 CORRECTION TO A PREVIOUSLY ISSUED PRODUCT (COR) +2 2 AMENDMENT TO A PREVIOUSLY ISSUED PRODUCT (AMD) +3 3 CORRECTION TO A PREVIOUSLY ISSUED AMENDED PRODUCT (COR AMD) +4 4 CANCELLATION OF A PREVIOUSLY ISSUED PRODUCT (CNL) +5 5 NO PRODUCT AVAILABLE (NIL) +6 6 SPECIAL REPORT (SPECI) +7 7 CORRECTED SPECIAL REPORT (SPECI COR) +15 15 MISSING OR NOT APPLICABLE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8080.table b/definitions/bufr/tables/0/wmo/39/codetables/8080.table new file mode 100644 index 000000000..1a0f3a5e5 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8080.table @@ -0,0 +1,14 @@ +0 0 TOTAL WATER PRESSURE PROFILE +1 1 TOTAL WATER TEMPERATURE PROFILE +2 2 TOTAL WATER SALINITY PROFILE +3 3 TOTAL WATER CONDUCTIVITY PROFILE +4 4 TOTAL WATER DEPTH +10 10 WATER PRESSURE AT A LEVEL +11 11 WATER TEMPERATURE AT A LEVEL +12 12 SALINITY AT A LEVEL +13 13 WATER DEPTH AT A LEVEL +14 14 SEA/WATER CURRENT SPEED AT A LEVEL +15 15 SEA/WATER CURRENT DIRECTION AT A LEVEL +16 16 DISSOLVED OXYGEN AT A LEVEL +20 20 POSITION +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8081.table b/definitions/bufr/tables/0/wmo/39/codetables/8081.table new file mode 100644 index 000000000..75d288732 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8081.table @@ -0,0 +1,5 @@ +0 0 SENSOR +1 1 TRANSMITTER +2 2 RECEIVER +3 3 OBSERVING PLATFORM +63 63 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8082.table b/definitions/bufr/tables/0/wmo/39/codetables/8082.table new file mode 100644 index 000000000..1f24db866 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8082.table @@ -0,0 +1,3 @@ +0 0 SENSOR HEIGHT IS NOT MODIFIED +1 1 SENSOR HEIGHT IS MODIFIED TO STANDARD LEVEL +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8083.table b/definitions/bufr/tables/0/wmo/39/codetables/8083.table new file mode 100644 index 000000000..174ef3428 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8083.table @@ -0,0 +1,9 @@ +1 1 ADJUSTED TO OR WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM) +2 2 ADJUSTED TO OR WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABOVE WATER SURFACE +3 3 ADJUSTED WITH RESPECT TO STANDARD SURFACE ROUGHNESS +4 4 ADJUSTED WITH RESPECT TO WIND SPEED +5 5 ADJUSTED WITH RESPECT TO TEMPERATURE +6 6 ADJUSTED WITH RESPECT TO PRESSURE +7 7 ADJUSTED WITH RESPECT TO HUMIDITY +8 8 ADJUSTED WITH RESPECT TO EVAPORATION +9 9 ADJUSTED WITH RESPECT TO WETTING LOSSES diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8085.table b/definitions/bufr/tables/0/wmo/39/codetables/8085.table new file mode 100644 index 000000000..79e1a3d90 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8085.table @@ -0,0 +1,4 @@ +0 0 FORE BEAM +1 1 MID BEAM +2 2 AFT BEAM +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8086.table b/definitions/bufr/tables/0/wmo/39/codetables/8086.table new file mode 100644 index 000000000..a9ecd0351 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8086.table @@ -0,0 +1,11 @@ +1 1 MODEL GROUND SURFACE +2 2 STANDARD LEVEL +3 3 TROPOPAUSE LEVEL +4 4 MAXIMUM WIND LEVEL +5 5 SIGNIFICANT TEMPERATURE LEVEL +6 6 SIGNIFICANT HUMIDITY LEVEL +7 7 SIGNIFICANT WIND LEVEL +8 8 VERTICALLY INTERPOLATED LEVEL (THIS SHOULD BE SET TO 1 FOR POINTS ON THE VERTICAL PROFILE THAT FALL BETWEEN THE MODEL'S NATIVE VERTICAL LEVELS.) +9 9 VIRTUAL STATION HEIGHT +10 10 LEVEL OF BEST FIT +11 11 RESERVED diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8087.table b/definitions/bufr/tables/0/wmo/39/codetables/8087.table new file mode 100644 index 000000000..d556c98de --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8087.table @@ -0,0 +1,5 @@ +0 0 UPPER LEFT +1 1 UPPER RIGHT +2 2 LOWER RIGHT +3 3 LOWER LEFT +7 7 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8088.table b/definitions/bufr/tables/0/wmo/39/codetables/8088.table new file mode 100644 index 000000000..d6f51be70 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8088.table @@ -0,0 +1,4 @@ +0 0 TOP VIEW (GEOGRAPHICAL LONGITUDE ON X-AXIS AND LATITUDE ON Y-AXIS) +1 1 NORTH-SOUTH VIEW (TRANSECT WITH GEOGRAPHICAL LONGITUDE ON X-AXIS AND VERTICAL HEIGHT ON Y-AXIS) +2 2 EAST-WEST VIEW (TRANSECT WITH GEOGRAPHICAL LATITUDE ON X-AXIS AND VERTICAL HEIGHT ON Y-AXIS) +63 63 MISSING diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8091.table b/definitions/bufr/tables/0/wmo/39/codetables/8091.table new file mode 100644 index 000000000..3a8c44df1 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8091.table @@ -0,0 +1,11 @@ +0 0 SATELLITE COORDINATES +1 1 OBSERVATION COORDINATES +2 2 START OF OBSERVATION +3 3 END OF OBSERVATION +4 4 HORIZONTAL CENTRE OF GRAVITY OF THE OBSERVATION +5 5 VERTICAL CENTRE OF GRAVITY OF THE OBSERVATION +6 6 TOP OF THE OBSERVATION +7 7 BOTTOM OF THE OBSERVATION +8 8 PROJECTION ORIGIN +9 9 COORDINATES OF TRUE SCALE +255 255 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8092.table b/definitions/bufr/tables/0/wmo/39/codetables/8092.table new file mode 100644 index 000000000..e40754f8e --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8092.table @@ -0,0 +1,3 @@ +0 0 STANDARD UNCERTAINTY +1 1 COMBINED STANDARD UNCERTAINTY +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8093.table b/definitions/bufr/tables/0/wmo/39/codetables/8093.table new file mode 100644 index 000000000..74f5c3a63 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8093.table @@ -0,0 +1,4 @@ +0 0 TOTAL UNCERTAINTY +1 1 SYSTEMATIC COMPONENT OF UNCERTAINTY +2 2 RANDOM COMPONENT OF UNCERTAINTY +31 31 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8094.table b/definitions/bufr/tables/0/wmo/39/codetables/8094.table new file mode 100644 index 000000000..e2ead0bc9 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8094.table @@ -0,0 +1,8 @@ +0 0 AVERAGE OF MAXIMUM AND MINIMUM VALUES: TM = (TX + TN)/2 +1 1 AVERAGE OF THE 8 OBSERVATIONS TAKEN EVERY THREE HOURS +2 2 AVERAGE OF THE 24 HOURLY OBSERVATIONS +3 3 WEIGHTED AVERAGE OF 3 OBSERVATIONS: TM = (AT1 +BT2 + CT3) +4 4 WEIGHTED AVERAGE OF 3 OBSERVATIONS AND ALSO MAXIMUM AND MINIMUM VALUES: TM= (AT1 +BT2 + CT3 +DTX + ETN) +5 5 AUTOMATIC WEATHER STATION COMPLETE INTEGRATION FROM MINUTE DATA +6 6 AVERAGE OF THE 4 OBSERVATIONS TAKEN EVERY SIX HOURS +255 255 MISSING VALUE diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8095.table b/definitions/bufr/tables/0/wmo/39/codetables/8095.table new file mode 100644 index 000000000..f9d14f75f --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8095.table @@ -0,0 +1,36 @@ +0 0 RESERVED +1 1 1A +2 2 1B +3 3 1C +4 4 1D +5 5 RESERVED +6 6 2A +7 7 2B +8 8 2C +9 9 2D +10 10 RESERVED +11 11 3A +12 12 3B +13 13 3C +14 14 3D +15 15 RESERVED +16 16 4A +17 17 4B +18 18 4C +19 19 4D +20 20 RESERVED +21 21 5A +22 22 5B +23 23 5C +24 24 5D +25 25 RESERVED +26 26 1 +27 27 2 +28 28 3 +29 29 4 +30 30 5 +31 31 A +32 32 B +33 33 C +34 34 D +255 255 MISSING diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8096.table b/definitions/bufr/tables/0/wmo/39/codetables/8096.table new file mode 100644 index 000000000..f9d14f75f --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8096.table @@ -0,0 +1,36 @@ +0 0 RESERVED +1 1 1A +2 2 1B +3 3 1C +4 4 1D +5 5 RESERVED +6 6 2A +7 7 2B +8 8 2C +9 9 2D +10 10 RESERVED +11 11 3A +12 12 3B +13 13 3C +14 14 3D +15 15 RESERVED +16 16 4A +17 17 4B +18 18 4C +19 19 4D +20 20 RESERVED +21 21 5A +22 22 5B +23 23 5C +24 24 5D +25 25 RESERVED +26 26 1 +27 27 2 +28 28 3 +29 29 4 +30 30 5 +31 31 A +32 32 B +33 33 C +34 34 D +255 255 MISSING diff --git a/definitions/bufr/tables/0/wmo/39/codetables/8097.table b/definitions/bufr/tables/0/wmo/39/codetables/8097.table new file mode 100644 index 000000000..1107d7b19 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/codetables/8097.table @@ -0,0 +1,4 @@ +0 0 THE AVERAGE OF SIX TEMPERATURE SENSORS PLACED THROUGHOUT THE PAYLOAD +1 1 AVERAGE OF WF-BAND IFP AND RFE SENSORS FOR CHANNELS 1 TO 8 +2 2 AVERAGE OF G-BAND RFE SENSOR FOR CHANNELS 9 TO 12 +127 127 MISSING diff --git a/definitions/bufr/tables/0/wmo/39/element.table b/definitions/bufr/tables/0/wmo/39/element.table new file mode 100644 index 000000000..b354062c7 --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/element.table @@ -0,0 +1,1747 @@ +#code|abbreviation|type|name|unit|scale|reference|width|crex_unit|crex_scale|crex_width +000001|tableAEntry|string|TABLE A: ENTRY|CCITT IA5|0|0|24|Character|0|3 +000002|tableALine1|string|TABLE A: DATA CATEGORY DESCRIPTION, LINE 1|CCITT IA5|0|0|256|Character|0|32 +000003|tableALine2|string|TABLE A: DATA CATEGORY DESCRIPTION, LINE 2|CCITT IA5|0|0|256|Character|0|32 +000004|masterTable|string|BUFR/CREX MASTER TABLE|CCITT IA5|0|0|16|Character|0|2 +000005|editionNumber|string|BUFR/CREX EDITION NUMBER|CCITT IA5|0|0|24|Character|0|3 +000006|bufrMasterTableVersionNumber|string|BUFR MASTER TABLE VERSION NUMBER|CCITT IA5|0|0|16|Character|0|2 +000007|crexMasterTableVersionNumber|string|CREX MASTER TABLE VERSION NUMBER|CCITT IA5|0|0|16|Character|0|2 +000008|bufrLocalTableVersionNumber|string|BUFR LOCAL TABLE VERSION NUMBER|CCITT IA5|0|0|16|Character|0|2 +000010|fDescriptorToBeAddedOrDefined|string|F DESCRIPTOR TO BE ADDED OR DEFINED|CCITT IA5|0|0|8|Character|0|1 +000011|xDescriptorToBeAddedOrDefined|string|X DESCRIPTOR TO BE ADDED OR DEFINED|CCITT IA5|0|0|16|Character|0|2 +000012|yDescriptorToBeAddedOrDefined|string|Y DESCRIPTOR TO BE ADDED OR DEFINED|CCITT IA5|0|0|24|Character|0|3 +000013|elementNameLine1|string|ELEMENT NAME, LINE 1|CCITT IA5|0|0|256|Character|0|32 +000014|elementNameLine2|string|ELEMENT NAME, LINE 2|CCITT IA5|0|0|256|Character|0|32 +000015|unitsName|string|UNITS NAME|CCITT IA5|0|0|192|Character|0|24 +000016|unitsScaleSign|string|UNITS SCALE SIGN|CCITT IA5|0|0|8|Character|0|1 +000017|unitsScale|string|UNITS SCALE|CCITT IA5|0|0|24|Character|0|3 +000018|unitsReferenceSign|string|UNITS REFERENCE SIGN|CCITT IA5|0|0|8|Character|0|1 +000019|unitsReferenceValue|string|UNITS REFERENCE VALUE|CCITT IA5|0|0|80|Character|0|10 +000020|elementDataWidth|string|ELEMENT DATA WIDTH|CCITT IA5|0|0|24|Character|0|3 +000024|codeFigure|string|CODE FIGURE|CCITT IA5|0|0|64|Character|0|8 +000025|codeFigureMeaning|string|CODE FIGURE MEANING|CCITT IA5|0|0|496|Character|0|62 +000026|bitNumber|string|BIT NUMBER|CCITT IA5|0|0|48|Character|0|6 +000027|bitNumberMeaning|string|BIT NUMBER MEANING|CCITT IA5|0|0|496|Character|0|62 +000030|descriptorDefiningSequence|string|DESCRIPTOR DEFINING SEQUENCE|CCITT IA5|0|0|48|Character|0|6 +001001|blockNumber|long|WMO BLOCK NUMBER|Numeric|0|0|7|Numeric|0|2 +001002|stationNumber|long|WMO STATION NUMBER|Numeric|0|0|10|Numeric|0|3 +001003|regionNumber|table|WMO REGION NUMBER/GEOGRAPHICAL AREA|CODE TABLE|0|0|3|CODE TABLE|0|1 +001004|wmoRegionSubArea|long|WMO REGION SUB-AREA|Numeric|0|0|3|Numeric|0|1 +001005|buoyOrPlatformIdentifier|long|BUOY/PLATFORM IDENTIFIER|Numeric|0|0|17|Numeric|0|5 +001006|aircraftFlightNumber|string|AIRCRAFT FLIGHT NUMBER|CCITT IA5|0|0|64|Character|0|8 +001007|satelliteIdentifier|table|SATELLITE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|4 +001008|aircraftRegistrationNumberOrOtherIdentification|string|AIRCRAFT REGISTRATION NUMBER OR OTHER IDENTIFICATION|CCITT IA5|0|0|64|Character|0|8 +001009|commercialAircraftType|string|TYPE OF COMMERCIAL AIRCRAFT|CCITT IA5|0|0|64|Character|0|8 +001010|stationaryBuoyPlatformIdentifierEGCManBuoys|string|STATIONARY BUOY PLATFORM IDENTIFIER; E.G. C-MAN BUOYS|CCITT IA5|0|0|64|Character|0|8 +001011|shipOrMobileLandStationIdentifier|string|SHIP OR MOBILE LAND STATION IDENTIFIER|CCITT IA5|0|0|72|Character|0|9 +001012|directionOfMotionOfMovingObservingPlatform|long|DIRECTION OF MOTION OF MOVING OBSERVING PLATFORM|deg|0|0|9|deg|0|3 +001013|movingObservingPlatformSpeed|long|SPEED OF MOTION OF MOVING OBSERVING PLATFORM|m/s|0|0|10|m/s|0|3 +001014|platformDriftSpeed|double|PLATFORM DRIFT SPEED (HIGH PRECISION)|m/s|2|0|10|m/s|2|4 +001015|stationOrSiteName|string|STATION OR SITE NAME|CCITT IA5|0|0|160|Character|0|20 +001016|satelliteSubIdentifier|long|SATELLITE SUB-IDENTIFIER|Numeric|0|0|16|Numeric|0|5 +001018|shortStationName|string|SHORT STATION OR SITE NAME|CCITT IA5|0|0|40|Character|0|5 +001019|longStationName|string|LONG STATION OR SITE NAME|CCITT IA5|0|0|256|Character|0|32 +001020|wmoRegionSubArea|long|WMO REGION SUB-AREA|Numeric|0|0|4|Numeric|0|2 +001021|synopticFeatureIdentifier|long|SYNOPTIC FEATURE IDENTIFIER|Numeric|0|0|14|Numeric|0|4 +001022|featureName|string|NAME OF FEATURE|CCITT IA5|0|0|224|Character|0|28 +001023|observationSequenceNumber|long|OBSERVATION SEQUENCE NUMBER|Numeric|0|0|9|Numeric|0|3 +001024|windSpeedSource|table|WIND SPEED SOURCE|CODE TABLE|0|0|5|CODE TABLE|0|2 +001025|stormIdentifier|string|STORM IDENTIFIER|CCITT IA5|0|0|24|Character|0|3 +001026|stormName|string|WMO STORM NAME|CCITT IA5|0|0|64|Character|0|8 +001027|longStormName|string|WMO LONG STORM NAME|CCITT IA5|0|0|80|Character|0|10 +001028|aerosolOpticalDepthSource|table|AEROSOL OPTICAL DEPTH (AOD) SOURCE|CODE TABLE|0|0|5|CODE TABLE|0|2 +001029|ssiSource|table|SSI SOURCE|CODE TABLE|0|0|5|CODE TABLE|0|2 +001030|numericalModelIdentifier|string|NUMERICAL MODEL IDENTIFIER|CCITT IA5|0|0|128|Character|0|16 +001031|centre|table|IDENTIFICATION OF ORIGINATING/GENERATING CENTRE|CODE TABLE|0|0|16|CODE TABLE|0|5 +001032|generatingApplication|table|GENERATING APPLICATION|CODE TABLE defined by originating/generating centre|0|0|8|CODE TABLE|0|3 +001033|centre|table|IDENTIFICATION OF ORIGINATING/GENERATING CENTRE|Common CODE TABLE C-1|0|0|8|Common CODE TABLE C-1|0|3 +001034|subCentre|table|IDENTIFICATION OF ORIGINATING/GENERATING SUB-CENTRE|Common CODE TABLE C-12|0|0|8|Common CODE TABLE C-12|0|3 +001035|centre|table|ORIGINATING CENTRE|Common CODE TABLE C-11|0|0|16|Common CODE TABLE C-11|0|5 +001036|agencyInChargeOfOperatingObservingPlatform|table|AGENCY IN CHARGE OF OPERATING THE OBSERVING PLATFORM|CODE TABLE|0|0|20|CODE TABLE|0|7 +001037|sigmetSequenceIdentifier|string|SIGMET SEQUENCE IDENTIFIER|CCITT IA5|0|0|24|Character|0|3 +001038|sourceOfSeaIceFraction|table|SOURCE OF SEA ICE FRACTION|CODE TABLE|0|0|5|CODE TABLE|0|2 +001039|graphicalAreaForecastSequenceIdentifier|string|GRAPHICAL AREA FORECAST (GFA) SEQUENCE IDENTIFIER|CCITT IA5|0|0|40|Character|0|5 +001040|processingCentreIdCode|string|PROCESSING CENTRE ID CODE|CCITT IA5|0|0|48|Character|0|6 +001041|absolutePlatformVelocityFirstComponent|double|ABSOLUTE PLATFORM VELOCITY - FIRST COMPONENT|m/s|5|-1073741824|31|m/s|5|10 +001042|absolutePlatformVelocitySecondComponent|double|ABSOLUTE PLATFORM VELOCITY - SECOND COMPONENT|m/s|5|-1073741824|31|m/s|5|10 +001043|absolutePlatformVelocityThirdComponent|double|ABSOLUTE PLATFORM VELOCITY - THIRD COMPONENT|m/s|5|-1073741824|31|m/s|5|10 +001044|standardGeneratingApplication|table|STANDARD GENERATING APPLICATION|CODE TABLE|0|0|8|CODE TABLE|0|3 +001050|platformTransmitterIdNumber|long|PLATFORM TRANSMITTER ID NUMBER|Numeric|0|0|17|Numeric|0|6 +001051|platformTransmitterIdNumber|string|PLATFORM TRANSMITTER ID NUMBER|CCITT IA5|0|0|96|Character|0|12 +001052|platformTransmitterId|table|PLATFORM TRANSMITTER ID|CODE TABLE|0|0|3|CODE TABLE|0|1 +001053|tsunameterReportSequenceNumber|long|TSUNAMETER REPORT SEQUENCE NUMBER TRIGGERED BY A TSUNAMI EVENT|Numeric|0|0|7|Numeric|0|2 +001060|aircraftReportingPointBeaconIdentifier|string|AIRCRAFT REPORTING POINT (BEACON IDENTIFIER)|CCITT IA5|0|0|64|Character|0|8 +001062|shortIcaoLocationIndicator|string|SHORT ICAO LOCATION INDICATOR|CCITT IA5|0|0|32|Character|0|4 +001063|icaoLocationIndicator|string|ICAO LOCATION INDICATOR|CCITT IA5|0|0|64|Character|0|8 +001064|runwayDesignator|string|RUNWAY DESIGNATOR|CCITT IA5|0|0|32|Character|0|4 +001065|icaoRegionIdentifier|string|ICAO REGION IDENTIFIER|CCITT IA5|0|0|256|Character|0|32 +001075|tideStationIdentification|string|TIDE STATION IDENTIFICATION|CCITT IA5|0|0|40|Character|0|5 +001079|uniqueIdentifierForProfile|string|UNIQUE IDENTIFIER FOR THE PROFILE|CCITT IA5|0|0|64|Character|0|8 +001080|shipLineNumberAccordingToSoop|string|SHIP LINE NUMBER ACCORDING TO SOOP|CCITT IA5|0|0|32|Character|0|4 +001081|radiosondeSerialNumber|string|RADIOSONDE SERIAL NUMBER|CCITT IA5|0|0|160|Character|0|20 +001082|radiosondeAscensionNumber|long|RADIOSONDE ASCENSION NUMBER|Numeric|0|0|14|Numeric|0|4 +001083|radiosondeReleaseNumber|long|RADIOSONDE RELEASE NUMBER|Numeric|0|0|3|Numeric|0|1 +001085|observingPlatformManufacturerModel|string|OBSERVING PLATFORM MANUFACTURER'S MODEL|CCITT IA5|0|0|160|Character|0|20 +001086|observingPlatformManufacturerSerialNumber|string|OBSERVING PLATFORM MANUFACTURER'S SERIAL NUMBER|CCITT IA5|0|0|256|Character|0|32 +001087|marineObservingPlatformIdentifier|long|WMO MARINE OBSERVING PLATFORM EXTENDED IDENTIFIER|Numeric|0|0|23|Numeric|0|7 +001090|techniqueForMakingUpInitialPerturbations|table|TECHNIQUE FOR MAKING UP INITIAL PERTURBATIONS|CODE TABLE|0|0|8|CODE TABLE|0|3 +001091|ensembleMemberNumber|long|ENSEMBLE MEMBER NUMBER|Numeric|0|0|10|Numeric|0|4 +001092|ensembleForecastType|table|TYPE OF ENSEMBLE FORECAST|CODE TABLE|0|0|8|CODE TABLE|0|3 +001093|balloonLotNumber|string|BALLOON LOT NUMBER|CCITT IA5|0|0|96|Character|0|12 +001094|wbanNumber|long|WBAN NUMBER|Numeric|0|0|17|Numeric|0|5 +001095|observerIdentification|string|OBSERVER IDENTIFICATION|CCITT IA5|0|0|32|Character|0|4 +001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20 +001099|uniqueProductDefinition|string|UNIQUE PRODUCT DEFINITION|CCITT IA5|0|0|248|Character|0|31 +001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3 +001102|nationalStationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9 +001103|imoNumber|long|IMO NUMBER. UNIQUE LLOYD'S REGISTER|Numeric|0|0|24|Numeric|0|7 +001104|stateOrFederalStateIdentifier|string|STATE/FEDERAL STATE IDENTIFIER|CCITT IA5|0|0|32|Character|0|4 +001105|highwayDesignator|string|HIGHWAY DESIGNATOR|CCITT IA5|0|0|40|Character|0|5 +001106|locationAlongHighwayAsIndicatedByPositionMarkers|long|LOCATION ALONG HIGHWAY AS INDICATED BY POSITION MARKERS|m|-2|0|14|m|-2|5 +001110|aircraftTailNumber|string|AIRCRAFT TAIL NUMBER|CCITT IA5|0|0|48|Character|0|6 +001111|originationAirport|string|ORIGINATION AIRPORT|CCITT IA5|0|0|24|Character|0|3 +001112|destinationAirport|string|DESTINATION AIRPORT|CCITT IA5|0|0|24|Character|0|3 +001113|templateVersionNumberDefinedByOriginatingCentre|long|TEMPLATE VERSION NUMBER DEFINED BY ORIGINATING CENTRE|Numeric|1|0|9|Numeric|1|3 +001114|encryptedStationIdentifierBase64Encoding|string|ENCRYPTED SHIP OR MOBILE LAND STATION IDENTIFIER (BASE64 ENCODING)|CCITT IA5|0|0|352|Character|0|44 +001115|identifierOfTheCruiseOrMission|string|IDENTIFIER OF THE CRUISE OR MISSION UNDER WHICH THE DATA WERE COLLECTED|CCITT IA5|0|0|160|Character|0|20 +001124|gridPointIdentifier|long|GRID POINT IDENTIFIER|Numeric|0|0|24|Numeric|0|8 +001125|wigosIdentifierSeries|long|WIGOS IDENTIFIER SERIES|Numeric|0|0|4|Numeric|0|2 +001126|wigosIssuerOfIdentifier|long|WIGOS ISSUER OF IDENTIFIER|Numeric|0|0|16|Numeric|0|5 +001127|wigosIssueNumber|long|WIGOS ISSUE NUMBER|Numeric|0|0|16|Numeric|0|5 +001128|wigosLocalIdentifierCharacter|string|WIGOS LOCAL IDENTIFIER (CHARACTER)|CCITT IA5|0|0|128|Character|0|16 +001144|snapshotIdentifier|long|SNAPSHOT IDENTIFIER|Numeric|0|0|31|Numeric|0|10 +001145|lightSourceIdentifier|long|LIGHT SOURCE IDENTIFIER|Numeric|0|-8|20|Numeric|0|7 +001150|coordinateReferenceSystem|table|COORDINATE REFERENCE SYSTEM|CODE TABLE|0|0|16|CODE TABLE|0|5 +001151|fixedMeanSeaLevelReferenceDatum|table|FIXED MEAN SEA-LEVEL REFERENCE DATUM|CODE TABLE|0|0|12|CODE TABLE|0|4 +001152|semiMajorAxisOfRotationEllipsoid|double|SEMI-MAJOR AXIS OF ROTATION ELLIPSOID|m|2|0|31|m|2|11 +001153|semiMinorAxisOfRotationEllipsoid|double|SEMI-MINOR AXIS OF ROTATION ELLIPSOID|m|2|0|31|m|2|11 +001154|sensorIdentifier|long|SENSOR IDENTIFIER|Numeric|0|0|12|Numeric|0|4 +001155|retrievalIdentifier|table|RETRIEVAL IDENTIFIER|CODE TABLE|0|0|8|CODE TABLE|0|3 +002001|stationType|table|TYPE OF STATION|CODE TABLE|0|0|2|CODE TABLE|0|1 +002002|instrumentationForWindMeasurement|flag|TYPE OF INSTRUMENTATION FOR WIND MEASUREMENT|FLAG TABLE|0|0|4|FLAG TABLE|0|2 +002003|measuringEquipmentType|table|TYPE OF MEASURING EQUIPMENT USED|CODE TABLE|0|0|4|CODE TABLE|0|2 +002004|typeOfInstrumentationForEvaporationMeasurement|table|TYPE OF INSTRUMENTATION FOR EVAPORATION MEASUREMENT OR TYPE OF CROP FOR WHICH EVAPOTRANSPIRATION IS REPORTED|CODE TABLE|0|0|4|CODE TABLE|0|2 +002005|temperatureObservationPrecision|double|PRECISION OF TEMPERATURE OBSERVATION|K|2|0|7|K|2|3 +002006|upperAirRemoteSensingInstrumentType|table|UPPER AIR REMOTE SENSING INSTRUMENT TYPE|CODE TABLE|0|0|6|CODE TABLE|0|0 +002007|sensorForWaterLevelMeasuringInstrumentType|table|TYPE OF SENSOR FOR WATER LEVEL MEASURING INSTRUMENT|CODE TABLE|0|0|6|CODE TABLE|0|2 +002008|typeOfOffshorePlatform|table|TYPE OF OFFSHORE PLATFORM|CODE TABLE|0|0|4|CODE TABLE|0|2 +002011|radiosondeType|table|RADIOSONDE TYPE|CODE TABLE|0|0|8|CODE TABLE|0|3 +002012|radiosondeComputationalMethod|table|RADIOSONDE COMPUTATIONAL METHOD|CODE TABLE|0|0|4|CODE TABLE|0|2 +002013|solarAndInfraredRadiationCorrection|table|SOLAR AND INFRARED RADIATION CORRECTION|CODE TABLE|0|0|4|CODE TABLE|0|2 +002014|trackingTechniqueOrStatusOfSystem|table|TRACKING TECHNIQUE/STATUS OF SYSTEM USED|CODE TABLE|0|0|7|CODE TABLE|0|3 +002015|radiosondeCompleteness|table|RADIOSONDE COMPLETENESS|CODE TABLE|0|0|4|CODE TABLE|0|2 +002016|radiosondeConfiguration|flag|RADIOSONDE CONFIGURATION|FLAG TABLE|0|0|5|FLAG TABLE|0|2 +002017|correctionAlgorithmsForHumidityMeasurements|table|CORRECTION ALGORITHMS FOR HUMIDITY MEASUREMENTS|CODE TABLE|0|0|5|CODE TABLE|0|2 +002019|satelliteInstruments|table|SATELLITE INSTRUMENTS|CODE TABLE|0|0|11|CODE TABLE|0|4 +002020|satelliteClassification|table|SATELLITE CLASSIFICATION|CODE TABLE|0|0|9|CODE TABLE|0|3 +002021|satelliteInstrumentDataUsedInProcessing|flag|SATELLITE INSTRUMENT DATA USED IN PROCESSING|FLAG TABLE|0|0|9|FLAG TABLE|0|3 +002022|satelliteDataProcessingTechnique|flag|SATELLITE DATA-PROCESSING TECHNIQUE USED|FLAG TABLE|0|0|8|FLAG TABLE|0|3 +002023|satelliteDerivedWindComputationMethod|table|SATELLITE-DERIVED WIND COMPUTATION METHOD|CODE TABLE|0|0|4|CODE TABLE|0|2 +002024|meanHumidityComputationalMethod|table|INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD|CODE TABLE|0|0|4|CODE TABLE|0|2 +002025|satelliteChannelsUsedInComputation|flag|SATELLITE CHANNEL(S) USED IN COMPUTATION|FLAG TABLE|0|0|25|FLAG TABLE|0|9 +002026|crossTrackResolution|double|CROSS-TRACK RESOLUTION|m|2|0|12|m|2|4 +002027|alongTrackResolution|double|ALONG-TRACK RESOLUTION|m|2|0|12|m|2|4 +002028|segmentSizeAtNadirInXDirection|long|SEGMENT SIZE AT NADIR IN X-DIRECTION|m|0|0|18|m|0|6 +002029|segmentSizeAtNadirInYDirection|long|SEGMENT SIZE AT NADIR IN Y-DIRECTION|m|0|0|18|m|0|6 +002030|methodOfCurrentMeasurement|table|METHOD OF CURRENT MEASUREMENT|CODE TABLE|0|0|3|CODE TABLE|0|1 +002031|durationAndTimeOfCurrentMeasurement|table|DURATION AND TIME OF CURRENT MEASUREMENT|CODE TABLE|0|0|5|CODE TABLE|0|2 +002032|indicatorForDigitization|table|INDICATOR FOR DIGITIZATION|CODE TABLE|0|0|2|CODE TABLE|0|1 +002033|methodOfSalinityOrDepthMeasurement|table|METHOD OF SALINITY/DEPTH MEASUREMENT|CODE TABLE|0|0|3|CODE TABLE|0|1 +002034|drogueType|table|DROGUE TYPE|CODE TABLE|0|0|5|CODE TABLE|0|2 +002035|cableLength|long|CABLE LENGTH|m|0|0|9|m|0|3 +002036|buoyType|table|BUOY TYPE|CODE TABLE|0|0|2|CODE TABLE|0|1 +002037|methodOfTidalObservation|table|METHOD OF TIDAL OBSERVATION|CODE TABLE|0|0|3|CODE TABLE|0|1 +002038|methodOfWaterTemperatureAndOrOrSalinityMeasurement|table|METHOD OF WATER TEMPERATURE AND/OR SALINITY MEASUREMENT|CODE TABLE|0|0|4|CODE TABLE|0|2 +002039|methodOfWetBulbTemperatureMeasurement|table|METHOD OF WET-BULB TEMPERATURE MEASUREMENT|CODE TABLE|0|0|3|CODE TABLE|0|1 +002040|methodOfRemovingVelocityAndMotionOfPlatformFromCurrent|table|METHOD OF REMOVING VELOCITY AND MOTION OF PLATFORM FROM CURRENT|CODE TABLE|0|0|4|CODE TABLE|0|2 +002041|methodForEstimatingReportsRelatedToSynopticFeatures|table|METHOD FOR ESTIMATING REPORTS RELATED TO SYNOPTIC FEATURES|CODE TABLE|0|0|6|CODE TABLE|0|2 +002042|indicatorForSeaSurfaceCurrentSpeed|table|INDICATOR FOR SEA-SURFACE CURRENT SPEED|CODE TABLE|0|0|2|CODE TABLE|0|1 +002044|indicatorForMethodOfCalculatingSpectralWaveData|table|INDICATOR FOR METHOD OF CALCULATING SPECTRAL WAVE DATA|CODE TABLE|0|0|4|CODE TABLE|0|2 +002045|platformType|table|INDICATOR FOR TYPE OF PLATFORM|CODE TABLE|0|0|4|CODE TABLE|0|2 +002046|waveMeasurementInstrumentation|table|WAVE MEASUREMENT INSTRUMENTATION|CODE TABLE|0|0|4|CODE TABLE|0|2 +002047|deepOceanTsunameterType|table|DEEP-OCEAN TSUNAMETER TYPE|CODE TABLE|0|0|7|CODE TABLE|0|2 +002048|satelliteSensorIndicator|table|SATELLITE SENSOR INDICATOR|CODE TABLE|0|0|4|CODE TABLE|0|2 +002049|geostationarySatelliteDataProcessingTechnique|flag|GEOSTATIONARY SATELLITE DATA-PROCESSING TECHNIQUE USED|FLAG TABLE|0|0|8|FLAG TABLE|0|3 +002050|geostationarySounderSatelliteChannels|flag|GEOSTATIONARY SOUNDER SATELLITE CHANNELS USED|FLAG TABLE|0|0|20|FLAG TABLE|0|7 +002051|indicatorToSpecifyObservingMethodForExtremeTemperatures|table|INDICATOR TO SPECIFY OBSERVING METHOD FOR EXTREME TEMPERATURES|CODE TABLE|0|0|4|CODE TABLE|0|2 +002052|geostationaryImagerSatelliteChannels|flag|GEOSTATIONARY IMAGER SATELLITE CHANNELS USED|FLAG TABLE|0|0|6|FLAG TABLE|0|2 +002053|goesBrightnessTemperatureCharacteristics|table|GOES-I/M BRIGHTNESS TEMPERATURE CHARACTERISTICS|CODE TABLE|0|0|4|CODE TABLE|0|2 +002054|goesSoundingsParameter|table|GOES-I/M SOUNDINGS PARAMETER CHARACTERISTICS|CODE TABLE|0|0|4|CODE TABLE|0|2 +002055|geostationarySoundingsStatisticalParameters|table|GEOSTATIONARY SOUNDINGS STATISTICAL PARAMETERS|CODE TABLE|0|0|4|CODE TABLE|0|2 +002056|geostationarySoundingsAccuracyStatistics|table|GEOSTATIONARY SOUNDINGS ACCURACY STATISTICS|CODE TABLE|0|0|4|CODE TABLE|0|2 +002057|originOfFirstGuessInformationForGoesIOrMSoundings|table|ORIGIN OF FIRST-GUESS INFORMATION FOR GOES-I/M SOUNDINGS|CODE TABLE|0|0|4|CODE TABLE|0|2 +002058|validTimesOfFirstGuessInformationForGoesIOrMSoundings|table|VALID TIMES OF FIRST-GUESS INFORMATION FOR GOES-I/M SOUNDINGS|CODE TABLE|0|0|4|CODE TABLE|0|2 +002059|originOfAnalysisInformationForGoesIOrMSoundings|table|ORIGIN OF ANALYSIS INFORMATION FOR GOES-I/M SOUNDINGS|CODE TABLE|0|0|4|CODE TABLE|0|2 +002060|originOfSurfaceInformationForGoesIOrMSoundings|table|ORIGIN OF SURFACE INFORMATION FOR GOES-I/M SOUNDINGS|CODE TABLE|0|0|4|CODE TABLE|0|2 +002061|aircraftNavigationalSystem|table|AIRCRAFT NAVIGATIONAL SYSTEM|CODE TABLE|0|0|3|CODE TABLE|0|1 +002062|aircraftDataRelaySystemType|table|TYPE OF AIRCRAFT DATA RELAY SYSTEM|CODE TABLE|0|0|4|CODE TABLE|0|2 +002063|aircraftRollAngle|double|AIRCRAFT ROLL ANGLE|deg|2|-18000|16|deg|2|5 +002064|aircraftRollAngleQuality|table|AIRCRAFT ROLL ANGLE QUALITY|CODE TABLE|0|0|2|CODE TABLE|0|1 +002065|acarsGroundReceivingStation|string|ACARS GROUND-RECEIVING STATION|CCITT IA5|0|0|40|Character|0|5 +002066|radiosondeGroundReceivingSystem|table|RADIOSONDE GROUND RECEIVING SYSTEM|CODE TABLE|0|0|6|CODE TABLE|0|2 +002067|radiosondeOperatingFrequency|long|RADIOSONDE OPERATING FREQUENCY|Hz|-5|0|15|Hz|-5|5 +002070|originalSpecificationOfLatitudeOrLongitude|table|ORIGINAL SPECIFICATION OF LATITUDE/LONGITUDE|CODE TABLE|0|0|4|CODE TABLE|0|2 +002071|spectrographicWavelength|double|SPECTROGRAPHIC WAVELENGTH|m|13|0|30|m|13|10 +002072|spectrographicWidth|double|SPECTROGRAPHIC WIDTH|m|13|0|30|m|13|10 +002080|balloonManufacturer|table|BALLOON MANUFACTURER|CODE TABLE|0|0|6|CODE TABLE|0|2 +002081|balloonType|table|TYPE OF BALLOON|CODE TABLE|0|0|5|CODE TABLE|0|2 +002082|weightOfBalloon|double|WEIGHT OF BALLOON|kg|3|0|12|kg|3|4 +002083|balloonShelterType|table|TYPE OF BALLOON SHELTER|CODE TABLE|0|0|4|CODE TABLE|0|2 +002084|typeOfGasUsedInBalloon|table|TYPE OF GAS USED IN BALLOON|CODE TABLE|0|0|4|CODE TABLE|0|2 +002085|amountOfGasUsedInBalloon|double|AMOUNT OF GAS USED IN BALLOON|kg|3|0|13|kg|3|4 +002086|balloonFlightTrainLength|double|BALLOON FLIGHT TRAIN LENGTH|m|1|0|10|m|1|4 +002087|parachuteSurfaceArea|double|PARACHUTE SURFACE AREA|m2|4|0|15|m2|4|5 +002088|volumeOfGasUsedInBalloon|double|VOLUME OF GAS USED IN BALLOON|m3|3|0|13|m3|3|4 +002090|instrumentWavelength|double|INSTRUMENT WAVELENGTH|m|9|0|16|m|9|5 +002091|entrySensor4Or20Ma|double|ENTRY SENSOR 4/20 MA|A|4|0|10|A|4|3 +002092|ozoneProfileComputationMethod|table|OZONE PROFILE COMPUTATION METHOD|CODE TABLE|0|0|3|CODE TABLE|0|1 +002095|pressureSensorType|table|TYPE OF PRESSURE SENSOR|CODE TABLE|0|0|5|CODE TABLE|0|2 +002096|temperatureSensorType|table|TYPE OF TEMPERATURE SENSOR|CODE TABLE|0|0|5|CODE TABLE|0|2 +002097|humiditySensorType|table|TYPE OF HUMIDITY SENSOR|CODE TABLE|0|0|5|CODE TABLE|0|2 +002099|polarization|table|POLARIZATION|CODE TABLE|0|0|3|CODE TABLE|0|1 +002100|radarConstant|double|RADAR CONSTANT|dB|1|0|12|dB|1|4 +002101|antennaType|table|TYPE OF ANTENNA|CODE TABLE|0|0|4|CODE TABLE|0|2 +002102|antennaHeightAboveTowerBase|long|ANTENNA HEIGHT ABOVE TOWER BASE|m|0|0|8|m|0|3 +002103|radome|flag|RADOME|FLAG TABLE|0|0|2|FLAG TABLE|0|1 +002104|antennaPolarization|table|ANTENNA POLARIZATION|CODE TABLE|0|0|4|CODE TABLE|0|2 +002105|maximumAntennaGain|long|MAXIMUM ANTENNA GAIN|dB|0|0|6|dB|0|2 +002106|3DbBeamwidth|double|3-DB BEAMWIDTH|deg|1|0|6|deg|1|2 +002107|sidelobeSuppression|long|SIDELOBE SUPPRESSION|dB|0|0|6|dB|0|2 +002108|crosspolDiscriminationOnAxis|long|CROSSPOL DISCRIMINATION (ON AXIS)|dB|0|0|6|dB|0|2 +002109|antennaSpeedAzimuth|double|ANTENNA SPEED (AZIMUTH)|deg/s|2|0|12|deg/s|2|4 +002110|antennaSpeedElevation|double|ANTENNA SPEED (ELEVATION)|deg/s|2|0|12|deg/s|2|4 +002111|radarIncidenceAngle|double|RADAR INCIDENCE ANGLE|deg|1|0|10|deg|1|4 +002112|radarLookAngle|double|RADAR LOOK ANGLE|deg|1|0|12|deg|1|4 +002113|numberOfAzimuthLooks|long|NUMBER OF AZIMUTH LOOKS|Numeric|0|0|4|Numeric|0|2 +002114|antennaEffectiveSurfaceArea|long|ANTENNA EFFECTIVE SURFACE AREA|m2|0|0|15|m2|0|5 +002115|surfaceObservingEquipmentType|table|TYPE OF SURFACE OBSERVING EQUIPMENT|CODE TABLE|0|0|5|CODE TABLE|0|2 +002116|percentageOf320MhzBandProcessed|long|PERCENTAGE OF 320 MHZ BAND PROCESSED|%|0|0|7|%|0|3 +002117|percentageOf80MhzBandProcessed|long|PERCENTAGE OF 80 MHZ BAND PROCESSED|%|0|0|7|%|0|3 +002118|percentageOf20MhzBandProcessed|long|PERCENTAGE OF 20 MHZ BAND PROCESSED|%|0|0|7|%|0|3 +002119|ra2InstrumentOperations|table|RA-2 INSTRUMENT OPERATIONS|CODE TABLE|0|0|3|CODE TABLE|0|1 +002120|oceanWaveFrequency|double|OCEAN WAVE FREQUENCY|Hz|3|0|10|Hz|3|4 +002121|meanFrequency|long|MEAN FREQUENCY|Hz|-8|0|7|Hz|-8|3 +002122|frequencyAgilityRange|long|FREQUENCY AGILITY RANGE|Hz|-6|-128|8|Hz|-6|3 +002123|peakPower|long|PEAK POWER|W|-4|0|7|W|-4|3 +002124|averagePower|long|AVERAGE POWER|W|-1|0|7|W|-1|3 +002125|pulseRepetitionFrequency|long|PULSE REPETITION FREQUENCY|Hz|-1|0|8|Hz|-1|3 +002126|pulseWidth|double|PULSE WIDTH|s|7|0|6|s|7|2 +002127|receiverIntermediateFrequency|long|RECEIVER INTERMEDIATE FREQUENCY|Hz|-6|0|7|Hz|-6|3 +002128|intermediateFrequencyBandwidth|long|INTERMEDIATE FREQUENCY BANDWIDTH|Hz|-5|0|6|Hz|-5|2 +002129|minimumDetectableSignal|long|MINIMUM DETECTABLE SIGNAL|dB|0|-150|5|dB|0|3 +002130|dynamicRange|long|DYNAMIC RANGE|dB|0|0|7|dB|0|3 +002131|sensitivityTimeControl|flag|SENSITIVITY TIME CONTROL (STC)|FLAG TABLE|0|0|2|FLAG TABLE|0|1 +002132|azimuthPointingAccuracy|double|AZIMUTH POINTING ACCURACY|deg|2|0|6|deg|2|2 +002133|elevationPointingAccuracy|double|ELEVATION POINTING ACCURACY|deg|2|0|6|deg|2|2 +002134|antennaBeamAzimuth|double|ANTENNA BEAM AZIMUTH|deg|2|0|16|deg|2|5 +002135|antennaElevation|double|ANTENNA ELEVATION|deg|2|-9000|15|deg|2|5 +002136|rangeProcessedByRangeAttenuationCorrection|long|RANGE PROCESSED BY RANGE ATTENUATION CORRECTION|m|-3|0|16|m|-3|5 +002137|radarDualPrfRatio|table|RADAR DUAL PRF RATIO|CODE TABLE|0|0|4|CODE TABLE|0|2 +002138|antennaRotationDirection|table|ANTENNA ROTATION DIRECTION|CODE TABLE|0|0|2|CODE TABLE|0|1 +002139|siralInstrumentConfiguration|table|SIRAL INSTRUMENT CONFIGURATION|CODE TABLE|0|0|2|CODE TABLE|0|1 +002140|satelliteRadarBeamAzimuthAngle|long|SATELLITE RADAR BEAM AZIMUTH ANGLE|deg|0|0|9|deg|0|3 +002141|measurementType|string|MEASUREMENT TYPE|CCITT IA5|0|0|24|Character|0|3 +002142|ozoneInstrument|string|OZONE INSTRUMENT SERIAL NUMBER/IDENTIFICATION|CCITT IA5|0|0|32|Character|0|4 +002143|ozoneInstrumentType|table|OZONE INSTRUMENT TYPE|CODE TABLE|0|0|7|CODE TABLE|0|3 +002144|lightSourceTypeForBrewerSpectrophotometer|table|LIGHT SOURCE TYPE FOR BREWER SPECTROPHOTOMETER|CODE TABLE|0|0|4|CODE TABLE|0|2 +002145|wavelengthSettingForDobsonInstruments|table|WAVELENGTH SETTING FOR DOBSON INSTRUMENTS|CODE TABLE|0|0|4|CODE TABLE|0|2 +002146|sourceConditionsForDobsonInstruments|table|SOURCE CONDITIONS FOR DOBSON INSTRUMENTS|CODE TABLE|0|0|4|CODE TABLE|0|2 +002147|methodOfTransmissionToCollectionCentre|table|METHOD OF TRANSMISSION TO COLLECTION CENTRE|CODE TABLE|0|0|6|CODE TABLE|0|2 +002148|dataCollectionLocationSystem|table|DATA COLLECTION AND/OR LOCATION SYSTEM|CODE TABLE|0|0|5|CODE TABLE|0|2 +002149|dataBuoyType|table|TYPE OF DATA BUOY|CODE TABLE|0|0|6|CODE TABLE|0|2 +002150|tovsOrAtovsOrAvhrrInstrumentationChannelNumber|table|TOVS/ATOVS/AVHRR INSTRUMENTATION CHANNEL NUMBER|CODE TABLE|0|0|6|CODE TABLE|0|2 +002151|radiometerIdentifier|table|RADIOMETER IDENTIFIER|CODE TABLE|0|0|11|CODE TABLE|0|4 +002152|satelliteInstrumentUsedInDataProcessing|flag|SATELLITE INSTRUMENT USED IN DATA PROCESSING|FLAG TABLE|0|0|31|FLAG TABLE|0|10 +002153|satelliteChannelCentreFrequency|long|SATELLITE CHANNEL CENTRE FREQUENCY|Hz|-8|0|26|Hz|-8|8 +002154|satelliteChannelBandWidth|long|SATELLITE CHANNEL BAND WIDTH|Hz|-8|0|26|Hz|-8|8 +002155|satelliteChannelWavelength|double|SATELLITE CHANNEL WAVELENGTH|m|9|0|16|m|9|5 +002156|percentageOfValidKuOceanRetrackerMeasurements|long|PERCENTAGE OF VALID KU OCEAN RETRACKER MEASUREMENTS|%|0|0|7|%|0|3 +002157|percentageOfValidSOceanRetrackerMeasurements|long|PERCENTAGE OF VALID S OCEAN RETRACKER MEASUREMENTS|%|0|0|7|%|0|3 +002158|ra2Instrument|flag|RA-2 INSTRUMENT|FLAG TABLE|0|0|9|FLAG TABLE|0|3 +002159|mwrInstrument|flag|MWR INSTRUMENT|FLAG TABLE|0|0|8|FLAG TABLE|0|3 +002160|radarWaveLength|table|WAVELENGTH OF THE RADAR|CODE TABLE|0|0|4|CODE TABLE|0|2 +002161|windProcessingMethod|flag|WIND PROCESSING METHOD|FLAG TABLE|0|0|16|FLAG TABLE|0|6 +002162|extendedHeightAssignmentMethod|table|EXTENDED HEIGHT ASSIGNMENT METHOD|CODE TABLE|0|0|6|CODE TABLE|0|2 +002163|heightAssignmentMethod|table|HEIGHT ASSIGNMENT METHOD|CODE TABLE|0|0|4|CODE TABLE|0|2 +002164|tracerCorrelationMethod|table|TRACER CORRELATION METHOD|CODE TABLE|0|0|3|CODE TABLE|0|1 +002165|radianceTypeFlags|flag|RADIANCE TYPE FLAGS|FLAG TABLE|0|0|15|FLAG TABLE|0|5 +002166|radianceType|table|RADIANCE TYPE|CODE TABLE|0|0|4|CODE TABLE|0|2 +002167|radianceComputationalMethod|table|RADIANCE COMPUTATIONAL METHOD|CODE TABLE|0|0|4|CODE TABLE|0|2 +002168|hydrostaticPressureOfLowerEndOfCableThermistorString|long|HYDROSTATIC PRESSURE OF LOWER END OF CABLE (THERMISTOR STRING)|Pa|-3|0|16|kPa|0|5 +002169|anemometerType|table|ANEMOMETER TYPE|CODE TABLE|0|0|4|CODE TABLE|0|2 +002170|aircraftHumiditySensors|table|AIRCRAFT HUMIDITY SENSORS|CODE TABLE|0|0|6|CODE TABLE|0|2 +002171|instrumentSerialNumberForWaterTemperatureProfile|string|INSTRUMENT SERIAL NUMBER FOR WATER TEMPERATURE PROFILE MEASUREMENT|CCITT IA5|0|0|64|Character|0|8 +002172|productTypeForRetrievedAtmosphericGases|table|PRODUCT TYPE FOR RETRIEVED ATMOSPHERIC GASES|CODE TABLE|0|0|8|CODE TABLE|0|3 +002173|squareOfOffNadirAngle|double|SQUARE OF THE OFF-NADIR ANGLE|deg2|4|0|10|deg2|4|4 +002174|meanAcrossTrackPixelNumber|long|MEAN ACROSS TRACK PIXEL NUMBER|Numeric|0|0|9|Numeric|0|3 +002175|methodOfPrecipitationMeasurement|table|METHOD OF PRECIPITATION MEASUREMENT|CODE TABLE|0|0|4|CODE TABLE|0|2 +002176|methodOfStateOfGroundMeasurement|table|METHOD OF STATE OF GROUND MEASUREMENT|CODE TABLE|0|0|4|CODE TABLE|0|2 +002177|methodOfSnowDepthMeasurement|table|METHOD OF SNOW DEPTH MEASUREMENT|CODE TABLE|0|0|4|CODE TABLE|0|2 +002178|methodOfLiquidContentMeasurementOfPrecipitation|table|METHOD OF LIQUID CONTENT MEASUREMENT OF PRECIPITATION|CODE TABLE|0|0|4|CODE TABLE|0|2 +002179|skyConditionAlgorithmType|table|TYPE OF SKY CONDITION ALGORITHM|CODE TABLE|0|0|4|CODE TABLE|0|2 +002180|mainPresentWeatherDetectingSystem|table|MAIN PRESENT WEATHER DETECTING SYSTEM|CODE TABLE|0|0|4|CODE TABLE|0|2 +002181|supplementaryPresentWeatherSensor|flag|SUPPLEMENTARY PRESENT WEATHER SENSOR|FLAG TABLE|0|0|21|FLAG TABLE|0|7 +002182|visibilityMeasurementSystem|table|VISIBILITY MEASUREMENT SYSTEM|CODE TABLE|0|0|4|CODE TABLE|0|2 +002183|cloudDetectionSystem|table|CLOUD DETECTION SYSTEM|CODE TABLE|0|0|4|CODE TABLE|0|2 +002184|lightningDetectionSensorType|table|TYPE OF LIGHTNING DETECTION SENSOR|CODE TABLE|0|0|4|CODE TABLE|0|2 +002185|methodOfEvaporationMeasurement|table|METHOD OF EVAPORATION MEASUREMENT|CODE TABLE|0|0|4|CODE TABLE|0|2 +002186|capabilityToDetectPrecipitationPhenomena|flag|CAPABILITY TO DETECT PRECIPITATION PHENOMENA|FLAG TABLE|0|0|30|FLAG TABLE|0|10 +002187|capabilityToDetectOtherWeatherPhenomena|flag|CAPABILITY TO DETECT OTHER WEATHER PHENOMENA|FLAG TABLE|0|0|18|FLAG TABLE|0|6 +002188|capabilityToDetectObscuration|flag|CAPABILITY TO DETECT OBSCURATION|FLAG TABLE|0|0|21|FLAG TABLE|0|7 +002189|capabilityToDiscriminateLightningStrikes|flag|CAPABILITY TO DISCRIMINATE LIGHTNING STRIKES|FLAG TABLE|0|0|12|FLAG TABLE|0|4 +002190|lagrangianDrifterSubmergenceTimeSubmerged|long|LAGRANGIAN DRIFTER SUBMERGENCE (% TIME SUBMERGED)|%|0|0|7|%|0|3 +002191|geopotentialHeightCalculation|table|GEOPOTENTIAL HEIGHT CALCULATION|CODE TABLE|0|0|4|CODE TABLE|0|2 +003001|surfaceStationType|table|SURFACE STATION TYPE|CODE TABLE|0|0|5|CODE TABLE|0|2 +003003|thermometerOrHygrometerHousing|table|THERMOMETER/HYGROMETER HOUSING|CODE TABLE|0|0|4|CODE TABLE|0|2 +003004|typeOfScreenOrShelterOrRadiationShield|table|TYPE OF SCREEN/SHELTER/RADIATION SHIELD|CODE TABLE|0|0|4|CODE TABLE|0|2 +003005|horizontalWidthOfScreenOrShieldX|double|HORIZONTAL WIDTH OF SCREEN OR SHIELD (X)|m|3|0|16|m|3|5 +003006|horizontalDepthOfScreenOrShieldY|double|HORIZONTAL DEPTH OF SCREEN OR SHIELD (Y)|m|3|0|16|m|3|5 +003007|verticalHeightOfScreenOrShieldZ|double|VERTICAL HEIGHT OF SCREEN OR SHIELD (Z)|m|3|0|16|m|3|5 +003008|artificiallyVentilatedScreenOrShield|table|ARTIFICIALLY VENTILATED SCREEN OR SHIELD|CODE TABLE|0|0|3|CODE TABLE|0|1 +003009|amountOfForcedVentilationAtTimeOfReading|double|AMOUNT OF FORCED VENTILATION AT TIME OF READING|m/s|1|0|9|m/s|1|3 +003010|methodOfSeaOrWaterCurrentMeasurement|table|METHOD OF SEA/WATER CURRENT MEASUREMENT|CODE TABLE|0|0|4|CODE TABLE|0|2 +003011|methodOfDepthCalculation|table|METHOD OF DEPTH CALCULATION|CODE TABLE|0|0|2|CODE TABLE|0|1 +003012|instrumentTypeOrSensorForDissolvedOxygenMeasurement|table|INSTRUMENT TYPE/SENSOR FOR DISSOLVED OXYGEN MEASUREMENT|CODE TABLE|0|0|4|CODE TABLE|0|2 +003016|positionOfRoadSensors|table|POSITION OF ROAD SENSORS|CODE TABLE|0|0|4|CODE TABLE|0|2 +003017|extendedTypeOfStation|flag|EXTENDED TYPE OF STATION|FLAG TABLE|0|0|6|FLAG TABLE|0|2 +003018|typeOfRoad|table|TYPE OF ROAD|CODE TABLE|0|0|5|CODE TABLE|0|2 +003019|typeOfConstruction|table|TYPE OF CONSTRUCTION|CODE TABLE|0|0|4|CODE TABLE|0|2 +003020|materialForThermometerOrHygrometerHousing|table|MATERIAL FOR THERMOMETER/HYGROMETER HOUSING|CODE TABLE|0|0|3|CODE TABLE|0|1 +003021|hygrometerHeating|table|HYGROMETER HEATING|CODE TABLE|0|0|2|CODE TABLE|0|1 +003022|instrumentOwner|table|INSTRUMENT OWNER|CODE TABLE|0|0|3|CODE TABLE|0|1 +003023|configurationOfLouversForThermometerOrHygrometerScreen|table|CONFIGURATION OF LOUVERS FOR THERMOMETER/HYGROMETER SCREEN|CODE TABLE|0|0|3|CODE TABLE|0|1 +003024|psychrometricCoefficient|double|PSYCHROMETRIC COEFFICIENT|K-1|6|0|10|K-1|6|3 +003025|crossTrackEstimationAreaSize|long|CROSS-TRACK ESTIMATION AREA SIZE|m|0|5000|16|m|0|5 +003026|alongTrackEstimationAreaSize|long|ALONG-TRACK ESTIMATION AREA SIZE|m|0|5000|16|m|0|5 +003027|typeOfFlightRig|table|TYPE OF FLIGHT RIG|CODE TABLE|0|0|4|CODE TABLE|0|2 +003028|methodOfSnowWaterEquivalentMeasurement|table|METHOD OF SNOW WATER EQUIVALENT MEASUREMENT|CODE TABLE|0|0|6|CODE TABLE|0|2 +004001|year|long|YEAR|a|0|0|12|a|0|4 +004002|month|long|MONTH|mon|0|0|4|mon|0|2 +004003|day|long|DAY|d|0|0|6|d|0|2 +004004|hour|long|HOUR|h|0|0|5|h|0|2 +004005|minute|long|MINUTE|min|0|0|6|min|0|2 +004006|second|long|SECOND|s|0|0|6|s|0|2 +004007|secondsWithinAMinuteMicrosecond|double|SECONDS WITHIN A MINUTE (MICROSECOND ACCURACY)|s|6|0|26|s|6|8 +004011|timeIncrement|long|TIME INCREMENT|a|0|-1024|11|a|0|4 +004012|timeIncrement|long|TIME INCREMENT|mon|0|-1024|11|mon|0|4 +004013|timeIncrement|long|TIME INCREMENT|d|0|-1024|11|d|0|4 +004014|timeIncrement|long|TIME INCREMENT|h|0|-1024|11|h|0|4 +004015|timeIncrement|long|TIME INCREMENT|min|0|-2048|12|min|0|4 +004016|timeIncrement|long|TIME INCREMENT|s|0|-4096|13|s|0|4 +004017|referenceTimePeriodForAccumulatedOrExtremeData|long|REFERENCE TIME PERIOD FOR ACCUMULATED OR EXTREME DATA|min|0|-1440|12|min|0|4 +004021|timePeriod|long|TIME PERIOD OR DISPLACEMENT|a|0|-1024|11|a|0|4 +004022|timePeriod|long|TIME PERIOD OR DISPLACEMENT|mon|0|-1024|11|mon|0|4 +004023|timePeriod|long|TIME PERIOD OR DISPLACEMENT|d|0|-1024|11|d|0|4 +004024|timePeriod|long|TIME PERIOD OR DISPLACEMENT|h|0|-2048|12|h|0|4 +004025|timePeriod|long|TIME PERIOD OR DISPLACEMENT|min|0|-2048|12|min|0|4 +004026|timePeriod|long|TIME PERIOD OR DISPLACEMENT|s|0|-4096|13|s|0|4 +004031|durationOfTimeRelatingToFollowingValue|long|DURATION OF TIME RELATING TO FOLLOWING VALUE|h|0|0|8|h|0|3 +004032|durationOfTimeRelatingToFollowingValue|long|DURATION OF TIME RELATING TO FOLLOWING VALUE|min|0|0|6|min|0|2 +004041|timeDifferenceUtcLmt|long|TIME DIFFERENCE, UTC - LMT|min|0|-1440|12|min|0|4 +004043|dayOfYear|long|DAY OF THE YEAR|d|0|0|9|d|0|3 +004051|principalTimeOfDailyReadingOfMaximumTemperature|long|PRINCIPAL TIME OF DAILY READING OF MAXIMUM TEMPERATURE|h|0|0|5|h|0|2 +004052|principalTimeOfDailyReadingOfMinimumTemperature|long|PRINCIPAL TIME OF DAILY READING OF MINIMUM TEMPERATURE|h|0|0|5|h|0|2 +004053|numberOfDaysWithPrecipitationEqualToOrMoreThan1Mm|long|NUMBER OF DAYS WITH PRECIPITATION EQUAL TO OR MORE THAN 1 MM|Numeric|0|0|6|Numeric|0|2 +004059|timesOfObservationUsedToComputeReportedMeanValues|flag|TIMES OF OBSERVATION USED TO COMPUTE THE REPORTED MEAN VALUES|FLAG TABLE|0|0|6|FLAG TABLE|0|2 +004065|timeIncrement|long|SHORT TIME INCREMENT|min|0|-128|8|min|0|2 +004066|timeIncrement|long|SHORT TIME INCREMENT|s|0|-128|8|s|0|2 +004073|timePeriod|long|SHORT TIME PERIOD OR DISPLACEMENT|d|0|-128|8|d|0|2 +004074|timePeriod|long|SHORT TIME PERIOD OR DISPLACEMENT|h|0|-128|8|h|0|2 +004075|timePeriod|long|SHORT TIME PERIOD OR DISPLACEMENT|min|0|-128|8|min|0|2 +004080|averagingPeriodForFollowingValue|table|AVERAGING PERIOD FOR FOLLOWING VALUE|CODE TABLE|0|0|4|CODE TABLE|0|2 +004086|timePeriod|long|LONG TIME PERIOD OR DISPLACEMENT|s|0|-8192|15|s|0|5 +005001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7 +005002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4 +005011|latitudeIncrement|double|LATITUDE INCREMENT (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7 +005012|latitudeIncrement|double|LATITUDE INCREMENT (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4 +005015|latitudeDisplacement|double|LATITUDE DISPLACEMENT (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7 +005016|latitudeDisplacement|double|LATITUDE DISPLACEMENT (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4 +005021|bearingOrAzimuth|double|BEARING OR AZIMUTH|deg|2|0|16|deg|2|5 +005022|solarAzimuth|double|SOLAR AZIMUTH|deg|2|0|16|deg|2|5 +005023|sunToSatelliteAzimuthDifference|double|SUN TO SATELLITE AZIMUTH DIFFERENCE|deg|1|-1800|12|deg|1|4 +005030|directionSpectral|long|DIRECTION (SPECTRAL)|deg|0|0|12|deg|0|4 +005031|rowNumber|long|ROW NUMBER|Numeric|0|0|12|Numeric|0|4 +005032|yOffset|double|Y OFFSET|m|2|-1073741824|31|m|2|11 +005033|pixelSizeOnHorizontal1|long|PIXEL SIZE ON HORIZONTAL - 1|m|-1|0|16|m|-1|5 +005034|alongTrackRowNumber|long|ALONG TRACK ROW NUMBER|Numeric|0|0|11|Numeric|0|4 +005035|xDimensionMaximumSize|long|MAXIMUM SIZE OF X-DIMENSION|Numeric|0|0|12|Numeric|0|4 +005036|shipTransectNumberAccordingToSoop|long|SHIP TRANSECT NUMBER ACCORDING TO SOOP|Numeric|0|0|7|Numeric|0|2 +005040|orbitNumber|long|ORBIT NUMBER|Numeric|0|0|24|Numeric|0|8 +005041|scanLineNumber|long|SCAN LINE NUMBER|Numeric|0|0|8|Numeric|0|3 +005042|channelNumber|long|CHANNEL NUMBER|Numeric|0|0|6|Numeric|0|2 +005043|fieldOfViewNumber|long|FIELD OF VIEW NUMBER|Numeric|0|0|8|Numeric|0|3 +005044|satelliteCycleNumber|long|SATELLITE CYCLE NUMBER|Numeric|0|0|11|Numeric|0|4 +005045|fieldOfRegardNumber|long|FIELD OF REGARD NUMBER|Numeric|0|0|8|Numeric|0|3 +005052|channelNumberIncrement|long|CHANNEL NUMBER INCREMENT|Numeric|0|0|5|Numeric|0|2 +005053|fieldOfViewNumberIncrement|long|FIELD OF VIEW NUMBER INCREMENT|Numeric|0|0|5|Numeric|0|2 +005060|yAngularPositionFromCentreOfGravity|double|Y ANGULAR POSITION FROM CENTRE OF GRAVITY|deg|6|-8000000|24|deg|6|8 +005061|zAngularPositionFromCentreOfGravity|double|Z ANGULAR POSITION FROM CENTRE OF GRAVITY|deg|6|-8000000|24|deg|6|8 +005063|spacecraftRoll|double|SPACECRAFT ROLL|deg|2|0|16|deg|2|5 +005064|spacecraftPitch|double|SPACECRAFT PITCH|deg|2|0|16|deg|2|5 +005066|spacecraftYaw|double|SPACECRAFT YAW|deg|2|0|16|deg|2|5 +005067|numberOfScanLines|long|NUMBER OF SCAN LINES|Numeric|0|0|8|Numeric|0|3 +005068|profileNumber|long|PROFILE NUMBER|Numeric|0|0|16|Numeric|0|5 +005069|receiverChannel|table|RECEIVER CHANNEL|CODE TABLE|0|0|2|CODE TABLE|0|1 +005070|observationIdentifier|long|OBSERVATION IDENTIFIER|Numeric|0|0|30|Numeric|0|10 +005071|stripmapIdentifier|long|STRIPMAP IDENTIFIER|Numeric|0|0|16|Numeric|0|5 +005072|numberOfSpectraInRangeDirection|long|NUMBER OF SPECTRA IN RANGE DIRECTION|Numeric|0|0|8|Numeric|0|3 +005073|numberOfSpectraInAzimuthalDirection|long|NUMBER OF SPECTRA IN AZIMUTHAL DIRECTION|Numeric|0|0|8|Numeric|0|3 +005074|indexInRangeDirection|long|INDEX IN RANGE DIRECTION|Numeric|0|0|8|Numeric|0|3 +005075|indexInAzimuthalDirection|long|INDEX IN AZIMUTHAL DIRECTION|Numeric|0|0|8|Numeric|0|3 +006001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8 +006002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5 +006011|longitudeIncrement|double|LONGITUDE INCREMENT (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8 +006012|longitudeIncrement|double|LONGITUDE INCREMENT (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5 +006015|longitudeDisplacement|double|LONGITUDE DISPLACEMENT (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8 +006016|longitudeDisplacement|double|LONGITUDE DISPLACEMENT (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5 +006021|distance|long|DISTANCE|m|-1|0|13|m|-1|4 +006029|waveNumber|double|WAVE NUMBER|/m|1|0|22|/m|1|7 +006030|waveNumberSpectral|double|WAVE NUMBER (SPECTRAL)|rad/m|5|0|13|rad/m|5|4 +006031|columnNumber|long|COLUMN NUMBER|Numeric|0|0|12|Numeric|0|4 +006032|xOffset|double|X OFFSET|m|2|-1073741824|31|m|2|11 +006033|pixelSizeOnHorizontal2|long|PIXEL SIZE ON HORIZONTAL - 2|m|-1|0|16|m|-1|5 +006034|crossTrackCellNumber|long|CROSS-TRACK CELL NUMBER|Numeric|0|0|7|Numeric|0|3 +006035|yDimensionMaximumSize|long|MAXIMUM SIZE OF Y-DIMENSION|Numeric|0|0|12|Numeric|0|4 +006040|radiusOfConfidence|long|RADIUS OF CONFIDENCE|m|0|0|13|m|0|4 +007001|heightOfStation|long|HEIGHT OF STATION|m|0|-400|15|m|0|5 +007002|height|long|HEIGHT OR ALTITUDE|m|-1|-40|16|m|-1|5 +007003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6 +007004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5 +007005|heightIncrement|long|HEIGHT INCREMENT|m|0|-400|12|m|0|4 +007006|heightAboveStation|long|HEIGHT ABOVE STATION|m|0|0|15|m|0|5 +007007|height|long|HEIGHT|m|0|-1000|17|m|0|6 +007008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7 +007009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5 +007010|flightLevel|long|FLIGHT LEVEL|m|0|-1024|16|ft|-1|5 +007012|gridPointAltitude|double|GRID POINT ALTITUDE|m|2|-50000|20|m|2|7 +007021|elevation|double|ELEVATION|deg|2|-9000|15|deg|2|5 +007022|solarElevation|double|SOLAR ELEVATION|deg|2|-9000|15|deg|2|5 +007024|satelliteZenithAngle|double|SATELLITE ZENITH ANGLE|deg|2|-9000|15|deg|2|5 +007025|solarZenithAngle|double|SOLAR ZENITH ANGLE|deg|2|-9000|15|deg|2|5 +007026|satelliteZenithAngle|double|SATELLITE ZENITH ANGLE|deg|4|-900000|21|deg|4|7 +007030|heightOfStationGroundAboveMeanSeaLevel|double|HEIGHT OF STATION GROUND ABOVE MEAN SEA LEVEL|m|1|-4000|17|m|1|5 +007031|heightOfBarometerAboveMeanSeaLevel|double|HEIGHT OF BAROMETER ABOVE MEAN SEA LEVEL|m|1|-4000|17|m|1|5 +007032|heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform|double|HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM)|m|2|0|16|m|2|5 +007033|heightOfSensorAboveWaterSurface|double|HEIGHT OF SENSOR ABOVE WATER SURFACE|m|1|0|12|m|1|4 +007035|zDimensionMaximumSize|long|MAXIMUM SIZE OF Z-DIMENSION|Numeric|0|0|12|Numeric|0|4 +007036|levelIndexOfZ|long|LEVEL INDEX OF Z|Numeric|0|0|12|Numeric|0|4 +007040|impactParameter|double|IMPACT PARAMETER|m|1|62000000|22|m|1|8 +007061|depthBelowLandSurface|double|DEPTH BELOW LAND SURFACE|m|2|0|14|m|2|5 +007062|depthBelowWaterSurface|double|DEPTH BELOW SEA/WATER SURFACE|m|1|0|17|m|1|6 +007063|depthBelowWaterSurface|double|DEPTH BELOW SEA/WATER SURFACE (CM)|m|2|0|20|m|2|7 +007064|representativeHeightOfSensorAboveStation|long|REPRESENTATIVE HEIGHT OF SENSOR ABOVE STATION|m|0|0|4|m|0|2 +007065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6 +007070|drogueDepth|long|DROGUE DEPTH|m|0|0|10|m|0|4 +007071|height|double|HEIGHT (HIGH RESOLUTION)|m|3|-10000000|26|m|3|8 +007072|scanAngle|double|SCAN ANGLE|deg|2|-9000|15|deg|2|6 +008001|verticalSoundingSignificance|flag|VERTICAL SOUNDING SIGNIFICANCE|FLAG TABLE|0|0|7|FLAG TABLE|0|3 +008002|verticalSignificanceSurfaceObservations|table|VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)|CODE TABLE|0|0|6|CODE TABLE|0|2 +008003|verticalSignificanceSatelliteObservations|table|VERTICAL SIGNIFICANCE (SATELLITE OBSERVATIONS)|CODE TABLE|0|0|6|CODE TABLE|0|2 +008004|phaseOfAircraftFlight|table|PHASE OF AIRCRAFT FLIGHT|CODE TABLE|0|0|3|CODE TABLE|0|1 +008005|meteorologicalAttributeSignificance|table|METEOROLOGICAL ATTRIBUTE SIGNIFICANCE|CODE TABLE|0|0|4|CODE TABLE|0|2 +008006|ozoneVerticalSoundingSignificance|flag|OZONE VERTICAL SOUNDING SIGNIFICANCE|FLAG TABLE|0|0|9|FLAG TABLE|0|3 +008007|dimensionalSignificance|table|DIMENSIONAL SIGNIFICANCE|CODE TABLE|0|0|4|CODE TABLE|0|2 +008008|radiationVerticalSoundingSignificance|flag|RADIATION VERTICAL SOUNDING SIGNIFICANCE|FLAG TABLE|0|0|9|FLAG TABLE|0|3 +008009|detailedPhaseOfFlight|table|DETAILED PHASE OF FLIGHT|CODE TABLE|0|0|4|CODE TABLE|0|2 +008010|surfaceQualifierForTemperatureData|table|SURFACE QUALIFIER (TEMPERATURE DATA)|CODE TABLE|0|0|5|CODE TABLE|0|2 +008011|meteorologicalFeature|table|METEOROLOGICAL FEATURE|CODE TABLE|0|0|6|CODE TABLE|0|2 +008012|landOrSeaQualifier|table|LAND/SEA QUALIFIER|CODE TABLE|0|0|2|CODE TABLE|0|1 +008013|dayOrNightQualifier|table|DAY/NIGHT QUALIFIER|CODE TABLE|0|0|2|CODE TABLE|0|1 +008014|qualifierForRunwayVisualRange|table|QUALIFIER FOR RUNWAY VISUAL RANGE|CODE TABLE|0|0|4|CODE TABLE|0|2 +008015|significantQualifierForSensor|table|SIGNIFICANT QUALIFIER FOR SENSOR|CODE TABLE|0|0|3|CODE TABLE|0|1 +008016|changeQualifierOfATrendTypeForecastOrAnAerodromeForecast|table|CHANGE QUALIFIER OF A TREND-TYPE FORECAST OR AN AERODROME FORECAST|CODE TABLE|0|0|3|CODE TABLE|0|1 +008017|qualifierOfTimeWhenForecastChangeExpected|table|QUALIFIER OF THE TIME WHEN THE FORECAST CHANGE IS EXPECTED|CODE TABLE|0|0|2|CODE TABLE|0|1 +008018|seawindsLandOrIceSurfaceType|flag|SEAWINDS LAND/ICE SURFACE TYPE|FLAG TABLE|0|0|17|FLAG TABLE|0|6 +008019|qualifierForFollowingCentreIdentifier|table|QUALIFIER FOR FOLLOWING CENTRE IDENTIFIER|CODE TABLE|0|0|4|CODE TABLE|0|2 +008020|totalNumberOfMissingEntitiesWithRespectToAccumulationOrAverage|long|TOTAL NUMBER OF MISSING ENTITIES (WITH RESPECT TO ACCUMULATION OR AVERAGE)|Numeric|0|0|16|Numeric|0|5 +008021|timeSignificance|table|TIME SIGNIFICANCE|CODE TABLE|0|0|5|CODE TABLE|0|2 +008022|totalNumberWithRespectToAccumulationOrAverage|long|TOTAL NUMBER (WITH RESPECT TO ACCUMULATION OR AVERAGE)|Numeric|0|0|16|Numeric|0|5 +008023|firstOrderStatistics|table|FIRST-ORDER STATISTICS|CODE TABLE|0|0|6|CODE TABLE|0|2 +008024|differenceStatistics|table|DIFFERENCE STATISTICS|CODE TABLE|0|0|6|CODE TABLE|0|2 +008025|timeDifferenceQualifier|table|TIME DIFFERENCE QUALIFIER|CODE TABLE|0|0|4|CODE TABLE|0|2 +008026|matrixSignificance|table|MATRIX SIGNIFICANCE|CODE TABLE|0|0|6|CODE TABLE|0|2 +008029|surfaceType|table|SURFACE TYPE|CODE TABLE|0|0|8|CODE TABLE|0|3 +008030|manualOnCodesVolumeI1SectionCCodeTableFromWhichDataAreDerived|long|MANUAL ON CODES (VOLUME I.1, SECTION C) CODE TABLE FROM WHICH DATA ARE DERIVED|Numeric|0|0|13|Numeric|0|4 +008031|dataCategoryCrexTableA|long|DATA CATEGORY - CREX TABLE A|Numeric|0|0|8|Numeric|0|3 +008032|statusOfOperation|table|STATUS OF OPERATION|CODE TABLE|0|0|4|CODE TABLE|0|2 +008033|methodOfDerivationOfPercentageConfidence|table|METHOD OF DERIVATION OF PERCENTAGE CONFIDENCE|CODE TABLE|0|0|7|CODE TABLE|0|3 +008034|temperatureOrSalinityMeasurementQualifier|table|TEMPERATURE/SALINITY MEASUREMENT QUALIFIER|CODE TABLE|0|0|4|CODE TABLE|0|2 +008035|monitoringExerciseType|table|TYPE OF MONITORING EXERCISE|CODE TABLE|0|0|3|CODE TABLE|0|1 +008036|typeOfCentreOrStationPerformingMonitoring|table|TYPE OF CENTRE OR STATION PERFORMING MONITORING|CODE TABLE|0|0|3|CODE TABLE|0|1 +008037|baselineCheckSignificance|table|BASELINE CHECK SIGNIFICANCE|CODE TABLE|0|0|5|CODE TABLE|0|2 +008038|instrumentDataSignificance|table|INSTRUMENT DATA SIGNIFICANCE|CODE TABLE|0|0|8|CODE TABLE|0|3 +008039|timeSignificanceAviationForecast|table|TIME SIGNIFICANCE (AVIATION FORECAST)|CODE TABLE|0|0|6|CODE TABLE|0|2 +008040|flightLevelSignificance|table|FLIGHT LEVEL SIGNIFICANCE|CODE TABLE|0|0|6|CODE TABLE|0|2 +008041|dataSignificance|table|DATA SIGNIFICANCE|CODE TABLE|0|0|5|CODE TABLE|0|2 +008042|extendedVerticalSoundingSignificance|flag|EXTENDED VERTICAL SOUNDING SIGNIFICANCE|FLAG TABLE|0|0|18|FLAG TABLE|0|6 +008043|atmosphericChemical|table|ATMOSPHERIC CHEMICAL OR PHYSICAL CONSTITUENT TYPE|CODE TABLE|0|0|8|CODE TABLE|0|3 +008044|casRegistryNumber|string|CAS REGISTRY NUMBER|CCITT IA5|0|0|88|Character|0|11 +008046|atmosphericChemical|table|ATMOSPHERIC CHEMICAL OR PHYSICAL CONSTITUENT TYPE|Common CODE TABLE C-14|0|0|16|Common CODE TABLE C-14|0|5 +008049|numberOfObservations|long|NUMBER OF OBSERVATIONS|Numeric|0|0|8|Numeric|0|3 +008050|qualifierForNumberOfMissingValuesInCalculationOfStatistic|table|QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATISTIC|CODE TABLE|0|0|4|CODE TABLE|0|2 +008051|qualifierForNumberOfMissingValuesInCalculationOfStatistic|table|QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATISTIC|CODE TABLE|0|0|3|CODE TABLE|0|1 +008052|conditionForWhichNumberOfDaysOfOccurrenceFollows|table|CONDITION FOR WHICH NUMBER OF DAYS OF OCCURRENCE FOLLOWS|CODE TABLE|0|0|5|CODE TABLE|0|2 +008053|dayOfOccurrenceQualifier|table|DAY OF OCCURRENCE QUALIFIER|CODE TABLE|0|0|2|CODE TABLE|0|1 +008054|qualifierForWindSpeedOrWindGusts|table|QUALIFIER FOR WIND SPEED OR WIND GUSTS|CODE TABLE|0|0|3|CODE TABLE|0|1 +008060|sampleScanningModeSignificance|table|SAMPLE SCANNING MODE SIGNIFICANCE|CODE TABLE|0|0|4|CODE TABLE|0|2 +008065|sunGlintIndicator|table|SUN-GLINT INDICATOR|CODE TABLE|0|0|2|CODE TABLE|0|1 +008066|semiTransparencyIndicator|table|SEMI-TRANSPARENCY INDICATOR|CODE TABLE|0|0|2|CODE TABLE|0|1 +008070|verticalSoundingProductQualifier|table|VERTICAL SOUNDING PRODUCT QUALIFIER|CODE TABLE|0|0|4|CODE TABLE|0|2 +008072|pixelType|table|PIXEL(S) TYPE|CODE TABLE|0|0|3|CODE TABLE|0|1 +008074|altimeterEchoType|table|ALTIMETER ECHO TYPE|CODE TABLE|0|0|2|CODE TABLE|0|1 +008075|orbitQualifier|table|ASCENDING/DESCENDING ORBIT QUALIFIER|CODE TABLE|0|0|2|CODE TABLE|0|1 +008076|band|table|TYPE OF BAND|CODE TABLE|0|0|6|CODE TABLE|0|2 +008077|radiometerSensedSurfaceType|table|RADIOMETER SENSED SURFACE TYPE|CODE TABLE|0|0|7|CODE TABLE|0|3 +008079|productStatus|table|PRODUCT STATUS|CODE TABLE|0|0|4|CODE TABLE|0|2 +008080|qualifierForGtsppQualityFlag|table|QUALIFIER FOR GTSPP QUALITY FLAG|CODE TABLE|0|0|6|CODE TABLE|0|2 +008081|equipmentType|table|TYPE OF EQUIPMENT|CODE TABLE|0|0|6|CODE TABLE|0|2 +008082|modificationOfSensorHeightToAnotherValue|table|MODIFICATION OF SENSOR HEIGHT TO ANOTHER VALUE|CODE TABLE|0|0|3|CODE TABLE|0|1 +008083|nominalValueIndicator|flag|NOMINAL VALUE INDICATOR|FLAG TABLE|0|0|15|FLAG TABLE|0|5 +008085|beamIdentifier|table|BEAM IDENTIFIER|CODE TABLE|0|0|3|CODE TABLE|0|1 +008086|verticalSignificanceForNwp|flag|VERTICAL SIGNIFICANCE FOR NWP|FLAG TABLE|0|0|12|FLAG TABLE|0|4 +008087|cornerPositionOfObservation|table|CORNER POSITION OF OBSERVATION|CODE TABLE|0|0|3|CODE TABLE|0|1 +008088|mapSignificance|table|MAP SIGNIFICANCE|CODE TABLE|0|0|6|CODE TABLE|0|2 +008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE OF FOLLOWING SIGNIFICANDS|Numeric|0|-127|8|Numeric|0|3 +008091|coordinatesSignificance|table|COORDINATES SIGNIFICANCE|CODE TABLE|0|0|8|CODE TABLE|0|3 +008092|measurementUncertaintyExpression|table|MEASUREMENT UNCERTAINTY EXPRESSION|CODE TABLE|0|0|5|CODE TABLE|0|2 +008093|measurementUncertaintySignificance|table|MEASUREMENT UNCERTAINTY SIGNIFICANCE|CODE TABLE|0|0|5|CODE TABLE|0|2 +008094|methodUsedToCalculateTheAverageDailyTemperature|table|METHOD USED TO CALCULATE THE AVERAGE DAILY TEMPERATURE|CODE TABLE|0|0|8|CODE TABLE|0|3 +008095|sitingAndMeasurementQualityClassificationForTemperature|table|SITING AND MEASUREMENT QUALITY CLASSIFICATION FOR TEMPERATURE|CODE TABLE|0|0|8|CODE TABLE|0|3 +008096|sitingAndMeasurementQualityClassificationForPrecipitation|table|SITING AND MEASUREMENT QUALITY CLASSIFICATION FOR PRECIPITATION|CODE TABLE|0|0|8|CODE TABLE|0|3 +008097|methodUsedToCalculateTheAverageInstrumentTemperature|table|METHOD USED TO CALCULATE THE AVERAGE INSTRUMENT TEMPERATURE|CODE TABLE|0|0|7|CODE TABLE|0|3 +010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5 +010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5 +010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6 +010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5 +010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6 +010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7 +010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5 +010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5 +010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5 +010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10 +010032|satelliteDistanceToEarthCentre|double|SATELLITE DISTANCE TO EARTH'S CENTRE|m|1|0|27|m|2|9 +010033|altitudePlatformToEllipsoid|double|ALTITUDE (PLATFORM TO ELLIPSOID)|m|1|0|27|m|2|9 +010034|earthRadius|double|EARTH'S RADIUS|m|1|0|27|m|2|9 +010035|earthLocalRadiusOfCurvature|double|EARTH'S LOCAL RADIUS OF CURVATURE|m|1|62000000|22|m|1|8 +010036|geoidUndulation|double|GEOID UNDULATION|m|2|-15000|15|m|2|6 +010038|maximumHeightOfDeckCargoAboveSummerLoadLine|long|MAXIMUM HEIGHT OF DECK CARGO ABOVE SUMMER LOAD LINE|m|0|0|6|m|0|2 +010039|departureOfReferenceLevelSummerMaximumLoadLineFromActualSeaLevel|long|DEPARTURE OF REFERENCE LEVEL (SUMMER MAXIMUM LOAD LINE) FROM ACTUAL SEA LEVEL|m|0|-32|6|m|0|3 +010040|numberOfRetrievedLayers|long|NUMBER OF RETRIEVED LAYERS|Numeric|0|0|10|Numeric|0|4 +010050|standardDeviationAltitude|double|STANDARD DEVIATION ALTITUDE|m|2|0|16|m|2|5 +010051|pressureReducedToMeanSeaLevel|long|PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5 +010052|altimeterSettingQnh|long|ALTIMETER SETTING (QNH)|Pa|-1|0|14|Pa|-1|5 +010053|globalNavigationSatelliteSystemAltitude|long|GLOBAL NAVIGATION SATELLITE SYSTEM ALTITUDE|m|0|-1000|17|m|0|5 +010060|pressureChange|long|PRESSURE CHANGE|Pa|-1|-1024|11|Pa|-1|4 +010061|3HourPressureChange|long|3-HOUR PRESSURE CHANGE|Pa|-1|-500|10|Pa|-1|4 +010062|24HourPressureChange|long|24-HOUR PRESSURE CHANGE|Pa|-1|-1000|11|Pa|-1|4 +010063|characteristicOfPressureTendency|table|CHARACTERISTIC OF PRESSURE TENDENCY|CODE TABLE|0|0|4|CODE TABLE|0|2 +010064|sigmetCruisingLevel|table|SIGMET CRUISING LEVEL|CODE TABLE|0|0|3|CODE TABLE|0|1 +010070|indicatedAircraftAltitude|long|INDICATED AIRCRAFT ALTITUDE|m|0|-400|16|m|0|5 +010071|verticalResolution|long|VERTICAL RESOLUTION|m|0|0|14|m|0|5 +010079|offNadirAngleOfTheSatelliteFromPlatformData|double|OFF-NADIR ANGLE OF THE SATELLITE FROM PLATFORM DATA|deg|4|0|16|deg|4|5 +010080|viewingZenithAngle|double|VIEWING ZENITH ANGLE|deg|2|-9000|15|deg|2|5 +010081|cogAltitudeAboveReferenceEllipsoid|double|ALTITUDE OF COG ABOVE REFERENCE ELLIPSOID|m|3|0|31|m|3|10 +010082|instantaneousAltitudeRate|double|INSTANTANEOUS ALTITUDE RATE|m/s|3|-65536|17|m/s|3|6 +010083|squaredOffNadirAngleOfSatelliteFromPlatformData|double|SQUARED OFF-NADIR ANGLE OF THE SATELLITE FROM PLATFORM DATA|deg2|2|0|16|deg2|2|5 +010084|squaredOffNadirAngleOfSatelliteFromWaveformData|double|SQUARED OFF-NADIR ANGLE OF THE SATELLITE FROM WAVEFORM DATA|deg2|2|0|16|deg2|2|5 +010085|meanSeaSurfaceHeight|double|MEAN SEA-SURFACE HEIGHT|m|3|-131072|18|m|3|6 +010086|geoidHeight|double|GEOID'S HEIGHT|m|3|-131072|18|m|3|6 +010087|oceanDepthOrLandElevation|double|OCEAN DEPTH/LAND ELEVATION|m|1|-131072|18|m|1|6 +010088|totalGeocentricOceanTideHeightSolution1|double|TOTAL GEOCENTRIC OCEAN TIDE HEIGHT (SOLUTION 1)|m|3|-32768|16|m|3|5 +010089|totalGeocentricOceanTideHeightSolution2|double|TOTAL GEOCENTRIC OCEAN TIDE HEIGHT (SOLUTION 2)|m|3|-32768|16|m|3|5 +010090|longPeriodTideHeight|double|LONG PERIOD TIDE HEIGHT|m|3|-32768|16|m|3|5 +010091|tidalLoadingHeight|double|TIDAL LOADING HEIGHT|m|3|-32768|16|m|3|5 +010092|solidEarthTideHeight|double|SOLID EARTH TIDE HEIGHT|m|3|-32768|16|m|3|5 +010093|geocentricPoleTideHeight|double|GEOCENTRIC POLE TIDE HEIGHT|m|3|-32768|16|m|3|5 +010095|heightOfAtmosphere|long|HEIGHT OF ATMOSPHERE USED|m|0|0|16|m|0|5 +010096|meanDynamicTopography|double|MEAN DYNAMIC TOPOGRAPHY|m|3|-131072|18|m|3|6 +010097|meanSeaSurfaceHeightFromAltimeterOnly|double|MEAN SEA-SURFACE HEIGHT FROM ALTIMETER ONLY|m|3|-131072|18|m|3|6 +010098|loadingTideHeightGeocentricOceanTideSolution1|double|LOADING TIDE HEIGHT GEOCENTRIC OCEAN TIDE SOLUTION 1|m|4|-2000|12|m|4|4 +010099|loadingTideHeightGeocentricOceanTideSolution2|double|LOADING TIDE HEIGHT GEOCENTRIC OCEAN TIDE SOLUTION 2|m|4|-2000|12|m|4|4 +010100|nonEquilibriumLongPeriodTideHeight|double|NON-EQUILIBRIUM LONG PERIOD TIDE HEIGHT|m|4|-2000|12|m|4|4 +010101|squaredOffNadirAngleOfSatelliteFromWaveformData|double|SQUARED OFF-NADIR ANGLE OF THE SATELLITE FROM WAVEFORM DATA|deg2|2|-32768|16|deg2|2|5 +010102|seaSurfaceHeightAnomaly|double|SEA-SURFACE HEIGHT ANOMALY|m|3|-32768|16|m|3|5 +010103|meanDynamicTopographyAccuracy|double|MEAN DYNAMIC TOPOGRAPHY ACCURACY|m|3|-131072|18|m|3|6 +011001|windDirection|long|WIND DIRECTION|deg|0|0|9|deg|0|3 +011002|windSpeed|double|WIND SPEED|m/s|1|0|12|m/s|1|4 +011003|u|double|U-COMPONENT|m/s|1|-4096|13|m/s|1|4 +011004|v|double|V-COMPONENT|m/s|1|-4096|13|m/s|1|4 +011005|w|double|W-COMPONENT|Pa/s|1|-512|10|Pa/s|1|4 +011006|w|double|W-COMPONENT|m/s|2|-4096|13|m/s|2|4 +011007|relativeWindDirectionInDegreesOffBow|long|RELATIVE WIND DIRECTION (IN DEGREES OFF BOW)|deg|0|0|9|deg|0|3 +011008|relativeWindSpeed|double|RELATIVE WIND SPEED|m/s|1|0|12|m/s|1|4 +011010|windDirectionAssociatedWithWindSpeedWhichFollows|long|WIND DIRECTION ASSOCIATED WITH WIND SPEED WHICH FOLLOWS|deg|0|0|9|deg|0|3 +011011|windDirectionAt10M|long|WIND DIRECTION AT 10 M|deg|0|0|9|deg|0|3 +011012|windSpeedAt10M|double|WIND SPEED AT 10 M|m/s|1|0|12|m/s|1|4 +011013|windDirectionAt5M|long|WIND DIRECTION AT 5 M|deg|0|0|9|deg|0|3 +011014|windSpeedAt5M|double|WIND SPEED AT 5 M|m/s|1|0|12|m/s|1|4 +011016|extremeCounterclockwiseWindDirectionOfAVariableWind|long|EXTREME COUNTERCLOCKWISE WIND DIRECTION OF A VARIABLE WIND|deg|0|0|9|deg|0|3 +011017|extremeClockwiseWindDirectionOfAVariableWind|long|EXTREME CLOCKWISE WIND DIRECTION OF A VARIABLE WIND|deg|0|0|9|deg|0|3 +011019|steadinessOfWind|long|STEADINESS OF WIND|%|0|0|7|%|0|3 +011021|relativeVorticity|double|RELATIVE VORTICITY|/s|9|-65536|17|/s|9|6 +011022|divergence|double|DIVERGENCE|/s|9|-65536|17|/s|9|6 +011023|velocityPotential|long|VELOCITY POTENTIAL|m2/s|-2|-65536|17|m2/s|-2|6 +011030|extendedDegreeOfTurbulence|table|EXTENDED DEGREE OF TURBULENCE|CODE TABLE|0|0|6|CODE TABLE|0|2 +011031|degreeOfTurbulence|table|DEGREE OF TURBULENCE|CODE TABLE|0|0|4|CODE TABLE|0|2 +011032|heightOfBaseOfTurbulence|long|HEIGHT OF BASE OF TURBULENCE|m|-1|-40|16|m|-1|5 +011033|heightOfTopOfTurbulence|long|HEIGHT OF TOP OF TURBULENCE|m|-1|-40|16|m|-1|5 +011034|verticalGustVelocity|double|VERTICAL GUST VELOCITY|m/s|1|-1024|11|m/s|1|4 +011035|verticalGustAcceleration|double|VERTICAL GUST ACCELERATION|m s-2|2|-8192|14|m s-2|2|5 +011036|maximumDerivedEquivalentVerticalGustSpeed|double|MAXIMUM DERIVED EQUIVALENT VERTICAL GUST SPEED|m/s|1|0|10|m/s|1|4 +011037|turbulenceIndex|table|TURBULENCE INDEX|CODE TABLE|0|0|6|CODE TABLE|0|2 +011038|timeOfOccurrenceOfPeakEddyDissipationRate|table|TIME OF OCCURRENCE OF PEAK EDDY DISSIPATION RATE|CODE TABLE|0|0|5|CODE TABLE|0|2 +011039|extendedTimeOfOccurrenceOfPeakEddyDissipationRate|table|EXTENDED TIME OF OCCURRENCE OF PEAK EDDY DISSIPATION RATE|CODE TABLE|0|0|6|CODE TABLE|0|2 +011040|maximumWindSpeedMeanWind|double|MAXIMUM WIND SPEED (MEAN WIND)|m/s|1|0|12|m/s|1|4 +011041|maximumWindGustSpeed|double|MAXIMUM WIND GUST SPEED|m/s|1|0|12|m/s|1|4 +011042|maximumWindSpeed10MinuteMeanWind|double|MAXIMUM WIND SPEED (10-MINUTE MEAN WIND)|m/s|1|0|12|m/s|1|4 +011043|maximumWindGustDirection|long|MAXIMUM WIND GUST DIRECTION|deg|0|0|9|deg|0|3 +011044|meanWindDirectionForSurfaceTo1500M|long|MEAN WIND DIRECTION FOR SURFACE - 1 500 M (5 000 FEET)|deg|0|0|9|deg|0|3 +011045|meanWindSpeedForSurfaceTo1500M|double|MEAN WIND SPEED FOR SURFACE - 1 500 M (5 000 FEET)|m/s|1|0|12|m/s|1|4 +011046|maximumInstantaneousWindSpeed|double|MAXIMUM INSTANTANEOUS WIND SPEED|m/s|1|0|12|m/s|1|4 +011047|maximumInstantaneousWindSpeedOver10Minutes|double|MAXIMUM INSTANTANEOUS WIND SPEED OVER 10 MINUTES|m/s|1|0|12|m/s|1|4 +011049|windDirectionStandardDeviation|long|STANDARD DEVIATION OF WIND DIRECTION|deg|0|0|9|deg|0|3 +011050|standardDeviationOfHorizontalWindSpeed|double|STANDARD DEVIATION OF HORIZONTAL WIND SPEED|m/s|1|0|12|m/s|1|4 +011051|standardDeviationOfVerticalWindSpeed|double|STANDARD DEVIATION OF VERTICAL WIND SPEED|m/s|1|0|8|m/s|1|3 +011052|formalUncertaintyInWindSpeed|double|FORMAL UNCERTAINTY IN WIND SPEED|m/s|2|0|13|m/s|2|5 +011053|formalUncertaintyInWindDirection|double|FORMAL UNCERTAINTY IN WIND DIRECTION|deg|2|0|15|deg|2|5 +011054|meanWindDirectionFor1500To3000M|long|MEAN WIND DIRECTION FOR 1 500 - 3 000 M|deg|0|0|9|deg|0|3 +011055|meanWindSpeedFor1500To3000M|double|MEAN WIND SPEED FOR 1 500 - 3 000 M|m/s|1|0|12|m/s|1|4 +011061|absoluteWindShearIn1KmLayerBelow|double|ABSOLUTE WIND SHEAR IN 1 KM LAYER BELOW|m/s|1|0|12|m/s|1|4 +011062|absoluteWindShearIn1KmLayerAbove|double|ABSOLUTE WIND SHEAR IN 1 KM LAYER ABOVE|m/s|1|0|12|m/s|1|4 +011070|designatorOfRunwayAffectedByWindShearIncludingAll|string|DESIGNATOR OF THE RUNWAY AFFECTED BY WIND SHEAR (INCLUDING ALL)|CCITT IA5|0|0|32|Character|0|4 +011071|turbulentVerticalMomentumFlux|double|TURBULENT VERTICAL MOMENTUM FLUX|m2 s-2|3|-128|14|m2 s-2|3|5 +011072|turbulentVerticalBuoyancyFlux|double|TURBULENT VERTICAL BUOYANCY FLUX|K m s-1|3|-128|11|K m s-1|3|4 +011073|turbulentKineticEnergy|double|TURBULENT KINETIC ENERGY|m2 s-2|2|-1024|13|m2 s-2|2|4 +011074|dissipationEnergy|double|DISSIPATION ENERGY|m2 s-2|2|-1024|10|m2 s-2|2|4 +011075|meanTurbulenceIntensityEddyDissipationRate|double|MEAN TURBULENCE INTENSITY (EDDY DISSIPATION RATE)|m2/3 s-1|2|0|8|m2/3 s-1|2|3 +011076|peakTurbulenceIntensityEddyDissipationRate|double|PEAK TURBULENCE INTENSITY (EDDY DISSIPATION RATE)|m2/3 s-1|2|0|8|m2/3 s-1|2|3 +011077|reportingIntervalOrAveragingTimeForEddyDissipationRate|long|REPORTING INTERVAL OR AVERAGING TIME FOR EDDY DISSIPATION RATE|s|0|0|12|s|0|4 +011081|modelWindDirectionAt10M|double|MODEL WIND DIRECTION AT 10 M|deg|2|0|16|deg|2|5 +011082|modelWindSpeedAt10M|double|MODEL WIND SPEED AT 10 M|m/s|2|0|14|m/s|2|4 +011083|windSpeed|long|WIND SPEED|km/h|0|0|9|km/h|0|3 +011084|windSpeed|long|WIND SPEED|kt|0|0|8|kt|0|3 +011085|maximumWindGustSpeed|long|MAXIMUM WIND GUST SPEED|km/h|0|0|9|km/h|0|3 +011086|maximumWindGustSpeed|long|MAXIMUM WIND GUST SPEED|kt|0|0|8|kt|0|3 +011095|u|double|U-COMPONENT OF THE MODEL WIND VECTOR|m/s|1|-4096|13|m/s|1|4 +011096|v|double|V-COMPONENT OF THE MODEL WIND VECTOR|m/s|1|-4096|13|m/s|1|4 +011097|windSpeedFromAltimeter|double|WIND SPEED FROM ALTIMETER|m/s|2|0|12|m/s|2|4 +011098|windSpeedFromRadiometer|double|WIND SPEED FROM RADIOMETER|m/s|2|0|12|m/s|2|4 +011100|aircraftTrueAirspeed|double|AIRCRAFT TRUE AIRSPEED|m/s|1|0|12|m/s|1|4 +011101|aircraftGroundSpeedUComponent|double|AIRCRAFT GROUND SPEED U-COMPONENT|m/s|1|-4096|13|m/s|1|4 +011102|aircraftGroundSpeedVComponent|double|AIRCRAFT GROUND SPEED V-COMPONENT|m/s|1|-4096|13|m/s|1|4 +011103|aircraftGroundSpeedWComponent|double|AIRCRAFT GROUND SPEED W-COMPONENT|m/s|1|-512|10|m/s|1|3 +011104|aircraftTrueHeading|long|TRUE HEADING OF AIRCRAFT, SHIP OR OTHER MOBILE PLATFORM|deg|0|0|9|deg|0|3 +011105|edrAlgorithmVersion|long|EDR ALGORITHM VERSION|Numeric|0|0|6|Numeric|0|2 +011106|runningMinimumConfidence|long|RUNNING MINIMUM CONFIDENCE|Numeric|1|0|4|Numeric|1|2 +011107|maximumNumberBadInputs|long|MAXIMUM NUMBER BAD INPUTS|Numeric|0|0|5|Numeric|0|2 +011108|peakLocation|long|PEAK LOCATION|Numeric|1|0|4|Numeric|1|2 +011109|numberOfGoodEdr|long|NUMBER OF GOOD EDR|Numeric|0|0|4|Numeric|0|2 +011110|uncertaintyInUComponent|double|UNCERTAINTY IN U-COMPONENT|m/s|1|-4096|13|m/s|1|4 +011111|uncertaintyInVComponent|double|UNCERTAINTY IN V-COMPONENT|m/s|1|-4096|13|m/s|1|4 +011112|uncertaintyInWComponent|double|UNCERTAINTY IN W-COMPONENT|m/s|2|-4096|13|m/s|2|4 +011113|trackingCorrelationOfVector|long|TRACKING CORRELATION OF VECTOR|Numeric|3|-1000|12|Numeric|3|4 +012001|airTemperature|double|TEMPERATURE/AIR TEMPERATURE|K|1|0|12|C|1|3 +012002|wetBulbTemperature|double|WET-BULB TEMPERATURE|K|1|0|12|C|1|3 +012003|dewpointTemperature|double|DEWPOINT TEMPERATURE|K|1|0|12|C|1|3 +012004|airTemperatureAt2M|double|AIR TEMPERATURE AT 2 M|K|1|0|12|C|1|3 +012005|wetBulbTemperatureAt2M|double|WET-BULB TEMPERATURE AT 2 M|K|1|0|12|C|1|3 +012006|dewpointTemperatureAt2M|double|DEWPOINT TEMPERATURE AT 2 M|K|1|0|12|C|1|3 +012007|virtualTemperature|double|VIRTUAL TEMPERATURE|K|1|0|12|C|1|3 +012008|uncertaintyInVirtualTemperature|double|UNCERTAINTY IN VIRTUAL TEMPERATURE|K|1|0|12|C|1|4 +012011|maximumTemperatureAtHeightAndOverPeriodSpecified|double|MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED|K|1|0|12|C|1|3 +012012|minimumTemperatureAtHeightAndOverPeriodSpecified|double|MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED|K|1|0|12|C|1|3 +012013|groundMinimumTemperaturePast12Hours|double|GROUND MINIMUM TEMPERATURE, PAST 12 HOURS|K|1|0|12|C|1|3 +012014|maximumTemperatureAt2MPast12Hours|double|MAXIMUM TEMPERATURE AT 2 M, PAST 12 HOURS|K|1|0|12|C|1|3 +012015|minimumTemperatureAt2MPast12Hours|double|MINIMUM TEMPERATURE AT 2 M, PAST 12 HOURS|K|1|0|12|C|1|3 +012016|maximumTemperatureAt2MPast24Hours|double|MAXIMUM TEMPERATURE AT 2 M, PAST 24 HOURS|K|1|0|12|C|1|3 +012017|minimumTemperatureAt2MPast24Hours|double|MINIMUM TEMPERATURE AT 2 M, PAST 24 HOURS|K|1|0|12|C|1|3 +012021|maximumTemperatureAt2M|double|MAXIMUM TEMPERATURE AT 2 M|K|2|0|16|C|2|4 +012022|minimumTemperatureAt2M|double|MINIMUM TEMPERATURE AT 2 M|K|2|0|16|C|2|4 +012023|temperature|long|TEMPERATURE|C|0|-99|8|C|0|2 +012024|dewpointTemperature|long|DEWPOINT TEMPERATURE|C|0|-99|8|C|0|2 +012030|soilTemperature|double|SOIL TEMPERATURE|K|1|0|12|C|1|3 +012049|temperatureChangeOverSpecifiedPeriod|long|TEMPERATURE CHANGE OVER SPECIFIED PERIOD|K|0|-30|6|C|0|2 +012051|standardDeviationTemperature|double|STANDARD DEVIATION TEMPERATURE|K|1|0|10|C|1|3 +012052|highestDailyMeanTemperature|double|HIGHEST DAILY MEAN TEMPERATURE|K|1|0|12|C|1|3 +012053|lowestDailyMeanTemperature|double|LOWEST DAILY MEAN TEMPERATURE|K|1|0|12|C|1|3 +012060|awsEnclosureInternalTemperature|double|AWS ENCLOSURE INTERNAL TEMPERATURE|K|1|0|12|C|1|3 +012061|skinTemperature|double|SKIN TEMPERATURE|K|1|0|12|C|1|3 +012062|equivalentBlackBodyTemperature|double|EQUIVALENT BLACK BODY TEMPERATURE|K|1|0|12|C|1|3 +012063|brightnessTemperature|double|BRIGHTNESS TEMPERATURE|K|1|0|12|C|1|3 +012064|instrumentTemperature|double|INSTRUMENT TEMPERATURE|K|1|0|12|K|1|4 +012065|standardDeviationBrightnessTemperature|double|STANDARD DEVIATION BRIGHTNESS TEMPERATURE|K|1|0|12|K|1|4 +012066|antennaTemperature|double|ANTENNA TEMPERATURE|K|2|0|16|C|2|5 +012070|warmLoadTemperature|double|WARM LOAD TEMPERATURE|K|2|0|16|K|2|5 +012071|coldestClusterTemperature|double|COLDEST CLUSTER TEMPERATURE|K|1|0|12|K|1|4 +012072|radiance|double|RADIANCE|W m-2 sr-1|6|0|31|W m-2 sr-1|6|9 +012075|spectralRadiance|long|SPECTRAL RADIANCE|W m-3 sr-1|-3|0|16|W m-3 sr-1|-3|5 +012076|radiance|double|RADIANCE|W m-2 sr-1|3|0|16|W m-2 sr-1|3|5 +012080|brightnessTemperatureRealPart|double|BRIGHTNESS TEMPERATURE REAL PART|K|2|-10000|16|K|2|5 +012081|brightnessTemperatureImaginaryPart|double|BRIGHTNESS TEMPERATURE IMAGINARY PART|K|2|-10000|16|K|2|5 +012082|pixelRadiometricAccuracy|double|PIXEL RADIOMETRIC ACCURACY|K|2|0|12|K|2|4 +012101|airTemperature|double|TEMPERATURE/AIR TEMPERATURE|K|2|0|16|C|2|4 +012102|wetBulbTemperature|double|WET-BULB TEMPERATURE|K|2|0|16|C|2|4 +012103|dewpointTemperature|double|DEWPOINT TEMPERATURE|K|2|0|16|C|2|4 +012104|airTemperatureAt2M|double|AIR TEMPERATURE AT 2 M|K|2|0|16|C|2|4 +012105|webBulbTemperatureAt2M|double|WEB-BULB TEMPERATURE AT 2 M|K|2|0|16|C|2|4 +012106|dewpointTemperatureAt2M|double|DEWPOINT TEMPERATURE AT 2 M|K|2|0|16|C|2|4 +012107|virtualTemperature|double|VIRTUAL TEMPERATURE|K|2|0|16|C|2|4 +012111|maximumTemperatureAtHeightAndOverPeriodSpecified|double|MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED|K|2|0|16|C|2|4 +012112|minimumTemperatureAtHeightAndOverPeriodSpecified|double|MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED|K|2|0|16|C|2|4 +012113|groundMinimumTemperaturePast12Hours|double|GROUND MINIMUM TEMPERATURE, PAST 12 HOURS|K|2|0|16|C|2|4 +012114|maximumTemperatureAt2MPast12Hours|double|MAXIMUM TEMPERATURE AT 2 M, PAST 12 HOURS|K|2|0|16|C|2|4 +012115|minimumTemperatureAt2MPast12Hours|double|MINIMUM TEMPERATURE AT 2 M, PAST 12 HOURS|K|2|0|16|C|2|4 +012116|maximumTemperatureAt2MPast24Hours|double|MAXIMUM TEMPERATURE AT 2 M, PAST 24 HOURS|K|2|0|16|C|2|4 +012117|minimumTemperatureAt2MPast24Hours|double|MINIMUM TEMPERATURE AT 2 M, PAST 24 HOURS|K|2|0|16|C|2|4 +012118|maximumTemperatureAtHeightSpecifiedPast24Hours|double|MAXIMUM TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS|K|2|0|16|C|2|4 +012119|minimumTemperatureAtHeightSpecifiedPast24Hours|double|MINIMUM TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS|K|2|0|16|C|2|4 +012120|groundTemperature|double|GROUND TEMPERATURE|K|2|0|16|C|2|4 +012121|groundMinimumTemperature|double|GROUND MINIMUM TEMPERATURE|K|2|0|16|C|2|4 +012122|groundMinimumTemperatureOfPrecedingNight|double|GROUND MINIMUM TEMPERATURE OF THE PRECEDING NIGHT|K|2|0|16|C|2|4 +012128|roadSurfaceTemperature|double|ROAD SURFACE TEMPERATURE|K|2|0|16|C|2|5 +012129|roadSubSurfaceTemperature|double|ROAD SUBSURFACE TEMPERATURE|K|2|0|16|C|2|5 +012130|soilTemperature|double|SOIL TEMPERATURE|K|2|0|16|C|2|4 +012131|snowTemperature|double|SNOW TEMPERATURE|K|2|0|16|C|2|4 +012132|iceSurfaceTemperature|double|ICE SURFACE TEMPERATURE|K|2|0|16|C|2|4 +012151|dailyMeanTemperatureStandardDeviation|double|STANDARD DEVIATION OF DAILY MEAN TEMPERATURE|K|2|0|12|C|2|4 +012152|highestDailyMeanTemperature|double|HIGHEST DAILY MEAN TEMPERATURE|K|2|0|16|C|2|4 +012153|lowestDailyMeanTemperature|double|LOWEST DAILY MEAN TEMPERATURE|K|2|0|16|C|2|4 +012158|noiseEquivalentDeltaTemperatureWhileViewingColdTarget|double|NOISE-EQUIVALENT DELTA TEMPERATURE WHILE VIEWING COLD TARGET|K|2|0|12|C|2|4 +012159|noiseEquivalentDeltaTemperatureWhileViewingWarmTarget|double|NOISE-EQUIVALENT DELTA TEMPERATURE WHILE VIEWING WARM TARGET|K|2|0|12|C|2|4 +012161|skinTemperature|double|SKIN TEMPERATURE|K|2|0|16|C|2|4 +012162|equivalentBlackBodyTemperature|double|EQUIVALENT BLACK BODY TEMPERATURE|K|2|0|16|C|2|4 +012163|brightnessTemperature|double|BRIGHTNESS TEMPERATURE|K|2|0|16|C|2|4 +012164|instrumentTemperature|double|INSTRUMENT TEMPERATURE|K|2|0|16|K|2|5 +012165|directSunBrightnessTemperature|long|DIRECT SUN BRIGHTNESS TEMPERATURE|K|0|0|23|K|0|7 +012166|snapshotAccuracy|double|SNAPSHOT ACCURACY|K|1|-4000|13|K|1|4 +012167|radiometricAccuracyPurePolarization|double|RADIOMETRIC ACCURACY (PURE POLARIZATION)|K|1|0|9|K|1|3 +012168|radiometricAccuracyCrossPolarization|double|RADIOMETRIC ACCURACY (CROSS POLARIZATION)|K|1|0|9|K|1|3 +012171|coldestClusterTemperature|double|COLDEST CLUSTER TEMPERATURE|K|2|0|16|K|2|5 +012180|averaged12MicronBtForAllClearPixelsAtNadir|double|AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS AT NADIR|K|2|0|16|K|2|5 +012181|averaged11MicronBtForAllClearPixelsAtNadir|double|AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS AT NADIR|K|2|0|16|K|2|5 +012182|averaged37MicronBtForAllClearPixelsAtNadir|double|AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS AT NADIR|K|2|0|16|K|2|5 +012183|averaged12MicronBtForAllClearPixelsForwardView|double|AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW|K|2|0|16|K|2|5 +012184|averaged11MicronBtForAllClearPixelsForwardView|double|AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW|K|2|0|16|K|2|5 +012185|averaged37MicronBtForAllClearPixelsForwardView|double|AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW|K|2|0|16|K|2|5 +012186|meanNadirSeaSurfaceTemperature|double|MEAN NADIR SEA-SURFACE TEMPERATURE|K|2|0|16|K|2|5 +012187|meanDualViewSeaSurfaceTemperature|double|MEAN DUAL VIEW SEA-SURFACE TEMPERATURE|K|2|0|16|K|2|5 +012188|interpolated238GhzBrightnessTFromMwr|double|INTERPOLATED 23.8 GHZ BRIGHTNESS T FROM MWR|K|2|0|16|K|2|5 +012189|interpolated365GhzBrightnessTFromMwr|double|INTERPOLATED 36.5 GHZ BRIGHTNESS T FROM MWR|K|2|0|16|K|2|5 +013001|specificHumidity|double|SPECIFIC HUMIDITY|kg/kg|5|0|14|kg/kg|5|5 +013002|mixingRatio|double|MIXING RATIO|kg/kg|5|0|14|kg/kg|5|5 +013003|relativeHumidity|long|RELATIVE HUMIDITY|%|0|0|7|%|0|3 +013004|vapourPressure|long|VAPOUR PRESSURE|Pa|-1|0|10|Pa|-1|4 +013005|vapourDensity|double|VAPOUR DENSITY|kg m-3|3|0|7|kg m-3|3|3 +013006|mixingHeights|long|MIXING HEIGHTS|m|-1|-40|16|m|-1|5 +013007|minimumRelativeHumidity|long|MINIMUM RELATIVE HUMIDITY|%|0|0|7|%|0|3 +013008|maximumRelativeHumidity|long|MAXIMUM RELATIVE HUMIDITY|%|0|0|7|%|0|3 +013009|relativeHumidity|double|RELATIVE HUMIDITY|%|1|-1000|12|%|1|4 +013011|totalPrecipitationOrTotalWaterEquivalent|double|TOTAL PRECIPITATION/TOTAL WATER EQUIVALENT|kg m-2|1|-1|14|kg m-2|1|5 +013012|depthOfFreshSnow|double|DEPTH OF FRESH SNOW|m|2|-2|12|m|2|4 +013013|totalSnowDepth|double|TOTAL SNOW DEPTH|m|2|-2|16|m|2|5 +013014|rainfallOrWaterEquivalentOfSnowAveragedRate|double|RAINFALL/WATER EQUIVALENT OF SNOW (AVERAGED RATE)|kg m-2 s-1|4|0|12|kg m-2 s-1|4|4 +013015|snowfallAveragedRate|double|SNOWFALL (AVERAGED RATE)|m/s|7|0|12|m/s|7|4 +013016|precipitableWater|long|PRECIPITABLE WATER|kg m-2|0|0|7|kg m-2|0|3 +013019|totalPrecipitationPast1Hour|double|TOTAL PRECIPITATION PAST 1 HOUR|kg m-2|1|-1|14|kg m-2|1|4 +013020|totalPrecipitationPast3Hours|double|TOTAL PRECIPITATION PAST 3 HOURS|kg m-2|1|-1|14|kg m-2|1|5 +013021|totalPrecipitationPast6Hours|double|TOTAL PRECIPITATION PAST 6 HOURS|kg m-2|1|-1|14|kg m-2|1|5 +013022|totalPrecipitationPast12Hours|double|TOTAL PRECIPITATION PAST 12 HOURS|kg m-2|1|-1|14|kg m-2|1|5 +013023|totalPrecipitationPast24Hours|double|TOTAL PRECIPITATION PAST 24 HOURS|kg m-2|1|-1|14|kg m-2|1|5 +013031|evapotranspiration|long|EVAPOTRANSPIRATION|kg m-2|0|0|7|kg m-2|0|3 +013032|evaporation|double|EVAPORATION/EVAPOTRANSPIRATION|kg m-2|1|0|8|kg m-2|1|3 +013033|evaporation|double|EVAPORATION/EVAPOTRANSPIRATION|kg m-2|1|0|10|kg m-2|1|4 +013038|superadiabaticIndicator|table|SUPERADIABATIC INDICATOR|CODE TABLE|0|0|2|CODE TABLE|0|1 +013039|terrainTypeIceOrSnow|table|TERRAIN TYPE (ICE/SNOW)|CODE TABLE|0|0|3|CODE TABLE|0|1 +013040|surfaceFlag|table|SURFACE FLAG|CODE TABLE|0|0|4|CODE TABLE|0|2 +013041|pasquillGiffordStabilityCategory|table|PASQUILL-GIFFORD STABILITY CATEGORY|CODE TABLE|0|0|4|CODE TABLE|0|2 +013042|parcelLiftedIndexTo500Hpa|long|PARCEL LIFTED INDEX (TO 500 HPA)|K|0|-20|6|K|0|2 +013043|bestLiftedIndexTo500Hpa|long|BEST LIFTED INDEX (TO 500 HPA)|K|0|-20|6|K|0|2 +013044|kIndex|long|K INDEX|K|0|-30|8|K|0|3 +013045|koIndex|long|KO INDEX|K|0|-30|8|K|0|3 +013046|maximumBuoyancy|long|MAXIMUM BUOYANCY|K|0|-30|8|K|0|3 +013047|modifiedShowalterStabilityIndex|long|MODIFIED SHOWALTER STABILITY INDEX|K|0|-60|6|C|0|2 +013048|waterFraction|double|WATER FRACTION|%|1|0|10|%|1|4 +013051|frequencyGroupPrecipitation|table|FREQUENCY GROUP, PRECIPITATION|CODE TABLE|0|0|4|CODE TABLE|0|2 +013052|highestDailyAmountOfPrecipitation|double|HIGHEST DAILY AMOUNT OF PRECIPITATION|kg m-2|1|-1|14|kg m-2|1|5 +013055|intensityOfPrecipitation|double|INTENSITY OF PRECIPITATION|kg m-2 s-1|4|0|8|mm/h|1|4 +013056|characterAndIntensityOfPrecipitation|table|CHARACTER AND INTENSITY OF PRECIPITATION|CODE TABLE|0|0|4|CODE TABLE|0|2 +013057|timeOfBeginningOrEndOfPrecipitation|table|TIME OF BEGINNING OR END OF PRECIPITATION|CODE TABLE|0|0|4|CODE TABLE|0|2 +013058|sizeOfPrecipitatingElement|double|SIZE OF PRECIPITATING ELEMENT|m|4|0|7|mm|1|3 +013059|numberOfFlashesThunderstorm|long|NUMBER OF FLASHES (THUNDERSTORM)|Numeric|0|0|7|Numeric|0|3 +013060|totalAccumulatedPrecipitation|double|TOTAL ACCUMULATED PRECIPITATION|kg m-2|1|-1|17|kg m-2|1|5 +013071|upstreamWaterLevel|double|UPSTREAM WATER LEVEL|m|2|0|14|m|2|4 +013072|downstreamWaterLevel|double|DOWNSTREAM WATER LEVEL|m|2|0|14|m|2|4 +013073|maximumWaterLevel|double|MAXIMUM WATER LEVEL|m|2|0|14|m|2|4 +013074|groundWaterLevel|double|GROUND WATER LEVEL|m|2|0|18|m|2|6 +013080|waterPh|double|WATER PH|pH unit|1|0|10|pH unit|1|3 +013081|waterConductivity|double|WATER CONDUCTIVITY|S/m|3|0|14|S/m|3|4 +013082|waterTemperature|double|WATER TEMPERATURE|K|1|0|12|K|1|4 +013083|dissolvedOxygen|double|DISSOLVED OXYGEN|kg m-3|6|0|15|kg m-3|6|5 +013084|turbidity|long|TURBIDITY|lm|0|0|14|lm|0|4 +013085|oxidationReductionPotential|double|OXIDATION REDUCTION POTENTIAL (ORP)|V|3|0|14|V|3|4 +013090|radiometerWaterVapourContent|double|RADIOMETER WATER VAPOUR CONTENT|kg m-2|1|0|10|kg m-2|1|4 +013091|radiometerLiquidContent|double|RADIOMETER LIQUID CONTENT|kg m-2|2|0|8|kg m-2|2|3 +013093|cloudOpticalThickness|long|CLOUD OPTICAL THICKNESS|Numeric|0|0|8|Numeric|0|3 +013095|totalColumnWaterVapour|double|TOTAL COLUMN WATER VAPOUR|kg m-2|4|0|19|kg m-2|4|6 +013096|mwrWaterVapourContent|double|MWR WATER VAPOUR CONTENT|kg m-2|2|0|14|kg m-2|2|5 +013097|mwrLiquidWaterContent|double|MWR LIQUID WATER CONTENT|kg m-2|2|0|14|kg m-2|2|5 +013098|integratedWaterVapourDensity|double|INTEGRATED WATER VAPOUR DENSITY|kg m-2|8|0|30|kg m-2|8|10 +013099|log10OfIntegratedCloudParticleDensity|double|LOG10 OF INTEGRATED CLOUD PARTICLE DENSITY|log (m-2)|1|0|7|log (m-2)|1|3 +013100|log10OfIntegratedCloudParticleArea|double|LOG10 OF INTEGRATED CLOUD PARTICLE AREA|log (m2 m-2)|1|-70|7|log (m2 m-2)|1|2 +013101|log10OfIntegratedCloudParticleVolume|double|LOG10 OF INTEGRATED CLOUD PARTICLE VOLUME|log (m3 m-2)|1|-140|7|log (m3 m-2)|1|3 +013109|iceOrLiquidWaterPath|double|ICE/LIQUID WATER PATH|kg m-2|3|0|10|kg m-2|3|4 +013110|massMixingRatio|long|MASS MIXING RATIO|%|0|0|7|%|0|3 +013111|soilMoisture|long|SOIL MOISTURE|g/kg|0|0|10|g/kg|0|4 +013112|objectWetnessDuration|long|OBJECT WETNESS DURATION|s|0|0|17|s|0|5 +013114|rateOfIceAccretion|double|RATE OF ICE ACCRETION|kg m-2 h-1|1|0|11|kg m-2 h-1|1|4 +013115|iceThickness|double|ICE THICKNESS|m|2|0|19|m|2|6 +013116|waterFilmThickness|double|WATER FILM THICKNESS|m|4|0|10|m|3|2 +013117|snowDensityLiquidWaterContent|long|SNOW DENSITY (LIQUID WATER CONTENT)|kg m-3|0|0|10|kg m-3|0|3 +013118|freshSnowDepth|double|DEPTH OF FRESH SNOW (HIGH ACCURACY)|m|3|-2|14|m|3|5 +013155|precipitationIntensityHighAccuracy|double|INTENSITY OF PRECIPITATION (HIGH ACCURACY)|kg m-2 s-1|5|-1|16|mm/h|2|5 +013160|radiometerLiquidContent|double|RADIOMETER LIQUID CONTENT|kg m-2|2|-350|10|kg m-2|2|3 +013162|cloudLiquidWater|double|CLOUD LIQUID WATER|kg m-2|2|0|8|kg m-2|2|3 +013163|snowWaterEquivalent|long|SNOW WATER EQUIVALENT|kg m-2|0|0|16|kg m-2|0|5 +013164|seaIceFreeboard|double|SEA ICE FREEBOARD|m|3|-131072|18|m|3|6 +014001|longWaveRadiationIntegratedOver24Hours|long|LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-3|-65536|17|J m-2|-3|5 +014002|longWaveRadiationIntegratedOverPeriodSpecified|long|LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-3|-65536|17|J m-2|-3|5 +014003|shortWaveRadiationIntegratedOver24Hours|long|SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-3|-65536|17|J m-2|-3|5 +014004|shortWaveRadiationIntegratedOverPeriodSpecified|long|SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-3|-65536|17|J m-2|-3|5 +014011|netLongWaveRadiationIntegratedOver24Hours|long|NET LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-3|-65536|17|J m-2|-3|5 +014012|netLongWaveRadiationIntegratedOverPeriodSpecified|long|NET LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-3|-65536|17|J m-2|-3|5 +014013|netShortWaveRadiation24Hours|long|NET SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-3|-65536|17|J m-2|-3|5 +014014|netShortWaveRadiationIntegratedOverPeriodSpecified|long|NET SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-3|-65536|17|J m-2|-3|5 +014015|netRadiationIntegratedOver24Hours|long|NET RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-4|-16384|15|J m-2|-4|5 +014016|netRadiationIntegratedOverPeriodSpecified|long|NET RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-4|-16384|15|J m-2|-4|5 +014017|instantaneousLongWaveRadiation|long|INSTANTANEOUS LONG-WAVE RADIATION|W m-2|0|-512|10|W m-2|0|4 +014018|instantaneousShortWaveRadiation|long|INSTANTANEOUS SHORT-WAVE RADIATION|W m-2|0|-2048|12|W m-2|0|4 +014019|surfaceAlbedo|long|SURFACE ALBEDO|%|0|0|7|%|0|3 +014020|globalSolarRadiation24Hours|long|GLOBAL SOLAR RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-4|0|15|J m-2|-4|5 +014021|globalSolarRadiationIntegratedOverPeriodSpecified|long|GLOBAL SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-4|0|15|J m-2|-4|5 +014022|diffuseSolarRadiationIntegratedOver24Hours|long|DIFFUSE SOLAR RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-4|0|15|J m-2|-4|5 +014023|diffuseSolarRadiationIntegratedOverPeriodSpecified|long|DIFFUSE SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-4|0|15|J m-2|-4|5 +014024|directSolarRadiationIntegratedOver24Hours|long|DIRECT SOLAR RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-4|0|15|J m-2|-4|5 +014025|directSolarRadiationIntegratedOverPeriodSpecified|long|DIRECT SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-4|0|15|J m-2|-4|5 +014026|cloudTopAlbedo|long|ALBEDO AT THE TOP OF CLOUDS|%|0|0|7|%|0|3 +014027|albedo|long|ALBEDO|%|0|0|7|%|0|3 +014028|globalSolarRadiationIntegratedOverPeriodSpecified|long|GLOBAL SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD SPECIFIED|J m-2|-2|0|20|J m-2|-2|6 +014029|diffuseSolarRadiationIntegratedOverPeriodSpecified|long|DIFFUSE SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD SPECIFIED|J m-2|-2|0|20|J m-2|-2|6 +014030|directSolarRadiationIntegratedOverPeriodSpecified|long|DIRECT SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD SPECIFIED|J m-2|-2|0|20|J m-2|-2|6 +014031|totalSunshine|long|TOTAL SUNSHINE|min|0|0|11|min|0|4 +014032|totalSunshine|long|TOTAL SUNSHINE|h|0|0|10|h|0|4 +014033|totalSunshine|long|TOTAL SUNSHINE|%|0|0|9|%|0|3 +014034|sunshineOverPeriodSpecified|long|SUNSHINE OVER PERIOD SPECIFIED|min|0|0|11|min|0|4 +014035|solarRadiationFlux|double|SOLAR RADIATION FLUX|W m-2|1|0|14|W m-2|1|5 +014042|bidirectionalReflectance|long|BIDIRECTIONAL REFLECTANCE|%|0|0|7|%|0|3 +014043|channelRadiance|double|CHANNEL RADIANCE|W m-2 sr-1 um-1|4|0|23|W m-2 sr-1 um-1|4|7 +014044|channelRadiance|double|CHANNEL RADIANCE|W m-2 sr-1 cm|7|-100000|22|W m-2 sr-1 cm|7|7 +014045|channelRadiance|long|CHANNEL RADIANCE|W m-2 sr-1 cm|0|0|11|W m-2 sr-1 cm|0|4 +014046|scaledRadiance|long|SCALED RADIANCE|W m-2 sr-1 m|0|-5000|16|W m-2 sr-1 m|0|5 +014047|scaledMeanAvhrrRadiance|long|SCALED MEAN AVHRR RADIANCE|W m-2 sr-1 m|0|0|31|W m-2 sr-1 m|0|10 +014048|scaledStandardDeviationAvhrrRadiance|long|SCALED STANDARD DEVIATION AVHRR RADIANCE|W m-2 sr-1 m|0|0|31|W m-2 sr-1 m|0|10 +014049|noiseEquivalentDeltaRadiance|double|NOISE EQUIVALENT DELTA RADIANCE|W m-2 sr-1 cm|7|0|22|W m-2 sr-1 cm|0|0 +014050|emissivity|double|EMISSIVITY|%|1|0|10|%|1|4 +014051|directSolarRadiationIntegratedOverLastHour|long|DIRECT SOLAR RADIATION INTEGRATED OVER LAST HOUR|J m-2|-3|0|14|J m-2|-3|4 +014052|globalUpwardSolarRadiationIntegratedOverPeriodSpecified|long|GLOBAL UPWARD SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-2|-1048574|20|J m-2|-2|7 +014053|netRadiationIntegratedOverPeriodSpecified|long|NET RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD SPECIFIED|J m-2|-2|-1048574|21|J m-2|-2|7 +014054|photosyntheticallyActiveRadiationIntegratedOverPeriodSpecified|long|PHOTOSYNTHETICALLY ACTIVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-3|0|16|J m-2|-3|5 +014055|solarActivityIndex|long|SOLAR ACTIVITY INDEX|Numeric|0|-32768|16|Numeric|0|5 +014056|backgroundLuminance|long|BACKGROUND LUMINANCE|cd m-2|0|0|18|cd m-2|0|6 +014057|soilHeatFlux|long|SOIL HEAT FLUX|J m-2|-2|-1048574|21|J m-2|-2|7 +014072|globalUvIrradiation|long|GLOBAL UV IRRADIATION|J m-2|0|-4000000|23|J m-2|0|7 +015001|totalOzone|long|TOTAL OZONE|DU|0|0|10|DU|0|4 +015002|airMassSlantPathAt22Km|long|AIR MASS (SLANT PATH AT 22 KM)|Numeric|2|0|10|Numeric|2|3 +015003|measuredOzonePartialPressureSounding|double|MEASURED OZONE PARTIAL PRESSURE (SOUNDING)|Pa|4|0|9|nbar|0|3 +015004|ozoneSoundingCorrectionFactor|long|OZONE SOUNDING CORRECTION FACTOR (CF)|Numeric|3|0|11|Numeric|3|4 +015005|ozoneP|long|OZONE P|DU|0|0|10|DU|0|3 +015006|log10OfNumberDensityOfAtmosphere|double|LOG10 OF NUMBER DENSITY OF ATMOSPHERE|log (m-3)|5|1800000|20|log (m-3)|5|7 +015008|significandOfVolumetricMixingRatio|long|SIGNIFICAND OF VOLUMETRIC MIXING RATIO|Numeric|0|0|10|Numeric|0|4 +015009|log10OfNumberDensityOfOzone|double|LOG10 OF NUMBER DENSITY OF OZONE|log (m-3)|5|1200000|20|log (m-3)|5|7 +015011|log10IntegratedElectronDensity|double|LOG10 OF INTEGRATED ELECTRON DENSITY|log (m-2)|3|14000|13|log (m-2)|3|4 +015012|totalElectronCountPerSquareMetre|long|TOTAL ELECTRON COUNT PER SQUARE METRE|m-2|-16|0|6|m-2|-16|2 +015015|maxImageSpectralComponentBeforeNormalization|long|MAXIMUM IMAGE SPECTRAL COMPONENT BEFORE NORMALIZATION|Numeric|0|0|31|Numeric|0|10 +015020|integratedOzoneDensity|double|INTEGRATED OZONE DENSITY|kg m-2|8|0|21|kg m-2|8|7 +015021|integratedMassDensity|double|INTEGRATED MASS DENSITY|kg m-2|11|0|31|kg m-2|11|10 +015022|extendedIntegratedMassDensity|double|EXTENDED INTEGRATED MASS DENSITY|kg m-2|1|-100000000|31|kg m-2|1|10 +015024|opticalDepth|long|OPTICAL DEPTH|Numeric|4|0|24|Numeric|4|8 +015025|pollutantType|table|TYPE OF POLLUTANT|CODE TABLE|0|0|4|CODE TABLE|0|2 +015026|moleFractionOfPollutant|double|CONCENTRATION OF POLLUTANT (MOL MOL-1)|mol/mol|9|0|9|mol/mol|9|3 +015027|massConcentrationOfPollutant|double|CONCENTRATION OF POLLUTANT (KG M-3)|kg m-3|9|0|10|kg m-3|9|4 +015028|moleFractionOfAtmosphericConstituentOrPollutantInDryAir|double|MOLE FRACTION OF ATMOSPHERIC CONSTITUENT/POLLUTANT IN DRY AIR|0/00|5|0|16|0/00|5|5 +015029|extinctionCoefficient|double|EXTINCTION COEFFICIENT|/m|9|0|30|/m|9|10 +015030|aerosolContaminationIndex|long|AEROSOL CONTAMINATION INDEX|Numeric|2|-1000|12|Numeric|2|4 +015031|atmosphericPathDelayInSatelliteSignal|double|ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL|m|4|10000|15|m|4|5 +015032|estimatedErrorInAtmosphericPathDelay|double|ESTIMATED ERROR IN ATMOSPHERIC PATH DELAY|m|4|0|10|m|4|4 +015033|differenceInPathDelaysForLimbViewsAtExtremesOfScan|double|DIFFERENCE IN PATH DELAYS FOR LIMB VIEWS AT EXTREMES OF SCAN|m|5|-10000|15|m|5|5 +015034|estimatedErrorInPathDelayDifference|double|ESTIMATED ERROR IN PATH DELAY DIFFERENCE|m|5|0|14|m|5|5 +015035|componentOfZenithPathDelayDueToWaterVapour|double|COMPONENT OF ZENITH PATH DELAY DUE TO WATER VAPOUR|m|4|0|14|m|4|5 +015036|atmosphericRefractivity|double|ATMOSPHERIC REFRACTIVITY|N units|3|0|19|N units|3|6 +015037|bendingAngle|double|BENDING ANGLE|rad|8|-100000|23|rad|8|7 +015038|pathDelayDueToNeutralAtmosphere|double|PATH DELAY DUE TO NEUTRAL ATMOSPHERE|m|4|0|20|m|4|11 +015039|estimatedErrorInNeutralAtmospherePathDelay|double|ESTIMATED ERROR IN NEUTRAL ATMOSPHERE PATH DELAY|m|4|0|14|m|4|9 +015041|sulphurDioxideIndex|long|SULPHUR DIOXIDE INDEX|Numeric|2|-1200|14|Numeric|2|4 +015042|reflectance|double|REFLECTANCE|%|2|0|14|%|2|5 +015045|sulphurDioxide|double|SULPHUR DIOXIDE|DU|2|-2000|15|DU|2|5 +015046|volcanoContaminationIndex|long|VOLCANO CONTAMINATION INDEX|Numeric|2|-1000|11|Numeric|2|4 +015049|aerosolAngstromWavelengthExponent|long|AEROSOL ANGSTROM WAVELENGTH EXPONENT|Numeric|3|-2000|14|Numeric|3|5 +015051|meteorologicalOpticalRange|long|METEOROLOGICAL OPTICAL RANGE|m|0|0|18|m|0|6 +015052|log10OfNumberDensityOfAerosolParticlesWithDiameterGreaterThan5Nm|double|LOG10 OF NUMBER DENSITY OF AEROSOL PARTICLES WITH DIAMETER GREATER THAN 5 NM|log (m-3)|1|60|6|log (m-3)|1|3 +015053|log10OfNumberDensityOfAerosolParticlesWithDiameterGreaterThan14Nm|double|LOG10 OF NUMBER DENSITY OF AEROSOL PARTICLES WITH DIAMETER GREATER THAN 14 NM|log (m-3)|2|600|9|log (m-3)|2|4 +015054|log10OfNumberDensityOfAerosolParticlesWithDiameterBetween0p25And2p5|double|LOG10 OF NUMBER DENSITY OF AEROSOL PARTICLES WITH DIAMETER BETWEEN 0.25 AND 2.5 uM|log (m-3)|2|550|9|log (m-3)|2|4 +015055|nonVolatileAerosolRatio|long|NON VOLATILE AEROSOL RATIO|Numeric|2|0|7|Numeric|2|3 +015062|aerosolOpticalThickness|long|AEROSOL OPTICAL THICKNESS|Numeric|3|-1000|14|Numeric|3|5 +015063|attenuatedBackscatter|double|ATTENUATED BACKSCATTER|m-1 sr-1|8|0|20|m-1 sr-1|8|7 +015064|uncertaintyInAttenuatedBackscatter|double|UNCERTAINTY IN ATTENUATED BACKSCATTER|m-1 sr-1|8|0|20|m-1 sr-1|8|7 +015065|particleBackscatterCoefficient|double|PARTICLE BACKSCATTER COEFFICIENT|m-1 sr-1|8|0|20|m-1 sr-1|8|7 +015066|uncertaintyInParticleBackscatterCoefficient|double|UNCERTAINTY IN PARTICLE BACKSCATTER COEFFICIENT|m-1 sr-1|8|0|20|m-1 sr-1|8|7 +015067|particleExtinctionCoefficient|double|PARTICLE EXTINCTION COEFFICIENT|/m|8|0|20|/m|8|7 +015068|uncertaintyInParticleExtinctionCoefficient|double|UNCERTAINTY IN PARTICLE EXTINCTION COEFFICIENT|/m|8|0|20|/m|8|7 +015069|particleLidarRatio|double|PARTICLE LIDAR RATIO|sr|2|0|14|sr|2|5 +015070|uncertaintyInLidarRatio|double|UNCERTAINTY IN LIDAR RATIO|sr|2|0|14|sr|2|5 +015071|particleDepolarizationRatio|double|PARTICLE DEPOLARIZATION RATIO|%|2|0|14|%|2|5 +015072|uncertaintyInDepolarizationRatio|double|UNCERTAINTY IN DEPOLARIZATION RATIO|%|2|0|14|%|2|5 +015073|attenuatedBackscatter1|double|ATTENUATED BACKSCATTER|m-1 sr-1|8|-524288|20|m-1 sr-1|8|7 +015074|particleBackscatterCoefficient1|double|PARTICLE BACKSCATTER COEFFICIENT|m-1 sr-1|8|-524288|20|m-1 sr-1|8|7 +015075|particleExtinctionCoefficient1|double|PARTICLE EXTINCTION COEFFICIENT|m|8|-524288|20|/m|8|7 +015076|particleLidarRatio1|double|PARTICLE LIDAR RATIO|sr|1|-2048|13|sr|1|5 +015077|uncertaintyInLidarRatio1|double|UNCERTAINTY IN LIDAR RATIO|sr|1|0|12|sr|1|5 +015078|particleDepolarizationRatio1|double|PARTICLE DEPOLARIZATION RATIO|%|2|-8192|15|%|2|5 +015079|zenithPathDelayDueToNeutralAtmosphere|double|ZENITH PATH DELAY DUE TO NEUTRAL ATMOSPHERE|m|4|0|15|m|4|9 +015080|estimatedErrorInNeutralAtmosphereZenithPathDelay|double|ESTIMATED ERROR IN NEUTRAL ATMOSPHERE ZENITH PATH DELAY|m|4|0|12|m|4|8 +015081|wetPathDelayDueToNeutralAtmosphere|double|WET PATH DELAY DUE TO NEUTRAL ATMOSPHERE|m|4|0|18|m|4|10 +015082|pathIntegratedWaterVapour|double|PATH INTEGRATED WATER VAPOUR|kg m-2|1|0|16|kg m-2|1|10 +015083|gnssDerivedNeutralAtmosphereGradient|double|GNSS DERIVED NEUTRAL ATMOSPHERE GRADIENT|m|5|-8192|14|m|5|9 +015084|gnssLeastSquaresResidual|double|GNSS LEAST SQUARES RESIDUAL|m|4|0|14|m|4|9 +015085|gnssMultiPathDelay|double|GNSS MULTI-PATH DELAY|m|4|0|14|m|4|9 +015086|gnssHydrostaticMappingFunction|long|GNSS HYDROSTATIC MAPPING FUNCTION|Numeric|3|0|16|Numeric|3|10 +015087|gnssWetMappingFunction|long|GNSS WET MAPPING FUNCTION|Numeric|3|0|16|Numeric|3|10 +015088|gnssGradientMappingFunction|long|GNSS GRADIENT MAPPING FUNCTION|Numeric|3|0|16|Numeric|3|10 +015089|zenithPathDelayDueToNeutralHydrostaticAtmosphere|double|ZENITH PATH DELAY DUE TO NEUTRAL HYDROSTATIC ATMOSPHERE|m|4|0|15|m|4|9 +015090|pathDelayDueToNeutralHydrostaticAtmosphere|double|PATH DELAY DUE TO NEUTRAL HYDROSTATIC ATMOSPHERE|m|4|0|20|m|4|11 +019001|synopticFeatureType|table|TYPE OF SYNOPTIC FEATURE|CODE TABLE|0|0|6|CODE TABLE|0|2 +019002|effectiveRadiusOfFeature|long|EFFECTIVE RADIUS OF FEATURE|m|-2|0|12|m|-2|4 +019003|windSpeedThreshold|long|WIND SPEED THRESHOLD|m/s|0|0|8|m/s|0|3 +019004|effectiveRadiusWithRespectToWindSpeedsAboveThreshold|long|EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD|m|-2|0|12|m|-2|4 +019005|featureDirectionOfMotion|long|DIRECTION OF MOTION OF FEATURE|deg|0|0|9|deg|0|3 +019006|speedOfMotionOfFeature|double|SPEED OF MOTION OF FEATURE|m/s|2|0|14|m/s|2|5 +019007|effectiveRadiusOfFeature|long|EFFECTIVE RADIUS OF FEATURE|m|-3|0|12|m|-3|4 +019008|verticalExtentOfCirculation|table|VERTICAL EXTENT OF CIRCULATION|CODE TABLE|0|0|3|CODE TABLE|0|1 +019009|effectiveRadiusWithRespectToWindSpeedsAboveThresholdLargeStorms|long|EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD (LARGE STORMS)|m|-3|0|12|m|-3|4 +019010|methodForTrackingCentreOfSynopticFeature|table|METHOD FOR TRACKING THE CENTRE OF SYNOPTIC FEATURE|CODE TABLE|0|0|4|CODE TABLE|0|2 +019100|timeIntervalToCalculateMovementOfTropicalCyclone|table|TIME INTERVAL TO CALCULATE THE MOVEMENT OF THE TROPICAL CYCLONE|CODE TABLE|0|0|4|CODE TABLE|0|2 +019101|accuracyOfPositionOfCentreOfTropicalCyclone|table|ACCURACY OF THE POSITION OF THE CENTRE OF THE TROPICAL CYCLONE|CODE TABLE|0|0|4|CODE TABLE|0|2 +019102|shapeAndDefinitionOfEyeOfTropicalCyclone|table|SHAPE AND DEFINITION OF THE EYE OF THE TROPICAL CYCLONE|CODE TABLE|0|0|3|CODE TABLE|0|1 +019103|diameterOfMajorAxisOfEyeOfTropicalCyclone|table|DIAMETER OF MAJOR AXIS OF THE EYE OF THE TROPICAL CYCLONE|CODE TABLE|0|0|4|CODE TABLE|0|2 +019104|changeInCharacterOfEyeDuring30Minutes|table|CHANGE IN CHARACTER OF THE EYE DURING THE 30 MINUTES|CODE TABLE|0|0|4|CODE TABLE|0|2 +019105|distanceBetweenEndOfSpiralBandAndCentre|table|DISTANCE BETWEEN THE END OF SPIRAL BAND AND THE CENTRE|CODE TABLE|0|0|4|CODE TABLE|0|2 +019106|identificationNumberOfTropicalCyclone|long|IDENTIFICATION NUMBER OF TROPICAL CYCLONE|Numeric|0|0|7|Numeric|0|3 +019107|timeIntervalOverWhichMovementOfTropicalCycloneHasBeenCalculated|table|TIME INTERVAL OVER WHICH THE MOVEMENT OF THE TROPICAL CYCLONE HAS BEEN CALCULATED|CODE TABLE|0|0|4|CODE TABLE|0|2 +019108|accuracyOfGeographicalPositionOfTropicalCyclone|table|ACCURACY OF GEOGRAPHICAL POSITION OF THE TROPICAL CYCLONE|CODE TABLE|0|0|3|CODE TABLE|0|1 +019109|meanDiameterOfOvercastCloudOfTropicalCyclone|table|MEAN DIAMETER OF THE OVERCAST CLOUD OF THE TROPICAL CYCLONE|CODE TABLE|0|0|4|CODE TABLE|0|2 +019110|apparent24HourChangeInIntensityOfTropicalCyclone|table|APPARENT 24-HOUR CHANGE IN INTENSITY OF THE TROPICAL CYCLONE|CODE TABLE|0|0|4|CODE TABLE|0|2 +019111|currentIntensityNumberOfTropicalCyclone|long|CURRENT INTENSITY (CI) NUMBER OF THE TROPICAL CYCLONE|Numeric|1|0|7|Numeric|1|3 +019112|dataTropicalNumberOfTropicalCyclone|long|DATA TROPICAL (DT) NUMBER OF THE TROPICAL CYCLONE|Numeric|1|0|7|Numeric|1|3 +019113|cloudPatternTypeOfDtNumber|table|CLOUD PATTERN TYPE OF THE DT-NUMBER|CODE TABLE|0|0|4|CODE TABLE|0|2 +019114|modelExpectedTropicalNumberOfTropicalCyclone|long|MODEL EXPECTED TROPICAL (MET) NUMBER OF THE TROPICAL CYCLONE|Numeric|1|0|7|Numeric|1|3 +019115|trendOfPast24HourChangeDevelopedWeakened|long|TREND OF THE PAST 24-HOUR CHANGE (+: DEVELOPED, -: WEAKENED)|Numeric|1|-30|6|Numeric|1|2 +019116|patternTropicalNumberOfTropicalCyclone|long|PATTERN TROPICAL (PT) NUMBER OF THE TROPICAL CYCLONE|Numeric|1|0|7|Numeric|1|3 +019117|cloudPictureTypeOfPtNumber|table|CLOUD PICTURE TYPE OF THE PT-NUMBER|CODE TABLE|0|0|3|CODE TABLE|0|1 +019118|finalTropicalNumberOfTropicalCyclone|long|FINAL TROPICAL (T) NUMBER OF THE TROPICAL CYCLONE|Numeric|1|0|7|Numeric|1|3 +019119|finalTNumberType|table|TYPE OF THE FINAL T-NUMBER|CODE TABLE|0|0|3|CODE TABLE|0|1 +019150|typhoonInternationalCommonNumberTyphoonCommittee|string|TYPHOON INTERNATIONAL COMMON NUMBER (TYPHOON COMMITTEE)|CCITT IA5|0|0|32|Character|0|4 +020001|horizontalVisibility|long|HORIZONTAL VISIBILITY|m|-1|0|13|m|-1|4 +020002|verticalVisibility|long|VERTICAL VISIBILITY|m|-1|0|7|m|-1|3 +020003|presentWeather|table|PRESENT WEATHER|CODE TABLE|0|0|9|CODE TABLE|0|3 +020004|pastWeather1|table|PAST WEATHER (1)|CODE TABLE|0|0|5|CODE TABLE|0|2 +020005|pastWeather2|table|PAST WEATHER (2)|CODE TABLE|0|0|5|CODE TABLE|0|2 +020006|flightRules|table|FLIGHT RULES|CODE TABLE|0|0|3|CODE TABLE|0|1 +020008|cloudDistributionForAviation|table|CLOUD DISTRIBUTION FOR AVIATION|CODE TABLE|0|0|5|CODE TABLE|0|2 +020009|generalWeatherIndicatorTafOrMetar|table|GENERAL WEATHER INDICATOR (TAF/METAR)|CODE TABLE|0|0|4|CODE TABLE|0|2 +020010|cloudCoverTotal|long|CLOUD COVER (TOTAL)|%|0|0|7|%|0|3 +020011|cloudAmount|table|CLOUD AMOUNT|CODE TABLE|0|0|4|CODE TABLE|0|2 +020012|cloudType|table|CLOUD TYPE|CODE TABLE|0|0|6|CODE TABLE|0|2 +020013|heightOfBaseOfCloud|long|HEIGHT OF BASE OF CLOUD|m|-1|-40|11|m|-1|4 +020014|heightOfTopOfCloud|long|HEIGHT OF TOP OF CLOUD|m|-1|-40|11|m|-1|4 +020015|pressureAtBaseOfCloud|long|PRESSURE AT BASE OF CLOUD|Pa|-1|0|14|Pa|-1|5 +020016|pressureAtTopOfCloud|long|PRESSURE AT TOP OF CLOUD|Pa|-1|0|14|Pa|-1|5 +020017|cloudTopDescription|table|CLOUD TOP DESCRIPTION|CODE TABLE|0|0|4|CODE TABLE|0|2 +020018|tendencyOfRunwayVisualRange|table|TENDENCY OF RUNWAY VISUAL RANGE|CODE TABLE|0|0|2|CODE TABLE|0|1 +020019|significantWeather|string|SIGNIFICANT PRESENT OR FORECAST WEATHER|CCITT IA5|0|0|72|Character|0|9 +020020|significantRecentWeatherPhenomena|string|SIGNIFICANT RECENT WEATHER PHENOMENA|CCITT IA5|0|0|32|Character|0|4 +020021|precipitationType|flag|TYPE OF PRECIPITATION|FLAG TABLE|0|0|30|FLAG TABLE|0|10 +020022|characterOfPrecipitation|table|CHARACTER OF PRECIPITATION|CODE TABLE|0|0|4|CODE TABLE|0|2 +020023|otherWeatherPhenomena|flag|OTHER WEATHER PHENOMENA|FLAG TABLE|0|0|18|FLAG TABLE|0|6 +020024|intensityOfPhenomena|table|INTENSITY OF PHENOMENA|CODE TABLE|0|0|3|CODE TABLE|0|1 +020025|obscuration|flag|OBSCURATION|FLAG TABLE|0|0|21|FLAG TABLE|0|7 +020026|characterOfObscuration|table|CHARACTER OF OBSCURATION|CODE TABLE|0|0|4|CODE TABLE|0|2 +020027|phenomenaOccurrence|flag|PHENOMENA OCCURRENCE|FLAG TABLE|0|0|9|FLAG TABLE|0|3 +020028|expectedChangeInIntensity|table|EXPECTED CHANGE IN INTENSITY|CODE TABLE|0|0|3|CODE TABLE|0|1 +020029|rainFlag|table|RAIN FLAG|CODE TABLE|0|0|2|CODE TABLE|0|1 +020031|iceDepositThickness|double|ICE DEPOSIT (THICKNESS)|m|2|0|7|m|2|3 +020032|rateOfIceAccretionEstimated|table|RATE OF ICE ACCRETION (ESTIMATED)|CODE TABLE|0|0|3|CODE TABLE|0|1 +020033|causeOfIceAccretion|flag|CAUSE OF ICE ACCRETION|FLAG TABLE|0|0|4|FLAG TABLE|0|2 +020034|seaIceConcentration|table|SEA ICE CONCENTRATION|CODE TABLE|0|0|5|CODE TABLE|0|2 +020035|amountAndTypeOfIce|table|AMOUNT AND TYPE OF ICE|CODE TABLE|0|0|4|CODE TABLE|0|2 +020036|iceSituation|table|ICE SITUATION|CODE TABLE|0|0|5|CODE TABLE|0|2 +020037|iceDevelopment|table|ICE DEVELOPMENT|CODE TABLE|0|0|5|CODE TABLE|0|2 +020038|iceEdgeBearing|long|BEARING OF ICE EDGE|deg|0|0|12|deg|0|3 +020039|iceDistance|long|ICE DISTANCE|m|-1|0|13|m|-1|4 +020040|evolutionOfDriftSnow|table|EVOLUTION OF DRIFT SNOW|CODE TABLE|0|0|4|CODE TABLE|0|2 +020041|airframeIcing|table|AIRFRAME ICING|CODE TABLE|0|0|4|CODE TABLE|0|2 +020042|airframeIcingPresent|table|AIRFRAME ICING PRESENT|CODE TABLE|0|0|2|CODE TABLE|0|1 +020043|peakLiquidWaterContent|double|PEAK LIQUID WATER CONTENT|kg m-3|4|0|7|kg m-3|4|2 +020044|averageLiquidWaterContent|double|AVERAGE LIQUID WATER CONTENT|kg m-3|4|0|7|kg m-3|4|2 +020045|supercooledLargeDropletConditions|table|SUPERCOOLED LARGE DROPLET (SLD) CONDITIONS|CODE TABLE|0|0|2|CODE TABLE|0|1 +020048|evolutionOfFeature|table|EVOLUTION OF FEATURE|CODE TABLE|0|0|4|CODE TABLE|0|2 +020050|cloudIndex|table|CLOUD INDEX|CODE TABLE|0|0|8|CODE TABLE|0|3 +020051|amountOfLowClouds|long|AMOUNT OF LOW CLOUDS|%|0|0|7|%|0|3 +020052|amountOfMiddleClouds|long|AMOUNT OF MIDDLE CLOUDS|%|0|0|7|%|0|3 +020053|amountOfHighClouds|long|AMOUNT OF HIGH CLOUDS|%|0|0|7|%|0|3 +020054|trueDirectionFromWhichAPhenomenonOrCloudsAreMovingOrInWhichTheyAreObserved|long|TRUE DIRECTION FROM WHICH A PHENOMENON OR CLOUDS ARE MOVING OR IN WHICH THEY ARE OBSERVED|deg|0|0|9|deg|0|3 +020055|stateOfSkyInTropics|table|STATE OF SKY IN THE TROPICS|CODE TABLE|0|0|4|CODE TABLE|0|2 +020056|cloudPhase|table|CLOUD PHASE|CODE TABLE|0|0|3|CODE TABLE|0|1 +020058|visibilitySeawardsFromACoastalStation|long|VISIBILITY SEAWARDS FROM A COASTAL STATION|m|-1|0|13|m|-1|4 +020059|minimumHorizontalVisibility|long|MINIMUM HORIZONTAL VISIBILITY|m|-1|0|9|m|-1|3 +020060|prevailingHorizontalVisibility|long|PREVAILING HORIZONTAL VISIBILITY|m|-1|0|10|m|-1|4 +020061|runwayVisualRangeRvr|long|RUNWAY VISUAL RANGE (RVR)|m|0|0|12|m|0|4 +020062|stateOfGround|table|STATE OF THE GROUND (WITH OR WITHOUT SNOW)|CODE TABLE|0|0|5|CODE TABLE|0|2 +020063|specialPhenomena|table|SPECIAL PHENOMENA|CODE TABLE|0|0|10|CODE TABLE|0|4 +020065|snowCover|long|SNOW COVER|%|0|0|7|%|0|3 +020066|maximumDiameterOfHailstones|double|MAXIMUM DIAMETER OF HAILSTONES|m|3|0|8|m|3|3 +020067|diameterOfDeposit|double|DIAMETER OF DEPOSIT|m|3|0|9|m|3|3 +020070|minimumNumberOfAtmospherics|long|MINIMUM NUMBER OF ATMOSPHERICS|Numeric|0|0|7|Numeric|0|3 +020071|accuracyOfFixAndRateOfAtmospherics|table|ACCURACY OF FIX AND RATE OF ATMOSPHERICS|CODE TABLE|0|0|4|CODE TABLE|0|2 +020081|cloudAmountInSegment|long|CLOUD AMOUNT IN SEGMENT|%|0|0|7|%|0|3 +020082|amountSegmentCloudFree|long|AMOUNT SEGMENT CLOUD FREE|%|0|0|7|%|0|3 +020083|amountOfSegmentCoveredByScene|long|AMOUNT OF SEGMENT COVERED BY SCENE|%|0|0|7|%|0|3 +020085|generalConditionOfRunway|table|GENERAL CONDITION OF RUNWAY|CODE TABLE|0|0|4|CODE TABLE|0|1 +020086|runwayDeposits|table|RUNWAY DEPOSITS|CODE TABLE|0|0|4|CODE TABLE|0|1 +020087|runwayContamination|table|RUNWAY CONTAMINATION|CODE TABLE|0|0|4|CODE TABLE|0|1 +020088|depthOfRunwayDeposits|double|DEPTH OF RUNWAY DEPOSITS|m|3|0|12|m|0|4 +020089|runwayFrictionCoefficient|table|RUNWAY FRICTION COEFFICIENT|CODE TABLE|0|0|7|CODE TABLE|0|2 +020090|specialClouds|table|SPECIAL CLOUDS|CODE TABLE|0|0|4|CODE TABLE|0|2 +020091|verticalVisibility|long|VERTICAL VISIBILITY|ft|-2|0|10|ft|-2|3 +020092|heightOfBaseOfCloud|long|HEIGHT OF BASE OF CLOUD|ft|-2|0|10|ft|-2|3 +020093|heightOfInversion|long|HEIGHT OF INVERSION|m|-1|0|8|m|-1|3 +020095|iceProbability|long|ICE PROBABILITY|Numeric|3|0|10|Numeric|3|4 +020096|iceAgeAParameter|double|ICE AGE (A PARAMETER)|dB|2|-4096|13|dB|2|4 +020101|locustAcridianName|table|LOCUST (ACRIDIAN) NAME|CODE TABLE|0|0|4|CODE TABLE|0|2 +020102|locustMaturityColour|table|LOCUST (MATURITY) COLOUR|CODE TABLE|0|0|4|CODE TABLE|0|2 +020103|stageOfDevelopmentOfLocusts|table|STAGE OF DEVELOPMENT OF LOCUSTS|CODE TABLE|0|0|4|CODE TABLE|0|2 +020104|organizationStateOfSwarm|table|ORGANIZATION STATE OF SWARM OR BAND OF LOCUSTS|CODE TABLE|0|0|4|CODE TABLE|0|2 +020105|sizeOfSwarmOrBandOfLocustsAndDurationOfPassageOfSwarm|table|SIZE OF SWARM OR BAND OF LOCUSTS AND DURATION OF PASSAGE OF SWARM|CODE TABLE|0|0|4|CODE TABLE|0|2 +020106|locustPopulationDensity|table|LOCUST POPULATION DENSITY|CODE TABLE|0|0|4|CODE TABLE|0|2 +020107|directionOfMovementsOfLocustSwarm|table|DIRECTION OF MOVEMENTS OF LOCUST SWARM|CODE TABLE|0|0|4|CODE TABLE|0|2 +020108|extentOfVegetation|table|EXTENT OF VEGETATION|CODE TABLE|0|0|4|CODE TABLE|0|2 +020111|xAxisErrorEllipseMajorComponent|long|X-AXIS ERROR ELLIPSE MAJOR COMPONENT|m|-1|0|17|m|-1|6 +020112|yAxisErrorEllipseMinorComponent|long|Y-AXIS ERROR ELLIPSE MINOR COMPONENT|m|-1|0|17|m|-1|6 +020113|zAxisErrorEllipseComponent|long|Z-AXIS ERROR ELLIPSE COMPONENT|m|-1|0|17|m|-1|6 +020114|angleOfXAxisInErrorEllipse|double|ANGLE OF X-AXIS IN ERROR ELLIPSE|deg|2|-18000|16|deg|2|5 +020115|angleOfZAxisInErrorEllipse|double|ANGLE OF Z-AXIS IN ERROR ELLIPSE|deg|2|-18000|16|deg|2|5 +020116|emissionHeightOfCloudStroke|long|EMISSION HEIGHT OF CLOUD STROKE|m|0|0|16|m|0|5 +020117|amplitudeOfLightningStrike|long|AMPLITUDE OF LIGHTNING STRIKE|A|-1|-32000|16|A|-1|5 +020118|lightningDetectionError|long|LIGHTNING DETECTION ERROR|m|0|0|19|m|0|6 +020119|lightningDischargePolarity|table|LIGHTNING DISCHARGE POLARITY|CODE TABLE|0|0|2|CODE TABLE|0|1 +020121|thresholdValueForPolarityDecision|double|THRESHOLD VALUE FOR POLARITY DECISION|V|3|0|16|V|3|5 +020122|thresholdValueForPolarityDecision|long|THRESHOLD VALUE FOR POLARITY DECISION|A|0|0|16|A|0|5 +020123|minimumDirectionThreshold|double|MINIMUM THRESHOLD FOR DETECTION|V/m|3|0|16|V/m|3|5 +020124|lightningStrokeOrFlash|table|LIGHTNING STROKE OR FLASH|CODE TABLE|0|0|2|CODE TABLE|0|1 +020126|lightningRateOfDischarge|long|LIGHTNING RATE OF DISCHARGE|/h|0|0|23|/h|0|7 +020127|lightningDistanceFromStation|long|LIGHTNING - DISTANCE FROM STATION|m|-3|0|8|m|-3|3 +020128|lightningDirectionFromStation|double|LIGHTNING - DIRECTION FROM STATION|deg|1|0|12|deg|1|4 +020129|lightningDensityStrokeFlashOrEvent|double|LIGHTNING DENSITY (STROKE, FLASH OR EVENT)|m-2|6|0|10|m-2|6|4 +020130|cloudHydrometeorConcentration|long|CLOUD HYDROMETEOR CONCENTRATION|Numeric|0|0|10|Numeric|0|3 +020131|effectiveRadiusOfCloudHydrometeors|double|EFFECTIVE RADIUS OF CLOUD HYDROMETEORS|m|5|0|6|m|5|2 +020132|cloudLiquidWaterContent|double|CLOUD LIQUID WATER CONTENT|kg m-3|5|0|11|kg m-3|5|4 +020133|hydrometeorRadius|double|HYDROMETEOR RADIUS|m|5|0|6|m|5|2 +020135|iceMassOnARod|double|ICE MASS (ON A ROD)|kg/m|1|0|10|kg/m|1|3 +020136|supplementaryCloudType|table|SUPPLEMENTARY CLOUD TYPE|CODE TABLE|0|0|9|CODE TABLE|0|3 +020137|evolutionOfClouds|table|EVOLUTION OF CLOUDS|CODE TABLE|0|0|4|CODE TABLE|0|2 +020138|roadSurfaceCondition|table|ROAD SURFACE CONDITION|CODE TABLE|0|0|4|CODE TABLE|0|2 +021001|horizontalReflectivity|long|HORIZONTAL REFLECTIVITY|dB|0|-64|7|dB|0|3 +021002|verticalReflectivity|long|VERTICAL REFLECTIVITY|dB|0|-64|7|dB|0|3 +021003|differentialReflectivity|double|DIFFERENTIAL REFLECTIVITY|dB|1|-5|7|dB|1|3 +021004|differentialReflectivity|double|DIFFERENTIAL REFLECTIVITY|dB|2|-800|11|dB|2|4 +021005|linearDepolarizationRatio|long|LINEAR DEPOLARIZATION RATIO|dB|0|-65|6|dB|0|2 +021006|circularDepolarizationRatio|long|CIRCULAR DEPOLARIZATION RATIO|dB|0|-65|6|dB|0|2 +021007|radarReflectivityFactor|double|RADAR REFLECTIVITY FACTOR|dB|2|-9000|15|dB|0|0 +021008|uncertaintyInRadarReflectivityFactor|double|UNCERTAINTY IN RADAR REFLECTIVITY FACTOR|dB|2|0|13|dB|0|0 +021009|verticalDopplerVelocity|double|VERTICAL DOPPLER VELOCITY|m/s|2|-10000|15|m/s|0|0 +021010|uncertaintyInVerticalDopplerVelocity|double|UNCERTAINTY IN VERTICAL DOPPLER VELOCITY|m/s|2|-10000|15|m/s|0|0 +021011|dopplerMeanVelocityXDirection|long|DOPPLER MEAN VELOCITY IN X-DIRECTION|m/s|0|-128|8|m/s|0|3 +021012|dopplerMeanVelocityYDirection|long|DOPPLER MEAN VELOCITY IN Y-DIRECTION|m/s|0|-128|8|m/s|0|3 +021013|dopplerMeanVelocityZDirection|long|DOPPLER MEAN VELOCITY IN Z-DIRECTION|m/s|0|-128|8|m/s|0|3 +021014|dopplerMeanVelocityRadial|double|DOPPLER MEAN VELOCITY (RADIAL)|m/s|1|-4096|13|m/s|1|4 +021017|dopplerVelocitySpectralWidth|double|DOPPLER VELOCITY SPECTRAL WIDTH|m/s|1|0|8|m/s|1|3 +021018|extendedNyquistVelocity|double|EXTENDED NYQUIST VELOCITY|m/s|1|0|10|m/s|1|4 +021019|highNyquistVelocity|double|HIGH NYQUIST VELOCITY|m/s|1|0|10|m/s|1|3 +021021|echoTops|long|ECHO TOPS|m|-3|0|4|m|-3|2 +021022|rangeBinOffset|double|RANGE BIN OFFSET|m|1|0|14|m|1|5 +021023|rangeBinSize|long|RANGE BIN SIZE|m|0|0|14|m|0|5 +021024|azimuthOffset|double|AZIMUTH OFFSET|deg|1|0|12|deg|1|4 +021025|azimuthalResolution|double|AZIMUTHAL RESOLUTION|deg|1|0|8|deg|1|3 +021028|differentialPhase|double|DIFFERENTIAL PHASE|deg|1|0|12|deg|1|4 +021029|crossPolarizationCorrelationCoefficient|long|CROSS-POLARIZATION CORRELATION COEFFICIENT|Numeric|2|-100|8|Numeric|2|3 +021030|signalToNoiseRatio|long|SIGNAL TO NOISE RATIO|dB|0|-32|8|dB|0|3 +021031|verticallyIntegratedLiquidWaterContent|long|VERTICALLY INTEGRATED LIQUID-WATER CONTENT|kg m-2|0|0|7|kg m-2|0|3 +021036|radarRainfallIntensity|double|RADAR RAINFALL INTENSITY|m/s|7|0|12|m/s|7|4 +021041|brightBandHeight|long|BRIGHT-BAND HEIGHT|m|-2|0|8|m|-2|3 +021051|signalPowerAbove1Mw|long|SIGNAL POWER ABOVE 1 MW|dB|0|-256|8|dB|0|3 +021062|backscatter|double|BACKSCATTER|dB|2|-5000|13|dB|2|4 +021063|radiometricResolutionNoiseValue|double|RADIOMETRIC RESOLUTION (NOISE VALUE)|%|1|0|10|%|1|4 +021064|clutterNoiseEstimate|long|CLUTTER NOISE ESTIMATE|Numeric|0|0|8|Numeric|0|3 +021065|missingPacketCounter|long|MISSING PACKET COUNTER|Numeric|0|-127|8|Numeric|0|3 +021066|waveScatterometerProductConfidenceData|flag|WAVE SCATTEROMETER PRODUCT CONFIDENCE DATA|FLAG TABLE|0|0|12|FLAG TABLE|0|4 +021067|windProductConfidenceData|flag|WIND PRODUCT CONFIDENCE DATA|FLAG TABLE|0|0|13|FLAG TABLE|0|5 +021068|radarAltimeterProductConfidenceData|flag|RADAR ALTIMETER PRODUCT CONFIDENCE DATA|FLAG TABLE|0|0|8|FLAG TABLE|0|3 +021069|sstProductConfidenceData|flag|SST PRODUCT CONFIDENCE DATA|FLAG TABLE|0|0|10|FLAG TABLE|0|4 +021070|sstProductConfidenceDataSadist2|flag|SST PRODUCT CONFIDENCE DATA (SADIST-2)|FLAG TABLE|0|0|23|FLAG TABLE|0|6 +021071|peakiness|long|PEAKINESS|Numeric|0|0|16|Numeric|0|5 +021072|satelliteAltimeterCalibrationStatus|flag|SATELLITE ALTIMETER CALIBRATION STATUS|FLAG TABLE|0|0|4|FLAG TABLE|0|2 +021073|satelliteAltimeterInstrumentMode|flag|SATELLITE ALTIMETER INSTRUMENT MODE|FLAG TABLE|0|0|9|FLAG TABLE|0|3 +021075|imageSpectrumIntensity|long|IMAGE SPECTRUM INTENSITY|Numeric|0|0|8|Numeric|0|3 +021076|representationOfIntensities|table|REPRESENTATION OF INTENSITIES|CODE TABLE|0|0|3|CODE TABLE|0|1 +021077|altitudeCorrectionIonosphere|double|ALTITUDE CORRECTION (IONOSPHERE)|m|3|0|14|m|3|5 +021078|altitudeCorrectionDryTroposphere|double|ALTITUDE CORRECTION (DRY TROPOSPHERE)|m|3|0|9|m|3|3 +021079|altitudeCorrectionWetTroposphere|double|ALTITUDE CORRECTION (WET TROPOSPHERE)|m|3|2000|10|m|3|4 +021080|altitudeCorrectionCalibrationConstant|double|ALTITUDE CORRECTION (CALIBRATION CONSTANT)|m|3|0|11|m|3|4 +021081|openLoopCorrectionHeightTimeLoop|double|OPEN LOOP CORRECTION (HEIGHT-TIME LOOP)|m|3|0|10|m|3|4 +021082|openLoopCorrectionAutoGainControl|double|OPEN LOOP CORRECTION (AUTO GAIN CONTROL)|dB|3|-3000|14|dB|3|5 +021083|warmTargetCalibration|long|WARM TARGET CALIBRATION|Numeric|0|0|16|Numeric|0|5 +021084|coldTargetCalibration|long|COLD TARGET CALIBRATION|Numeric|0|0|16|Numeric|0|5 +021085|atsrSeaSurfaceTemperatureAcrossTrackBandNumber|long|ATSR SEA-SURFACE TEMPERATURE ACROSS-TRACK BAND NUMBER|Numeric|0|0|4|Numeric|0|2 +021086|numberOfPixelsInNadirOnlyAverage|long|NUMBER OF PIXELS IN NADIR ONLY, AVERAGE|Numeric|0|0|9|Numeric|0|3 +021087|numberOfPixelsInDualViewAverage|long|NUMBER OF PIXELS IN DUAL VIEW, AVERAGE|Numeric|0|0|9|Numeric|0|3 +021088|wetBackscatter|double|WET BACKSCATTER|dB|2|-5000|13|dB|2|4 +021091|radarSignalDopplerSpectrum0thMoment|long|RADAR SIGNAL DOPPLER SPECTRUM 0TH MOMENT|dB|0|-100|8|dB|0|3 +021092|rassSignalDopplerSpectrum0thMomentReferringToRassSignal|long|RASS SIGNAL DOPPLER SPECTRUM 0TH MOMENT, REFERRING TO RASS SIGNAL|dB|0|-100|8|dB|0|3 +021093|kuBandPeakiness|long|KU BAND PEAKINESS|Numeric|3|0|16|Numeric|3|5 +021094|sBandPeakiness|long|S BAND PEAKINESS|Numeric|3|0|16|Numeric|3|5 +021095|kpCoefficientA|long|KP COEFFICIENT A|Numeric|6|0|20|Numeric|6|7 +021096|kpCoefficientB|long|KP COEFFICIENT B|Numeric|6|0|20|Numeric|6|7 +021097|kpCoefficientC|long|KP COEFFICIENT C|Numeric|6|0|20|Numeric|6|7 +021101|numberOfVectorAmbiguities|long|NUMBER OF VECTOR AMBIGUITIES|Numeric|0|0|3|Numeric|0|1 +021102|indexOfSelectedWindVector|long|INDEX OF SELECTED WIND VECTOR|Numeric|0|0|3|Numeric|0|1 +021103|totalNumberOfSigma0Measurements|long|TOTAL NUMBER OF SIGMA-0 MEASUREMENTS|Numeric|0|0|5|Numeric|0|2 +021104|likelihoodComputedForSolution|long|LIKELIHOOD COMPUTED FOR SOLUTION|Numeric|3|-30000|15|Numeric|3|5 +021105|normalizedRadarCrossSection|double|NORMALIZED RADAR CROSS-SECTION|dB|2|-10000|14|dB|2|5 +021106|kpVarianceCoefficientAlpha|long|KP VARIANCE COEFFICIENT (ALPHA)|Numeric|3|0|14|Numeric|3|5 +021107|kpVarianceCoefficientBeta|long|KP VARIANCE COEFFICIENT (BETA)|Numeric|8|0|16|Numeric|8|5 +021109|seawindsWindVectorCellQuality|flag|SEAWINDS WIND VECTOR CELL QUALITY|FLAG TABLE|0|0|17|FLAG TABLE|0|6 +021110|numberOfInnerBeamSigma0ForwardOfSatellite|long|NUMBER OF INNER-BEAM SIGMA-0 (FORWARD OF SATELLITE)|Numeric|0|0|6|Numeric|0|2 +021111|numberOfOuterBeamSigma0ForwardOfSatellite|long|NUMBER OF OUTER-BEAM SIGMA-0 (FORWARD OF SATELLITE)|Numeric|0|0|6|Numeric|0|2 +021112|numberOfInnerBeamSigma0AftOfSatellite|long|NUMBER OF INNER-BEAM SIGMA-0 (AFT OF SATELLITE)|Numeric|0|0|6|Numeric|0|2 +021113|numberOfOuterBeamSigma0AftOfSatellite|long|NUMBER OF OUTER-BEAM SIGMA-0 (AFT OF SATELLITE)|Numeric|0|0|6|Numeric|0|2 +021114|kpVarianceCoefficientGamma|double|KP VARIANCE COEFFICIENT (GAMMA)|dB|3|-140000|18|dB|3|6 +021115|seawindsSigma0Quality|flag|SEAWINDS SIGMA-0 QUALITY|FLAG TABLE|0|0|17|FLAG TABLE|0|6 +021116|seawindsSigma0Mode|flag|SEAWINDS SIGMA-0 MODE|FLAG TABLE|0|0|17|FLAG TABLE|0|6 +021117|sigma0VarianceQualityControl|long|SIGMA-0 VARIANCE QUALITY CONTROL|Numeric|2|0|16|Numeric|2|5 +021118|attenuationCorrectionOnSigma0|double|ATTENUATION CORRECTION ON SIGMA-0|dB|2|-10000|14|dB|2|5 +021119|windScatterometerGeophysicalModelFunction|table|WIND SCATTEROMETER GEOPHYSICAL MODEL FUNCTION|CODE TABLE|0|0|6|CODE TABLE|0|2 +021120|probabilityOfRain|long|PROBABILITY OF RAIN|Numeric|3|0|10|Numeric|3|4 +021121|seawindsNofRainIndex|long|SEAWINDS NOF RAIN INDEX|Numeric|0|0|8|Numeric|0|3 +021122|attenuationCorrectionOnSigma0FromTb|double|ATTENUATION CORRECTION ON SIGMA-0 (FROM TB)|dB|2|-10000|14|dB|2|5 +021123|seawindsNormalizedRadarCrossSection|double|SEAWINDS NORMALIZED RADAR CROSS-SECTION|dB|2|-30000|15|dB|2|5 +021128|numberOfValidPointsPerSecondUsedToDerivePreviousParameters|long|NUMBER OF VALID POINTS PER SECOND USED TO DERIVE PREVIOUS PARAMETERS|Numeric|0|0|8|Numeric|0|3 +021130|spectrumTotalEnergy|long|SPECTRUM TOTAL ENERGY|Numeric|6|0|28|Numeric|6|9 +021131|spectrumMaxEnergy|long|SPECTRUM MAX ENERGY|Numeric|6|0|28|Numeric|6|9 +021132|directionOfSpectrumMaxOnHigherResolutionGrid|double|DIRECTION OF SPECTRUM MAX ON HIGHER RESOLUTION GRID|deg|3|0|19|deg|3|6 +021133|wavelengthOfSpectrumMaxOnHigherResolutionGrid|double|WAVELENGTH OF SPECTRUM MAX ON HIGHER RESOLUTION GRID|m|3|0|29|m|3|9 +021134|rangeResolutionOfCressCovarianceSpectrum|double|RANGE RESOLUTION OF CRESS COVARIANCE SPECTRUM|rad/m|3|0|19|rad/m|3|6 +021135|realPartOfCrossSpectraPolarGridNumberOfBins|long|REAL PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS|Numeric|3|-524288|20|Numeric|3|7 +021136|imaginaryPartOfCrossSpectraPolarGridNumberOfBins|long|IMAGINARY PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS|Numeric|3|-524288|20|Numeric|3|7 +021137|kuBandCorrectedOceanBackscatterCoefficient|double|KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5 +021138|stdKuBandCorrectedOceanBackscatterCoefficient|double|STD KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5 +021139|kuBandNetInstrumentalCorrectionForAgc|double|KU BAND NET INSTRUMENTAL CORRECTION FOR AGC|dB|2|-2048|12|dB|2|4 +021140|sBandCorrectedOceanBackscatterCoefficient|double|S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5 +021141|stdSBandCorrectedOceanBackscatterCoefficient|double|STD S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5 +021142|sBandNetInstrumentalCorrectionForAgc|double|S BAND NET INSTRUMENTAL CORRECTION FOR AGC|dB|2|-1024|11|dB|2|4 +021143|kuBandRainAttenuation|double|KU BAND RAIN ATTENUATION|dB|2|-1073741824|31|dB|2|10 +021144|altimeterRainFlag|flag|ALTIMETER RAIN FLAG|FLAG TABLE|0|0|2|FLAG TABLE|0|1 +021145|kuBandAutomaticGainControl|double|KU BAND AUTOMATIC GAIN CONTROL|dB|2|0|13|dB|2|4 +021146|rmsKuBandAutomaticGainControl|double|RMS KU BAND AUTOMATIC GAIN CONTROL|dB|2|0|8|dB|2|3 +021147|numberOfValidPointsForKuBandAutomaticGainControl|long|NUMBER OF VALID POINTS FOR KU BAND AUTOMATIC GAIN CONTROL|Numeric|0|0|5|Numeric|0|2 +021148|trailingEdgeVariationFlag|flag|TRAILING EDGE VARIATION FLAG|FLAG TABLE|0|0|9|FLAG TABLE|0|3 +021150|beamCollocation|table|BEAM CO-LOCATION|CODE TABLE|0|0|2|CODE TABLE|0|1 +021151|estimatedErrorInSigma0At40DegreesIncidenceAngle|double|ESTIMATED ERROR IN SIGMA-0 AT 40 DEGREES INCIDENCE ANGLE|dB|2|0|9|dB|2|3 +021152|slopeAt40DegreesIncidenceAngle|double|SLOPE AT 40 DEGREES INCIDENCE ANGLE|dB/deg|2|-80|7|dB/deg|2|2 +021153|estimatedErrorInSlopeAt40DegreesIncidenceAngle|double|ESTIMATED ERROR IN SLOPE AT 40 DEGREES INCIDENCE ANGLE|dB/deg|2|-40|6|dB/deg|2|2 +021154|soilMoistureSensitivity|double|SOIL MOISTURE SENSITIVITY|dB|2|0|12|dB|2|4 +021155|windVectorCellQuality|flag|WIND VECTOR CELL QUALITY|FLAG TABLE|0|0|24|FLAG TABLE|0|8 +021156|backscatterDistance|long|BACKSCATTER DISTANCE|Numeric|1|-4096|13|Numeric|1|4 +021157|lossPerUnitLengthOfAtmosphere|double|LOSS PER UNIT LENGTH OF ATMOSPHERE USED|dB/m|10|0|22|dB/m|10|7 +021158|ascatKpEstimateQuality|table|ASCAT KP ESTIMATE QUALITY|CODE TABLE|0|0|2|CODE TABLE|0|1 +021159|ascatSigma0Usability|table|ASCAT SIGMA-0 USABILITY|CODE TABLE|0|0|2|CODE TABLE|0|1 +021160|ascatUseOfSyntheticData|long|ASCAT USE OF SYNTHETIC DATA|Numeric|3|0|10|Numeric|3|4 +021161|ascatSyntheticDataQuantity|long|ASCAT SYNTHETIC DATA QUANTITY|Numeric|3|0|10|Numeric|3|4 +021162|ascatSatelliteOrbitAndAttitudeQuality|long|ASCAT SATELLITE ORBIT AND ATTITUDE QUALITY|Numeric|3|0|10|Numeric|3|4 +021163|ascatSolarArrayReflectionContamination|long|ASCAT SOLAR ARRAY REFLECTION CONTAMINATION|Numeric|3|0|10|Numeric|3|4 +021164|ascatTelemetryPresenceAndQuality|long|ASCAT TELEMETRY PRESENCE AND QUALITY|Numeric|3|0|10|Numeric|3|4 +021165|ascatExtrapolatedReferenceFunctionPresence|long|ASCAT EXTRAPOLATED REFERENCE FUNCTION PRESENCE|Numeric|3|0|10|Numeric|3|4 +021166|landFraction|long|LAND FRACTION|Numeric|3|0|10|Numeric|3|4 +021169|icePresenceIndicator|table|ICE PRESENCE INDICATOR|CODE TABLE|0|0|2|CODE TABLE|0|1 +021170|cBandCorrectedOceanBackscatterCoefficient|double|C BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5 +021171|rmsCBandCorrectedOceanBackscatterCoefficient|double|RMS C BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5 +021172|cBandNetInstrumentalCorrectionForAgc|double|C BAND NET INSTRUMENTAL CORRECTION FOR AGC|dB|2|-2048|12|dB|2|4 +021173|cBandAutomaticGainControl|double|C BAND AUTOMATIC GAIN CONTROL|dB|2|0|13|dB|2|4 +021174|rmsCBandAutomaticGainControl|double|RMS C BAND AUTOMATIC GAIN CONTROL|dB|2|0|9|dB|2|3 +021175|numberOfValidPointsForCBandAutomaticGainControl|long|NUMBER OF VALID POINTS FOR C BAND AUTOMATIC GAIN CONTROL|Numeric|0|0|10|Numeric|0|4 +021176|highFrequencyVariabilityCorrection|double|HIGH FREQUENCY VARIABILITY CORRECTION|m|3|0|16|m|3|5 +021177|correctedOcogBackscatterCoefficient|double|CORRECTED OCOG BACKSCATTER COEFFICIENT|dB|2|0|16|dB|2|5 +021178|stdOf20HzOcogBackscatterCoefficient|double|STD OF 20 HZ OCOG BACKSCATTER COEFFICIENT|dB|2|0|16|dB|2|5 +021179|numberOf20HzValidPointsForOcogBackscatterCoefficient|long|NUMBER OF 20 HZ VALID POINTS FOR OCOG BACKSCATTER COEFFICIENT|Numeric|0|0|16|Numeric|0|5 +021180|numberOf20HzValidPointsForOceanBackscatterCoefficient|long|NUMBER OF 20 HZ VALID POINTS FOR OCEAN BACKSCATTER COEFFICIENT|Numeric|0|0|8|Numeric|0|3 +021181|20HzOceanBackscatterCoefficient|double|20 HZ OCEAN BACKSCATTER COEFFICIENT|dB|2|0|16|dB|2|5 +021182|20HzKuBandPeakiness|long|20 HZ KU BAND PEAKINESS|Numeric|3|0|16|Numeric|3|5 +021183|specificBandCorrectedOceanBackscatterCoefficient|double|SPECIFIC BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5 +021184|stdSpecificBandCorrectedOceanBackscatterCoefficient|double|STD SPECIFIC BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5 +021185|specificBandNetInstrumentalCorrectionForAgc|double|SPECIFIC BAND NET INSTRUMENTAL CORRECTION FOR AGC|dB|2|-2048|12|dB|2|4 +021186|specificBandAutomaticGainControl|double|SPECIFIC BAND AUTOMATIC GAIN CONTROL|dB|2|0|13|dB|2|4 +021187|rmsSpecificBandAutomaticGainControl|double|RMS SPECIFIC BAND AUTOMATIC GAIN CONTROL|dB|2|0|8|dB|2|3 +021188|numberOfValidPointsForSpecificBandAutomaticGainControl|long|NUMBER OF VALID POINTS FOR SPECIFIC BAND AUTOMATIC GAIN CONTROL|Numeric|0|0|7|Numeric|0|3 +021189|correctedOcogBackscatterCoefficientNegativeReference|double|CORRECTED OCOG BACKSCATTER COEFFICIENT (NEGATIVE REFERENCE)|dB|2|-32768|16|dB|2|6 +022001|wavesDirection|long|DIRECTION OF WAVES|deg|0|0|9|deg|0|3 +022002|windWavesDirection|long|DIRECTION OF WIND WAVES|deg|0|0|9|deg|0|3 +022003|swellWavesDirection|long|DIRECTION OF SWELL WAVES|deg|0|0|9|deg|0|3 +022004|currentDirection|long|DIRECTION OF CURRENT|deg|0|0|9|deg|0|3 +022005|seaSurfaceCurrentDirection|long|DIRECTION OF SEA-SURFACE CURRENT|deg|0|0|9|deg|0|3 +022011|periodOfWaves|long|PERIOD OF WAVES|s|0|0|6|s|0|2 +022012|periodOfWindWaves|long|PERIOD OF WIND WAVES|s|0|0|6|s|0|2 +022013|periodOfSwellWaves|long|PERIOD OF SWELL WAVES|s|0|0|6|s|0|2 +022021|heightOfWaves|double|HEIGHT OF WAVES|m|1|0|10|m|1|4 +022022|heightOfWindWaves|double|HEIGHT OF WIND WAVES|m|1|0|10|m|1|4 +022023|heightOfSwellWaves|double|HEIGHT OF SWELL WAVES|m|1|0|10|m|1|4 +022025|standardDeviationWaveHeight|double|STANDARD DEVIATION WAVE HEIGHT|m|2|0|10|m|2|4 +022026|standardDeviationOfSignificantWaveHeight|double|STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT|m|2|0|10|m|2|4 +022031|speedOfCurrent|double|SPEED OF CURRENT|m/s|2|0|13|m/s|2|4 +022032|speedOfSeaSurfaceCurrent|double|SPEED OF SEA-SURFACE CURRENT|m/s|2|0|13|m/s|2|4 +022035|tidalElevationWithRespectToLocalChartDatum|double|TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM|m|2|0|14|m|2|4 +022036|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|2|0|14|m|2|4 +022037|tidalElevationWithRespectToNationalLandDatum|double|TIDAL ELEVATION WITH RESPECT TO NATIONAL LAND DATUM|m|3|-10000|15|m|3|5 +022038|tidalElevationWithRespectToLocalChartDatum|double|TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM|m|3|-10000|15|m|3|5 +022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|13|m|3|4 +022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5 +022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4 +022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4 +022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5 +022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5 +022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6 +022046|seaIceFraction|long|SEA ICE FRACTION|Numeric|2|0|7|Numeric|2|3 +022049|seaSurfaceTemperature|double|SEA-SURFACE TEMPERATURE|K|2|0|15|K|2|5 +022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3 +022055|floatCycleNumber|long|FLOAT CYCLE NUMBER|Numeric|0|0|10|Numeric|0|3 +022056|directionOfProfile|table|DIRECTION OF PROFILE|CODE TABLE|0|0|2|CODE TABLE|0|1 +022059|seaSurfaceSalinity|double|SEA-SURFACE SALINITY|0/00|2|0|14|0/00|2|5 +022060|lagrangianDrifterDrogueStatus|table|LAGRANGIAN DRIFTER DROGUE STATUS|CODE TABLE|0|0|3|CODE TABLE|0|1 +022061|seaState|table|STATE OF THE SEA|CODE TABLE|0|0|4|CODE TABLE|0|2 +022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5 +022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5 +022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6 +022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6 +022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8 +022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE/SALINITY PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4 +022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3 +022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7 +022070|significantWaveHeight|double|SIGNIFICANT WAVE HEIGHT|m|2|0|13|m|2|4 +022071|spectralPeakWavePeriod|double|SPECTRAL PEAK WAVE PERIOD|s|1|0|9|s|1|3 +022072|spectralPeakWaveLength|long|SPECTRAL PEAK WAVELENGTH|m|0|0|13|m|0|4 +022073|maximumWaveHeight|double|MAXIMUM WAVE HEIGHT|m|2|0|13|m|2|4 +022074|averageWavePeriod|double|AVERAGE WAVE PERIOD|s|1|0|9|s|1|3 +022075|averageWaveLength|long|AVERAGE WAVELENGTH|m|0|0|13|m|0|4 +022076|directionFromWhichDominantWavesAreComing|long|DIRECTION FROM WHICH DOMINANT WAVES ARE COMING|deg|0|0|9|deg|0|3 +022077|directionalSpreadOfDominantWave|long|DIRECTIONAL SPREAD OF DOMINANT WAVE|deg|0|0|9|deg|0|3 +022078|durationOfWaveRecord|long|DURATION OF WAVE RECORD|s|0|0|12|s|0|4 +022079|lengthOfWaveRecord|long|LENGTH OF WAVE RECORD|m|0|0|16|m|0|5 +022080|wavebandCentralFrequency|double|WAVEBAND CENTRAL FREQUENCY|Hz|3|0|10|Hz|3|4 +022081|wavebandCentralWaveNumber|double|WAVEBAND CENTRAL WAVE NUMBER|/m|5|0|13|/m|5|4 +022082|maximumNonDirectionalSpectralWaveDensity|double|MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY|m2 s|2|0|20|m2 s|2|7 +022083|maximumNonDirectionalSpectralWaveNumber|double|MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE NUMBER|m3|2|0|20|m3|2|7 +022084|bandContainingMaximumNonDirectionalSpectralWaveDensity|long|BAND CONTAINING MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY|Numeric|0|0|7|Numeric|0|3 +022085|spectralWaveDensityRatio|long|SPECTRAL WAVE DENSITY RATIO|Numeric|0|0|7|Numeric|0|3 +022086|meanDirectionFromWhichWavesAreComing|long|MEAN DIRECTION FROM WHICH WAVES ARE COMING|deg|0|0|9|deg|0|3 +022087|principalDirectionFromWhichWavesAreComing|long|PRINCIPAL DIRECTION FROM WHICH WAVES ARE COMING|deg|0|0|9|deg|0|3 +022088|firstNormalizedPolarCoordinateFromFourierCoefficients|long|FIRST NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS|Numeric|2|0|7|Numeric|2|3 +022089|secondNormalizedPolarCoordinateFromFourierCoefficients|long|SECOND NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS|Numeric|2|0|7|Numeric|2|3 +022090|nonDirectionalSpectralEstimateByWaveFrequency|double|NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY|m2 s|2|0|20|m2 s|2|7 +022091|nonDirectionalSpectralEstimateByWaveNumber|double|NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER|m3|2|0|20|m3|2|7 +022092|directionalSpectralEstimateByWaveFrequency|double|DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY|m2 rad-1 s|2|0|20|m2 rad-1 s|2|7 +022093|directionalSpectralEstimateByWaveNumber|double|DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER|m4|2|0|20|m4|2|7 +022094|totalNumberOfWaveBands|long|TOTAL NUMBER OF WAVE BANDS|Numeric|0|0|7|Numeric|0|3 +022095|directionalSpreadOfIndividualWaves|long|DIRECTIONAL SPREAD OF INDIVIDUAL WAVES|deg|0|0|8|deg|0|3 +022096|spectralBandWidth|double|SPECTRAL BAND WIDTH|/s|3|0|4|/s|3|2 +022097|meanWavelength731MOfImageSpectrumAtLowWaveNumbers|long|MEAN WAVELENGTH > 731 M OF IMAGE SPECTRUM AT LOW WAVE NUMBERS|m|0|0|14|m|0|5 +022098|wavelengthSpreadWavelength731MAtLowWaveNumbers|long|WAVELENGTH SPREAD (WAVELENGTH > 731 M) AT LOW WAVE NUMBERS|m|0|0|14|m|0|5 +022099|meanDirectionAtLowWaveNumbersWavelength731M|long|MEAN DIRECTION AT LOW WAVE NUMBERS (WAVELENGTH > 731 M)|deg|0|0|9|deg|0|3 +022100|directionSpreadAtLowWaveNumbersWavelength731M|long|DIRECTION SPREAD AT LOW WAVE NUMBERS (WAVELENGTH > 731 M)|deg|0|0|9|deg|0|3 +022101|totalEnergyWavelength731mAtLowWaveNumbers|long|TOTAL ENERGY (WAVELENGTH > 731M) AT LOW WAVE NUMBERS|Numeric|0|0|31|Numeric|0|10 +022102|scaledMaximumNonDirectionalSpectralWaveDensityByFrequency|long|SCALED MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY BY FREQUENCY|m2 s|0|0|14|m2 s|0|5 +022103|scaledMaximumNonDirectionalSpectralWaveDensityByWavenumber|long|SCALED MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY BY WAVE NUMBER|m3|0|0|14|m3|0|5 +022104|scaledNonDirectionalSpectralWaveDensityByFrequency|long|SCALED NON-DIRECTIONAL SPECTRAL WAVE DENSITY BY FREQUENCY|m2 s|0|0|14|m2 s|0|5 +022105|scaledNonDirectionalSpectralWaveDensityByWavenumber|long|SCALED NON-DIRECTIONAL SPECTRAL WAVE DENSITY BY WAVE NUMBER|m3|0|0|14|m3|0|5 +022106|scaledDirectionalSpectralWaveDensityByFrequency|long|SCALED DIRECTIONAL SPECTRAL WAVE DENSITY BY FREQUENCY|m2 rad-1 s|0|0|14|m2 rad-1 s|0|5 +022107|scaledDirectionalSpectralWaveDensityByWavenumber|long|SCALED DIRECTIONAL SPECTRAL WAVE DENSITY BY WAVE NUMBER|m4|0|0|14|m4|0|5 +022108|spectralWaveDensityRatio|long|SPECTRAL WAVE DENSITY RATIO|%|0|0|7|%|0|3 +022120|tideStationAutomatedWaterLevelCheck|table|TIDE STATION AUTOMATED WATER LEVEL CHECK|CODE TABLE|0|0|5|CODE TABLE|0|2 +022121|tideStationManualWaterLevelCheck|table|TIDE STATION MANUAL WATER LEVEL CHECK|CODE TABLE|0|0|5|CODE TABLE|0|2 +022122|automatedMeteorologicalDataCheck|table|TIDE STATION AUTOMATED METEOROLOGICAL DATA CHECK|CODE TABLE|0|0|5|CODE TABLE|0|2 +022123|tideStationManualMeteorologicalDataCheck|table|TIDE STATION MANUAL METEOROLOGICAL DATA CHECK|CODE TABLE|0|0|5|CODE TABLE|0|2 +022130|numberOfValidPointsForSpecificBand|long|NUMBER OF VALID POINTS FOR SPECIFIC BAND|Numeric|0|0|10|Numeric|0|4 +022131|rmsSpecificBandSignificantWaveHeight|double|RMS SPECIFIC BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5 +022132|numberOfValidPointsForSpecificBandSignificantWaveHeight|long|NUMBER OF VALID POINTS FOR SPECIFIC BAND SIGNIFICANT WAVE HEIGHT|Numeric|0|0|10|Numeric|0|4 +022133|specificBandNetInstrumentCorrectionForSignificantWaveHeight|double|SPECIFIC BAND NET INSTRUMENT CORRECTION FOR SIGNIFICANT WAVE HEIGHT|m|3|-1000|11|m|3|4 +022134|numberOfValidPointsForSpecificBandBackscatter|long|NUMBER OF VALID POINTS FOR SPECIFIC BAND BACKSCATTER|Numeric|0|0|10|Numeric|0|4 +022141|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|2|0|15|K|2|5 +022142|squareOfSignificantWaveHeight|double|SQUARE OF SIGNIFICANT WAVE HEIGHT|m2|3|-33554432|26|m2|3|8 +022143|stdOf20HzSwhSquared|double|STD OF 20 HZ SWH SQUARED|m2|3|-8388608|24|m2|3|8 +022144|numberOf20HzValidPointsForSwhSquared|long|NUMBER OF 20 HZ VALID POINTS FOR SWH SQUARED|Numeric|0|0|9|Numeric|0|3 +022145|stdOf20HzOceanRange|double|STD OF 20 HZ OCEAN RANGE|m|3|-33554432|31|m|3|10 +022146|ocogRange|double|OCOG RANGE|m|3|0|31|m|3|10 +022147|stdOf20HzOcogRange|double|STD OF 20 HZ OCOG RANGE|m|3|-8388608|31|m|3|10 +022148|numberOf20HzValidPointsForOceanRange|long|NUMBER OF 20 HZ VALID POINTS FOR OCEAN RANGE|Numeric|0|0|9|Numeric|0|3 +022149|20HzSignificantWaveHeightSquared|double|20 HZ SIGNIFICANT WAVE HEIGHT SQUARED|m2|3|-33554432|26|m2|3|8 +022150|numberOf18HzValidPointsForKuBand|long|NUMBER OF 18 HZ VALID POINTS FOR KU BAND|Numeric|0|0|10|Numeric|0|4 +022151|kuBandOceanRange|double|KU BAND OCEAN RANGE|m|3|0|31|m|3|10 +022152|stdOf18HzKuBandOceanRange|double|STD OF 18 HZ KU BAND OCEAN RANGE|m|3|0|16|m|3|5 +022153|numberOf18HzValidPointsForSBand|long|NUMBER OF 18 HZ VALID POINTS FOR S BAND|Numeric|0|0|10|Numeric|0|4 +022154|sBandOceanRange|double|S BAND OCEAN RANGE|m|3|0|31|m|3|10 +022155|stdOf18HzSBandOceanRange|double|STD OF 18 HZ S BAND OCEAN RANGE|m|3|0|16|m|3|5 +022156|kuBandSignificantWaveHeight|double|KU BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5 +022157|stdOf18HzKuBandOceanRange|double|STD OF 18 HZ KU BAND OCEAN RANGE|m|3|0|16|m|3|5 +022158|sBandSignificantWaveHeight|double|S BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5 +022159|stdOf18HzSBandSignificantWaveHeight|double|STD OF 18 HZ S BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5 +022160|normalizedInverseWaveAge|long|NORMALIZED INVERSE WAVE AGE|Numeric|6|0|21|Numeric|6|7 +022161|waveSpectra|double|WAVE SPECTRA|m4|4|0|27|m4|4|9 +022162|rmsOf20HzKuBandOceanRange|double|RMS OF 20 HZ KU BAND OCEAN RANGE|m|3|0|16|m|3|5 +022163|numberOf20HzValidPointsForKuBand|long|NUMBER OF 20 HZ VALID POINTS FOR KU BAND|Numeric|0|0|10|Numeric|0|4 +022164|rms20HzKuBandSignificantWaveHeight|double|RMS 20 HZ KU BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5 +022165|numberOf20HzValidPointsForKuBandSignificantWaveHeight|long|NUMBER OF 20 HZ VALID POINTS FOR KU BAND SIGNIFICANT WAVE HEIGHT|Numeric|0|0|10|Numeric|0|4 +022166|kuBandNetInstrumentalCorrectionForSignificantWaveHeight|double|KU BAND NET INSTRUMENTAL CORRECTION FOR SIGNIFICANT WAVE HEIGHT|m|3|-1000|11|m|3|4 +022167|numberOfValidPointsForKuBandBackscatter|long|NUMBER OF VALID POINTS FOR KU BAND BACKSCATTER|Numeric|0|0|10|Numeric|0|4 +022168|cBandOceanRange|double|C BAND OCEAN RANGE|m|3|0|31|m|3|10 +022169|rmsOfCBandOceanRange|double|RMS OF C BAND OCEAN RANGE|m|3|0|16|m|3|5 +022170|numberOf20HzValidPointsForCBand|long|NUMBER OF 20 HZ VALID POINTS FOR C BAND|Numeric|0|0|10|Numeric|0|4 +022171|cBandSignificantWaveHeight|double|C BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5 +022172|rms20HzCBandSignificantWaveHeight|double|RMS 20 HZ C BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5 +022173|numberOf20HzValidPointsForCBandSignificantWaveHeight|long|NUMBER OF 20 HZ VALID POINTS FOR C BAND SIGNIFICANT WAVE HEIGHT|Numeric|0|0|10|Numeric|0|4 +022174|cBandNetInstrumentalCorrectionForSignificantWaveHeight|double|C BAND NET INSTRUMENTAL CORRECTION FOR SIGNIFICANT WAVE HEIGHT|m|3|-1000|11|m|3|4 +022175|numberOfValidPointsForCBandBackscatter|long|NUMBER OF VALID POINTS FOR C BAND BACKSCATTER|Numeric|0|0|10|Numeric|0|4 +022177|heightOfXbtOrXctdLauncher|long|HEIGHT OF XBT/XCTD LAUNCHER|m|0|0|6|m|0|3 +022178|xbtOrXctdLauncherType|table|XBT/XCTD LAUNCHER TYPE|CODE TABLE|0|0|8|CODE TABLE|0|3 +022179|specificBandSignificantWaveHeightNegativeReference|double|SPECIFIC BAND SIGNIFICANT WAVE HEIGHT (NEGATIVE REFERENCE)|m|3|-500|16|m|3|6 +022182|waterColumnHeight|double|WATER COLUMN HEIGHT|m|3|0|23|m|3|7 +022184|waterColumnHeightDeviationFromReferenceValue|double|WATER COLUMN HEIGHT DEVIATION FROM THE REFERENCE VALUE|m|3|-2000|12|m|3|4 +022185|bprTransmissionCount|long|BPR TRANSMISSION COUNT|Numeric|0|0|10|Numeric|0|3 +022186|directionFromWhichWavesAreComing|long|DIRECTION FROM WHICH WAVES ARE COMING|deg|0|0|9|deg|0|3 +022187|directionalSpreadOfWaves|long|DIRECTIONAL SPREAD OF WAVE|deg|0|0|9|deg|0|3 +022188|oceanographicDissolvedOxygen|double|DISSOLVED OXYGEN|umol/kg|3|0|19|umol/kg|3|6 +022189|specificBandOceanRange|double|SPECIFIC BAND OCEAN RANGE|m|3|0|31|m|3|10 +022190|specificBandSignificantWaveHeight|double|SPECIFIC BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5 +022191|rmsOfSpecificBandOceanRange|double|RMS OF SPECIFIC BAND OCEAN RANGE|m|4|0|16|m|4|5 +023001|accidentEarlyNotificationArticleApplicable|table|ACCIDENT EARLY NOTIFICATION - ARTICLE APPLICABLE|CODE TABLE|0|0|3|CODE TABLE|0|1 +023002|facilityInvolvedInIncident|table|ACTIVITY OR FACILITY INVOLVED IN INCIDENT|CODE TABLE|0|0|5|CODE TABLE|0|2 +023003|releaseType|table|TYPE OF RELEASE|CODE TABLE|0|0|3|CODE TABLE|0|1 +023004|countermeasuresTakenNearBorder|table|COUNTERMEASURES TAKEN NEAR BORDER|CODE TABLE|0|0|3|CODE TABLE|0|1 +023005|causeOfIncident|table|CAUSE OF INCIDENT|CODE TABLE|0|0|2|CODE TABLE|0|1 +023006|incidentSituation|table|INCIDENT SITUATION|CODE TABLE|0|0|3|CODE TABLE|0|1 +023007|characteristicsOfRelease|table|CHARACTERISTICS OF RELEASE|CODE TABLE|0|0|3|CODE TABLE|0|1 +023008|stateOfCurrentRelease|table|STATE OF CURRENT RELEASE|CODE TABLE|0|0|2|CODE TABLE|0|1 +023009|stateOfExpectedRelease|table|STATE OF EXPECTED RELEASE|CODE TABLE|0|0|2|CODE TABLE|0|1 +023016|possibilityOfSignificantChemicalToxicHealthEffect|table|POSSIBILITY OF SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT|CODE TABLE|0|0|2|CODE TABLE|0|1 +023017|flowDischargeOfMajorRecipient|double|FLOW DISCHARGE OF MAJOR RECIPIENT|m3/s|6|0|20|m3/s|6|7 +023018|releaseBehaviourOverTime|table|RELEASE BEHAVIOUR OVER TIME|CODE TABLE|0|0|3|CODE TABLE|0|1 +023019|actualReleaseHeight|long|ACTUAL RELEASE HEIGHT|m|0|-15000|17|m|0|6 +023021|effectiveReleaseHeight|long|EFFECTIVE RELEASE HEIGHT|m|0|-15000|17|m|0|6 +023022|distanceOfReleasePointOrSiteOfIncident|long|DISTANCE OF RELEASE POINT OR SITE OF INCIDENT|m|0|0|24|m|0|8 +023023|mainTransportSpeedInAtmosphere|double|MAIN TRANSPORT SPEED IN THE ATMOSPHERE|m/s|1|0|12|m/s|1|4 +023024|mainTransportSpeedInWater|double|MAIN TRANSPORT SPEED IN WATER|m/s|2|0|13|m/s|2|4 +023025|mainTransportSpeedInGroundWater|double|MAIN TRANSPORT SPEED IN GROUND WATER|m/s|2|0|13|m/s|2|4 +023027|mainTransportDirectionInTheAtmosphere|long|MAIN TRANSPORT DIRECTION IN THE ATMOSPHERE|deg|0|0|9|deg|0|3 +023028|mainTransportDirectionInWater|long|MAIN TRANSPORT DIRECTION IN WATER|deg|0|0|9|deg|0|3 +023029|mainTransportDirectionInGroundWater|long|MAIN TRANSPORT DIRECTION IN GROUND WATER|deg|0|0|9|deg|0|3 +023031|possibilityPlume|table|POSSIBILITY THAT PLUME WILL ENCOUNTER PRECIPITATION IN STATE IN WHICH INCIDENT OCCURRED|CODE TABLE|0|0|2|CODE TABLE|0|1 +023032|plumeWillEncounterChangeInWindDirectionAndOrOrSpeedFlag|table|PLUME WILL ENCOUNTER CHANGE IN WIND DIRECTION AND/OR SPEED FLAG|CODE TABLE|0|0|2|CODE TABLE|0|1 +023040|flowDischargeRiver|double|FLOW DISCHARGE - RIVER|m3/s|1|0|22|m3/s|1|7 +023041|flowDischargeWell|double|FLOW DISCHARGE - WELL|m3/s|3|0|16|m3/s|3|5 +024001|estimateOfAmountOfRadioactivityReleasedUpToSpecifiedTime|long|ESTIMATE OF AMOUNT OF RADIOACTIVITY RELEASED UP TO SPECIFIED TIME|Bq|-11|0|28|Bq|-11|9 +024002|estimatedMaximumPotentialRelease|long|ESTIMATED MAXIMUM POTENTIAL RELEASE|Bq|-11|0|28|Bq|-11|9 +024003|compositionOfRelease|table|COMPOSITION OF RELEASE|CODE TABLE|0|0|5|CODE TABLE|0|2 +024004|elementName|string|ELEMENT NAME|CCITT IA5|0|0|16|Character|0|2 +024005|isotopeMass|long|ISOTOPE MASS|Numeric|0|0|9|Numeric|0|3 +024011|dose|double|DOSE|mSv|2|0|32|mSv|2|10 +024012|trajectoryDoseDefinedLocationAndExpectedTimeOfArrival|double|TRAJECTORY DOSE (DEFINED LOCATION AND EXPECTED TIME OF ARRIVAL)|mSv|2|0|32|mSv|2|10 +024013|gammaDoseInAirAlongMainTransportPathDefinedLocationAndTimePeriod|double|GAMMA DOSE IN AIR ALONG THE MAIN TRANSPORT PATH (DEFINED LOCATION AND TIME PERIOD)|mSv|2|0|32|mSv|2|10 +024014|gammaRadiationDoseRate|double|GAMMA RADIATION DOSE RATE|nSv/h|1|0|14|nSv/h|1|4 +024021|airConcentrationOfNamedIsotopeTypeIncludingGrossBeta|double|AIR CONCENTRATION (OF NAMED ISOTOPE TYPE INCLUDING GROSS BETA)|Bq m-3|2|0|32|Bq m-3|2|10 +024022|concentrationInPrecipitationOfNamedIsotopeType|double|CONCENTRATION IN PRECIPITATION (OF NAMED ISOTOPE TYPE)|Bq/l|2|0|32|Bq/l|2|10 +024023|pulseRateOfBetaRadiation|double|PULSE RATE OF BETA RADIATION|/s|1|0|14|/s|1|4 +024024|pulseRateOfGammaRadiation|double|PULSE RATE OF GAMMA RADIATION|/s|1|0|14|/s|1|4 +025001|rangeGateLength|long|RANGE-GATE LENGTH|m|-1|0|6|m|-1|2 +025002|numberOfGatesAveraged|long|NUMBER OF GATES AVERAGED|Numeric|0|0|4|Numeric|0|2 +025003|numberOfIntegratedPulses|long|NUMBER OF INTEGRATED PULSES|Numeric|0|0|8|Numeric|0|3 +025004|echoProcessing|table|ECHO PROCESSING|CODE TABLE|0|0|2|CODE TABLE|0|1 +025005|echoIntegration|table|ECHO INTEGRATION|CODE TABLE|0|0|2|CODE TABLE|0|1 +025006|zToRConversion|table|Z TO R CONVERSION|CODE TABLE|0|0|3|CODE TABLE|0|1 +025007|zToRConversionFactor|long|Z TO R CONVERSION FACTOR|Numeric|0|0|12|Numeric|0|4 +025008|zToRConversionExponent|long|Z TO R CONVERSION EXPONENT|Numeric|2|0|9|Numeric|2|3 +025009|calibrationMethod|flag|CALIBRATION METHOD|FLAG TABLE|0|0|4|FLAG TABLE|0|2 +025010|clutterTreatment|table|CLUTTER TREATMENT|CODE TABLE|0|0|4|CODE TABLE|0|2 +025011|groundOccultationCorrectionScreening|table|GROUND OCCULTATION CORRECTION (SCREENING)|CODE TABLE|0|0|2|CODE TABLE|0|1 +025012|rangeAttenuationCorrection|table|RANGE ATTENUATION CORRECTION|CODE TABLE|0|0|2|CODE TABLE|0|1 +025013|brightBandCorrection|flag|BRIGHT-BAND CORRECTION|FLAG TABLE|0|0|2|FLAG TABLE|0|1 +025014|azimuthClutterCutOff|long|AZIMUTH CLUTTER CUT-OFF|Numeric|0|0|12|Numeric|0|4 +025015|radomeAttenuationCorrection|flag|RADOME ATTENUATION CORRECTION|FLAG TABLE|0|0|2|FLAG TABLE|0|1 +025016|clearAirAttenuationCorrection|double|CLEAR-AIR ATTENUATION CORRECTION|dB/m|5|0|6|dB/m|5|2 +025017|precipitationAttenuationCorrection|flag|PRECIPITATION ATTENUATION CORRECTION|FLAG TABLE|0|0|2|FLAG TABLE|0|1 +025018|aToZLawForAttenuationFactor|long|A TO Z LAW FOR ATTENUATION FACTOR|Numeric|7|0|6|Numeric|7|2 +025019|aToZLawForAttenuationExponent|long|A TO Z LAW FOR ATTENUATION EXPONENT|Numeric|2|0|7|Numeric|2|3 +025020|meanSpeedEstimation|table|MEAN SPEED ESTIMATION|CODE TABLE|0|0|2|CODE TABLE|0|1 +025021|windComputationEnhancement|flag|WIND COMPUTATION ENHANCEMENT|FLAG TABLE|0|0|8|FLAG TABLE|0|3 +025022|ghrsstRejectionFlag|flag|GHRSST REJECTION FLAG|FLAG TABLE|0|0|9|FLAG TABLE|0|3 +025023|ghrsstConfidenceFlag|flag|GHRSST CONFIDENCE FLAG|FLAG TABLE|0|0|9|FLAG TABLE|0|3 +025024|ghrsstDataQuality|table|GHRSST DATA QUALITY|CODE TABLE|0|0|4|CODE TABLE|0|2 +025025|batteryVoltage|double|BATTERY VOLTAGE|V|1|0|9|V|1|3 +025026|batteryVoltageLargeRange|double|BATTERY VOLTAGE (LARGE RANGE)|V|1|0|12|V|1|4 +025028|operatorOrManufacturerDefinedParameter|long|OPERATOR OR MANUFACTURER DEFINED PARAMETER|Numeric|1|-16384|15|Numeric|1|5 +025029|calibrationMethod|flag|CALIBRATION METHOD|FLAG TABLE|0|0|6|FLAG TABLE|0|2 +025030|runningMeanSeaSurfaceTemperatureUsage|table|RUNNING MEAN SEA-SURFACE TEMPERATURE USAGE|CODE TABLE|0|0|2|CODE TABLE|0|1 +025031|nwpGeneratedVerticalProfileThinningMethod|table|NWP-GENERATED VERTICAL PROFILE THINNING METHOD|CODE TABLE|0|0|3|CODE TABLE|0|1 +025032|windProfilerModeInformation|table|WIND PROFILER MODE INFORMATION|CODE TABLE|0|0|2|CODE TABLE|0|1 +025033|windProfilerSubmodeInformation|table|WIND PROFILER SUBMODE INFORMATION|CODE TABLE|0|0|2|CODE TABLE|0|1 +025034|windProfilerQualityControlTestResults|flag|WIND PROFILER QUALITY CONTROL TEST RESULTS|FLAG TABLE|0|0|4|FLAG TABLE|0|2 +025035|decisionMethodForPolarity|table|DECISION METHOD FOR POLARITY|CODE TABLE|0|0|3|CODE TABLE|0|1 +025036|atmosphericsLocationMethod|table|ATMOSPHERICS LOCATION METHOD|CODE TABLE|0|0|4|CODE TABLE|0|2 +025037|sstBias|double|SST BIAS|K|2|-127|8|K|2|3 +025038|differenceBetweenSstAndAnalysis|double|DIFFERENCE BETWEEN SST AND ANALYSIS|K|1|-127|8|K|1|3 +025040|co2WindProductDerivation|table|CO2 WIND PRODUCT DERIVATION|CODE TABLE|0|0|4|CODE TABLE|0|2 +025041|movingPlatformDirectionReportingMethod|table|MOVING PLATFORM DIRECTION REPORTING METHOD|CODE TABLE|0|0|2|CODE TABLE|0|1 +025042|movingPlatformSpeedReportingMethod|table|MOVING PLATFORM SPEED REPORTING METHOD|CODE TABLE|0|0|2|CODE TABLE|0|1 +025043|waveSamplingIntervalTime|double|WAVE SAMPLING INTERVAL (TIME)|s|4|0|15|s|4|5 +025044|waveSamplingIntervalSpace|double|WAVE SAMPLING INTERVAL (SPACE)|m|2|0|14|m|2|5 +025045|hirsChannelCombination|flag|HIRS CHANNEL COMBINATION|FLAG TABLE|0|0|21|FLAG TABLE|0|7 +025046|msuChannelCombination|flag|MSU CHANNEL COMBINATION|FLAG TABLE|0|0|5|FLAG TABLE|0|2 +025047|ssuChannelCombination|flag|SSU CHANNEL COMBINATION|FLAG TABLE|0|0|4|FLAG TABLE|0|2 +025048|amsuAChannelCombination|flag|AMSU-A CHANNEL COMBINATION|FLAG TABLE|0|0|16|FLAG TABLE|0|6 +025049|amsuBChannelCombination|flag|AMSU-B CHANNEL COMBINATION|FLAG TABLE|0|0|6|FLAG TABLE|0|2 +025050|principalComponentScore|long|PRINCIPAL COMPONENT SCORE|Numeric|4|-131072|18|Numeric|4|6 +025051|avhrrChannelCombination|flag|AVHRR CHANNEL COMBINATION|FLAG TABLE|0|0|7|FLAG TABLE|0|3 +025052|log10OfPrincipalComponentsNormalizedFitToData|long|LOG10 OF PRINCIPAL COMPONENTS NORMALIZED FIT TO DATA|Numeric|4|0|15|Numeric|4|5 +025053|observationQuality|flag|OBSERVATION QUALITY|FLAG TABLE|0|0|12|FLAG TABLE|0|4 +025054|ssmisSubframeIdNumber|long|SSMIS SUBFRAME ID NUMBER|Numeric|0|0|5|Numeric|0|2 +025055|multiplexerHousekeeping|double|MULTIPLEXER HOUSEKEEPING|K|2|0|16|K|2|5 +025060|softwareIdentification|long|SOFTWARE IDENTIFICATION|Numeric|0|0|14|Numeric|0|5 +025061|softwareVersionNumber|string|SOFTWARE IDENTIFICATION AND VERSION NUMBER|CCITT IA5|0|0|96|Character|0|12 +025062|databaseIdentification|long|DATABASE IDENTIFICATION|Numeric|0|0|14|Numeric|0|5 +025063|SystemIdentifier|table|CENTRAL PROCESSOR OR SYSTEM IDENTIFIER|CODE TABLE|0|0|8|CODE TABLE|0|3 +025065|orientationCorrectionAzimuth|double|ORIENTATION CORRECTION (AZIMUTH)|deg|2|-1000|11|deg|2|4 +025066|orientationCorrectionElevation|double|ORIENTATION CORRECTION (ELEVATION)|deg|2|-1000|11|deg|2|4 +025067|radiosondeReleasePointPressureCorrection|long|RADIOSONDE RELEASE POINT PRESSURE CORRECTION|Pa|0|-8000|14|Pa|0|4 +025068|numberOfArchiveRecomputes|long|NUMBER OF ARCHIVE RECOMPUTES|Numeric|0|0|7|Numeric|0|3 +025069|flightLevelPressureCorrections|flag|FLIGHT LEVEL PRESSURE CORRECTIONS|FLAG TABLE|0|0|8|FLAG TABLE|0|3 +025070|majorFrameCount|long|MAJOR FRAME COUNT|Numeric|0|0|4|Numeric|0|2 +025071|frameCount|long|FRAME COUNT|Numeric|0|0|5|Numeric|0|2 +025075|satelliteAntennaCorrectionsVersionNumber|long|SATELLITE ANTENNA CORRECTIONS VERSION NUMBER|Numeric|0|0|5|Numeric|0|2 +025076|log10OfTemperatureRadianceCentralWaveNumberForAtovs|double|LOG10 OF (TEMPERATURE-RADIANCE CENTRAL WAVE NUMBER) FOR ATOVS|log (m-1)|8|0|30|log (m-1)|8|10 +025077|bandwidthCorrectionCoefficient1|long|BANDWIDTH CORRECTION COEFFICIENT 1|Numeric|5|-100000|18|Numeric|5|7 +025078|bandwidthCorrectionCoefficient2|long|BANDWIDTH CORRECTION COEFFICIENT 2|Numeric|5|0|17|Numeric|5|6 +025079|albedoRadianceSolarFilteredIrradianceForAtovs|double|ALBEDO-RADIANCE SOLAR FILTERED IRRADIANCE FOR ATOVS|W m-2|4|0|24|W m-2|4|8 +025080|albedoRadianceEquivalentFilterWidthForAtovs|double|ALBEDO-RADIANCE EQUIVALENT FILTER WIDTH FOR ATOVS|m|10|0|14|m|10|5 +025081|incidenceAngle|double|INCIDENCE ANGLE|deg|3|0|17|deg|3|6 +025082|azimuthAngle|double|AZIMUTH ANGLE|deg|3|0|19|deg|3|6 +025083|faradayRotationalAngle|double|FARADAY ROTATIONAL ANGLE|deg|3|0|19|deg|3|6 +025084|geometricRotationalAngle|double|GEOMETRIC ROTATIONAL ANGLE|deg|5|0|26|deg|5|8 +025085|fractionOfClearPixelsInHirsFov|long|FRACTION OF CLEAR PIXELS IN HIRS FOV|Numeric|0|0|7|Numeric|0|3 +025086|depthCorrectionIndicator|table|DEPTH CORRECTION INDICATOR|CODE TABLE|0|0|2|CODE TABLE|0|1 +025090|orbitStateFlag|table|ORBIT STATE FLAG|CODE TABLE|0|0|4|CODE TABLE|0|2 +025091|structureConstantOfRefractionIndexCn2|double|STRUCTURE CONSTANT OF THE REFRACTION INDEX (CN2)|dB|3|-18192|13|dB|3|5 +025092|acousticPropagationVelocity|double|ACOUSTIC PROPAGATION VELOCITY|m/s|2|28000|14|m/s|2|5 +025093|rassComputationCorrection|flag|RASS COMPUTATION CORRECTION|FLAG TABLE|0|0|8|FLAG TABLE|0|3 +025095|altimeterStateFlag|flag|ALTIMETER STATE FLAG|FLAG TABLE|0|0|2|FLAG TABLE|0|1 +025096|radiometerStateFlag|flag|RADIOMETER STATE FLAG|FLAG TABLE|0|0|5|FLAG TABLE|0|2 +025097|threeDimensionalErrorEstimateOfNavigatorOrbit|table|THREE-DIMENSIONAL ERROR ESTIMATE OF THE NAVIGATOR ORBIT|CODE TABLE|0|0|4|CODE TABLE|0|2 +025098|altimeterDataQualityFlag|flag|ALTIMETER DATA QUALITY FLAG|FLAG TABLE|0|0|9|FLAG TABLE|0|3 +025099|altimeterCorrectionQualityFlag|flag|ALTIMETER CORRECTION QUALITY FLAG|FLAG TABLE|0|0|9|FLAG TABLE|0|3 +025100|xbtOrXctdFallRateEquationCoefficientA|long|XBT/XCTD FALL RATE EQUATION COEFFICIENT A|Numeric|5|0|20|Numeric|5|6 +025101|xbtOrXctdFallRateEquationCoefficientB|long|XBT/XCTD FALL RATE EQUATION COEFFICIENT B|Numeric|5|-500000|21|Numeric|5|6 +025102|numberOfMissingLinesExcludingDataGaps|long|NUMBER OF MISSING LINES EXCLUDING DATA GAPS|Numeric|0|0|8|Numeric|0|3 +025103|numberOfDirectionalBins|long|NUMBER OF DIRECTIONAL BINS|Numeric|0|0|8|Numeric|0|3 +025104|numberOfWavelengthBins|long|NUMBER OF WAVELENGTH BINS|Numeric|0|0|8|Numeric|0|3 +025105|firstDirectionalBin|double|FIRST DIRECTIONAL BIN|deg|3|0|19|deg|3|6 +025106|directionalBinStep|double|DIRECTIONAL BIN STEP|deg|3|0|19|deg|3|6 +025107|firstWavelengthBin|double|FIRST WAVELENGTH BIN|m|3|0|29|m|3|9 +025108|lastWavelengthBin|double|LAST WAVELENGTH BIN|m|3|0|29|m|3|9 +025110|imageProcessingSummary|flag|IMAGE PROCESSING SUMMARY|FLAG TABLE|0|0|10|FLAG TABLE|0|4 +025111|numberOfInputDataGaps|long|NUMBER OF INPUT DATA GAPS|Numeric|0|0|8|Numeric|0|3 +025112|bandSpecificAltimeterDataQualityFlag|flag|BAND SPECIFIC ALTIMETER DATA QUALITY FLAG|FLAG TABLE|0|0|9|FLAG TABLE|0|3 +025113|bandSpecificAltimeterCorrectionQualityFlag|flag|BAND SPECIFIC ALTIMETER CORRECTION QUALITY FLAG|FLAG TABLE|0|0|9|FLAG TABLE|0|3 +025120|ra2L2ProcessingFlag|table|RA2-L2-PROCESSING FLAG|CODE TABLE|0|0|2|CODE TABLE|0|1 +025121|ra2L2ProcessingQuality|long|RA2-L2-PROCESSING QUALITY|%|0|0|7|%|0|3 +025122|hardwareConfigurationForRf|table|HARDWARE CONFIGURATION FOR RF|CODE TABLE|0|0|2|CODE TABLE|0|1 +025123|hardwareConfigurationForHpa|table|HARDWARE CONFIGURATION FOR HPA|CODE TABLE|0|0|2|CODE TABLE|0|1 +025124|mwrL2ProcessingFlag|table|MWR-L2-PROCESSING FLAG|CODE TABLE|0|0|2|CODE TABLE|0|1 +025125|mwrL2ProcessingQuality|long|MWR-L2-PROCESSING QUALITY|%|0|0|7|%|0|3 +025126|modelDryTroposphericCorrection|double|MODEL DRY TROPOSPHERIC CORRECTION|m|3|-32768|16|m|3|5 +025127|invertedBarometerCorrection|double|INVERTED BAROMETER CORRECTION|m|3|-32768|16|m|3|5 +025128|modelWetTroposphericCorrection|double|MODEL WET TROPOSPHERIC CORRECTION|m|3|-32768|16|m|3|5 +025129|mwrDerivedWetTroposphericCorrection|double|MWR DERIVED WET TROPOSPHERIC CORRECTION|m|3|-32768|16|m|3|5 +025130|ra2IonosphericCorrectionOnKuBand|double|RA2 IONOSPHERIC CORRECTION ON KU BAND|m|3|-32768|16|m|3|5 +025131|ionosphericCorrectionFromDorisOnKuBand|double|IONOSPHERIC CORRECTION FROM DORIS ON KU BAND|m|3|-32768|16|m|3|5 +025132|ionosphericCorrectionFromModelOnKuBand|double|IONOSPHERIC CORRECTION FROM MODEL ON KU BAND|m|3|-32768|16|m|3|5 +025133|seaStateBiasCorrectionOnKuBand|double|SEA STATE BIAS CORRECTION ON KU BAND|m|3|-32768|16|m|3|5 +025134|ra2IonosphericCorrectionOnSBand|double|RA2 IONOSPHERIC CORRECTION ON S BAND|m|3|-32768|16|m|3|5 +025135|ionosphericCorrectionFromDorisOnSBand|double|IONOSPHERIC CORRECTION FROM DORIS ON S BAND|m|3|-32768|16|m|3|5 +025136|ionosphericCorrectionFromModelOnSBand|double|IONOSPHERIC CORRECTION FROM MODEL ON S BAND|m|3|-32768|16|m|3|5 +025137|seaStateBiasCorrectionOnSBand|double|SEA STATE BIAS CORRECTION ON S BAND|m|3|-32768|16|m|3|5 +025138|averageSignalToNoiseRatio|long|AVERAGE SIGNAL-TO-NOISE RATIO|Numeric|0|-2048|12|Numeric|0|4 +025139|processingLevel|long|PROCESSING LEVEL|Numeric|0|0|5|Numeric|0|4 +025140|startChannel|long|START CHANNEL|Numeric|0|0|14|Numeric|0|5 +025141|endChannel|long|END CHANNEL|Numeric|0|0|14|Numeric|0|5 +025142|channelScaleFactor|long|CHANNEL SCALE FACTOR|Numeric|0|0|6|Numeric|0|2 +025143|linearCoefficient|long|LINEAR COEFFICIENT|Numeric|6|-5000000|24|Numeric|6|8 +025148|coefficientOfVariation|long|COEFFICIENT OF VARIATION|Numeric|2|-10000|15|Numeric|2|5 +025149|optimalEstimationCost|long|OPTIMAL ESTIMATION COST|Numeric|0|0|8|Numeric|0|3 +025150|methodOfTropicalCycloneIntensityAnalysisUsingSatelliteData|table|METHOD OF TROPICAL CYCLONE INTENSITY ANALYSIS USING SATELLITE DATA|CODE TABLE|0|0|4|CODE TABLE|0|2 +025160|kuBandNetInstrumentalCorrection|double|KU BAND NET INSTRUMENTAL CORRECTION|m|4|-120000|18|m|4|6 +025161|cBandNetInstrumentalCorrection|double|C BAND NET INSTRUMENTAL CORRECTION|m|4|-120000|18|m|4|6 +025162|seaStateBiasCorrectionOnCBand|double|SEA STATE BIAS CORRECTION ON C BAND|m|4|-6000|13|m|4|4 +025163|altimeterIonosphericCorrectionOnKuBand|double|ALTIMETER IONOSPHERIC CORRECTION ON KU BAND|m|3|-32768|16|m|3|5 +025164|radiometerWetTroposphericCorrection|double|RADIOMETER WET TROPOSPHERIC CORRECTION|m|4|-5000|13|m|4|4 +025165|ionosphericCorrectionFromModelOnSpecificBand|double|IONOSPHERIC CORRECTION FROM MODEL ON SPECIFIC BAND|m|4|-32768|16|m|4|5 +025166|seaStateBiasCorrectionOnSpecificBand|double|SEA STATE BIAS CORRECTION ON SPECIFIC BAND|m|4|-32768|16|m|4|5 +025167|specificBandNetInstrumentalCorrection|double|SPECIFIC BAND NET INSTRUMENTAL CORRECTION|m|4|-120000|18|m|4|6 +025170|samplingIntervalTime|long|SAMPLING INTERVAL (TIME)|s|0|0|10|s|0|4 +025171|sampleAveragingPeriod|long|SAMPLE AVERAGING PERIOD|s|0|0|10|s|0|4 +025172|numberOfSamples|long|NUMBER OF SAMPLES|Numeric|0|0|10|Numeric|0|4 +025174|smosInformationFlag|flag|SMOS INFORMATION FLAG|FLAG TABLE|0|0|14|FLAG TABLE|0|5 +025175|modifiedResidual|long|MODIFIED RESIDUAL|Numeric|2|0|13|Numeric|2|4 +025180|lrmPercent|double|LRM PER CENT|%|2|0|16|%|2|5 +025181|l2ProcessingFlag|table|L2 PROCESSING FLAG|CODE TABLE|0|0|2|CODE TABLE|0|1 +025182|l1ProcessingFlag|table|L1 PROCESSING FLAG|CODE TABLE|0|0|2|CODE TABLE|0|1 +025183|l1ProcessingQuality|double|L1 PROCESSING QUALITY|%|2|0|14|%|2|5 +025184|l2ProductStatus|table|L2 PRODUCT STATUS|CODE TABLE|0|0|2|CODE TABLE|0|1 +025185|encryptionMethod|table|ENCRYPTION METHOD|CODE TABLE|0|0|8|CODE TABLE|0|3 +025186|encryptionKeyVersion|string|ENCRYPTION KEY VERSION|CCITT IA5|0|0|96|Character|0|12 +025187|confidenceFlag|table|CONFIDENCE FLAG|CODE TABLE|0|0|4|CODE TABLE|0|2 +025188|methodForReducingPressureToSeaLevel|table|METHOD FOR REDUCING PRESSURE TO SEA LEVEL|CODE TABLE|0|0|5|CODE TABLE|0|2 +025189|rangeCutOffWavelength|long|RANGE CUT-OFF WAVELENGTH|m|0|1|9|m|0|3 +025190|altimeterEchoProcessingMode|table|ALTIMETER ECHO PROCESSING MODE|CODE TABLE|0|0|8|CODE TABLE|0|3 +025191|altimeterTrackingMode|table|ALTIMETER TRACKING MODE|CODE TABLE|0|0|8|CODE TABLE|0|3 +026001|principalTimeOfDailyReadingInUtcOfMaximumTemperature|double|PRINCIPAL TIME OF DAILY READING IN UTC OF MAXIMUM TEMPERATURE|h|1|0|12|h|1|3 +026002|principalTimeOfDailyReadingInUtcOfMinimumTemperature|double|PRINCIPAL TIME OF DAILY READING IN UTC OF MINIMUM TEMPERATURE|h|1|0|12|h|1|3 +026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4 +026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9 +026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4 +026021|nonCoordinateYear|long|YEAR|a|0|0|12|a|0|4 +026022|nonCoordinateMonth|long|MONTH|mon|0|0|4|mon|0|2 +026023|nonCoordinateDay|long|DAY|d|0|0|6|d|0|2 +026030|measurementIntegrationTime|double|MEASUREMENT INTEGRATION TIME|s|2|0|8|s|2|3 +027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7 +027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4 +027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4 +027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7 +027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5 +027020|satelliteLocationCounter|long|SATELLITE LOCATION COUNTER|Numeric|0|0|16|Numeric|0|5 +027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5 +027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10 +027079|horizontalWidthOfSampledVolume|long|HORIZONTAL WIDTH OF SAMPLED VOLUME|m|0|0|18|m|0|6 +027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5 +028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8 +028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5 +028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5 +028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8 +028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5 +028031|DistanceFromEarthCentreInDirection90DegreesEast|double|IN DIRECTION 90 DEGREES EAST, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10 +029001|projectionType|table|PROJECTION TYPE|CODE TABLE|0|0|3|CODE TABLE|0|1 +029002|coordinateGridType|table|COORDINATE GRID TYPE|CODE TABLE|0|0|3|CODE TABLE|0|1 +029014|optionalListOfParametersForAnExternalMapProjectionLibrary|string|OPTIONAL LIST OF PARAMETERS FOR AN EXTERNAL MAP PROJECTION LIBRARY|CCITT IA5|0|0|504|Character|0|63 +030001|pixelValue4Bits|long|PIXEL VALUE (4 BITS)|Numeric|0|0|4|Numeric|0|2 +030002|pixelValue8Bits|long|PIXEL VALUE (8 BITS)|Numeric|0|0|8|Numeric|0|3 +030004|pixelValue16Bits|long|PIXEL VALUE (16 BITS)|Numeric|0|0|16|Numeric|0|5 +030010|numberOfGridPoints|long|NUMBER OF GRID POINTS|Numeric|0|0|13|Numeric|0|4 +030021|numberOfPixelsPerRow|long|NUMBER OF PIXELS PER ROW|Numeric|0|0|12|Numeric|0|4 +030022|numberOfPixelsPerColumn|long|NUMBER OF PIXELS PER COLUMN|Numeric|0|0|12|Numeric|0|4 +030031|pictureType|table|PICTURE TYPE|CODE TABLE|0|0|4|CODE TABLE|0|2 +030032|combinationWithOtherData|flag|COMBINATION WITH OTHER DATA|FLAG TABLE|0|0|16|FLAG TABLE|0|6 +030033|numberOfBinsAlongRadial|long|NUMBER OF BINS ALONG THE RADIAL|Numeric|0|0|12|Numeric|0|4 +030034|numberOfAzimuths|long|NUMBER OF AZIMUTHS|Numeric|0|0|12|Numeric|0|4 +031000|shortDelayedDescriptorReplicationFactor|long|SHORT DELAYED DESCRIPTOR REPLICATION FACTOR|Numeric|0|0|1|NA|0|0 +031001|delayedDescriptorReplicationFactor|long|DELAYED DESCRIPTOR REPLICATION FACTOR|Numeric|0|0|8|NA|0|0 +031002|extendedDelayedDescriptorReplicationFactor|long|EXTENDED DELAYED DESCRIPTOR REPLICATION FACTOR|Numeric|0|0|16|NA|0|0 +031011|delayedDescriptorAndDataRepetitionFactor|long|DELAYED DESCRIPTOR AND DATA REPETITION FACTOR|Numeric|0|0|8|NA|0|0 +031012|extendedDelayedDescriptorAndDataRepetitionFactor|long|EXTENDED DELAYED DESCRIPTOR AND DATA REPETITION FACTOR|Numeric|0|0|16|NA|0|0 +031021|associatedFieldSignificance|table|ASSOCIATED FIELD SIGNIFICANCE|CODE TABLE|0|0|6|NA|0|0 +031031|dataPresentIndicator|flag|DATA PRESENT INDICATOR|FLAG TABLE|0|0|1|NA|0|0 +033002|qualityInformation|table|QUALITY INFORMATION|CODE TABLE|0|0|2|CODE TABLE|0|1 +033003|qualityInformation|table|QUALITY INFORMATION|CODE TABLE|0|0|3|CODE TABLE|0|1 +033005|qualityInformationAwsData|flag|QUALITY INFORMATION (AWS DATA)|FLAG TABLE|0|0|30|FLAG TABLE|0|10 +033006|internalMeasurementStatusInformationAws|table|INTERNAL MEASUREMENT STATUS INFORMATION (AWS)|CODE TABLE|0|0|3|CODE TABLE|0|1 +033007|percentConfidence|long|PER CENT CONFIDENCE|%|0|0|7|%|0|3 +033015|dataQualityCheckIndicator|table|DATA QUALITY-CHECK INDICATOR|CODE TABLE|0|0|6|CODE TABLE|0|2 +033020|qualityControlIndicationOfFollowingValue|table|QUALITY CONTROL INDICATION OF FOLLOWING VALUE|CODE TABLE|0|0|3|CODE TABLE|0|1 +033021|qualityOfFollowingValue|table|QUALITY OF FOLLOWING VALUE|CODE TABLE|0|0|2|CODE TABLE|0|1 +033022|qualityOfBuoySatelliteTransmission|table|QUALITY OF BUOY SATELLITE TRANSMISSION|CODE TABLE|0|0|2|CODE TABLE|0|1 +033023|qualityOfBuoyLocation|table|QUALITY OF BUOY LOCATION|CODE TABLE|0|0|2|CODE TABLE|0|1 +033024|stationElevationQualityMarkForMobileStations|table|STATION ELEVATION QUALITY MARK (FOR MOBILE STATIONS)|CODE TABLE|0|0|4|CODE TABLE|0|2 +033025|acarsInterpolatedValuesIndicator|table|ACARS INTERPOLATED VALUES INDICATOR|CODE TABLE|0|0|3|CODE TABLE|0|1 +033026|moistureQuality|table|MOISTURE QUALITY|CODE TABLE|0|0|6|CODE TABLE|0|2 +033027|locationQualityClassRangeOfRadiusOf66Confidence|table|LOCATION QUALITY CLASS (RANGE OF RADIUS OF 66 % CONFIDENCE)|CODE TABLE|0|0|3|CODE TABLE|0|1 +033028|snapshotOverallQuality|table|SNAPSHOT OVERALL QUALITY|CODE TABLE|0|0|3|CODE TABLE|0|1 +033030|scanLineStatusFlagsForAtovs|flag|SCAN LINE STATUS FLAGS FOR ATOVS|FLAG TABLE|0|0|24|FLAG TABLE|0|8 +033031|scanLineQualityFlagsForAtovs|flag|SCAN LINE QUALITY FLAGS FOR ATOVS|FLAG TABLE|0|0|24|FLAG TABLE|0|8 +033032|channelQualityFlagsForAtovs|flag|CHANNEL QUALITY FLAGS FOR ATOVS|FLAG TABLE|0|0|24|FLAG TABLE|0|8 +033033|fieldOfViewQualityFlagsForAtovs|flag|FIELD OF VIEW QUALITY FLAGS FOR ATOVS|FLAG TABLE|0|0|24|FLAG TABLE|0|8 +033035|qualityControl|table|MANUAL/AUTOMATIC QUALITY CONTROL|CODE TABLE|0|0|4|CODE TABLE|0|2 +033036|nominalConfidenceThreshold|long|NOMINAL CONFIDENCE THRESHOLD|%|0|0|7|%|0|3 +033037|windCorrelationError|flag|WIND CORRELATION ERROR|FLAG TABLE|0|0|20|FLAG TABLE|0|7 +033038|qualityFlagsForGroundBasedGnssData|flag|QUALITY FLAGS FOR GROUND-BASED GNSS DATA|FLAG TABLE|0|0|10|FLAG TABLE|0|4 +033039|radioOccultationDataQualityFlags|flag|QUALITY FLAGS FOR RADIO OCCULTATION DATA|FLAG TABLE|0|0|16|FLAG TABLE|0|6 +033040|confidenceInterval|long|CONFIDENCE INTERVAL|%|0|0|7|%|0|3 +033041|attributeOfFollowingValue|table|ATTRIBUTE OF FOLLOWING VALUE|CODE TABLE|0|0|2|CODE TABLE|0|1 +033042|typeOfLimitRepresentedByFollowingValue|table|TYPE OF LIMIT REPRESENTED BY FOLLOWING VALUE|CODE TABLE|0|0|3|CODE TABLE|0|1 +033043|astConfidence|flag|AST CONFIDENCE|FLAG TABLE|0|0|8|FLAG TABLE|0|3 +033044|asarQualityInformation|flag|ASAR QUALITY INFORMATION|FLAG TABLE|0|0|15|FLAG TABLE|0|5 +033045|probabilityOfFollowingEvent|long|PROBABILITY OF FOLLOWING EVENT|%|0|0|7|%|0|3 +033046|conditionalProbability|long|CONDITIONAL PROBABILITY OF FOLLOWING EVENT WITH RESPECT TO SPECIFIED CONDITIONING EVENT|%|0|0|7|%|0|3 +033047|measurementConfidenceData|flag|MEASUREMENT CONFIDENCE DATA|FLAG TABLE|0|0|31|FLAG TABLE|0|11 +033048|confidenceMeasureOfSarInversion|table|CONFIDENCE MEASURE OF SAR INVERSION|CODE TABLE|0|0|2|CODE TABLE|0|1 +033049|confidenceMeasureOfWindRetrieval|table|CONFIDENCE MEASURE OF WIND RETRIEVAL|CODE TABLE|0|0|2|CODE TABLE|0|1 +033050|globalGtsppQualityFlag|table|GLOBAL GTSPP QUALITY FLAG|CODE TABLE|0|0|4|CODE TABLE|0|2 +033052|sBandOceanRetrackingQuality|flag|S BAND OCEAN RETRACKING QUALITY|FLAG TABLE|0|0|21|FLAG TABLE|0|7 +033053|kuBandOceanRetrackingQuality|flag|KU BAND OCEAN RETRACKING QUALITY|FLAG TABLE|0|0|21|FLAG TABLE|0|7 +033055|windVectorQualityFlag|flag|WIND VECTOR QUALITY FLAG|FLAG TABLE|0|0|24|FLAG TABLE|0|8 +033056|sigma0QualityFlag|flag|SIGMA-0 QUALITY FLAG|FLAG TABLE|0|0|24|FLAG TABLE|0|8 +033060|gqisFlagQual|table|GQISFLAGQUAL - INDIVIDUAL IASI-SYSTEM QUALITY FLAG|CODE TABLE|0|0|2|CODE TABLE|0|1 +033061|gqisQualIndex|long|GQISQUALINDEX - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE (CONTRIBUTIONS FROM SPECTRAL AND RADIOMETRIC CALIBRATION)|%|0|0|7|%|0|3 +033062|gqisQualIndexLoc|long|GQISQUALINDEXLOC - INDICATOR FOR GEOMETRIC QUALITY INDEX|%|0|0|7|%|0|3 +033063|gqisQualIndexRad|long|GQISQUALINDEXRAD - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE (CONTRIBUTIONS FROM RADIOMETRIC CALIBRATION)|%|0|0|7|%|0|3 +033064|gqisQualIndexSpect|long|GQISQUALINDEXSPECT - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE (CONTRIBUTIONS FROM SPECTRAL CALIBRATION)|%|0|0|7|%|0|3 +033065|gqisSysTecQual|long|GQISSYSTECSONDQUAL - OUTPUT OF SYSTEM TEC (TECHNICAL EXPERTISE CENTRE) QUALITY FUNCTION|Numeric|0|0|24|Numeric|0|8 +033066|amvQualityFlag|flag|AMV QUALITY FLAG|FLAG TABLE|0|0|24|FLAG TABLE|0|8 +033070|totalOzoneQuality|table|TOTAL OZONE QUALITY|CODE TABLE|0|0|4|CODE TABLE|0|2 +033071|profileOzoneQuality|table|PROFILE OZONE QUALITY|CODE TABLE|0|0|4|CODE TABLE|0|2 +033072|ozoneError|table|OZONE ERROR|CODE TABLE|0|0|5|CODE TABLE|0|2 +033075|scanLevelDataValidityQualityFlags|flag|SCAN-LEVEL QUALITY FLAGS|FLAG TABLE|0|0|13|FLAG TABLE|0|5 +033076|calibrationQualityFlags|flag|CALIBRATION QUALITY FLAGS|FLAG TABLE|0|0|9|FLAG TABLE|0|3 +033077|fieldOfViewQualityFlags|flag|FIELD-OF-VIEW QUALITY FLAGS|FLAG TABLE|0|0|19|FLAG TABLE|0|7 +033078|geolocationQuality|table|GEOLOCATION QUALITY|CODE TABLE|0|0|4|CODE TABLE|0|2 +033079|granuleLevelQualityFlags|flag|GRANULE LEVEL QUALITY FLAGS|FLAG TABLE|0|0|16|FLAG TABLE|0|6 +033080|scanLevelQualityFlags|flag|SCAN LEVEL QUALITY FLAGS|FLAG TABLE|0|0|20|FLAG TABLE|0|7 +033081|channelDataQualityFlags|flag|CHANNEL DATA QUALITY FLAGS|FLAG TABLE|0|0|12|FLAG TABLE|0|4 +033082|geolocationQualityFlags|flag|GEOLOCATION QUALITY FLAGS|FLAG TABLE|0|0|16|FLAG TABLE|0|6 +033083|radianceDataQualityFlags|flag|RADIANCE DATA QUALITY FLAGS|FLAG TABLE|0|0|16|FLAG TABLE|0|6 +033084|pixelLevelQualityFlags|flag|PIXEL LEVEL QUALITY FLAGS|FLAG TABLE|0|0|16|FLAG TABLE|0|6 +033085|aerosolOpticalThicknessQualityFlags|flag|AEROSOL OPTICAL THICKNESS QUALITY FLAGS|FLAG TABLE|0|0|18|FLAG TABLE|0|6 +033086|qualityOfPixelLevelRetrieval|table|QUALITY OF PIXEL LEVEL RETRIEVAL|CODE TABLE|0|0|3|CODE TABLE|0|1 +033087|extentOfSatelliteWithinSouthAtlanticAnomalyBasedOnClimatologicalData|table|EXTENT OF SATELLITE WITHIN SOUTH ATLANTIC ANOMALY (BASED ON CLIMATOLOGICAL DATA)|CODE TABLE|0|0|4|CODE TABLE|0|1 +033088|ozoneTotalColumnQualityFlag|flag|OZONE TOTAL COLUMN QUALITY FLAG|FLAG TABLE|0|0|18|FLAG TABLE|0|6 +033089|noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration|double|NOISE EQUIVALENT DELTA TEMPERATURE (NEDT) QUALITY INDICATORS FOR WARM TARGET CALIBRATION|K|2|0|12|K|2|4 +033090|nedtQualityIndicatorsForColdTargetCalibration|double|NEDT QUALITY INDICATORS FOR COLD TARGET CALIBRATION|K|2|0|12|K|2|4 +033091|nedtQualityIndicatorsForOverallCalibration|double|NEDT QUALITY INDICATORS FOR OVERALL CALIBRATION|K|2|0|12|K|2|4 +033092|bandSpecificOceanQualityFlag|flag|BAND SPECIFIC OCEAN QUALITY FLAG|FLAG TABLE|0|0|9|FLAG TABLE|0|3 +033093|extendedQualityFlagsForGroundBasedGnssData|flag|EXTENDED QUALITY FLAGS FOR GROUND-BASED GNSS DATA|FLAG TABLE|0|0|31|FLAG TABLE|0|31 +033094|calibrationQualityControlFlags|flag|CALIBRATION QUALITY CONTROL FLAGS|FLAG TABLE|0|0|24|FLAG TABLE|0|24 +035000|fmAndRegionalCodeNumber|table|FM AND REGIONAL CODE NUMBER|CODE TABLE|0|0|10|CODE TABLE|0|3 +035001|timeFrameForMonitoring|table|TIME FRAME FOR MONITORING|CODE TABLE|0|0|3|CODE TABLE|0|1 +035011|numberOfReportsActuallyReceived|long|NUMBER OF REPORTS ACTUALLY RECEIVED|Numeric|0|0|14|Numeric|0|4 +035021|bulletinBeingMonitoredTtaaii|string|BULLETIN BEING MONITORED (TTAAII)|CCITT IA5|0|0|48|Character|0|6 +035022|bulletinBeingMonitoredYygggg|string|BULLETIN BEING MONITORED (YYGGGG)|CCITT IA5|0|0|48|Character|0|6 +035023|bulletinBeingMonitoredCccc|string|BULLETIN BEING MONITORED (CCCC)|CCITT IA5|0|0|32|Character|0|4 +035024|bulletinBeingMonitoredBbb|string|BULLETIN BEING MONITORED (BBB)|CCITT IA5|0|0|24|Character|0|3 +035030|discrepanciesInAvailabilityOfExpectedData|table|DISCREPANCIES IN THE AVAILABILITY OF EXPECTED DATA|CODE TABLE|0|0|4|CODE TABLE|0|1 +035031|qualifierOnMonitoringResults|table|QUALIFIER ON MONITORING RESULTS|CODE TABLE|0|0|7|CODE TABLE|0|2 +035032|causeOfMissingData|table|CAUSE OF MISSING DATA|CODE TABLE|0|0|4|CODE TABLE|0|1 +035033|observationAndCollectionDeficiencies|table|OBSERVATION AND COLLECTION DEFICIENCIES|CODE TABLE|0|0|7|CODE TABLE|0|2 +035034|statisticalTrendsForAvailabilityOfDataDuringSurveyPeriods|table|STATISTICAL TRENDS FOR AVAILABILITY OF DATA (DURING THE SURVEY PERIOD(S))|CODE TABLE|0|0|3|CODE TABLE|0|1 +035035|reasonForTermination|table|REASON FOR TERMINATION|CODE TABLE|0|0|5|CODE TABLE|0|2 +040001|surfaceSoilMoisture|double|SURFACE SOIL MOISTURE (MS)|%|1|0|10|%|1|4 +040002|estimatedErrorInSurfaceSoilMoisture|double|ESTIMATED ERROR IN SURFACE SOIL MOISTURE|%|1|0|10|%|1|4 +040003|meanSurfaceSoilMoisture|long|MEAN SURFACE SOIL MOISTURE|Numeric|3|0|10|Numeric|3|4 +040004|rainFallDetection|long|RAIN FALL DETECTION|Numeric|3|0|10|Numeric|3|4 +040005|soilMoistureCorrectionFlag|flag|SOIL MOISTURE CORRECTION FLAG|FLAG TABLE|0|0|8|FLAG TABLE|0|3 +040006|soilMoistureProcessingFlag|flag|SOIL MOISTURE PROCESSING FLAG|FLAG TABLE|0|0|16|FLAG TABLE|0|6 +040007|soilMoistureQuality|double|SOIL MOISTURE QUALITY|%|1|0|10|%|1|4 +040008|frozenLandSurfaceFraction|double|FROZEN LAND SURFACE FRACTION|%|1|0|10|%|1|4 +040009|inundationAndWetlandFraction|double|INUNDATION AND WETLAND FRACTION|%|1|0|10|%|1|4 +040010|topographicComplexity|double|TOPOGRAPHIC COMPLEXITY|%|1|0|10|%|1|4 +040011|interpolationFlag|flag|INTERPOLATION FLAG|FLAG TABLE|0|0|8|FLAG TABLE|0|3 +040012|radiometerDataQualityFlag|flag|RADIOMETER DATA QUALITY FLAG|FLAG TABLE|0|0|8|FLAG TABLE|0|3 +040013|radiometerBrightnessTemperatureInterpretationFlag|table|RADIOMETER BRIGHTNESS TEMPERATURE INTERPRETATION FLAG|CODE TABLE|0|0|3|CODE TABLE|0|1 +040014|highFrequencyFluctuationsOfSeaSurfaceTopographyCorrection|double|HIGH-FREQUENCY FLUCTUATIONS OF THE SEA-SURFACE TOPOGRAPHY CORRECTION|m|4|-3000|13|m|4|4 +040015|normalizedDifferentialVegetationIndex|long|NORMALIZED DIFFERENTIAL VEGETATION INDEX (NDVI)|Numeric|2|-100|8|Numeric|2|3 +040016|residualRmsInBand|long|RESIDUAL RMS IN BAND|Numeric|3|0|14|Numeric|3|5 +040017|nonNormalizedPrincipalComponentScore|long|NON-NORMALIZED PRINCIPAL COMPONENT SCORE|Numeric|0|-1073741824|31|Numeric|0|10 +040018|averageOfImagerMeasurements|double|GIACAVGIMAGIIS - AVERAGE OF IMAGER MEASUREMENTS|W m-2 sr-1 m|6|0|24|W m-2 sr-1 m|6|8 +040019|giacvarimagiisVarianceOfImagerMeasurements|double|GIACVARIMAGIIS - VARIANCE OF IMAGER MEASUREMENTS|W m-2 sr-1 m|6|0|24|W m-2 sr-1 m|6|8 +040020|gqisFlagQualDetailed|flag|GQISFLAGQUALDETAILED - QUALITY FLAG FOR THE SYSTEM|FLAG TABLE|0|0|17|FLAG TABLE|0|6 +040021|fractionOfWeightedAvhrrPixelInIasiFovCoveredWithSnowOrIce|long|FRACTION OF WEIGHTED AVHRR PIXEL IN IASI FOV COVERED WITH SNOW/ICE|%|0|0|7|%|0|3 +040022|numberOfMissingBadOrFailedAvhrrPixels|long|NUMBER OF MISSING, BAD OR FAILED AVHRR PIXELS|Numeric|0|0|7|Numeric|0|3 +040023|auxiliaryAltimeterStateFlags|flag|AUXILIARY ALTIMETER STATE FLAGS|FLAG TABLE|0|0|5|FLAG TABLE|0|2 +040024|meteorologicalMapAvailability|table|METEOROLOGICAL MAP AVAILABILITY|CODE TABLE|0|0|3|CODE TABLE|0|1 +040025|interpolationFlagForMeanDiurnalTide|table|INTERPOLATION FLAG FOR MEAN DIURNAL TIDE|CODE TABLE|0|0|2|CODE TABLE|0|1 +040026|scoreQuantizationFactor|long|SCORE QUANTIZATION FACTOR|Numeric|2|0|16|Numeric|2|5 +040027|sunGlintAngle|double|SUN GLINT ANGLE|deg|2|-18000|16|deg|2|5 +040028|gmiQualityFlag|table|GMI QUALITY FLAG|CODE TABLE|0|0|4|CODE TABLE|0|2 +040029|horizontalObservationIntegrationLength|long|HORIZONTAL OBSERVATION INTEGRATION LENGTH|m|0|0|26|m|0|8 +040030|horizontalLineOfSightWind|double|HORIZONTAL LINE OF SIGHT WIND|m/s|2|-32767|16|m/s|2|5 +040031|errorEstimateOfHorizontalLineOfSightWind|double|ERROR ESTIMATE OF HORIZONTAL LINE OF SIGHT WIND|m/s|2|0|15|m/s|2|5 +040032|derivativeWindToPressure|double|DERIVATIVE WIND TO PRESSURE|m s-1 Pa-1|3|-100000|18|m s-1 Pa-1|3|6 +040033|derivativeWindToTemperature|double|DERIVATIVE WIND TO TEMPERATURE|m s-1 K-1|3|-100000|18|m s-1 K-1|3|6 +040034|derivativeWindToBackscatterRatio|double|DERIVATIVE WIND TO BACKSCATTER RATIO|m/s|3|-200000|19|m/s|3|6 +040035|satelliteRange|long|SATELLITE RANGE|m|0|380000|18|m|0|6 +040036|lidarL2bClassificationType|table|LIDAR L2B CLASSIFICATION TYPE|CODE TABLE|0|0|4|CODE TABLE|0|2 +040037|backscatterRatio|long|BACKSCATTER RATIO|Numeric|3|500|20|Numeric|3|7 +040038|cloudParticleSize|double|CLOUD PARTICLE SIZE|m|7|0|28|m|7|6 +040039|singleLookComplexImageIntensity|long|SINGLE LOOK COMPLEX IMAGE INTENSITY|Numeric|0|-25|5|Numeric|0|3 +040040|singleLookComplexImageSkewness|long|SINGLE LOOK COMPLEX IMAGE SKEWNESS|Numeric|2|1|13|Numeric|0|4 +040041|singleLookComplexImageKurtosis|long|SINGLE LOOK COMPLEX IMAGE KURTOSIS|Numeric|2|1|13|Numeric|0|4 +040042|singleLookComplexImageVariance|long|SINGLE LOOK COMPLEX IMAGE VARIANCE|Numeric|2|1|13|Numeric|0|4 +040043|satelliteManoeuvreIndicator|table|SATELLITE MANOEUVRE INDICATOR|CODE TABLE|0|0|3|CODE TABLE|0|1 +040044|dustIndex|long|DUST INDEX|Numeric|1|0|8|Numeric|1|3 +040045|cloudFormationAndHeightAssignment|flag|CLOUD FORMATION AND HEIGHT ASSIGNMENT|FLAG TABLE|0|0|5|FLAG TABLE|0|2 +040046|cloudinessSummary|table|CLOUDINESS SUMMARY|CODE TABLE|0|0|3|CODE TABLE|0|1 +040047|validationFlagForIasiOrIasiNgLevel1Product|table|VALIDATION FLAG FOR IASI OR IASI-NG LEVEL 1 PRODUCT|CODE TABLE|0|0|3|CODE TABLE|0|1 +040048|validationFlagOfAmsuALevel1DataFlow|table|VALIDATION FLAG OF AMSU-A LEVEL 1 DATA FLOW|CODE TABLE|0|0|3|CODE TABLE|0|1 +040049|cloudTestsExecutedAndResults|flag|CLOUD TESTS EXECUTED AND RESULTS|FLAG TABLE|0|0|16|FLAG TABLE|0|5 +040050|retrievalInitialisation|flag|RETRIEVAL INITIALISATION|FLAG TABLE|0|0|8|FLAG TABLE|0|3 +040051|convergenceOfTheIterativeRetrieval|table|CONVERGENCE OF THE ITERATIVE RETRIEVAL|CODE TABLE|0|0|3|CODE TABLE|0|1 +040052|indicationOfSuperAdiabaticAndSuperSaturationInFinalRetrieval|flag|INDICATION OF SUPER-ADIABATIC AND SUPER-SATURATION IN FINAL RETRIEVAL|FLAG TABLE|0|0|8|FLAG TABLE|0|3 +040053|numberOfIterationsUsedForRetrieval|long|NUMBER OF ITERATIONS USED FOR RETRIEVAL|Numeric|0|0|8|Numeric|0|3 +040054|potentialProcessingAndInputsErrors|flag|POTENTIAL PROCESSING AND INPUTS ERRORS|FLAG TABLE|0|0|13|FLAG TABLE|0|4 +040055|diagnosticsOnTheRetrieval|flag|DIAGNOSTICS ON THE RETRIEVAL|FLAG TABLE|0|0|21|FLAG TABLE|0|7 +040056|generalRetrievalQuality|table|GENERAL RETRIEVAL QUALITY|CODE TABLE|0|0|3|CODE TABLE|0|1 +040057|iasiLevel2RetrievalFlags|flag|IASI LEVEL 2 RETRIEVAL FLAGS|FLAG TABLE|0|0|31|FLAG TABLE|0|10 +040058|numberOfVectorsDescribingTheCharacterizationMatrices|long|NUMBER OF VECTORS DESCRIBING THE CHARACTERIZATION MATRICES|Numeric|0|0|8|Numeric|0|3 +040059|numberOfLayersActuallyRetrieved|long|NUMBER OF LAYERS ACTUALLY RETRIEVED|Numeric|0|0|8|Numeric|0|3 +040060|numberOfProfilesRetrievedInScanline|long|NUMBER OF PROFILES RETRIEVED IN SCANLINE|Numeric|0|0|8|Numeric|0|3 +040061|airPartialColumnsOnEachRetrievedLayer|double|AIR PARTIAL COLUMNS ON EACH RETRIEVED LAYER|mol cm-2|3|0|16|mol cm-2|3|5 +040062|aPrioriPartialColumnsOnEachRetrievedLayer|double|A-PRIORI PARTIAL COLUMNS ON EACH RETRIEVED LAYER|mol cm-2|10|0|16|mol cm-2|10|5 +040063|scalingVectorMultiplyingTheAPrioriVectorInOrderToDefineTheRetrievedVector|long|SCALING VECTOR MULTIPLYING THE A PRIORI VECTOR IN ORDER TO DEFINE THE RETRIEVED VECTOR|Numeric|5|0|26|Numeric|5|8 +040064|mainEigenvaluesOfTheSensitivityMatrix|long|MAIN EIGENVALUES OF THE SENSITIVITY MATRIX|Numeric|6|0|31|Numeric|6|10 +040065|mainEigenvectorsOfTheSensitivityMatrix|long|MAIN EIGENVECTORS OF THE SENSITIVITY MATRIX|Numeric|6|-1000000000|31|Numeric|6|10 +040066|qualityIndicatorForAtmosphericWaterVapour|long|QUALITY INDICATOR FOR ATMOSPHERIC WATER VAPOUR|Numeric|1|0|8|Numeric|1|3 +040067|qualityIndicatorForAtmosphericTemperature|long|QUALITY INDICATOR FOR ATMOSPHERIC TEMPERATURE|Numeric|1|0|8|Numeric|1|3 +040068|generalRetrievalQualityFlagForSo2|table|GENERAL RETRIEVAL QUALITY FLAG FOR SO2|CODE TABLE|0|0|4|CODE TABLE|0|2 +040069|pwlrEstimatedRetrievalErrorForSurfaceAirTemperature|double|PWLR ESTIMATED RETRIEVAL ERROR FOR SURFACE AIR TEMPERATURE|K|4|-1000000|21|K|4|7 +040070|pwlrEstimatedRetrievalErrorOfSurfaceDewpoint|double|PWLR ESTIMATED RETRIEVAL ERROR OF SURFACE DEWPOINT|K|4|-1000000|21|K|4|7 +040071|retrievalErrorCovarianceMatrixForOzoneInPrincipalComponentDomain|long|RETRIEVAL ERROR COVARIANCE MATRIX FOR OZONE IN PRINCIPAL COMPONENT DOMAIN|Numeric|4|-1000000|21|Numeric|4|7 +040072|pwlrEstimatedRetrievalQualityIndicatorOfAtmosphericOzone|long|PWLR ESTIMATED RETRIEVAL QUALITY INDICATOR OF ATMOSPHERIC OZONE|Numeric|1|0|8|Numeric|1|3 +040073|pwlrEstimatedRetrievalErrorOfSurfaceSkinTemperature|double|PWLR ESTIMATED RETRIEVAL ERROR OF SURFACE SKIN TEMPERATURE|K|1|0|8|K|1|3 +040074|generalInterferometryQualityFlags|flag|GENERAL INTERFEROMETRY QUALITY FLAGS|FLAG TABLE|0|0|16|NA|0|0 +041001|pco2|double|PCO2|Pa|3|0|18|Pa|3|6 +041002|fluorescence|double|FLUORESCENCE|kg l-1|12|0|16|kg l-1|12|5 +041003|dissolvedNitrates|double|DISSOLVED NITRATES|umol/kg|3|0|17|umol/kg|3|5 +041005|turbidity|double|TURBIDITY|NTU|2|0|12|NTU|2|4 +042001|dominantSwellWaveDirectionOfSpectralPartition|long|DOMINANT SWELL WAVE DIRECTION OF SPECTRAL PARTITION|deg|0|0|9|deg|0|3 +042002|significantSwellWaveHeightOfSpectralPartition|double|SIGNIFICANT SWELL WAVE HEIGHT OF SPECTRAL PARTITION|m|1|0|9|m|1|3 +042003|dominantSwellWavelengthOfSpectralPartition|double|DOMINANT SWELL WAVELENGTH OF SPECTRAL PARTITION|m|2|100|17|m|2|6 +042004|confidenceOfInversionForEachPartitionOfSwellWaveSpectra|table|CONFIDENCE OF INVERSION FOR EACH PARTITION OF SWELL WAVE SPECTRA|CODE TABLE|0|0|4|CODE TABLE|0|2 +042005|ambiguityRemovalFactorForSwellWavePartition|long|AMBIGUITY REMOVAL FACTOR FOR SWELL WAVE PARTITION|Numeric|5|-100000|18|Numeric|5|6 +042006|waveAge|long|WAVE AGE|Numeric|2|1|8|Numeric|2|3 +042007|shortestOceanWavelengthOnSpectralResolution|double|SHORTEST OCEAN WAVELENGTH ON SPECTRAL RESOLUTION|m|2|0|16|m|2|5 +042008|nonlinearInverseSpectralWidth|double|NONLINEAR INVERSE SPECTRAL WIDTH|m|2|0|16|m|2|5 +042009|binPartitionReference|long|BIN PARTITION REFERENCE|Numeric|0|0|8|Numeric|0|3 +042010|partitionNumber|long|PARTITION NUMBER|Numeric|0|1|4|Numeric|0|2 +042011|a1CoefficientOfTheDirectionalFourierSeries|long|A1 COEFFICIENT OF THE DIRECTIONAL FOURIER SERIES|Numeric|4|-20000|15|Numeric|4|6 +042012|b1CoefficientOfTheDirectionalFourierSeries|long|B1 COEFFICIENT OF THE DIRECTIONAL FOURIER SERIES|Numeric|4|-20000|15|Numeric|4|6 +042013|a2CoefficientOfTheDirectionalFourierSeries|long|A2 COEFFICIENT OF THE DIRECTIONAL FOURIER SERIES|Numeric|4|-20000|15|Numeric|4|6 +042014|b2CoefficientOfTheDirectionalFourierSeries|long|B2 COEFFICIENT OF THE DIRECTIONAL FOURIER SERIES|Numeric|4|-20000|15|Numeric|4|6 +042015|checkFactorK|long|CHECK FACTOR K|Numeric|2|0|12|Numeric|2|4 diff --git a/definitions/bufr/tables/0/wmo/39/sequence.def b/definitions/bufr/tables/0/wmo/39/sequence.def new file mode 100644 index 000000000..8d681253e --- /dev/null +++ b/definitions/bufr/tables/0/wmo/39/sequence.def @@ -0,0 +1,1154 @@ +"300002" = [ 000002, 000003 ] +"300003" = [ 000010, 000011, 000012 ] +"300004" = [ 300003, 000013, 000014, 000015, 000016, 000017, 000018, 000019, 000020 ] +"300010" = [ 300003, 101000, 031001, 000030 ] +"300015" = [ 000030, 102000, 031002, 000024, 000025 ] +"300016" = [ 000030, 102000, 031001, 000026, 000027 ] +"301001" = [ 001001, 001002 ] +"301002" = [ 001003, 001004, 001005 ] +"301003" = [ 001011, 001012, 001013 ] +"301004" = [ 001001, 001002, 001015, 002001 ] +"301005" = [ 001035, 001034 ] +"301011" = [ 004001, 004002, 004003 ] +"301012" = [ 004004, 004005 ] +"301013" = [ 004004, 004005, 004006 ] +"301014" = [ 102002, 301011, 301012 ] +"301018" = [ 001114, 025185, 025186 ] +"301021" = [ 005001, 006001 ] +"301022" = [ 005001, 006001, 007001 ] +"301023" = [ 005002, 006002 ] +"301024" = [ 005002, 006002, 007001 ] +"301025" = [ 301023, 004003, 301012 ] +"301026" = [ 301021, 004003, 004003, 004004, 004004, 004005, 004005 ] +"301027" = [ 008007, 101000, 031001, 301028, 008007 ] +"301028" = [ 008040, 033042, 007010, 101000, 031002, 301023, 019007, 008040 ] +"301029" = [ 001018, 002001, 301011 ] +"301030" = [ 001018, 002001, 301011, 301024 ] +"301031" = [ 301001, 002001, 301011, 301012, 301022 ] +"301032" = [ 301001, 002001, 301011, 301012, 301024 ] +"301033" = [ 001005, 002001, 301011, 301012, 301021 ] +"301034" = [ 001005, 002001, 301011, 301012, 301023 ] +"301035" = [ 001005, 001012, 001013, 002001, 301011, 301012, 301023 ] +"301036" = [ 301003, 002001, 301011, 301012, 301023 ] +"301037" = [ 301001, 002011, 002012, 301011, 301012, 301022 ] +"301038" = [ 301001, 002011, 002012, 301011, 301012, 301024 ] +"301039" = [ 301003, 002011, 002012, 301011, 301012, 301023 ] +"301040" = [ 301003, 002011, 002012, 301011, 301012, 301024 ] +"301041" = [ 001007, 002021, 002022, 301011, 301012 ] +"301042" = [ 301041, 301021 ] +"301043" = [ 001007, 002023, 301011, 301013, 301021 ] +"301044" = [ 001007, 002024, 301011, 301013, 301021 ] +"301045" = [ 301011, 301012, 201138, 202131, 004006, 201000, 202000, 304030, 304031 ] +"301046" = [ 001007, 001012, 002048, 021119, 025060, 202124, 002026, 002027, 202000, 005040 + ] +"301047" = [ 001007, 025060, 001033, 001034, 001012, 301045, 002021, 301011, 301012, 201138, + 202131, 004006, 201000, 202000, 301023 ] +"301048" = [ 002104, 002121, 002113, 002026, 002027, 002111, 002140, 202127, 001013, 202126, + 007001, 202000, 025010, 021064 ] +"301049" = [ 002111, 002112, 021062, 021063, 021065 ] +"301051" = [ 001006, 002061, 301011, 301012, 301021, 008004 ] +"301055" = [ 001005, 002001, 301011, 301012, 301021, 001012, 001014 ] +"301056" = [ 001087, 001011, 001015, 002008, 002001, 301011, 301012, 301021, 007030, 007031 + ] +"301058" = [ 301011, 301012, 201152, 202135, 004006, 202000, 201000, 301021, 020111, 020112, + 020113, 020114, 020115, 020116, 020117, 020118, 020119, 025035, 020121, 020122, + 020123, 020124, 025175, 020023, 025063, 202136, 201136, 002121, 201000, 202000, + 025061, 002184, 002189, 025036, 101000, 031002, 301059 ] +"301059" = [ 301021, 007030, 007032 ] +"301062" = [ 101000, 031001, 301001 ] +"301065" = [ 001006, 001008, 002001, 002002, 002005, 002062, 002070, 002065 ] +"301066" = [ 301011, 301013, 301023, 007004, 002064, 008004 ] +"301070" = [ 002143, 002142, 002144 ] +"301071" = [ 001007, 001031, 002020, 002028, 002029 ] +"301072" = [ 301071, 301011, 301013, 301021 ] +"301074" = [ 002143, 002142, 002145, 002146 ] +"301075" = [ 301001, 001015, 301024, 008021, 301011, 301012 ] +"301076" = [ 002011, 002143, 002142 ] +"301089" = [ 001101, 001102 ] +"301090" = [ 301004, 301011, 301012, 301021, 007030, 007031 ] +"301091" = [ 002180, 002181, 002182, 002183, 002184, 002179, 002186, 002187, 002188, 002189 + ] +"301092" = [ 001011, 001003, 002001, 301011, 301012, 301021, 007030, 007031, 033024 ] +"301093" = [ 301036, 007030, 007031 ] +"301110" = [ 301001, 001011, 002011, 002014, 002003 ] +"301111" = [ 301001, 001011, 002011, 002013, 002014, 002003 ] +"301112" = [ 001006, 002011, 002013, 002014, 002003 ] +"301113" = [ 008021, 301011, 301013 ] +"301114" = [ 301021, 007030, 007031, 007007, 033024 ] +"301120" = [ 301001, 001094, 002011, 301121 ] +"301121" = [ 008041, 301122, 301021, 007031, 007007 ] +"301122" = [ 301011, 301012, 201135, 202130, 004006, 202000, 201000 ] +"301123" = [ 102002, 008041, 001062, 301001, 001094, 002011, 001018, 001095, 025061, 025068, + 001082, 001083, 001081, 002067, 002066, 002014, 025067, 025065, 025066, 002095, + 002096, 002097, 002016, 002083, 002080, 002081, 001093, 002084, 002085, 002086, + 002082, 008041, 301011 ] +"301125" = [ 001033, 001034, 025060, 001007, 002019, 001012 ] +"301126" = [ 001087, 001015, 002149, 301011, 301012, 301021 ] +"301128" = [ 001081, 001082, 001083, 001095, 002015, 002016, 002017, 002066, 002067, 002080, + 002081, 002082, 002083, 002084, 002085, 002086, 002095, 002096, 002097, 002103, + 002191, 025061, 035035 ] +"301129" = [ 001007, 001031, 002019, 002020 ] +"301130" = [ 301011, 301012, 202131, 201138, 004006, 201000, 202000 ] +"301131" = [ 301021, 007024, 005021, 007025, 005022 ] +"301132" = [ 301150, 301001, 301021, 007030, 008021, 301011, 301012, 002006, 001079, 001085 + ] +"301150" = [ 001125, 001126, 001127, 001128 ] +"302001" = [ 010004, 010051, 010061, 010063 ] +"302002" = [ 010004, 007004, 010003, 010061, 010063 ] +"302003" = [ 011011, 011012, 012004, 012006, 013003, 020001, 020003, 020004, 020005 ] +"302004" = [ 020010, 008002, 020011, 020013, 020012, 020012, 020012 ] +"302005" = [ 008002, 020011, 020012, 020013 ] +"302006" = [ 010004, 010051, 010062, 010063 ] +"302011" = [ 302001, 302003, 302004 ] +"302012" = [ 302002, 302003, 302004 ] +"302013" = [ 302006, 302003, 101000, 031001, 302005 ] +"302021" = [ 022001, 022011, 022021 ] +"302022" = [ 022002, 022012, 022022 ] +"302023" = [ 022003, 022013, 022023 ] +"302024" = [ 302022, 101002, 302023 ] +"302031" = [ 302001, 010062, 007004, 010009 ] +"302032" = [ 007032, 012101, 012103, 013003 ] +"302033" = [ 007032, 020001 ] +"302034" = [ 007032, 013023 ] +"302035" = [ 302032, 302033, 302034, 007032, 302004, 101000, 031001, 302005 ] +"302036" = [ 105000, 031001, 008002, 020011, 020012, 020014, 020017 ] +"302037" = [ 020062, 013013, 012113 ] +"302038" = [ 020003, 004024, 020004, 020005 ] +"302039" = [ 004024, 014031 ] +"302040" = [ 007032, 102002, 004024, 013011 ] +"302041" = [ 007032, 004024, 004024, 012111, 004024, 004024, 012112 ] +"302042" = [ 007032, 002002, 008021, 004025, 011001, 011002, 008021, 103002, 004025, 011043, + 011041 ] +"302043" = [ 302038, 101002, 302039, 302040, 302041, 302042, 007032 ] +"302044" = [ 004024, 002004, 013033 ] +"302045" = [ 004024, 014002, 014004, 014016, 014028, 014029, 014030 ] +"302046" = [ 004024, 004024, 012049 ] +"302047" = [ 102003, 008002, 020054 ] +"302048" = [ 005021, 007021, 020012, 005021, 007021 ] +"302049" = [ 008002, 020011, 020013, 020012, 020012, 020012, 008002 ] +"302050" = [ 008041, 005021, 007005, 202130, 006021, 202000, 008041, 201131, 202129, 002115, + 010004, 002115, 013003, 202000, 201000, 002115, 011001, 011002, 002115, 102002, + 012101, 004024, 002115, 012103, 012102, 101003, 020012, 020011, 020013, 101002, + 020003 ] +"302051" = [ 010004, 010051, 007004, 010003, 012004, 012051, 012016, 012017, 013004, 102004, + 008051, 008020 ] +"302052" = [ 007032, 007033, 012101, 002039, 012102, 012103, 013003 ] +"302053" = [ 007032, 007033, 020001 ] +"302054" = [ 302052, 302053, 007033, 302034, 007032, 302004, 101000, 031001, 302005 ] +"302055" = [ 020031, 020032, 020033, 020034, 020035, 020036, 020037, 020038 ] +"302056" = [ 002038, 007063, 022043, 007063 ] +"302057" = [ 302056, 302021, 302024 ] +"302058" = [ 007032, 007033, 004024, 004024, 012111, 004024, 004024, 012112 ] +"302059" = [ 007032, 007033, 002002, 008021, 004025, 011001, 011002, 008021, 103002, 004025, + 011043, 011041 ] +"302060" = [ 302038, 302040, 302058, 302059 ] +"302062" = [ 025188, 302001, 302093, 101000, 031000, 302053, 007032, 007033, 101000, 031000, + 302004, 101000, 031001, 302005, 008002, 101000, 031000, 302055, 101000, 031000, + 302056, 101000, 031000, 302021, 101000, 031000, 302024 ] +"302063" = [ 302038, 101000, 031000, 302040, 101000, 031000, 302034, 007032, 101000, 031000, + 302058, 101000, 031000, 302064 ] +"302064" = [ 007032, 007033, 002002, 008021, 004025, 011001, 011002, 008021, 103000, 031001, + 004025, 011043, 011041 ] +"302066" = [ 020023, 020024, 020027, 020054, 020023, 020027, 020054, 020025, 020026, 020027, + 020040, 020066, 020027, 020021, 020067, 020027 ] +"302067" = [ 001023, 004025, 002177, 101000, 031001, 020003, 103000, 031001, 005021, 020001, + 005021, 101000, 031000, 302056, 103000, 031000, 033041, 020058, 022061, 101000, + 031000, 302022, 101000, 031001, 302023, 104000, 031001, 020054, 020137, 020012, + 020090, 103000, 031001, 020054, 020137, 020136, 004025, 013012, 004025, 011042, + 104000, 031001, 008021, 004025, 011042, 008021, 115000, 031001, 008021, 004015, + 008021, 004025, 011001, 011002, 008021, 004015, 008021, 004025, 011001, 011002, + 008021, 004025, 004015, 103000, 031001, 004025, 004025, 020003, 110000, 031001, + 004025, 004025, 005021, 005021, 020054, 020024, 020025, 020026, 020027, 020063 + ] +"302069" = [ 007032, 007033, 033041, 020001 ] +"302070" = [ 007032, 007033, 011001, 011002, 011043, 011041, 011016, 011017 ] +"302071" = [ 007032, 007033, 008021, 004025, 011001, 011002, 008021, 103002, 004025, 011043, + 011041, 004025, 011016, 011017 ] +"302072" = [ 007032, 007033, 012101, 012103, 013003 ] +"302073" = [ 020010, 105004, 008002, 020011, 020012, 033041, 020013 ] +"302074" = [ 020003, 004025, 020004, 020005 ] +"302075" = [ 008021, 004025, 013055, 013058, 008021 ] +"302076" = [ 020021, 020022, 026020, 020023, 020024, 020025, 020026 ] +"302077" = [ 007032, 007033, 004025, 012111, 012112, 007032, 004025, 012112 ] +"302078" = [ 002176, 020062, 002177, 013013 ] +"302079" = [ 007032, 002175, 002178, 004025, 013011 ] +"302080" = [ 002185, 004025, 013033 ] +"302081" = [ 004025, 014031 ] +"302082" = [ 004025, 014002, 014004, 014016, 014028, 014029, 014030 ] +"302083" = [ 004025, 008023, 010004, 011001, 011002, 012101, 013003, 008023 ] +"302084" = [ 302031, 302072, 103000, 031000, 101005, 307063, 007061, 101000, 031000, 302069, + 007032, 007033, 105000, 031000, 020031, 020032, 002038, 022043, 302021, 101000, + 031000, 302078, 012113, 101000, 031000, 302004, 105000, 031001, 008002, 020011, + 020012, 033041, 020013, 302036, 101000, 031000, 302047, 008002, 101000, 031000, + 302048 ] +"302085" = [ 105000, 031000, 020003, 103002, 004024, 020004, 020005, 101000, 031000, 302175, + 102000, 031000, 004025, 302076, 102000, 031000, 004025, 013059, 007032, 007033, + 008021, 004025, 011001, 011002, 008021, 103003, 004025, 011043, 011041, 004025, + 011016, 011017, 302077, 007033, 302041, 106000, 031000, 007032, 002175, 002178, + 102005, 004024, 013011, 007032, 103000, 031000, 002185, 101002, 302044, 102000, + 031000, 101002, 302039, 102000, 031000, 101002, 302045, 101000, 031000, 302046, + 101000, 031000, 302083 ] +"302089" = [ 020101, 020102, 020103, 020104, 020105, 020106, 020107, 020108 ] +"302090" = [ 002038, 007063, 022045 ] +"302091" = [ 020001, 004024, 013011 ] +"302092" = [ 011104, 001012, 001013, 010038, 010039, 011007, 011008 ] +"302093" = [ 007032, 007033, 303099, 012101, 103000, 031000, 007032, 007033, 303099, 002039, + 002097, 003024, 003021, 012102, 012103, 013003, 007032, 007033, 303099, 002039, + 002097, 003021, 003024 ] +"302175" = [ 008021, 004025, 013155, 013058, 008021 ] +"303001" = [ 007003, 011001, 011002 ] +"303002" = [ 007004, 011001, 011002 ] +"303003" = [ 007004, 010003, 012001, 012003 ] +"303004" = [ 007004, 010003, 012001, 012003, 011001, 011002 ] +"303011" = [ 007003, 008001, 011001, 011002 ] +"303012" = [ 007004, 008001, 011001, 011002 ] +"303013" = [ 007004, 008001, 010003, 012001, 013003, 011001, 011002 ] +"303014" = [ 007004, 008001, 010003, 012001, 012003, 011001, 011002 ] +"303021" = [ 007004, 007004, 204007, 031021 ] +"303022" = [ 303021, 010003, 204000 ] +"303023" = [ 303021, 012001, 204000 ] +"303024" = [ 303021, 013016, 204000 ] +"303025" = [ 002025, 204007, 031021, 012063, 204000 ] +"303026" = [ 007004, 008003, 204007, 031021, 012001, 204000 ] +"303027" = [ 007004, 204007, 031021, 010003, 204000 ] +"303031" = [ 007004, 008003, 007021, 007022, 008012, 012061 ] +"303032" = [ 020011, 020016 ] +"303033" = [ 020010, 020016 ] +"303040" = [ 008041, 004025, 004026, 301021, 301122, 201131, 202129, 025069, 007004, 013003, + 202000, 201000, 002013, 012101, 010009, 102002, 008040, 035035 ] +"303041" = [ 002152, 002023, 007004, 011001, 011002, 002153, 002154, 012071 ] +"303050" = [ 004086, 008042, 007004, 005015, 006015, 011001, 011002 ] +"303051" = [ 004086, 008042, 007004, 005015, 006015, 011061, 011062 ] +"303052" = [ 004086, 008042, 007009, 005015, 006015, 011001, 011002 ] +"303053" = [ 004086, 008042, 007009, 005015, 006015, 011061, 011062 ] +"303054" = [ 004086, 008042, 007004, 010009, 005015, 006015, 012101, 012103, 011001, 011002 + ] +"303055" = [ 004086, 008042, 007009, 005015, 006015, 012101, 013009, 012103, 011001, 011002 + ] +"303056" = [ 004086, 008042, 207001, 007004, 010009, 207000, 005015, 006015, 012101, 012103, + 011001, 011002 ] +"303099" = [ 003005, 003006, 003007, 002096, 003022, 003003, 003020, 003004, 003023, 003008, + 003009 ] +"304001" = [ 008003, 010004, 012001, 011001, 011002 ] +"304002" = [ 008003, 010004, 011001, 011002 ] +"304003" = [ 008003, 012001 ] +"304004" = [ 008003, 010004, 020010, 012001 ] +"304005" = [ 002024, 007004, 007004, 013003 ] +"304006" = [ 014001, 014001, 014003 ] +"304011" = [ 002163, 002164, 008012, 007024, 002057, 008021, 004001, 004002, 004003, 004004, + 008021, 004024, 110004, 008021, 004004, 004005, 004006, 008021, 004004, 004005, + 004006, 011001, 011002, 103010, 002163, 007004, 012001 ] +"304030" = [ 027031, 028031, 010031 ] +"304031" = [ 001041, 001042, 001043 ] +"304032" = [ 002153, 002154, 020081, 020082, 020012 ] +"304033" = [ 002152, 002166, 002167, 002153, 002154, 012075, 012076, 012063 ] +"304034" = [ 102004, 027001, 028001, 007022, 005043, 020010, 020016, 033003, 010040 ] +"304035" = [ 002153, 002154, 012063, 008001, 012063, 008001, 012063, 008001, 008003, 012063, + 008003, 012063, 008003, 012063, 008003 ] +"304036" = [ 020082, 008012, 020082, 008012, 020081, 008003, 020081, 008003, 020081, 008003, + 020081, 008003 ] +"304037" = [ 002153, 002154, 012063, 008011, 012063, 008011, 012063, 008011, 008003, 012063, + 008003, 012063, 008003, 012063 ] +"304039" = [ 201136, 005042, 201000, 014046 ] +"304040" = [ 025140, 025141, 040026, 040016, 025062, 101000, 031002, 040017 ] +"305001" = [ 011001, 011002, 013060, 013071 ] +"305002" = [ 301012, 012001, 013003, 014051, 013060, 013072, 013080, 013081, 013082, 013083, + 013084 ] +"305003" = [ 301012, 004065, 101000, 031001, 305001 ] +"305004" = [ 301030, 305002, 305003 ] +"305006" = [ 013072, 013082, 013019, 012001, 013073, 013060 ] +"305007" = [ 301029, 301012, 004065, 101000, 031001, 305006 ] +"305008" = [ 305006, 012030 ] +"305009" = [ 301029, 301012, 004065, 101000, 031001, 305008 ] +"305010" = [ 305008, 002091, 002091 ] +"305011" = [ 301029, 301012, 004065, 101000, 031001, 305010 ] +"305016" = [ 014021, 007004, 013003, 011002, 011001, 011041, 011043 ] +"305017" = [ 013080, 013081, 013083, 013085, 013084 ] +"305018" = [ 301029, 301012, 004065, 103000, 031001, 305008, 305016, 305017 ] +"306001" = [ 002032, 102000, 031001, 007062, 022042 ] +"306002" = [ 002031, 022004, 022031 ] +"306003" = [ 002002, 011011, 011012, 012004 ] +"306004" = [ 002032, 002033, 103000, 031001, 007062, 022043, 022062 ] +"306005" = [ 002031, 103000, 031001, 007062, 022004, 022031 ] +"306006" = [ 306003, 306002, 022063 ] +"306007" = [ 001012, 001014, 306008, 004024, 027003, 028003 ] +"306008" = [ 002034, 002035, 002036 ] +"306011" = [ 301021, 001075, 002147, 301011, 301013 ] +"306012" = [ 002007, 008015, 008032, 306029 ] +"306013" = [ 306012, 301011, 301013, 022120, 022121, 004015, 004065, 102000, 031001, 022038, + 022040 ] +"306014" = [ 306012, 301011, 301013, 022120, 022121, 004015, 004065, 101000, 031001, 022038 + ] +"306016" = [ 301011, 301013, 010004, 010051, 302032, 007032, 002002, 008021, 004025, 011001, + 011002, 004025, 011043, 011041, 025026, 012060 ] +"306017" = [ 002032, 008034, 106000, 031002, 007065, 008080, 033050, 022045, 008080, 033050, + 008034 ] +"306018" = [ 002032, 008034, 109000, 031002, 007065, 008080, 033050, 022045, 008080, 033050, + 022064, 008080, 033050, 008034 ] +"306019" = [ 001075, 301011, 301012, 022042, 022120, 022121, 004015, 004065 ] +"306020" = [ 001075, 301011, 301012, 022042, 022120, 022121, 004075, 004065 ] +"306021" = [ 001075, 301011, 301012, 022122, 022123, 012001, 303002 ] +"306022" = [ 001075, 301011, 301012, 022038, 022039 ] +"306023" = [ 001015, 301023, 301011, 301012, 022038, 022039, 022120, 022121 ] +"306024" = [ 306020, 102006, 022038, 022039 ] +"306025" = [ 306019, 102006, 022038, 022039 ] +"306027" = [ 001005, 001052, 002047, 301011, 301013 ] +"306028" = [ 306027, 301011, 301013, 301021 ] +"306029" = [ 025170, 025171, 025172 ] +"306030" = [ 306027, 306029, 111000, 031001, 033002, 301011, 301013, 025025, 025025, 025026, + 022185, 004015, 004065, 101004, 022182 ] +"306031" = [ 306027, 306029, 001053, 033002, 301011, 301013, 301011, 301013, 022185, 022182, + 004016, 004066, 101000, 031001, 022184 ] +"306033" = [ 002033, 007063, 022064 ] +"306034" = [ 002031, 003010, 002040, 022005, 022032 ] +"306035" = [ 112000, 031002, 007062, 008080, 033050, 007065, 008080, 033050, 022043, 008080, + 033050, 022064, 008080, 033050 ] +"306036" = [ 112000, 031002, 007062, 008080, 033050, 007065, 008080, 033050, 022031, 008080, + 033050, 022004, 008080, 033050 ] +"306037" = [ 109000, 031002, 007062, 008080, 033050, 007065, 008080, 033050, 022188, 008080, + 033050 ] +"306038" = [ 010004, 010051, 007033, 012101, 012103, 013003, 007033, 008021, 004025, 011001, + 011002, 008021, 004025, 011041, 004025, 007033, 002005, 007063, 022049 ] +"306039" = [ 022078, 022070, 022073, 022074, 022071, 022076, 022077 ] +"306040" = [ 022078, 022082, 106000, 031001, 022080, 022069, 022086, 022087, 022088, 022089 + ] +"306041" = [ 002032, 102000, 031001, 007062, 022043 ] +"306042" = [ 002169, 007033, 008021, 004025, 011001, 011002 ] +"306043" = [ 041001, 008043, 015028, 008043, 013080, 041005, 041003, 022188, 041002, 106000, + 031000, 004024, 014002, 014002, 014012, 014004, 004024 ] +"307001" = [ 301031, 302011 ] +"307002" = [ 301032, 302011 ] +"307003" = [ 307001, 101000, 031001, 302005 ] +"307004" = [ 307002, 101000, 031001, 302005 ] +"307005" = [ 307001, 101004, 302005 ] +"307006" = [ 307002, 101004, 302005 ] +"307007" = [ 301031, 302012 ] +"307008" = [ 301032, 302012 ] +"307009" = [ 301031, 302013 ] +"307011" = [ 001063, 002001, 301011, 301012, 301024, 007006, 011001, 011016, 011017, 011002, + 011041, 007006, 012001, 012003, 010052, 020009 ] +"307012" = [ 103000, 031001, 008023, 005021, 020001 ] +"307013" = [ 106000, 031001, 001064, 008014, 020061, 008014, 020061, 020018 ] +"307014" = [ 101000, 031001, 020019 ] +"307015" = [ 101000, 031001, 302005, 020002 ] +"307016" = [ 101000, 031001, 020020 ] +"307017" = [ 101000, 031001, 011070 ] +"307018" = [ 008016, 102000, 031001, 008017, 301012, 104000, 031001, 007006, 011001, 011002, + 011041, 020009, 101000, 031001, 020001, 307014 ] +"307020" = [ 307011, 307014, 307016 ] +"307021" = [ 307011, 307012, 307013, 307014, 307015, 307016, 307017, 307018, 307015 ] +"307022" = [ 001015, 301011, 301012, 301022, 008021, 004025, 010004, 012001, 013003, 033038, + 008022, 106025, 002020, 001050, 005021, 007021, 015031, 015032, 008060, 015033, + 015034, 008060, 015033, 015034, 015035, 201131, 202129, 013016, 202000, 201000, + 015011 ] +"307024" = [ 301150, 001015, 001040, 008021, 301011, 301013, 301022, 010036, 025061, 010004, + 012001, 013003, 120000, 031000, 025060, 008021, 004025, 115000, 031001, 015079, + 015080, 008022, 033093, 015089, 015035, 102002, 008060, 015083, 201131, 202129, + 013016, 202000, 201000, 015011, 131000, 031000, 025060, 008021, 004025, 033093, + 125000, 031001, 002020, 001050, 001150, 202127, 304030, 202000, 005021, 007021, + 015038, 015039, 015090, 015081, 015082, 015079, 015089, 015035, 102002, 008060, + 015083, 015084, 015085, 015086, 015087, 015088, 015011 ] +"307030" = [ 015001, 015002 ] +"307031" = [ 008022, 008023, 015001, 008023, 015001, 008023, 015002 ] +"307041" = [ 301001, 001015, 301024, 301011, 301012, 301070, 307030 ] +"307042" = [ 301001, 001015, 301024, 301011, 301012, 008021, 004025, 301070, 307031 ] +"307043" = [ 301001, 001015, 301024, 301011, 301012, 301074, 307030 ] +"307044" = [ 301001, 001015, 301024, 301011, 301012, 008021, 004025, 301074, 307031 ] +"307045" = [ 001063, 008079, 002001, 301011, 301012, 301023, 007030, 007031, 007032, 011001, + 011016, 011017, 008054, 011083, 011084, 011002, 008054, 011085, 011086, 011041, + 008054, 007032, 012023, 012024, 007032, 010052, 020009 ] +"307046" = [ 020060, 102000, 031001, 005021, 020059 ] +"307047" = [ 105000, 031001, 008002, 020011, 020012, 020013, 020092, 020002, 020091 ] +"307048" = [ 008016, 102000, 031001, 008017, 301012, 112000, 031000, 007032, 011001, 008054, + 011083, 011084, 011002, 008054, 011085, 011086, 011041, 008054, 007032, 020009, + 101000, 031000, 020060, 307014, 307047 ] +"307049" = [ 102000, 031000, 022043, 022021 ] +"307050" = [ 101000, 031000, 020085, 102000, 031001, 001064, 020085, 105000, 031001, 001064, + 020086, 020087, 020088, 020089 ] +"307051" = [ 307045, 307046, 307013, 307014, 307047, 307016, 307017, 307049, 307050, 101000, + 031001, 307048 ] +"307052" = [ 001063, 008039, 301011, 301012, 008079, 008039, 301011, 301012, 008039, 301011, + 301012, 301023, 007030, 007031 ] +"307053" = [ 007032, 011001, 008054, 011083, 011084, 011002, 008054, 011085, 011086, 011041, + 008054, 007032, 020009, 020060, 307014, 307047 ] +"307054" = [ 007032, 008039, 004003, 004004, 008023, 012023, 008039, 004003, 004004, 008023, + 012023, 008023, 007032 ] +"307055" = [ 033045, 008016, 008039, 004003, 301012, 008039, 004003, 301012, 307053 ] +"307056" = [ 307052, 307053, 307054, 101000, 031001, 307055 ] +"307060" = [ 007061, 012030 ] +"307061" = [ 301031, 101005, 307060 ] +"307062" = [ 301032, 101005, 307060 ] +"307063" = [ 007061, 012130 ] +"307071" = [ 301090, 004074, 004023, 008023, 010004, 010051, 007004, 010009, 007032, 012101, + 002051, 004051, 012118, 004052, 012119, 013004, 008023, 012151, 007032, 102005, + 008050, 008020, 014032, 014033, 008050, 008020, 102018, 008052, 008022, 007032, + 008053, 004003, 012152, 008053, 004003, 012153, 008053, 004003, 008023, 012101, + 008053, 004003, 008023, 012101, 008023, 007032, 002002, 008053, 004003, 011046, + 008053, 004003, 004004, 004023, 007032, 013060, 013051, 004053, 008050, 008020, + 102006, 008052, 008022, 008053, 004003, 013052, 007032 ] +"307072" = [ 004001, 004001, 004002, 004003, 004004, 004074, 004022, 008023, 010004, 010051, + 007004, 010009, 007032, 012101, 002051, 004051, 012118, 004052, 012119, 013004, + 012151, 007032, 014032, 008023, 004001, 004001, 004002, 004003, 004004, 004022, + 007032, 008023, 013060, 004053, 008023, 102008, 008050, 008020 ] +"307073" = [ 307071, 307072 ] +"307074" = [ 301001, 004001, 004002, 301021, 007030, 007032, 112000, 031001, 004003, 004004, + 004024, 102003, 008023, 012101, 008023, 004004, 004024, 013060, 013012, 013013 + ] +"307075" = [ 301150, 301001, 301021, 007030, 008095, 008096, 008094, 301011, 004023, 301013, + 204008, 031021, 013060, 204000, 004023, 301013, 204008, 031021, 013012, 204000, + 004023, 301013, 204008, 031021, 013013, 204000, 007032, 107003, 004023, 301013, + 008023, 204008, 031021, 012101, 204000, 008023 ] +"307076" = [ 301090, 004074, 004023, 008023, 010004, 010051, 007004, 010009, 007032, 012101, + 002051, 004051, 012118, 004052, 012119, 013004, 008023, 012151, 007032, 102005, + 008050, 008020, 014032, 014033, 008050, 008020, 102018, 008052, 008022, 007032, + 008053, 004003, 012152, 008053, 004003, 012153, 008053, 004003, 008023, 012101, + 008053, 004003, 008023, 012101, 008023, 007032, 002002, 008053, 004003, 011046, + 008053, 004003, 004004, 004074, 004023, 007032, 013060, 013051, 004053, 008050, + 008020, 102006, 008052, 008022, 008053, 004003, 013052, 007032 ] +"307077" = [ 004001, 004001, 004002, 004003, 004004, 004074, 004022, 008023, 010004, 010051, + 007004, 010009, 007032, 012101, 002051, 004051, 012118, 004052, 012119, 013004, + 012151, 007032, 014032, 008023, 004001, 004001, 004002, 004003, 004004, 004074, + 004022, 007032, 008023, 013060, 004053, 008023, 102008, 008050, 008020 ] +"307078" = [ 307076, 307077 ] +"307079" = [ 301090, 302031, 302035, 302036, 101000, 031000, 302047, 008002, 101000, 031000, + 302048, 302037, 102000, 031000, 022061, 020058, 101000, 031000, 302056, 101000, + 031000, 302055, 302043, 302044, 101000, 031001, 302045, 101000, 031000, 302046 + ] +"307080" = [ 301090, 302031, 302035, 302036, 302047, 008002, 302048, 302037, 302043, 302044, + 101002, 302045, 302046 ] +"307081" = [ 301090, 302031, 302035, 302036, 302047, 008002, 302048, 302037, 012122, 013056, + 013057, 020101, 020102, 020103, 020104, 020105, 020106, 020107, 020108, 302043, + 302044, 101002, 302045, 302046 ] +"307082" = [ 301090, 302031, 302035, 302036, 302047, 008002, 302048, 302037, 012121, 012122, + 302043, 302044, 101002, 302045, 302046 ] +"307083" = [ 301090, 302031, 302035, 302036, 302047, 008002, 302048, 302037, 012122, 302043, + 302044, 101002, 302045, 302046 ] +"307084" = [ 301090, 302031, 302035, 302036, 302047, 008002, 302048, 302037, 020055, 101000, + 031001, 205001, 302043, 302044, 101002, 302045, 302046 ] +"307086" = [ 301090, 302031, 302035, 302036, 008002, 302037, 302066, 302043, 302044, 101002, + 302045 ] +"307087" = [ 301001, 002001, 301011, 301012, 301023, 007030, 007031, 302001, 010062, 007004, + 010009, 007032, 012101, 012103, 013003, 007032, 020001, 302004, 101000, 031001, + 302005 ] +"307088" = [ 020003, 004024, 020004, 020005, 004024, 002004, 013033, 102002, 004024, 014031, + 102002, 004024, 013011, 007032, 004024, 012111, 004024, 012112, 007032, 002002, + 008021, 004025, 011001, 011002, 008021 ] +"307089" = [ 307087, 307088 ] +"307090" = [ 301092, 302031, 302035, 302036, 302047, 008002, 302048, 302037, 302043, 302044, + 101002, 302045, 302046 ] +"307091" = [ 301089, 301090, 008010, 301091, 302001, 007004, 010009, 302072, 103000, 031000, + 101005, 307063, 007061, 101000, 031000, 302069, 007032, 007033, 105000, 031000, + 020031, 020032, 002038, 022043, 302021, 101000, 031000, 302078, 101000, 031000, + 302073, 101000, 031000, 302074, 101000, 031000, 302175, 102000, 031000, 004025, + 302076, 302071, 302077, 007033, 101000, 031000, 302079, 007032, 101000, 031000, + 302080, 101000, 031000, 302081, 101000, 031000, 302082, 102000, 031000, 004025, + 013059, 101000, 031000, 302083, 033005, 033006 ] +"307092" = [ 301150, 301001, 208040, 001019, 208000, 301011, 301012, 301021, 007030, 001023, + 108000, 031000, 007031, 204018, 031021, 010004, 010051, 007004, 010009, 204000, + 115000, 031001, 007032, 008010, 204018, 031021, 012101, 012103, 202129, 201132, + 013003, 201000, 202000, 013009, 204000, 007032, 008010, 107000, 031001, 007061, + 204018, 031021, 012130, 013111, 204000, 007061, 105000, 031000, 033041, 204018, + 031021, 020001, 204000, 113000, 031000, 204018, 031021, 020010, 204000, 107000, + 031001, 008002, 204018, 031021, 020011, 020013, 204000, 008002, 105000, 031000, + 204018, 031021, 020062, 013013, 204000, 105000, 031000, 004025, 204018, 031021, + 020003, 204000, 105000, 031000, 004025, 204018, 031021, 013011, 204000, 115000, + 031001, 007032, 008021, 004025, 204018, 031021, 011001, 011002, 204000, 008021, + 204018, 031021, 011043, 011041, 204000, 007032, 105000, 031000, 004025, 204018, + 031021, 014031, 204000, 110000, 031000, 004025, 204018, 031021, 014002, 014002, + 014004, 014028, 014029, 014030, 204000, 113000, 031000, 004025, 002071, 002072, + 204018, 031021, 014072, 204000, 002071, 002072, 204018, 031021, 014072, 204000 + ] +"307096" = [ 301090, 301089, 008010, 301091, 302084, 302085, 033005, 033006 ] +"307101" = [ 301089, 001019, 002001, 301011, 301012, 301021, 007030, 007032, 012101, 007032, + 002177, 020062, 013013 ] +"307102" = [ 301089, 001018, 001015, 001104, 001105, 001106, 003017, 003018, 003019, 301011, + 301012, 301021, 007030, 007032, 012101, 012103, 013003, 007032, 020001, 109000, + 031001, 003016, 012128, 102000, 031001, 007061, 012129, 007061, 013116, 020138, + 004025, 020024, 013055, 020021, 013011, 007032, 008021, 004025, 011001, 011002, + 008021, 004025, 011043, 011041, 033005 ] +"307103" = [ 301150, 307101, 013117, 003028, 013163 ] +"307182" = [ 301090, 302031, 302035, 302036, 302047, 008002, 302048, 302037, 012120, 012122, + 302043, 302044, 101002, 302045, 302046 ] +"308001" = [ 301033, 302011, 022042 ] +"308002" = [ 301034, 302011, 022042 ] +"308003" = [ 301035, 302011, 022042 ] +"308004" = [ 301036, 302011, 022042 ] +"308005" = [ 308004, 302024 ] +"308006" = [ 010004, 010061, 010063, 011001, 011002, 012004, 013003, 022042 ] +"308007" = [ 301055, 302011, 007062, 022042 ] +"308009" = [ 301093, 302001, 302054, 008002, 302055, 302057, 302060 ] +"308010" = [ 001011, 113000, 031001, 301011, 301012, 301021, 004080, 022049, 004080, 022059, + 004080, 022005, 002042, 022032, 002042, 004080 ] +"308011" = [ 001011, 002001, 301011, 301012, 301023, 007030, 007031, 004074, 004023, 008023, + 010051, 007032, 007033, 012101, 013004, 007032, 007033, 302056, 008023, 004003, + 004004, 004023, 007032, 013060, 013051, 004053, 007032 ] +"308012" = [ 004001, 004001, 004002, 004003, 004004, 004074, 004022, 008023, 010051, 007032, + 007033, 012101, 013004, 007032, 007033, 302056, 008023, 004001, 004001, 004002, + 004003, 004004, 004022, 007032, 008023, 013060, 004053, 008023 ] +"308013" = [ 308011, 308012 ] +"308014" = [ 101000, 031000, 301018, 003001, 301093, 208032, 001079, 208000, 302062, 302063, + 101000, 031000, 302092, 101000, 031000, 306033, 101000, 031000, 306034, 101000, + 031000, 306043 ] +"308015" = [ 001003, 001020, 001005, 001011, 001007, 001001, 001002, 002044, 002045, 301011, + 301012, 301021, 022063, 022076, 022077, 022094, 025043, 022078, 105002, 002046, + 022070, 022071, 022073, 022074, 127000, 031001, 002046, 008090, 022102, 008090, + 022084, 120000, 031001, 022080, 022108, 022086, 022087, 022088, 022089, 105000, + 031001, 008090, 022104, 008090, 022186, 022187, 105000, 031001, 008090, 022106, + 008090, 022186, 022187 ] +"308016" = [ 001003, 001020, 001005, 001011, 001007, 001001, 001002, 002044, 002045, 301011, + 301012, 301021, 022063, 022076, 022077, 022094, 025044, 022079, 105002, 002046, + 022070, 022072, 022073, 022075, 127000, 031001, 002046, 008090, 022103, 008090, + 022084, 120000, 031001, 022081, 022108, 022086, 022087, 022088, 022089, 105000, + 031001, 008090, 022105, 008090, 022186, 022187, 105000, 031001, 008090, 022107, + 008090, 022186, 022187 ] +"308017" = [ 301056, 302001, 302052, 101000, 031000, 302056, 302064, 302053, 101000, 031000, + 302004, 101000, 031000, 302005, 101000, 031000, 302038, 101000, 031000, 306039 + ] +"308018" = [ 301150, 301093, 302001, 302072, 101000, 031000, 302056, 101000, 031000, 302064 + ] +"308021" = [ 001011, 002001, 301011, 301012, 301023, 007030, 007031, 004074, 004023, 008023, + 010051, 007032, 007033, 012101, 013004, 007032, 007033, 302056, 008023, 004003, + 004004, 004074, 004023, 007032, 013060, 013051, 004053, 007032 ] +"308022" = [ 004001, 004001, 004002, 004003, 004004, 004074, 004022, 008023, 010051, 007032, + 007033, 012101, 013004, 007032, 007033, 302056, 008023, 004001, 004001, 004002, + 004003, 004004, 004074, 004022, 007032, 008023, 013060, 004053, 008023 ] +"308023" = [ 308021, 308022 ] +"309001" = [ 301037, 101000, 031001, 303011 ] +"309002" = [ 301038, 101000, 031001, 303011 ] +"309003" = [ 301037, 101000, 031001, 303012 ] +"309004" = [ 301038, 101000, 031001, 303012 ] +"309005" = [ 301037, 302004, 101000, 031001, 303013 ] +"309006" = [ 301038, 302004, 101000, 031001, 303013 ] +"309007" = [ 301037, 302004, 101000, 031001, 303014 ] +"309008" = [ 301038, 302004, 101000, 031001, 303014 ] +"309011" = [ 301039, 101000, 031001, 303011 ] +"309012" = [ 301039, 101000, 031001, 303012 ] +"309013" = [ 301039, 302004, 101000, 031001, 303013 ] +"309014" = [ 301039, 302004, 101000, 031001, 303014 ] +"309015" = [ 301040, 101000, 031001, 303011 ] +"309016" = [ 301040, 101000, 031001, 303012 ] +"309017" = [ 301040, 302004, 101000, 031001, 303013 ] +"309018" = [ 301040, 302004, 101000, 031001, 303014 ] +"309019" = [ 301031, 002003, 101000, 031001, 303011 ] +"309020" = [ 301031, 002003, 104000, 031001, 007003, 011003, 011004, 011005 ] +"309021" = [ 301001, 005001, 006001, 007030, 301014, 002003, 002121, 112000, 031001, 007007, + 301021, 011003, 011110, 011004, 011111, 033002, 011006, 011112, 033002, 010071, + 027079 ] +"309022" = [ 301001, 005001, 006001, 007030, 301014, 002003, 002121, 110000, 031001, 007007, + 301021, 012007, 012008, 033002, 011006, 011112, 033002, 010071, 027079 ] +"309023" = [ 301001, 005001, 006001, 007030, 301014, 002003, 302004, 302005, 114000, 031001, + 007007, 301021, 101000, 031001, 002121, 015063, 015064, 015065, 015066, 015067, + 015068, 015069, 015070, 015071, 015072, 033002, 010071, 027079 ] +"309024" = [ 301132, 201151, 202130, 002121, 202000, 201000, 008021, 004025, 109000, 031002, + 007007, 301021, 011003, 011004, 033002, 011006, 033002, 010071, 027079 ] +"309025" = [ 301132, 201151, 202130, 002121, 202000, 201000, 008021, 004025, 106000, 031002, + 007007, 301021, 012007, 033002, 010071, 027079 ] +"309026" = [ 301132, 302004, 302005, 008092, 008093, 008021, 004025, 201138, 202126, 002121, + 202000, 201000, 115000, 031002, 007007, 301021, 015073, 015064, 015074, 015066, + 015075, 015068, 015076, 015077, 015078, 015072, 033002, 010071, 027079 ] +"309027" = [ 301132, 008043, 025061, 302004, 302005, 008092, 008093, 008021, 004025, 118000, + 031001, 002090, 115000, 031002, 007007, 301021, 015073, 015064, 015074, 015066, + 015075, 015068, 015076, 015077, 015078, 015072, 033002, 010071, 027079 ] +"309030" = [ 015004, 015005, 104000, 031001, 004015, 008006, 007004, 015003 ] +"309031" = [ 015004, 015005, 104000, 031001, 004025, 008006, 007004, 015003 ] +"309040" = [ 301075, 301076, 309030 ] +"309041" = [ 307041, 301075, 301076, 309030 ] +"309042" = [ 307042, 301075, 301076, 309030 ] +"309043" = [ 307043, 301075, 301076, 309030 ] +"309044" = [ 307044, 301075, 301076, 309030 ] +"309045" = [ 301075, 301076, 309031 ] +"309046" = [ 307041, 301075, 301076, 309031 ] +"309047" = [ 307042, 301075, 301076, 309031 ] +"309048" = [ 307043, 301075, 301076, 309031 ] +"309049" = [ 307044, 301075, 301076, 309031 ] +"309050" = [ 301110, 301113, 301114, 101000, 031002, 303050, 101000, 031001, 303051 ] +"309051" = [ 301110, 301113, 301114, 101000, 031002, 303052, 101000, 031001, 303053 ] +"309052" = [ 301111, 301113, 301114, 302049, 022043, 101000, 031002, 303054, 101000, 031001, + 303051 ] +"309053" = [ 301112, 301113, 301114, 101000, 031002, 303054, 101000, 031001, 303051 ] +"309054" = [ 301001, 001011, 301011, 301012, 301021, 007030, 007031, 007007, 004023, 004059, + 115000, 031001, 008001, 008023, 007004, 010009, 012101, 012103, 008023, 011001, + 011002, 008023, 011019, 008050, 008020, 008050, 008020 ] +"309055" = [ 301111, 025061, 001081, 001082, 002067, 002095, 002096, 002097, 002081, 002082, + 002084, 002191, 301113, 301114, 010004, 302032, 007032, 002002, 011001, 011002, + 007032, 020003, 302049, 022043, 101000, 031002, 303055 ] +"309056" = [ 301150, 301111, 301128, 301113, 008091, 301021, 007007, 008091, 101000, 031002, + 303056, 101000, 031001, 303051 ] +"309057" = [ 301150, 301111, 301128, 301113, 301114, 302049, 022043, 101000, 031002, 303056, + 101000, 031001, 303051 ] +"309060" = [ 301123, 301121, 302050, 303040 ] +"309061" = [ 301120, 008041, 301122, 201131, 202129, 025069, 007004, 202000, 201000, 033007, + 033035, 033015, 013009, 033007, 033035, 033015, 002013, 012101, 033007, 033035, + 033015 ] +"309062" = [ 301120, 008041, 301122, 005001, 033035, 033015, 006001, 033035, 033015, 007007, + 033035, 033015, 011003, 033035, 033015, 011004, 033035, 033015, 033007 ] +"309063" = [ 301120, 008041, 301122, 005001, 033035, 033015, 006001, 033035, 033015, 007007, + 033035, 033015, 011003, 033035, 033015, 011004, 033035, 033015, 033007 ] +"309064" = [ 301120, 008041, 301122, 201131, 202129, 104002, 025069, 007004, 033035, 033015, + 013003, 033035, 033015, 202000, 201000, 104002, 002013, 012101, 033035, 033015, + 012103, 033035, 033015, 010009, 033035, 033015 ] +"309065" = [ 301120, 008041, 301122, 005001, 033035, 033015, 006001, 033035, 033015, 007007, + 033035, 033015, 011003, 033035, 033015, 011004, 033035, 033015 ] +"309066" = [ 301120, 008041, 301122, 008040, 201131, 202129, 025069, 007004, 013003, 202000, + 201000, 002013, 012101, 012103, 010009, 010007, 011002, 011001 ] +"309070" = [ 001035, 001032, 001015, 001063, 301001, 301011, 301012, 301021, 207001, 010001, + 207000, 008086, 007030, 025031, 008021, 004014, 010004, 010051, 010009, 020010, + 013095, 128000, 031002, 113000, 031000, 008086, 007004, 011001, 011002, 012101, + 012102, 012103, 010009, 103000, 031000, 011021, 011022, 011005, 104000, 031000, + 008086, 007006, 011001, 011002, 105000, 031000, 008086, 007006, 012101, 012102, + 012103 ] +"309071" = [ 301001, 002014, 002003, 301113, 301114, 301023, 007030, 007007, 103000, 031001, + 007009, 011001, 011002 ] +"310001" = [ 301042, 303031, 303032, 101026, 303025 ] +"310002" = [ 301042, 303031, 303032, 101009, 303023 ] +"310003" = [ 301042, 303031, 303032, 101006, 303023 ] +"310004" = [ 301042, 303031, 303032, 101003, 303024 ] +"310005" = [ 301042, 303031, 303033, 101000, 031001, 303025 ] +"310006" = [ 301042, 303031, 303033, 101000, 031001, 303023 ] +"310007" = [ 301042, 303031, 303033, 101000, 031001, 303024 ] +"310008" = [ 310011, 101019, 310012, 002150, 025079, 025080, 033032, 014045 ] +"310009" = [ 310011, 101015, 310012 ] +"310010" = [ 310011, 101005, 310012 ] +"310011" = [ 008070, 001033, 001034, 008070, 001033, 001034, 001007, 002048, 005040, 025075, + 201133, 005041, 201000, 005043, 025070, 033030, 033031, 004001, 004002, 004003, + 004004, 004005, 202131, 201138, 004006, 201000, 202000, 005001, 006001, 202126, + 007001, 202000, 007024, 005021, 007025, 005022, 033033, 002151, 012064, 002151, + 012064, 002151, 012064, 002151, 012064 ] +"310012" = [ 002150, 025076, 025077, 025078, 033032, 201132, 202129, 012063, 202000, 201000 + ] +"310013" = [ 001007, 005040, 004001, 004002, 004003, 004004, 004005, 004006, 005001, 006001, + 007025, 005043, 025085, 201131, 202129, 002150, 008023, 008072, 014027, 008072, + 014027, 002150, 008023, 008072, 014027, 008072, 014027, 002150, 008023, 008072, + 014027, 008072, 014027, 202000, 201000, 201132, 202129, 002150, 008023, 008072, + 012063, 008072, 012063, 002150, 008023, 008072, 012063, 008072, 012063, 008023, + 008072, 012063, 008072, 012063, 002150, 008023, 008072, 012063, 008072, 012063, + 202000, 201000 ] +"310014" = [ 301072, 303041, 304011 ] +"310015" = [ 301072, 007024, 010002, 303041, 101003, 304032, 002152, 002024, 007004, 007004, + 013003, 101003, 304033 ] +"310016" = [ 301072, 007024, 010002, 303041, 101012, 304032, 002152, 002024, 007004, 007004, + 013003, 101012, 304033 ] +"310018" = [ 001007, 005040, 004001, 004043, 004004, 004005, 004006, 207002, 026030, 207000, + 005002, 006002, 033072, 007025, 005022, 207002, 015001, 207000, 008003, 207001, + 010004, 207000, 008003, 008003, 033042, 207001, 007004, 207000, 207002, 015001, + 207000, 008003, 207002, 020081, 207000, 020065, 008029, 207004, 015030, 207000, + 008075 ] +"310019" = [ 001007, 002019, 301011, 301013, 301023, 007025, 008021, 007025, 008021, 007025, + 008021, 008029, 005040, 008075, 008003, 010004, 008003, 207002, 015001, 207000, + 033070, 015030, 207002, 020081, 207000, 008003, 033042, 007004, 207002, 015001, + 207000, 008003, 113021, 007004, 007004, 207002, 008021, 015005, 008021, 015005, + 033007, 207000, 008026, 101020, 025143, 008026, 008043, 109015, 007004, 008090, + 207006, 015008, 207000, 008090, 207002, 033007, 207000, 008043, 033071, 108008, + 202124, 201107, 002071, 201000, 202000, 207002, 020081, 207000 ] +"310020" = [ 310022, 301011, 301013, 301021, 304034, 310021 ] +"310021" = [ 108000, 031001, 201131, 202129, 007004, 007004, 202000, 201000, 015020, 010002 + ] +"310022" = [ 001007, 002019, 001033, 002172 ] +"310023" = [ 301072, 030021, 030022, 008012, 007024, 007025, 010002, 101012, 304032, 105002, + 002152, 002024, 007004, 007004, 013003, 101012, 304033 ] +"310024" = [ 301072, 030021, 030022, 008012, 007024, 007025, 010002, 101003, 304032, 105002, + 002152, 002024, 007004, 007004, 013003, 101003, 304033 ] +"310025" = [ 001007, 008021, 004001, 004002, 004003, 004004, 004005, 201138, 202131, 004006, + 202000, 201000, 201132, 005041, 201000, 201129, 005043, 201000, 005002, 006002, + 013040, 020029, 104024, 005042, 012163, 021083, 021084, 115003, 004001, 004002, + 004003, 201142, 202131, 004026, 202000, 201000, 005001, 006001, 201138, 202129, + 007001, 202000, 201000, 008021, 004001, 004002, 004003, 004004, 004005, 005040, + 101003, 012070, 025054, 101004, 025055, 008007, 104028, 005002, 006002, 002111, + 005021 ] +"310026" = [ 310022, 025060, 008021, 301011, 301012, 201138, 202131, 004006, 202000, 201000, + 033039, 033007, 304030, 304031, 002020, 001050, 202127, 304030, 202000, 304031, + 201133, 202131, 004016, 202000, 201000, 301021, 304030, 010035, 005021, 010036, + 113000, 031002, 301021, 005021, 108000, 031001, 002121, 007040, 015037, 008023, + 201125, 015037, 201000, 008023, 033007, 108000, 031002, 007007, 015036, 008023, + 201123, 015036, 201000, 008023, 033007, 116000, 031002, 007009, 010004, 012001, + 013001, 008023, 201120, 010004, 201000, 201122, 012001, 201000, 201123, 013001, + 201000, 008023, 033007, 008003, 007009, 010004, 008023, 201120, 010004, 201000, + 008023, 033007 ] +"310027" = [ 301071, 301011, 301013, 301021, 030021, 030022, 010002, 304036, 002152, 002167, + 101011, 304035 ] +"310028" = [ 301071, 301011, 301013, 301021, 030021, 030022, 010002, 304036, 002152, 002167, + 101011, 304037 ] +"310029" = [ 110000, 031001, 201138, 202130, 007004, 007004, 202000, 201000, 015020, 010002, + 012101, 013098 ] +"310030" = [ 310022, 301011, 301013, 301021, 304034, 310029 ] +"310050" = [ 310051, 310052, 101000, 031002, 310053, 101004, 310054, 020010, 310052, 101015, + 310053, 310052, 101005, 310053 ] +"310051" = [ 001007, 005040, 201133, 005041, 201000, 201132, 025070, 201000, 202126, 007001, + 202000, 007025, 005022, 102009, 002151, 012064 ] +"310052" = [ 002019, 301011, 301012, 202131, 201138, 004006, 201000, 202000, 301021, 007024, + 005021, 005043 ] +"310053" = [ 201134, 005042, 201000, 025076, 033032, 012163 ] +"310054" = [ 201134, 005042, 201000, 025076, 033032, 201131, 202129, 102002, 008023, 014027, + 008023, 202000, 201000 ] +"310055" = [ 310051, 310052, 102020, 025076, 025052, 101000, 031002, 025050 ] +"310060" = [ 001007, 001033, 002019, 002020, 301011, 301012, 207003, 004006, 207000, 304030, + 301021, 007024, 005021, 007025, 005022, 008075, 201133, 005041, 201000, 005045, + 005043, 005040, 010001, 201129, 007002, 201000, 202127, 201125, 021166, 201000, + 202000, 008012, 020010, 020014, 002165, 033075, 107003, 008076, 006029, 006029, + 025140, 025141, 033076, 033077, 008076, 033078, 033003, 104000, 031002, 201133, + 005042, 201000, 014044 ] +"310061" = [ 001007, 001033, 001034, 002019, 002020, 301011, 301012, 207003, 004006, 207000, + 005040, 005041, 005043, 033079, 033080, 033078, 301021, 201129, 007002, 201000, + 007024, 005021, 007025, 005022, 025075, 111000, 031002, 005042, 202131, 002153, + 002154, 202000, 002104, 012066, 012163, 012158, 012159, 033081 ] +"310062" = [ 001007, 001033, 001034, 002019, 002020, 301011, 301012, 207003, 004006, 207000, + 005040, 201133, 005041, 005043, 201000, 008076, 033082, 301021, 201129, 007002, + 201000, 007024, 005021, 007025, 005022, 008072, 008029, 105000, 031002, 005042, + 002155, 033083, 014043, 015042 ] +"310063" = [ 001007, 001033, 001034, 002019, 002020, 301011, 301012, 207003, 004006, 207000, + 005040, 201133, 005041, 005043, 201000, 033082, 301021, 201129, 007002, 201000, + 007024, 005021, 007025, 005022, 008075, 008013, 008072, 033084, 007062, 033086, + 022043, 007062, 007062, 033086, 022043 ] +"310064" = [ 001007, 001033, 001034, 002019, 002020, 301011, 301012, 207003, 004006, 207000, + 005040, 201133, 005041, 005043, 201000, 033082, 301021, 201129, 007002, 201000, + 007024, 005021, 007025, 005022, 008075, 008029, 008046, 033085, 033086, 015049, + 033086, 102011, 002155, 015062 ] +"310065" = [ 001007, 001033, 001034, 002019, 002020, 301011, 301012, 207003, 004006, 207000, + 005040, 033082, 301021, 201129, 007002, 201000, 007024, 005021, 007025, 005022, + 008075, 033071, 033070, 020021, 015045, 015046, 008065, 033087, 008003, 010004, + 008003, 207002, 015001, 207000, 105012, 010040, 010004, 207003, 015005, 207000, + 008046, 107019, 010040, 010004, 008090, 207006, 015008, 207000, 008090 ] +"310066" = [ 001007, 001033, 001034, 002019, 002020, 301011, 301012, 207003, 004006, 207000, + 005040, 033082, 301021, 201129, 007002, 201000, 007024, 005021, 007025, 005022, + 008075, 020081, 207004, 015030, 207000, 020065, 015041, 033086, 033087, 033088, + 008003, 207001, 007004, 207000, 008003, 207002, 015001, 207000, 008003, 033042, + 207001, 007004, 207000, 207002, 015001, 207000, 008003, 001032, 207002, 015001, + 207000 ] +"310067" = [ 001033, 001034, 025061, 025062, 001007, 002153, 001012, 201138, 002026, 002027, + 201000, 002028, 002029, 002161, 002164, 002023, 008012, 008013, 001124, 005001, + 006001, 004001, 004002, 004003, 004004, 004005, 004006, 004086, 011001, 011002, + 011003, 011004, 002162, 007004, 012001, 020014, 007024, 001023, 104000, 031001, + 002162, 007004, 012001, 020014, 113000, 031001, 004086, 002020, 001007, 002019, + 005042, 002153, 005040, 007024, 005021, 002162, 007004, 012001, 020014, 119000, + 031001, 004086, 004086, 005001, 006001, 011003, 011004, 011113, 025148, 103000, + 031001, 008023, 011003, 011004, 008023, 103000, 031001, 020111, 020112, 020114, + 001033, 008021, 011095, 011096, 007004, 008021, 011095, 011096, 007004, 008021, + 008086, 011095, 011096, 007004, 008086, 102004, 001032, 033007, 008092, 011003, + 011004, 007004, 008092, 033066, 020081, 020012, 020056, 117000, 031001, 008023, + 020016, 008092, 008003, 012001, 008003, 020016, 008092, 025149, 020016, 020014, + 013093, 013109, 040038, 008011, 014050, 008011, 008023 ] +"310068" = [ 008070, 001033, 001034, 001007, 002019, 012064, 005040, 201136, 005041, 201000, + 005043, 301011, 301012, 201138, 202131, 004006, 202000, 201000, 005001, 006001, + 202126, 007001, 202000, 010007, 007024, 005021, 007025, 005022, 013040, 012101, + 201131, 202129, 011011, 202000, 201000, 201130, 202129, 011012, 202000, 201000, + 020029, 020010, 020014, 013162, 014050 ] +"310069" = [ 005042, 201139, 002155, 201000, 025077, 025078, 033007, 201132, 202129, 012063, + 202000, 201000 ] +"310070" = [ 310068, 101013, 310069 ] +"310071" = [ 310068, 101015, 310069 ] +"310072" = [ 310068, 101026, 310069 ] +"310077" = [ 001033, 001034, 025061, 025062, 001007, 002153, 001012, 201138, 002026, 002027, + 201000, 002028, 002029, 002161, 002164, 002023, 008012, 008013, 001124, 005001, + 006001, 004001, 004002, 004003, 004004, 004005, 004006, 004086, 002162, 007004, + 011001, 011002, 011003, 011004, 012001, 020014, 007024, 001023, 104000, 031001, + 002162, 007004, 012001, 020014, 113000, 031001, 004086, 002020, 001007, 002019, + 005042, 002153, 005040, 007024, 005021, 002162, 007004, 012001, 020014, 119000, + 031001, 004086, 004086, 005001, 006001, 011003, 011004, 011113, 025148, 103000, + 031001, 008023, 011003, 011004, 008023, 103000, 031001, 020111, 020112, 020114, + 001033, 008021, 007004, 011095, 011096, 008021, 007004, 011095, 011096, 008021, + 008086, 007004, 011095, 011096, 008086, 102004, 001044, 033007, 008092, 007004, + 011003, 011004, 008092, 033066, 020081, 020012, 020056, 117000, 031001, 008023, + 020016, 008092, 008003, 012001, 008003, 020016, 008092, 025149, 020016, 020014, + 013093, 013109, 040038, 008011, 014050, 008011, 008023 ] +"311001" = [ 301051, 007002, 012001, 011001, 011002, 011031, 011032, 011033, 020041 ] +"311002" = [ 301065, 301066, 311003, 311004 ] +"311003" = [ 010070, 011001, 011002, 012001, 013002 ] +"311004" = [ 101000, 031000, 011034, 101000, 031000, 011035, 101000, 031000, 011075, 101000, + 031000, 011076, 101000, 031000, 033025, 101000, 031000, 033026 ] +"311005" = [ 001008, 001023, 301021, 301011, 301013, 007010, 008009, 011001, 011002, 011031, + 011036, 012101, 033025 ] +"311006" = [ 007010, 011001, 011002, 002064, 012101, 012103 ] +"311007" = [ 007010, 301021, 011001, 011002, 002064, 012101, 012103 ] +"311008" = [ 001008, 301011, 301013, 301021, 008004, 101000, 031001, 311006 ] +"311009" = [ 001008, 301011, 301013, 301021, 008004, 101000, 031001, 311007 ] +"311010" = [ 001008, 001023, 001006, 001110, 001111, 001112, 204002, 031021, 301011, 301013, + 301021, 007010, 010053, 008009, 011001, 011002, 002064, 011100, 011101, 011102, + 011103, 011104, 012101, 002170, 201144, 202133, 013002, 202000, 201000, 201135, + 202130, 013003, 202000, 201000, 101000, 031000, 012103, 033026, 101000, 031000, + 020042, 103000, 031000, 020043, 020044, 020045, 101000, 031000, 033025, 103000, + 031001, 011075, 011076, 011039, 102000, 031000, 011037, 011077, 103000, 031000, + 011034, 011035, 011036, 204000, 119000, 031001, 301011, 301013, 301021, 007007, + 011105, 204007, 031021, 011076, 011075, 204000, 011106, 011107, 011108, 011109, + 012101, 011001, 201130, 011084, 201000 ] +"311011" = [ 001023, 008004, 301011, 301013, 005002, 006002, 007004, 011001, 011002, 012101, + 106000, 031001, 008046, 201139, 202126, 015026, 202000, 201000, 106000, 031001, + 008046, 201138, 202130, 015026, 202000, 201000, 015052, 015053, 015054, 015055, + 007004, 007004, 013099, 013100, 013101 ] +"311012" = [ 301150, 001008, 001111, 001112, 301011, 301013, 301021, 008004, 110000, 031002, + 301011, 301013, 311007, 201144, 202133, 013002, 202000, 201000, 013003, 033026 + ] +"312001" = [ 301043, 304001 ] +"312002" = [ 301043, 304002 ] +"312003" = [ 301042, 304003 ] +"312004" = [ 301042, 304004 ] +"312005" = [ 301042, 020014 ] +"312006" = [ 301044, 304005 ] +"312007" = [ 301042, 304006 ] +"312010" = [ 001007, 005040, 002021, 005041, 004001, 004043 ] +"312011" = [ 202131, 201149, 004006, 201000, 202126, 010002, 202000, 005043, 005053 ] +"312012" = [ 202129, 201132, 101019, 012063, 201000, 202000 ] +"312013" = [ 005042, 202129, 201135, 012063, 201000, 202000 ] +"312014" = [ 312010, 312011, 105056, 301023, 005042, 005052, 312012, 312013 ] +"312015" = [ 109011, 301023, 005042, 005052, 202129, 201132, 101004, 012063, 202000, 201000 + ] +"312016" = [ 312010, 312011, 312015 ] +"312017" = [ 109008, 301023, 005042, 005052, 202129, 201132, 101003, 012063, 202000, 201000 + ] +"312018" = [ 312010, 312011, 312017 ] +"312019" = [ 301047, 301048, 015015, 029002, 021076, 106012, 201129, 006030, 201000, 102012, + 005030, 021075, 021066 ] +"312020" = [ 301047, 301048, 015015, 029002, 021076, 104012, 006030, 102012, 005030, 021075, + 021066 ] +"312021" = [ 301047, 101003, 301049, 011012, 011011, 021067 ] +"312022" = [ 301047, 008022, 011012, 011050, 022070, 022026, 312041, 010050, 021068, 021071, + 021072, 021073, 312042, 021062, 015011 ] +"312023" = [ 301047, 103003, 008022, 012061, 022050, 021069, 021085 ] +"312024" = [ 312020, 008060, 008022, 008060, 008022, 025014, 022101, 022097, 022098, 022099, + 022100 ] +"312025" = [ 312019, 008060, 008022, 008060, 008022, 025014, 022101, 022097, 022098, 022099, + 022100 ] +"312026" = [ 301046, 301011, 301013, 301023, 312031, 101004, 312030, 021110, 301023, 321027, + 021111, 301023, 321027, 021112, 301023, 321027, 021113, 301023, 321027 ] +"312027" = [ 301047, 105009, 301023, 007021, 012061, 007021, 012061, 021085, 021070 ] +"312028" = [ 301046, 301011, 301013, 301023, 008025, 201136, 004006, 201000, 312031, 312032, + 101004, 312030, 101002, 312033, 021110, 301023, 321028, 021111, 301023, 321028, + 021112, 301023, 321028, 021113, 301023, 321028 ] +"312029" = [ 301046, 301011, 301013, 301023, 008025, 201136, 004006, 201000, 005034, 201129, + 006034, 201000, 033055, 011081, 011082, 021101, 021102, 021103, 312032, 101004, + 312030, 101002, 312033, 021110, 301023, 321028, 021111, 301023, 321028, 021112, + 301023, 321028, 021113, 301023, 321028 ] +"312030" = [ 201130, 202129, 011012, 202000, 201000, 011052, 201135, 202130, 011011, 202000, + 201000, 011053, 021104 ] +"312031" = [ 005034, 006034, 021109, 011081, 011082, 021101, 021102, 021103 ] +"312032" = [ 021120, 021121, 013055, 021122 ] +"312033" = [ 002104, 008022, 012063, 012065 ] +"312034" = [ 301046, 301011, 301013, 301023, 008025, 201136, 004006, 201000, 312031, 312032, + 101004, 312030, 101002, 312033, 103018, 021110, 301023, 321028 ] +"312035" = [ 001007, 001031, 002048, 202124, 002026, 002027, 202000, 005040, 004001, 004002, + 004003, 004004, 004005, 004006, 005002, 006002, 005034, 006031, 201129, 006034, + 201000, 005021, 002111, 012063, 021095, 021096, 021097, 021030, 021105, 033056 + ] +"312041" = [ 201141, 202130, 007001, 201000, 202000 ] +"312042" = [ 021077, 021078, 021079, 021080, 021081, 021082 ] +"312045" = [ 001007, 002019, 001096, 025061, 005040, 301011, 301013, 301021, 007002, 012180, + 012181, 012182, 012183, 012184, 012185, 002174, 021086, 012186, 021087, 012187, + 033043 ] +"312050" = [ 001007, 002019, 001096, 025061, 005040, 301011, 301013, 301021, 007025, 005022, + 010080, 027080, 008003, 007004, 013093, 008003, 201131, 202129, 007004, 007004, + 202000, 201000, 013095 ] +"312051" = [ 001007, 002019, 001096, 025061, 005040, 008075, 301011, 301013, 301021, 001012, + 201131, 001013, 201000, 010032, 010033, 010034, 007002, 008012, 025110, 025111, + 025102, 002104, 025103, 025104, 025105, 025106, 025107, 025108, 002111, 002121, + 002026, 002027, 021130, 021131, 021132, 021133, 021064, 025014, 021134, 107018, + 005030, 105024, 201130, 006030, 201000, 021135, 021136, 033044 ] +"312052" = [ 001007, 002019, 001096, 025061, 005040, 025120, 025121, 025124, 025125, 025122, + 025123, 301011, 301013, 301021, 007002, 002119, 033047, 010081, 010082, 010083, + 010084, 002116, 002117, 002118, 002156, 002157, 014055, 022150, 022151, 022152, + 022153, 022154, 022155, 022156, 022157, 022158, 022159, 021137, 021138, 021139, + 021140, 021141, 021142, 010085, 010086, 010087, 010088, 010089, 010090, 010091, + 010092, 010093, 011002, 025126, 025127, 025128, 025129, 025130, 025131, 025132, + 025133, 025134, 025135, 025136, 025137, 013096, 013097, 011095, 011096, 012188, + 012189, 002158, 002159, 033052, 033053, 021143, 021144 ] +"312053" = [ 001007, 002019, 001096, 025061, 005040, 008075, 301011, 301013, 301021, 001012, + 201131, 001013, 201000, 010032, 010033, 010034, 007002, 008012, 025110, 025111, + 025102, 002104, 025103, 025104, 025105, 025106, 025107, 025108, 011001, 011002, + 022160, 025138, 201130, 202129, 022021, 202000, 201000, 033048, 033049, 002026, + 002027, 021130, 021131, 021132, 021133, 025014, 106036, 005030, 104024, 201130, + 006030, 201000, 022161, 033044 ] +"312055" = [ 005033, 005040, 006034, 010095, 021157 ] +"312056" = [ 025060, 001032, 011082, 011081, 020095, 020096, 021155, 201133, 021101, 021102, + 201000 ] +"312057" = [ 201130, 202129, 011012, 202000, 201000, 201131, 202129, 011011, 202000, 201000, + 021156, 021104 ] +"312058" = [ 301125, 301011, 301013, 301021, 312055, 021150, 101003, 321030 ] +"312059" = [ 312056, 101000, 031001, 312057 ] +"312060" = [ 025060, 025062, 040001, 040002, 021062, 021151, 021152, 021153, 021154, 021062, + 021088, 040003, 040004, 040005, 040006, 040007, 020065, 040008, 040009, 040010 + ] +"312061" = [ 312058, 312060, 312059 ] +"312062" = [ 001007, 002019, 301011, 301013, 301021, 020065, 008023, 020065, 008023 ] +"312070" = [ 001007, 002019, 001144, 001124, 030010, 301011, 301013, 301021, 007012, 015012, + 012165, 012166, 012167, 012168, 027010, 028010, 002099, 013048, 025081, 025082, + 025083, 025084, 012080, 012081, 012082, 025174, 033028 ] +"312071" = [ 001007, 002019, 002139, 001096, 001040, 025061, 005040, 005044, 008075, 008077, + 004001, 004002, 004003, 004004, 004005, 004006, 005001, 006001, 010081, 022156, + 022142, 101020, 022149, 022143, 022144, 021137, 101020, 021181, 021138, 021180, + 021177, 021178, 021179, 010079, 010085, 010086, 010087, 010089, 010090, 010091, + 010092, 010093, 011097, 021093, 101020, 021182, 033053, 022151, 022145, 022148, + 022146, 022147, 025126, 025128, 025127, 021176, 025132, 025133, 025182, 025183, + 025180, 025184, 025181, 033080 ] +"313009" = [ 021001, 101000, 031001, 021001 ] +"313010" = [ 021036, 101000, 031001, 021036 ] +"313031" = [ 006002, 006012, 101000, 031002, 030001 ] +"313032" = [ 005002, 005012, 101000, 031002, 313031 ] +"313041" = [ 006002, 110000, 031001, 104000, 031001, 006012, 101000, 031012, 030001, 006012, + 101000, 031001, 030001 ] +"313042" = [ 005002, 005012, 101000, 031002, 313041 ] +"313043" = [ 006002, 005002, 005012, 112000, 031001, 110000, 031001, 104000, 031001, 006012, + 101000, 031011, 030001, 006012, 101000, 031001, 030001 ] +"315001" = [ 001011, 301011, 301012, 301023, 306001 ] +"315002" = [ 001011, 301011, 301012, 301023, 306004 ] +"315003" = [ 001087, 001085, 001086, 002036, 002148, 002149, 022055, 022056, 022067, 301011, + 301012, 301021, 008080, 033050, 109000, 031002, 007065, 008080, 033050, 022045, + 008080, 033050, 022064, 008080, 033050 ] +"315004" = [ 001079, 001011, 001103, 001087, 001019, 001080, 005036, 001036, 001013, 001012, + 301011, 301012, 301021, 007032, 007033, 002002, 011002, 011001, 007032, 007033, + 012101, 012103, 007032, 007033, 302021, 002031, 002030, 022005, 022032, 022063, + 008080, 033050, 022178, 022177, 022067, 008041, 026021, 026022, 026023, 022068, + 025061, 008041, 008080, 002171, 302090, 002171, 002032, 315005 ] +"315005" = [ 106000, 031002, 007063, 008080, 033050, 022043, 008080, 033050 ] +"315007" = [ 301003, 001019, 001103, 001087, 001036, 001115, 001080, 005036, 301011, 301012, + 301021, 001079, 001023, 022063, 101000, 031000, 302001, 101000, 031000, 302021, + 101000, 031000, 302052, 101000, 031000, 302059, 022067, 002171, 302090, 306033, + 306034, 002171, 022067, 002038, 022067, 022068, 002171, 002033, 002032, 022056, + 003011, 306035, 107000, 031000, 002032, 003010, 002031, 002040, 022056, 003011, + 306036, 104000, 031000, 002032, 003012, 003011, 306037 ] +"315008" = [ 301126, 306038, 101000, 031000, 302091, 101000, 031000, 302082, 101000, 031000, + 306039, 101000, 031000, 306040, 102000, 031000, 002005, 306041, 102000, 031000, + 002005, 306004, 101000, 031000, 306005 ] +"315009" = [ 001087, 001019, 002149, 008021, 301011, 301012, 301021, 208016, 001051, 208000, + 002148, 001012, 001014, 033022, 033023, 033027, 025026, 002034, 022060, 007070, + 002190, 008021, 301011, 301012, 002005, 022043, 002033, 022059, 008029, 013115, + 103000, 031000, 002005, 306004, 002005, 010004, 010051, 102000, 031000, 007033, + 012101, 101000, 031000, 306042, 101000, 031000, 306039 ] +"315010" = [ 112000, 031001, 201144, 202133, 022080, 022096, 022069, 202000, 201000, 042011, + 042012, 042013, 042014, 042015 ] +"315011" = [ 301150, 001087, 001036, 001085, 001086, 003001, 208032, 001079, 208000, 301011, + 301012, 301021, 001012, 001014, 011104, 103000, 031000, 007031, 306038, 012161, + 101000, 031000, 306034, 101000, 031000, 306039, 101000, 031000, 306033, 101000, + 031000, 306041, 101000, 031000, 306004, 101000, 031000, 306005, 105000, 031000, + 041001, 008043, 015028, 008043, 013080, 104000, 031000, 041005, 041003, 022188, + 041002, 101000, 031000, 306040, 104000, 031000, 008021, 004025, 014017, 014018 + ] +"315013" = [ 301150, 001087, 208032, 001019, 208000, 003001, 022067, 001051, 002148, 112000, + 031001, 008021, 301011, 301012, 301021, 001012, 001014, 033022, 033023, 033027, + 007063, 022045, 008021, 107000, 031001, 301011, 301012, 301021, 001079, 001023, + 022056, 306035 ] +"315023" = [ 301150, 201129, 001087, 201000, 208032, 001019, 208000, 003001, 022067, 001051, + 002148, 112000, 031001, 008021, 301011, 301012, 301021, 001012, 001014, 033022, + 033023, 033027, 007063, 022045, 008021, 107000, 031001, 301011, 301012, 301021, + 001079, 001023, 022056, 306035 ] +"316001" = [ 301011, 004004, 301023, 001021, 002041, 019001, 010051, 019002, 019003, 019004 + ] +"316002" = [ 008021, 004001, 004002, 004003, 004004, 004005, 001033, 008021, 004001, 004002, + 004003, 004004, 004005, 007002, 007002 ] +"316003" = [ 110000, 031001, 008011, 008007, 104000, 031001, 005002, 006002, 010002, 011002, + 008007, 008011 ] +"316004" = [ 111000, 031001, 008011, 008007, 007002, 007002, 102000, 031001, 005002, 006002, + 011031, 008007, 008011 ] +"316005" = [ 108000, 031001, 008005, 008007, 005002, 006002, 001026, 019001, 008007, 008005 + ] +"316006" = [ 112000, 031001, 008011, 008007, 007002, 007002, 102000, 031001, 005002, 006002, + 020011, 020012, 008007, 008011 ] +"316007" = [ 110000, 031001, 008011, 008007, 104000, 031001, 005002, 006002, 019005, 019006, + 008007, 008011 ] +"316008" = [ 111000, 031001, 008001, 008007, 008023, 103000, 031001, 005002, 006002, 010002, + 008023, 008007, 008001 ] +"316009" = [ 111000, 031001, 008011, 008007, 007002, 007002, 102000, 031001, 005002, 006002, + 020041, 008007, 008011 ] +"316010" = [ 107000, 031001, 008011, 008007, 001022, 005002, 006002, 008007, 008011 ] +"316011" = [ 117000, 031001, 008011, 001022, 008007, 102000, 031001, 005002, 006002, 008021, + 004001, 004002, 004003, 004004, 004005, 020090, 008021, 008007, 008011 ] +"316020" = [ 001033, 001025, 001027, 301011, 301012 ] +"316021" = [ 301023, 002041, 019001, 019007, 019005, 019006, 019008, 008005, 010004, 008005, + 010004, 019007, 008005, 008021, 004075, 011040, 019007, 105004, 005021, 005021, + 102002, 019003, 019004 ] +"316022" = [ 001032, 002041, 019001, 019010, 118000, 031001, 008021, 004014, 008005, 301023, + 019005, 019006, 010004, 011041, 008021, 004075, 011040, 019008, 105004, 005021, + 005021, 102002, 019003, 019004 ] +"316026" = [ 316020, 316021 ] +"316027" = [ 316020, 316022 ] +"316030" = [ 301014, 001037, 010064, 008019, 001062, 008019, 001065, 008019, 001062, 008019 + ] +"316031" = [ 008021, 301011, 301012, 301027, 019005, 019006, 020028, 008021 ] +"316032" = [ 008021, 301011, 301012, 301027, 008021 ] +"316033" = [ 008021, 301011, 301012, 101000, 031001, 301027, 008021 ] +"316034" = [ 008079, 316030, 008011, 001022, 008007, 301023, 008007, 020090, 316031, 101000, + 031000, 316032, 101000, 031001, 316033, 008011, 008079 ] +"316035" = [ 008079, 316030, 008011, 020023, 020021, 020008, 316031, 008011, 008079 ] +"316036" = [ 008079, 316030, 008011, 001027, 316031, 101000, 031000, 316032, 101000, 031001, + 316033, 008011, 008079 ] +"316037" = [ 008079, 316030, 008011, 011031, 316031, 008011, 008079 ] +"316038" = [ 008079, 316030, 008011, 020041, 020021, 316031, 008011, 008079 ] +"316039" = [ 008079, 316030, 008011, 020024, 316031, 008011, 008079 ] +"316040" = [ 316030, 008079, 301014, 001037, 010064, 008079 ] +"316050" = [ 301001, 301011, 301012, 002160, 008005, 005002, 006002, 008005, 019100, 019005, + 019006, 019101, 019102, 019103, 019104, 019105 ] +"316052" = [ 301005, 301011, 301012, 001007, 025150, 122000, 031001, 001027, 019150, 019106, + 008005, 005002, 006002, 008005, 019107, 019005, 019006, 019108, 019109, 019110, + 019111, 019112, 019113, 019114, 019115, 019116, 019117, 019118, 019119 ] +"316060" = [ 301011, 301012, 005002, 006002, 019005, 019006, 005002, 006002, 005002, 006002, + 004074, 020048, 011041, 013055 ] +"316061" = [ 301011, 301012, 005002, 006002, 019005, 019006, 102000, 031001, 005002, 006002, + 102000, 031001, 005002, 006002, 004074, 020048, 011041, 013055 ] +"316071" = [ 301014, 101000, 031002, 316075, 101000, 031002, 316076 ] +"316072" = [ 301014, 101000, 031002, 316077, 101000, 031002, 316078, 101000, 031002, 316079 + ] +"316073" = [ 301014, 101000, 031002, 316080, 101000, 031002, 316081 ] +"316074" = [ 001039, 008021, 301014, 301027, 008021 ] +"316075" = [ 008079, 008041, 316074, 020006, 033042, 020013, 033042, 020001, 020025, 020026, + 008041, 008079 ] +"316076" = [ 008079, 008041, 316074, 020006, 020025, 020026, 008041, 008079 ] +"316077" = [ 008079, 008011, 316074, 011031, 008011, 008079 ] +"316078" = [ 008079, 008041, 316074, 033042, 011012, 008041, 008079 ] +"316079" = [ 008079, 008011, 316074, 020023, 020024, 008011, 008079 ] +"316080" = [ 008079, 008011, 316074, 020041, 008011, 008079 ] +"316081" = [ 008079, 008041, 316074, 008041, 008079 ] +"316082" = [ 001033, 001034, 001032, 001025, 001027, 001090, 001091, 001092, 301011, 301012, + 008005, 301023, 008005, 301023, 010051, 008005, 301023, 011012, 107003, 019003, + 105004, 005021, 005021, 201131, 019004, 201000, 116000, 031001, 008021, 004024, + 008005, 301023, 010051, 008005, 301023, 011012, 107003, 019003, 105004, 005021, + 005021, 201131, 019004, 201000 ] +"318001" = [ 301025, 024011 ] +"318003" = [ 301026, 024005, 024004, 024021 ] +"318004" = [ 301025, 004023, 013011, 024005, 024004, 024022 ] +"321001" = [ 002101, 002114, 002105, 002106, 002107, 002121 ] +"321003" = [ 021051, 021014, 021017, 021030 ] +"321004" = [ 301031, 002003, 101000, 031001, 321003 ] +"321005" = [ 025004, 002121, 002122, 002123, 002124, 002125, 002126, 002127, 002128, 002129, + 002130, 002131 ] +"321006" = [ 025001, 025002, 025003, 025005 ] +"321007" = [ 025009, 025010, 025011, 025012, 025013, 025015, 025016, 025017 ] +"321008" = [ 025006, 025007, 025008 ] +"321009" = [ 025018, 025019 ] +"321010" = [ 002101, 007002, 002102, 002103, 002104, 002105, 002106, 002107, 002108, 002109, + 002110, 002132, 002133 ] +"321011" = [ 030031, 030032, 029002 ] +"321012" = [ 101000, 031001, 002135 ] +"321021" = [ 002003, 002101, 201130, 002106, 201000, 201132, 202130, 002121, 202000, 201000, + 201133, 202129, 025001, 202000, 201000 ] +"321022" = [ 007007, 204001, 031021, 011001, 204000, 011002, 204001, 031021, 011006, 204000, + 021030 ] +"321023" = [ 007007, 021091, 021030, 202129, 021014, 201129, 021017, 202000, 201000 ] +"321024" = [ 007007, 204001, 031021, 012007, 011006, 204000, 021030 ] +"321025" = [ 007007, 021091, 021030, 202129, 021014, 201129, 021017, 202000, 201000, 021092, + 021030, 025092, 201129, 202129, 021017, 202000, 201000 ] +"321026" = [ 007007, 204001, 031021, 012007, 025091, 011071, 011072, 011073, 011074, 204000 + ] +"321027" = [ 021118, 202129, 201132, 002112, 201000, 201131, 002111, 201000, 202000, 002104, + 021105, 021106, 021107, 021114, 021115, 021116, 008018, 021117 ] +"321028" = [ 021118, 202129, 201132, 002112, 201000, 201131, 002111, 201000, 202000, 002104, + 021123, 021106, 021107, 021114, 021115, 021116, 008018, 021117 ] +"321030" = [ 008085, 202129, 201131, 002111, 201000, 202000, 002134, 021062, 021063, 021158, + 021159, 021160, 021161, 021162, 021163, 021164, 021165, 021166 ] +"321031" = [ 001007, 002019, 001033, 001034, 301011, 301013, 301021, 010033, 008043, 025139, + 002153, 106000, 031002, 007071, 021007, 021008, 021009, 021010, 033003 ] +"322028" = [ 001007, 002019, 004001, 004002, 004003, 004004, 004005, 004006, 005001, 006001, + 027001, 028001, 027001, 028001, 027001, 028001, 027001, 028001, 010001, 014019, + 007025, 010080, 005023, 020010, 008003, 007004, 014026, 020014, 013093, 105000, + 031001, 007004, 007004, 008043, 008044, 015021 ] +"340001" = [ 001007, 001031, 002019, 002020, 004001, 004002, 004003, 004004, 004005, 202131, + 201138, 004006, 201000, 202000, 005001, 006001, 007024, 005021, 007025, 005022, + 005043, 005040, 201133, 005041, 201000, 201132, 025070, 201000, 202126, 007001, + 202000, 033060, 033061, 033062, 033063, 033064, 033065, 101010, 340002, 101087, + 340003, 002019, 025051, 101007, 340004 ] +"340002" = [ 025140, 025141, 025142 ] +"340003" = [ 104100, 201136, 005042, 201000, 014046 ] +"340004" = [ 005060, 005061, 025085, 105006, 005042, 025142, 014047, 025142, 014048 ] +"340005" = [ 001007, 002019, 001096, 025061, 005044, 005040, 001030, 004001, 004002, 004003, + 004004, 004005, 004007, 005001, 006001, 008029, 008074, 008077, 040011, 025097, + 025095, 025098, 025099, 021144, 025096, 040012, 040013, 021169, 022151, 022162, + 022163, 025160, 025133, 022156, 022164, 022165, 022166, 021137, 021138, 022167, + 021139, 021118, 021145, 021146, 021147, 022168, 022169, 022170, 025161, 025162, + 022171, 022172, 022173, 022174, 021170, 021171, 022175, 021172, 021118, 021173, + 021174, 021175, 002153, 012063, 002153, 012063, 002153, 012063, 013090, 013091, + 007002, 011097, 011098, 007002, 011095, 011096, 010096, 010081, 010082, 010083, + 010101, 025132, 025163, 025126, 025128, 025164, 010085, 010097, 010086, 010087, + 010092, 010088, 010089, 010098, 010099, 010090, 010100, 010093, 025127, 040014 + ] +"340007" = [ 001007, 001031, 002019, 002020, 004001, 004002, 004003, 004004, 004005, 202131, + 201138, 004006, 201000, 202000, 005001, 006001, 007024, 005021, 007025, 005022, + 005043, 005040, 201133, 005041, 201000, 201132, 025070, 201000, 202126, 007001, + 202000, 103003, 025140, 025141, 033060, 033061, 033062, 033063, 033064, 033065, + 040020, 101010, 340002, 101087, 340003, 002019, 025051, 101007, 340004, 020081, + 008029, 020083, 008029, 040018, 040019, 040021, 040022 ] +"340008" = [ 001007, 001031, 002019, 002020, 004001, 004002, 004003, 004004, 004005, 202131, + 201138, 004006, 201000, 202000, 005001, 006001, 007024, 005021, 007025, 005022, + 005043, 005040, 201133, 005041, 201000, 201132, 025070, 201000, 202126, 007001, + 202000, 103003, 025140, 025141, 033060, 033061, 033062, 033063, 033064, 033065, + 040020, 101010, 340002, 104000, 031002, 201136, 005042, 201000, 014046, 108003, + 025140, 025141, 040026, 040016, 025062, 101000, 031002, 040017, 002019, 025051, + 101007, 340004, 020081, 008029, 020083, 008029, 040018, 040019, 040021, 040022 + ] +"340009" = [ 001007, 001031, 002019, 002020, 301011, 301013, 005040, 201136, 005041, 201000, + 025071, 005001, 005001, 006001, 006001, 107064, 106032, 008012, 008013, 008065, + 008072, 013039, 040015 ] +"340010" = [ 001007, 002019, 001096, 025061, 005044, 005040, 001030, 004001, 004002, 004003, + 004004, 004005, 004007, 005001, 006001, 008029, 008074, 008077, 040011, 025097, + 025095, 025098, 025099, 021144, 025096, 040012, 040013, 021169, 040023, 040024, + 040025, 022151, 022162, 022163, 025160, 025133, 022156, 022164, 022165, 022166, + 021137, 021138, 022167, 021139, 021118, 021145, 021146, 021147, 022168, 022169, + 022170, 025161, 025162, 022171, 022172, 022173, 022174, 021170, 021171, 022175, + 021172, 021118, 021173, 021174, 021175, 002153, 012063, 002153, 012063, 002153, + 012063, 013090, 013091, 007002, 011097, 011098, 007002, 011095, 011096, 010096, + 010081, 010082, 010083, 010101, 025132, 025163, 025126, 025128, 025164, 010085, + 010097, 010086, 010087, 010092, 010088, 010089, 010098, 010099, 010090, 010100, + 010093, 025127, 040014, 010102 ] +"340011" = [ 001007, 002019, 001096, 025061, 005044, 005040, 001030, 004001, 004002, 004003, + 004004, 004005, 004007, 005001, 006001, 008029, 008077, 040011, 025097, 025112, + 025113, 021148, 021169, 040024, 040025, 002153, 022189, 022191, 022130, 025167, + 025166, 022190, 022131, 022132, 022133, 021183, 021184, 022134, 021185, 021118, + 021186, 021187, 021188, 002153, 012063, 002153, 012063, 013090, 013160, 007002, + 011097, 007002, 011095, 011096, 010096, 010081, 010082, 010083, 010101, 002153, + 025165, 025126, 025128, 025164, 010085, 010086, 010087, 010092, 010088, 010089, + 010098, 010099, 010090, 010100, 010093, 025127, 040014, 010102 ] +"340012" = [ 001007, 002019, 008091, 005001, 006001, 007002, 005063, 005064, 005066, 005041, + 005067, 301011, 301012, 004007, 008091, 005001, 006001, 107000, 031001, 005042, + 002153, 002104, 040028, 007024, 040027, 012063 ] +"340013" = [ 001007, 002019, 001033, 001034, 004001, 004002, 004003, 004004, 004005, 004007, + 005068, 005070, 005069, 040036, 008091, 005001, 006001, 004016, 008091, 005001, + 006001, 004016, 008091, 005001, 006001, 004016, 008091, 007071, 005021, 007021, + 040035, 008091, 007071, 005021, 007021, 040035, 008091, 007071, 005021, 007021, + 040035, 040029, 040030, 040031, 025187, 010004, 012001, 040037, 040032, 040033, + 040034 ] +"340015" = [ 001007, 002019, 301011, 301012, 004007, 201133, 005041, 201000, 201130, 005043, + 201000, 207001, 005002, 006002, 207000, 040027, 013040, 021120, 207003, 102003, + 002186, 013155, 207000, 033003 ] +"340016" = [ 301129, 301130, 301131, 202134, 007001, 202000, 101000, 031002, 340002, 101000, + 031002, 304039, 101000, 031002, 304040 ] +"340017" = [ 001007, 002019, 005044, 001096, 005040, 001040, 025061, 025182, 025183, 025181, + 025184, 301011, 301013, 004007, 301021, 005063, 005064, 005066, 010081, 010082, + 008075, 025090, 008029, 201137, 202129, 006021, 202000, 201000, 010087, 025096, + 040012, 008077, 104002, 002153, 012063, 012065, 040013, 007002, 011098, 013090, + 013091, 025164, 025095, 040023, 025113, 008074, 025190, 021144, 025191, 021143, + 013055, 021169, 010101, 015012, 007002, 011097, 040024, 007002, 025126, 025128, + 040011, 007002, 011095, 011096, 010088, 010089, 010090, 010092, 010093, 010098, + 010099, 010100, 025127, 040014, 010085, 010086, 010096, 010103, 010102, 022080, + 008076, 022189, 022191, 022130, 025165, 025166, 025167, 021183, 021184, 022134, + 021122, 022190, 022131, 022132, 022133, 021186, 021187, 021188, 021185, 025112, + 025113, 033092, 008076, 022189, 022191, 022130, 025165, 025166, 025167, 021183, + 021184, 022134, 021122, 022190, 022131, 022132, 022133, 021186, 021187, 021188, + 021185, 025112, 025113, 033092, 025190, 011097, 013090, 013091, 021143, 021184, + 025128, 025163, 025164, 010102, 022189, 022191, 022130, 025166, 021183, 021184, + 022134, 022190, 022131, 022132, 025112, 025113, 033092, 008049, 022080, 134021, + 301011, 301013, 004007, 301021, 010081, 010082, 008029, 201137, 202129, 006021, + 202000, 201000, 025191, 021071, 010085, 040011, 010102, 022189, 022146, 025165, + 025167, 021183, 022190, 022133, 021177, 021185, 013164, 202126, 022046, 202000, + 013117, 013013, 025112, 033092 ] +"340018" = [ 301129, 301130, 301131, 007072, 040074, 104000, 031002, 201136, 005042, 201000, + 014044 ] +"340019" = [ 340020, 340021, 340022, 340023 ] +"340020" = [ 001007, 002019, 005044, 001096, 005040, 001040, 025061, 025182, 025183, 025181, + 025184, 008075, 025090, 301011, 301013, 004007, 301021, 005063, 005064, 005066, + 010081, 010082 ] +"340021" = [ 040012, 008077, 104000, 031001, 002153, 012063, 012065, 040013, 007002, 011098 + ] +"340022" = [ 008029, 201137, 202129, 006021, 202000, 201000, 010087, 040024, 007002, 025126, + 025128, 040011, 007002, 011095, 011096, 010088, 010089, 010090, 010092, 010093, + 010098, 010099, 010100, 025127, 040014, 001030, 010085, 001030, 010085, 010086, + 010096, 010103, 021169, 013055, 025165 ] +"340023" = [ 025095, 040023, 008074, 340024, 340024, 340024, 340025 ] +"340024" = [ 022080, 008076, 025190, 010102, 022189, 022191, 022130, 025167, 025163, 015012, + 025164, 013090, 013091, 025166, 007002, 011097, 021183, 021184, 022134, 021122, + 021186, 021187, 021188, 201131, 021185, 201000, 022179, 022131, 022132, 022133, + 021144, 025191, 021143, 010101, 025112, 025113, 033092 ] +"340025" = [ 008049, 022080, 008076, 025190, 146021, 301011, 301013, 004007, 301021, 010081, + 010082, 008029, 201137, 202129, 006021, 202000, 201000, 025191, 021071, 001030, + 010085, 001030, 010085, 040011, 010088, 010089, 025164, 007002, 025126, 025128, + 010102, 022189, 025167, 025163, 021183, 201131, 021185, 201000, 022179, 022133, + 022146, 021189, 013163, 202126, 022046, 202000, 013117, 013013, 025112, 025113, + 033092 ] +"340026" = [ 001007, 002019, 001033, 001034, 301011, 301013, 301021, 010033, 008043, 025139, + 002155, 112000, 031002, 007071, 033003, 201136, 015074, 015066, 015075, 015068, + 201000, 015076, 015070, 015078, 015072, 107003, 005069, 104000, 031002, 201135, + 015073, 015064, 201000 ] diff --git a/definitions/common/missing_values_grid.def b/definitions/common/missing_values_grid.def new file mode 100644 index 000000000..cad6110ed --- /dev/null +++ b/definitions/common/missing_values_grid.def @@ -0,0 +1,5 @@ +# (C) Copyright 2005- ECMWF. + +#meta numberOfMissing vector(computeStatistics,3) : dump; +meta numberOfMissing count_missing(bitmap,unusedBitsInBitmap,numberOfDataPoints) : dump; +alias numberOfMissingValues=numberOfMissing; diff --git a/definitions/common/statistics_grid.def b/definitions/common/statistics_grid.def index f3351175d..d1a67ad34 100644 --- a/definitions/common/statistics_grid.def +++ b/definitions/common/statistics_grid.def @@ -8,15 +8,11 @@ meta computeStatistics statistics(missingValue,values); meta maximum vector(computeStatistics,0) : dump; meta minimum vector(computeStatistics,1) : dump; meta average vector(computeStatistics,2) : dump; -#meta numberOfMissing vector(computeStatistics,3) : dump; -meta numberOfMissing count_missing(bitmap,unusedBitsInBitmap,numberOfDataPoints) : dump; meta standardDeviation vector(computeStatistics,4) : dump; meta skewness vector(computeStatistics,5) : dump; meta kurtosis vector(computeStatistics,6) : dump; meta isConstant vector(computeStatistics,7) : dump; -alias numberOfMissingValues=numberOfMissing; - alias statistics.avg = average; alias statistics.max = maximum; alias statistics.min = minimum; diff --git a/definitions/grib1/data.grid_ieee.def b/definitions/grib1/data.grid_ieee.def index f0d5f6212..60ed5d21c 100644 --- a/definitions/grib1/data.grid_ieee.def +++ b/definitions/grib1/data.grid_ieee.def @@ -43,3 +43,4 @@ if( bitmapPresent || !GDSPresent ) { meta numberOfCodedValues number_of_values_data_raw_packing(values,precision); template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib1/data.grid_second_order.def b/definitions/grib1/data.grid_second_order.def index 1809dd2fa..a62dc7dba 100644 --- a/definitions/grib1/data.grid_second_order.def +++ b/definitions/grib1/data.grid_second_order.def @@ -174,3 +174,4 @@ if(bitmapPresent) { meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib1/data.grid_second_order_constant_width.def b/definitions/grib1/data.grid_second_order_constant_width.def index 8042255b4..1333a3243 100644 --- a/definitions/grib1/data.grid_second_order_constant_width.def +++ b/definitions/grib1/data.grid_second_order_constant_width.def @@ -148,3 +148,4 @@ transient numberOfCodedValues = numberOfSecondOrderPackedValues; meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib1/data.grid_second_order_general_grib1.def b/definitions/grib1/data.grid_second_order_general_grib1.def index 6f5ef7c8a..0e5106867 100644 --- a/definitions/grib1/data.grid_second_order_general_grib1.def +++ b/definitions/grib1/data.grid_second_order_general_grib1.def @@ -147,3 +147,4 @@ transient numberOfCodedValues = numberOfSecondOrderPackedValues; meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib1/data.grid_second_order_row_by_row.def b/definitions/grib1/data.grid_second_order_row_by_row.def index e5c96e3e8..465ebdb6d 100644 --- a/definitions/grib1/data.grid_second_order_row_by_row.def +++ b/definitions/grib1/data.grid_second_order_row_by_row.def @@ -94,3 +94,4 @@ transient numberOfCodedValues = numberOfSecondOrderPackedValues; meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib1/data.grid_simple.def b/definitions/grib1/data.grid_simple.def index af33d1438..8d973e0bb 100644 --- a/definitions/grib1/data.grid_simple.def +++ b/definitions/grib1/data.grid_simple.def @@ -68,3 +68,4 @@ meta numberOfCodedValues number_of_coded_values(bitsPerValue,offsetBeforeData,of meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy; meta unpackedError simple_packing_error(zero,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib1/data.grid_simple_matrix.def b/definitions/grib1/data.grid_simple_matrix.def index a9b2ba6e7..5f8543e25 100644 --- a/definitions/grib1/data.grid_simple_matrix.def +++ b/definitions/grib1/data.grid_simple_matrix.def @@ -177,3 +177,4 @@ meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalSca meta numberOfCodedValues number_of_coded_values(bitsPerValue,offsetBeforeData,offsetAfterData,halfByte,numberOfValues) : dump; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib1/grid.192.78.3.10.table b/definitions/grib1/grid.192.78.3.10.table old mode 100755 new mode 100644 diff --git a/definitions/grib1/grid.192.78.3.9.table b/definitions/grib1/grid.192.78.3.9.table old mode 100755 new mode 100644 diff --git a/definitions/grib1/grid_definition_192.78.def b/definitions/grib1/grid_definition_192.78.def old mode 100755 new mode 100644 diff --git a/definitions/grib1/local/edzw/2.0.3.table b/definitions/grib1/local/edzw/2.0.3.table old mode 100755 new mode 100644 diff --git a/definitions/grib1/local/edzw/5.table b/definitions/grib1/local/edzw/5.table old mode 100755 new mode 100644 diff --git a/definitions/grib1/local/edzw/generatingProcessIdentifier.table b/definitions/grib1/local/edzw/generatingProcessIdentifier.table old mode 100755 new mode 100644 diff --git a/definitions/grib1/localConcepts/ecmf/cfName.def b/definitions/grib1/localConcepts/ecmf/cfName.def index 73c986045..205319839 100644 --- a/definitions/grib1/localConcepts/ecmf/cfName.def +++ b/definitions/grib1/localConcepts/ecmf/cfName.def @@ -449,12 +449,12 @@ table2Version = 190 ; indicatorOfParameter = 164 ; } -#Surface solar radiation downwards +#Surface short-wave (solar) radiation downwards 'surface_downwelling_shortwave_flux_in_air' = { table2Version = 128 ; indicatorOfParameter = 169 ; } -#Surface solar radiation downwards +#Surface short-wave (solar) radiation downwards 'surface_downwelling_shortwave_flux_in_air' = { table2Version = 190 ; indicatorOfParameter = 169 ; @@ -519,72 +519,72 @@ table2Version = 190 ; indicatorOfParameter = 174 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'surface_net_downward_shortwave_flux' = { table2Version = 128 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'surface_net_downward_shortwave_flux' = { table2Version = 160 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'surface_net_downward_shortwave_flux' = { table2Version = 170 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'surface_net_downward_shortwave_flux' = { table2Version = 190 ; indicatorOfParameter = 176 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'surface_net_upward_longwave_flux' = { table2Version = 128 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'surface_net_upward_longwave_flux' = { table2Version = 160 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'surface_net_upward_longwave_flux' = { table2Version = 170 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'surface_net_upward_longwave_flux' = { table2Version = 190 ; indicatorOfParameter = 177 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'toa_net_upward_shortwave_flux' = { table2Version = 128 ; indicatorOfParameter = 178 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'toa_net_upward_shortwave_flux' = { table2Version = 160 ; indicatorOfParameter = 178 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'toa_net_upward_shortwave_flux' = { table2Version = 190 ; indicatorOfParameter = 178 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'toa_outgoing_longwave_flux' = { table2Version = 128 ; indicatorOfParameter = 179 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'toa_outgoing_longwave_flux' = { table2Version = 160 ; indicatorOfParameter = 179 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'toa_outgoing_longwave_flux' = { table2Version = 190 ; indicatorOfParameter = 179 ; @@ -664,12 +664,12 @@ table2Version = 128 ; indicatorOfParameter = 206 ; } -#Surface net solar radiation, clear sky +#Surface net short-wave (solar) radiation, clear sky 'surface_net_downward_shortwave_flux_assuming_clear_sky' = { table2Version = 128 ; indicatorOfParameter = 210 ; } -#Surface net thermal radiation, clear sky +#Surface net long-wave (thermal) radiation, clear sky 'surface_net_downward_longwave_flux_assuming_clear_sky' = { table2Version = 128 ; indicatorOfParameter = 211 ; diff --git a/definitions/grib1/localConcepts/ecmf/cfVarName.def b/definitions/grib1/localConcepts/ecmf/cfVarName.def index c9c3b4748..781ea67a0 100644 --- a/definitions/grib1/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib1/localConcepts/ecmf/cfVarName.def @@ -1294,12 +1294,12 @@ table2Version = 190 ; indicatorOfParameter = 168 ; } -#Surface solar radiation downwards +#Surface short-wave (solar) radiation downwards 'ssrd' = { table2Version = 128 ; indicatorOfParameter = 169 ; } -#Surface solar radiation downwards +#Surface short-wave (solar) radiation downwards 'ssrd' = { table2Version = 190 ; indicatorOfParameter = 169 ; @@ -1379,82 +1379,82 @@ table2Version = 190 ; indicatorOfParameter = 174 ; } -#Surface thermal radiation downwards +#Surface long-wave (thermal) radiation downwards 'strd' = { table2Version = 128 ; indicatorOfParameter = 175 ; } -#Surface thermal radiation downwards +#Surface long-wave (thermal) radiation downwards 'strd' = { table2Version = 190 ; indicatorOfParameter = 175 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'ssr' = { table2Version = 128 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'ssr' = { table2Version = 160 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'ssr' = { table2Version = 170 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'ssr' = { table2Version = 190 ; indicatorOfParameter = 176 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'str' = { table2Version = 128 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'str' = { table2Version = 160 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'str' = { table2Version = 170 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'str' = { table2Version = 190 ; indicatorOfParameter = 177 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'tsr' = { table2Version = 128 ; indicatorOfParameter = 178 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'tsr' = { table2Version = 160 ; indicatorOfParameter = 178 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'tsr' = { table2Version = 190 ; indicatorOfParameter = 178 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'ttr' = { table2Version = 128 ; indicatorOfParameter = 179 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'ttr' = { table2Version = 160 ; indicatorOfParameter = 179 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'ttr' = { table2Version = 190 ; indicatorOfParameter = 179 ; @@ -1749,12 +1749,12 @@ table2Version = 128 ; indicatorOfParameter = 209 ; } -#Surface net solar radiation, clear sky +#Surface net short-wave (solar) radiation, clear sky 'ssrc' = { table2Version = 128 ; indicatorOfParameter = 210 ; } -#Surface net thermal radiation, clear sky +#Surface net long-wave (thermal) radiation, clear sky 'strc' = { table2Version = 128 ; indicatorOfParameter = 211 ; @@ -5879,6 +5879,361 @@ table2Version = 213 ; indicatorOfParameter = 150 ; } +#Random pattern 51 for SPP scheme +'spp51' = { + table2Version = 213 ; + indicatorOfParameter = 151 ; + } +#Random pattern 52 for SPP scheme +'spp52' = { + table2Version = 213 ; + indicatorOfParameter = 152 ; + } +#Random pattern 53 for SPP scheme +'spp53' = { + table2Version = 213 ; + indicatorOfParameter = 153 ; + } +#Random pattern 54 for SPP scheme +'spp54' = { + table2Version = 213 ; + indicatorOfParameter = 154 ; + } +#Random pattern 55 for SPP scheme +'spp55' = { + table2Version = 213 ; + indicatorOfParameter = 155 ; + } +#Random pattern 56 for SPP scheme +'spp56' = { + table2Version = 213 ; + indicatorOfParameter = 156 ; + } +#Random pattern 57 for SPP scheme +'spp57' = { + table2Version = 213 ; + indicatorOfParameter = 157 ; + } +#Random pattern 58 for SPP scheme +'spp58' = { + table2Version = 213 ; + indicatorOfParameter = 158 ; + } +#Random pattern 59 for SPP scheme +'spp59' = { + table2Version = 213 ; + indicatorOfParameter = 159 ; + } +#Random pattern 60 for SPP scheme +'spp60' = { + table2Version = 213 ; + indicatorOfParameter = 160 ; + } +#Random pattern 61 for SPP scheme +'spp61' = { + table2Version = 213 ; + indicatorOfParameter = 161 ; + } +#Random pattern 62 for SPP scheme +'spp62' = { + table2Version = 213 ; + indicatorOfParameter = 162 ; + } +#Random pattern 63 for SPP scheme +'spp63' = { + table2Version = 213 ; + indicatorOfParameter = 163 ; + } +#Random pattern 64 for SPP scheme +'spp64' = { + table2Version = 213 ; + indicatorOfParameter = 164 ; + } +#Random pattern 65 for SPP scheme +'spp65' = { + table2Version = 213 ; + indicatorOfParameter = 165 ; + } +#Random pattern 66 for SPP scheme +'spp66' = { + table2Version = 213 ; + indicatorOfParameter = 166 ; + } +#Random pattern 67 for SPP scheme +'spp67' = { + table2Version = 213 ; + indicatorOfParameter = 167 ; + } +#Random pattern 68 for SPP scheme +'spp68' = { + table2Version = 213 ; + indicatorOfParameter = 168 ; + } +#Random pattern 69 for SPP scheme +'spp69' = { + table2Version = 213 ; + indicatorOfParameter = 169 ; + } +#Random pattern 70 for SPP scheme +'spp70' = { + table2Version = 213 ; + indicatorOfParameter = 170 ; + } +#Random pattern 71 for SPP scheme +'spp71' = { + table2Version = 213 ; + indicatorOfParameter = 171 ; + } +#Random pattern 72 for SPP scheme +'spp72' = { + table2Version = 213 ; + indicatorOfParameter = 172 ; + } +#Random pattern 73 for SPP scheme +'spp73' = { + table2Version = 213 ; + indicatorOfParameter = 173 ; + } +#Random pattern 74 for SPP scheme +'spp74' = { + table2Version = 213 ; + indicatorOfParameter = 174 ; + } +#Random pattern 75 for SPP scheme +'spp75' = { + table2Version = 213 ; + indicatorOfParameter = 175 ; + } +#Random pattern 76 for SPP scheme +'spp76' = { + table2Version = 213 ; + indicatorOfParameter = 176 ; + } +#Random pattern 77 for SPP scheme +'spp77' = { + table2Version = 213 ; + indicatorOfParameter = 177 ; + } +#Random pattern 78 for SPP scheme +'spp78' = { + table2Version = 213 ; + indicatorOfParameter = 178 ; + } +#Random pattern 79 for SPP scheme +'spp79' = { + table2Version = 213 ; + indicatorOfParameter = 179 ; + } +#Random pattern 80 for SPP scheme +'spp80' = { + table2Version = 213 ; + indicatorOfParameter = 180 ; + } +#Random pattern 81 for SPP scheme +'spp81' = { + table2Version = 213 ; + indicatorOfParameter = 181 ; + } +#Random pattern 82 for SPP scheme +'spp82' = { + table2Version = 213 ; + indicatorOfParameter = 182 ; + } +#Random pattern 83 for SPP scheme +'spp83' = { + table2Version = 213 ; + indicatorOfParameter = 183 ; + } +#Random pattern 84 for SPP scheme +'spp84' = { + table2Version = 213 ; + indicatorOfParameter = 184 ; + } +#Random pattern 85 for SPP scheme +'spp85' = { + table2Version = 213 ; + indicatorOfParameter = 185 ; + } +#Random pattern 86 for SPP scheme +'spp86' = { + table2Version = 213 ; + indicatorOfParameter = 186 ; + } +#Random pattern 87 for SPP scheme +'spp87' = { + table2Version = 213 ; + indicatorOfParameter = 187 ; + } +#Random pattern 88 for SPP scheme +'spp88' = { + table2Version = 213 ; + indicatorOfParameter = 188 ; + } +#Random pattern 89 for SPP scheme +'spp89' = { + table2Version = 213 ; + indicatorOfParameter = 189 ; + } +#Random pattern 90 for SPP scheme +'spp90' = { + table2Version = 213 ; + indicatorOfParameter = 190 ; + } +#Random pattern 91 for SPP scheme +'spp91' = { + table2Version = 213 ; + indicatorOfParameter = 191 ; + } +#Random pattern 92 for SPP scheme +'spp92' = { + table2Version = 213 ; + indicatorOfParameter = 192 ; + } +#Random pattern 93 for SPP scheme +'spp93' = { + table2Version = 213 ; + indicatorOfParameter = 193 ; + } +#Random pattern 94 for SPP scheme +'spp94' = { + table2Version = 213 ; + indicatorOfParameter = 194 ; + } +#Random pattern 95 for SPP scheme +'spp95' = { + table2Version = 213 ; + indicatorOfParameter = 195 ; + } +#Random pattern 96 for SPP scheme +'spp96' = { + table2Version = 213 ; + indicatorOfParameter = 196 ; + } +#Random pattern 97 for SPP scheme +'spp97' = { + table2Version = 213 ; + indicatorOfParameter = 197 ; + } +#Random pattern 98 for SPP scheme +'spp98' = { + table2Version = 213 ; + indicatorOfParameter = 198 ; + } +#Random pattern 99 for SPP scheme +'spp99' = { + table2Version = 213 ; + indicatorOfParameter = 199 ; + } +#Random pattern 100 for SPP scheme +'spp100' = { + table2Version = 213 ; + indicatorOfParameter = 200 ; + } +#Random pattern 101 for SPP scheme +'spp101' = { + table2Version = 213 ; + indicatorOfParameter = 201 ; + } +#Random pattern 102 for SPP scheme +'spp102' = { + table2Version = 213 ; + indicatorOfParameter = 202 ; + } +#Random pattern 103 for SPP scheme +'spp103' = { + table2Version = 213 ; + indicatorOfParameter = 203 ; + } +#Random pattern 104 for SPP scheme +'spp104' = { + table2Version = 213 ; + indicatorOfParameter = 204 ; + } +#Random pattern 105 for SPP scheme +'spp105' = { + table2Version = 213 ; + indicatorOfParameter = 205 ; + } +#Random pattern 106 for SPP scheme +'spp106' = { + table2Version = 213 ; + indicatorOfParameter = 206 ; + } +#Random pattern 107 for SPP scheme +'spp107' = { + table2Version = 213 ; + indicatorOfParameter = 207 ; + } +#Random pattern 108 for SPP scheme +'spp108' = { + table2Version = 213 ; + indicatorOfParameter = 208 ; + } +#Random pattern 109 for SPP scheme +'spp109' = { + table2Version = 213 ; + indicatorOfParameter = 209 ; + } +#Random pattern 110 for SPP scheme +'spp110' = { + table2Version = 213 ; + indicatorOfParameter = 210 ; + } +#Random pattern 111 for SPP scheme +'spp111' = { + table2Version = 213 ; + indicatorOfParameter = 211 ; + } +#Random pattern 112 for SPP scheme +'spp112' = { + table2Version = 213 ; + indicatorOfParameter = 212 ; + } +#Random pattern 113 for SPP scheme +'spp113' = { + table2Version = 213 ; + indicatorOfParameter = 213 ; + } +#Random pattern 114 for SPP scheme +'spp114' = { + table2Version = 213 ; + indicatorOfParameter = 214 ; + } +#Random pattern 115 for SPP scheme +'spp115' = { + table2Version = 213 ; + indicatorOfParameter = 215 ; + } +#Random pattern 116 for SPP scheme +'spp116' = { + table2Version = 213 ; + indicatorOfParameter = 216 ; + } +#Random pattern 117 for SPP scheme +'spp117' = { + table2Version = 213 ; + indicatorOfParameter = 217 ; + } +#Random pattern 118 for SPP scheme +'spp118' = { + table2Version = 213 ; + indicatorOfParameter = 218 ; + } +#Random pattern 119 for SPP scheme +'spp119' = { + table2Version = 213 ; + indicatorOfParameter = 219 ; + } +#Random pattern 120 for SPP scheme +'spp120' = { + table2Version = 213 ; + indicatorOfParameter = 220 ; + } +#Random pattern 121 for SPP scheme +'spp121' = { + table2Version = 213 ; + indicatorOfParameter = 221 ; + } #Cosine of solar zenith angle 'uvcossza' = { table2Version = 214 ; diff --git a/definitions/grib1/localConcepts/ecmf/name.def b/definitions/grib1/localConcepts/ecmf/name.def index 14be7a42d..8a6b5aa16 100644 --- a/definitions/grib1/localConcepts/ecmf/name.def +++ b/definitions/grib1/localConcepts/ecmf/name.def @@ -1294,13 +1294,13 @@ table2Version = 190 ; indicatorOfParameter = 168 ; } -#Surface solar radiation downwards -'Surface solar radiation downwards' = { +#Surface short-wave (solar) radiation downwards +'Surface short-wave (solar) radiation downwards' = { table2Version = 128 ; indicatorOfParameter = 169 ; } -#Surface solar radiation downwards -'Surface solar radiation downwards' = { +#Surface short-wave (solar) radiation downwards +'Surface short-wave (solar) radiation downwards' = { table2Version = 190 ; indicatorOfParameter = 169 ; } @@ -1379,83 +1379,83 @@ table2Version = 190 ; indicatorOfParameter = 174 ; } -#Surface thermal radiation downwards -'Surface thermal radiation downwards' = { +#Surface long-wave (thermal) radiation downwards +'Surface long-wave (thermal) radiation downwards' = { table2Version = 128 ; indicatorOfParameter = 175 ; } -#Surface thermal radiation downwards -'Surface thermal radiation downwards' = { +#Surface long-wave (thermal) radiation downwards +'Surface long-wave (thermal) radiation downwards' = { table2Version = 190 ; indicatorOfParameter = 175 ; } -#Surface net solar radiation -'Surface net solar radiation' = { +#Surface net short-wave (solar) radiation +'Surface net short-wave (solar) radiation' = { table2Version = 128 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation -'Surface net solar radiation' = { +#Surface net short-wave (solar) radiation +'Surface net short-wave (solar) radiation' = { table2Version = 160 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation -'Surface net solar radiation' = { +#Surface net short-wave (solar) radiation +'Surface net short-wave (solar) radiation' = { table2Version = 170 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation -'Surface net solar radiation' = { +#Surface net short-wave (solar) radiation +'Surface net short-wave (solar) radiation' = { table2Version = 190 ; indicatorOfParameter = 176 ; } -#Surface net thermal radiation -'Surface net thermal radiation' = { +#Surface net long-wave (thermal) radiation +'Surface net long-wave (thermal) radiation' = { table2Version = 128 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation -'Surface net thermal radiation' = { +#Surface net long-wave (thermal) radiation +'Surface net long-wave (thermal) radiation' = { table2Version = 160 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation -'Surface net thermal radiation' = { +#Surface net long-wave (thermal) radiation +'Surface net long-wave (thermal) radiation' = { table2Version = 170 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation -'Surface net thermal radiation' = { +#Surface net long-wave (thermal) radiation +'Surface net long-wave (thermal) radiation' = { table2Version = 190 ; indicatorOfParameter = 177 ; } -#Top net solar radiation -'Top net solar radiation' = { +#Top net short-wave (solar) radiation +'Top net short-wave (solar) radiation' = { table2Version = 128 ; indicatorOfParameter = 178 ; } -#Top net solar radiation -'Top net solar radiation' = { +#Top net short-wave (solar) radiation +'Top net short-wave (solar) radiation' = { table2Version = 160 ; indicatorOfParameter = 178 ; } -#Top net solar radiation -'Top net solar radiation' = { +#Top net short-wave (solar) radiation +'Top net short-wave (solar) radiation' = { table2Version = 190 ; indicatorOfParameter = 178 ; } -#Top net thermal radiation -'Top net thermal radiation' = { +#Top net long-wave (thermal) radiation +'Top net long-wave (thermal) radiation' = { table2Version = 128 ; indicatorOfParameter = 179 ; } -#Top net thermal radiation -'Top net thermal radiation' = { +#Top net long-wave (thermal) radiation +'Top net long-wave (thermal) radiation' = { table2Version = 160 ; indicatorOfParameter = 179 ; } -#Top net thermal radiation -'Top net thermal radiation' = { +#Top net long-wave (thermal) radiation +'Top net long-wave (thermal) radiation' = { table2Version = 190 ; indicatorOfParameter = 179 ; } @@ -1749,13 +1749,13 @@ table2Version = 128 ; indicatorOfParameter = 209 ; } -#Surface net solar radiation, clear sky -'Surface net solar radiation, clear sky' = { +#Surface net short-wave (solar) radiation, clear sky +'Surface net short-wave (solar) radiation, clear sky' = { table2Version = 128 ; indicatorOfParameter = 210 ; } -#Surface net thermal radiation, clear sky -'Surface net thermal radiation, clear sky' = { +#Surface net long-wave (thermal) radiation, clear sky +'Surface net long-wave (thermal) radiation, clear sky' = { table2Version = 128 ; indicatorOfParameter = 211 ; } @@ -5879,6 +5879,361 @@ table2Version = 213 ; indicatorOfParameter = 150 ; } +#Random pattern 51 for SPP scheme +'Random pattern 51 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 151 ; + } +#Random pattern 52 for SPP scheme +'Random pattern 52 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 152 ; + } +#Random pattern 53 for SPP scheme +'Random pattern 53 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 153 ; + } +#Random pattern 54 for SPP scheme +'Random pattern 54 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 154 ; + } +#Random pattern 55 for SPP scheme +'Random pattern 55 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 155 ; + } +#Random pattern 56 for SPP scheme +'Random pattern 56 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 156 ; + } +#Random pattern 57 for SPP scheme +'Random pattern 57 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 157 ; + } +#Random pattern 58 for SPP scheme +'Random pattern 58 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 158 ; + } +#Random pattern 59 for SPP scheme +'Random pattern 59 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 159 ; + } +#Random pattern 60 for SPP scheme +'Random pattern 60 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 160 ; + } +#Random pattern 61 for SPP scheme +'Random pattern 61 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 161 ; + } +#Random pattern 62 for SPP scheme +'Random pattern 62 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 162 ; + } +#Random pattern 63 for SPP scheme +'Random pattern 63 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 163 ; + } +#Random pattern 64 for SPP scheme +'Random pattern 64 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 164 ; + } +#Random pattern 65 for SPP scheme +'Random pattern 65 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 165 ; + } +#Random pattern 66 for SPP scheme +'Random pattern 66 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 166 ; + } +#Random pattern 67 for SPP scheme +'Random pattern 67 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 167 ; + } +#Random pattern 68 for SPP scheme +'Random pattern 68 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 168 ; + } +#Random pattern 69 for SPP scheme +'Random pattern 69 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 169 ; + } +#Random pattern 70 for SPP scheme +'Random pattern 70 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 170 ; + } +#Random pattern 71 for SPP scheme +'Random pattern 71 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 171 ; + } +#Random pattern 72 for SPP scheme +'Random pattern 72 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 172 ; + } +#Random pattern 73 for SPP scheme +'Random pattern 73 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 173 ; + } +#Random pattern 74 for SPP scheme +'Random pattern 74 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 174 ; + } +#Random pattern 75 for SPP scheme +'Random pattern 75 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 175 ; + } +#Random pattern 76 for SPP scheme +'Random pattern 76 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 176 ; + } +#Random pattern 77 for SPP scheme +'Random pattern 77 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 177 ; + } +#Random pattern 78 for SPP scheme +'Random pattern 78 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 178 ; + } +#Random pattern 79 for SPP scheme +'Random pattern 79 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 179 ; + } +#Random pattern 80 for SPP scheme +'Random pattern 80 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 180 ; + } +#Random pattern 81 for SPP scheme +'Random pattern 81 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 181 ; + } +#Random pattern 82 for SPP scheme +'Random pattern 82 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 182 ; + } +#Random pattern 83 for SPP scheme +'Random pattern 83 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 183 ; + } +#Random pattern 84 for SPP scheme +'Random pattern 84 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 184 ; + } +#Random pattern 85 for SPP scheme +'Random pattern 85 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 185 ; + } +#Random pattern 86 for SPP scheme +'Random pattern 86 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 186 ; + } +#Random pattern 87 for SPP scheme +'Random pattern 87 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 187 ; + } +#Random pattern 88 for SPP scheme +'Random pattern 88 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 188 ; + } +#Random pattern 89 for SPP scheme +'Random pattern 89 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 189 ; + } +#Random pattern 90 for SPP scheme +'Random pattern 90 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 190 ; + } +#Random pattern 91 for SPP scheme +'Random pattern 91 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 191 ; + } +#Random pattern 92 for SPP scheme +'Random pattern 92 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 192 ; + } +#Random pattern 93 for SPP scheme +'Random pattern 93 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 193 ; + } +#Random pattern 94 for SPP scheme +'Random pattern 94 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 194 ; + } +#Random pattern 95 for SPP scheme +'Random pattern 95 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 195 ; + } +#Random pattern 96 for SPP scheme +'Random pattern 96 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 196 ; + } +#Random pattern 97 for SPP scheme +'Random pattern 97 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 197 ; + } +#Random pattern 98 for SPP scheme +'Random pattern 98 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 198 ; + } +#Random pattern 99 for SPP scheme +'Random pattern 99 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 199 ; + } +#Random pattern 100 for SPP scheme +'Random pattern 100 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 200 ; + } +#Random pattern 101 for SPP scheme +'Random pattern 101 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 201 ; + } +#Random pattern 102 for SPP scheme +'Random pattern 102 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 202 ; + } +#Random pattern 103 for SPP scheme +'Random pattern 103 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 203 ; + } +#Random pattern 104 for SPP scheme +'Random pattern 104 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 204 ; + } +#Random pattern 105 for SPP scheme +'Random pattern 105 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 205 ; + } +#Random pattern 106 for SPP scheme +'Random pattern 106 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 206 ; + } +#Random pattern 107 for SPP scheme +'Random pattern 107 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 207 ; + } +#Random pattern 108 for SPP scheme +'Random pattern 108 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 208 ; + } +#Random pattern 109 for SPP scheme +'Random pattern 109 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 209 ; + } +#Random pattern 110 for SPP scheme +'Random pattern 110 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 210 ; + } +#Random pattern 111 for SPP scheme +'Random pattern 111 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 211 ; + } +#Random pattern 112 for SPP scheme +'Random pattern 112 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 212 ; + } +#Random pattern 113 for SPP scheme +'Random pattern 113 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 213 ; + } +#Random pattern 114 for SPP scheme +'Random pattern 114 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 214 ; + } +#Random pattern 115 for SPP scheme +'Random pattern 115 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 215 ; + } +#Random pattern 116 for SPP scheme +'Random pattern 116 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 216 ; + } +#Random pattern 117 for SPP scheme +'Random pattern 117 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 217 ; + } +#Random pattern 118 for SPP scheme +'Random pattern 118 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 218 ; + } +#Random pattern 119 for SPP scheme +'Random pattern 119 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 219 ; + } +#Random pattern 120 for SPP scheme +'Random pattern 120 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 220 ; + } +#Random pattern 121 for SPP scheme +'Random pattern 121 for SPP scheme' = { + table2Version = 213 ; + indicatorOfParameter = 221 ; + } #Cosine of solar zenith angle 'Cosine of solar zenith angle' = { table2Version = 214 ; diff --git a/definitions/grib1/localConcepts/ecmf/paramId.def b/definitions/grib1/localConcepts/ecmf/paramId.def index 0989df4bd..61e924963 100644 --- a/definitions/grib1/localConcepts/ecmf/paramId.def +++ b/definitions/grib1/localConcepts/ecmf/paramId.def @@ -1294,12 +1294,12 @@ table2Version = 190 ; indicatorOfParameter = 168 ; } -#Surface solar radiation downwards +#Surface short-wave (solar) radiation downwards '169' = { table2Version = 128 ; indicatorOfParameter = 169 ; } -#Surface solar radiation downwards +#Surface short-wave (solar) radiation downwards '169' = { table2Version = 190 ; indicatorOfParameter = 169 ; @@ -1379,82 +1379,82 @@ table2Version = 190 ; indicatorOfParameter = 174 ; } -#Surface thermal radiation downwards +#Surface long-wave (thermal) radiation downwards '175' = { table2Version = 128 ; indicatorOfParameter = 175 ; } -#Surface thermal radiation downwards +#Surface long-wave (thermal) radiation downwards '175' = { table2Version = 190 ; indicatorOfParameter = 175 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation '176' = { table2Version = 128 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation '176' = { table2Version = 160 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation '176' = { table2Version = 170 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation '176' = { table2Version = 190 ; indicatorOfParameter = 176 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation '177' = { table2Version = 128 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation '177' = { table2Version = 160 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation '177' = { table2Version = 170 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation '177' = { table2Version = 190 ; indicatorOfParameter = 177 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation '178' = { table2Version = 128 ; indicatorOfParameter = 178 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation '178' = { table2Version = 160 ; indicatorOfParameter = 178 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation '178' = { table2Version = 190 ; indicatorOfParameter = 178 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation '179' = { table2Version = 128 ; indicatorOfParameter = 179 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation '179' = { table2Version = 160 ; indicatorOfParameter = 179 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation '179' = { table2Version = 190 ; indicatorOfParameter = 179 ; @@ -1749,12 +1749,12 @@ table2Version = 128 ; indicatorOfParameter = 209 ; } -#Surface net solar radiation, clear sky +#Surface net short-wave (solar) radiation, clear sky '210' = { table2Version = 128 ; indicatorOfParameter = 210 ; } -#Surface net thermal radiation, clear sky +#Surface net long-wave (thermal) radiation, clear sky '211' = { table2Version = 128 ; indicatorOfParameter = 211 ; @@ -5879,6 +5879,361 @@ table2Version = 213 ; indicatorOfParameter = 150 ; } +#Random pattern 51 for SPP scheme +'213151' = { + table2Version = 213 ; + indicatorOfParameter = 151 ; + } +#Random pattern 52 for SPP scheme +'213152' = { + table2Version = 213 ; + indicatorOfParameter = 152 ; + } +#Random pattern 53 for SPP scheme +'213153' = { + table2Version = 213 ; + indicatorOfParameter = 153 ; + } +#Random pattern 54 for SPP scheme +'213154' = { + table2Version = 213 ; + indicatorOfParameter = 154 ; + } +#Random pattern 55 for SPP scheme +'213155' = { + table2Version = 213 ; + indicatorOfParameter = 155 ; + } +#Random pattern 56 for SPP scheme +'213156' = { + table2Version = 213 ; + indicatorOfParameter = 156 ; + } +#Random pattern 57 for SPP scheme +'213157' = { + table2Version = 213 ; + indicatorOfParameter = 157 ; + } +#Random pattern 58 for SPP scheme +'213158' = { + table2Version = 213 ; + indicatorOfParameter = 158 ; + } +#Random pattern 59 for SPP scheme +'213159' = { + table2Version = 213 ; + indicatorOfParameter = 159 ; + } +#Random pattern 60 for SPP scheme +'213160' = { + table2Version = 213 ; + indicatorOfParameter = 160 ; + } +#Random pattern 61 for SPP scheme +'213161' = { + table2Version = 213 ; + indicatorOfParameter = 161 ; + } +#Random pattern 62 for SPP scheme +'213162' = { + table2Version = 213 ; + indicatorOfParameter = 162 ; + } +#Random pattern 63 for SPP scheme +'213163' = { + table2Version = 213 ; + indicatorOfParameter = 163 ; + } +#Random pattern 64 for SPP scheme +'213164' = { + table2Version = 213 ; + indicatorOfParameter = 164 ; + } +#Random pattern 65 for SPP scheme +'213165' = { + table2Version = 213 ; + indicatorOfParameter = 165 ; + } +#Random pattern 66 for SPP scheme +'213166' = { + table2Version = 213 ; + indicatorOfParameter = 166 ; + } +#Random pattern 67 for SPP scheme +'213167' = { + table2Version = 213 ; + indicatorOfParameter = 167 ; + } +#Random pattern 68 for SPP scheme +'213168' = { + table2Version = 213 ; + indicatorOfParameter = 168 ; + } +#Random pattern 69 for SPP scheme +'213169' = { + table2Version = 213 ; + indicatorOfParameter = 169 ; + } +#Random pattern 70 for SPP scheme +'213170' = { + table2Version = 213 ; + indicatorOfParameter = 170 ; + } +#Random pattern 71 for SPP scheme +'213171' = { + table2Version = 213 ; + indicatorOfParameter = 171 ; + } +#Random pattern 72 for SPP scheme +'213172' = { + table2Version = 213 ; + indicatorOfParameter = 172 ; + } +#Random pattern 73 for SPP scheme +'213173' = { + table2Version = 213 ; + indicatorOfParameter = 173 ; + } +#Random pattern 74 for SPP scheme +'213174' = { + table2Version = 213 ; + indicatorOfParameter = 174 ; + } +#Random pattern 75 for SPP scheme +'213175' = { + table2Version = 213 ; + indicatorOfParameter = 175 ; + } +#Random pattern 76 for SPP scheme +'213176' = { + table2Version = 213 ; + indicatorOfParameter = 176 ; + } +#Random pattern 77 for SPP scheme +'213177' = { + table2Version = 213 ; + indicatorOfParameter = 177 ; + } +#Random pattern 78 for SPP scheme +'213178' = { + table2Version = 213 ; + indicatorOfParameter = 178 ; + } +#Random pattern 79 for SPP scheme +'213179' = { + table2Version = 213 ; + indicatorOfParameter = 179 ; + } +#Random pattern 80 for SPP scheme +'213180' = { + table2Version = 213 ; + indicatorOfParameter = 180 ; + } +#Random pattern 81 for SPP scheme +'213181' = { + table2Version = 213 ; + indicatorOfParameter = 181 ; + } +#Random pattern 82 for SPP scheme +'213182' = { + table2Version = 213 ; + indicatorOfParameter = 182 ; + } +#Random pattern 83 for SPP scheme +'213183' = { + table2Version = 213 ; + indicatorOfParameter = 183 ; + } +#Random pattern 84 for SPP scheme +'213184' = { + table2Version = 213 ; + indicatorOfParameter = 184 ; + } +#Random pattern 85 for SPP scheme +'213185' = { + table2Version = 213 ; + indicatorOfParameter = 185 ; + } +#Random pattern 86 for SPP scheme +'213186' = { + table2Version = 213 ; + indicatorOfParameter = 186 ; + } +#Random pattern 87 for SPP scheme +'213187' = { + table2Version = 213 ; + indicatorOfParameter = 187 ; + } +#Random pattern 88 for SPP scheme +'213188' = { + table2Version = 213 ; + indicatorOfParameter = 188 ; + } +#Random pattern 89 for SPP scheme +'213189' = { + table2Version = 213 ; + indicatorOfParameter = 189 ; + } +#Random pattern 90 for SPP scheme +'213190' = { + table2Version = 213 ; + indicatorOfParameter = 190 ; + } +#Random pattern 91 for SPP scheme +'213191' = { + table2Version = 213 ; + indicatorOfParameter = 191 ; + } +#Random pattern 92 for SPP scheme +'213192' = { + table2Version = 213 ; + indicatorOfParameter = 192 ; + } +#Random pattern 93 for SPP scheme +'213193' = { + table2Version = 213 ; + indicatorOfParameter = 193 ; + } +#Random pattern 94 for SPP scheme +'213194' = { + table2Version = 213 ; + indicatorOfParameter = 194 ; + } +#Random pattern 95 for SPP scheme +'213195' = { + table2Version = 213 ; + indicatorOfParameter = 195 ; + } +#Random pattern 96 for SPP scheme +'213196' = { + table2Version = 213 ; + indicatorOfParameter = 196 ; + } +#Random pattern 97 for SPP scheme +'213197' = { + table2Version = 213 ; + indicatorOfParameter = 197 ; + } +#Random pattern 98 for SPP scheme +'213198' = { + table2Version = 213 ; + indicatorOfParameter = 198 ; + } +#Random pattern 99 for SPP scheme +'213199' = { + table2Version = 213 ; + indicatorOfParameter = 199 ; + } +#Random pattern 100 for SPP scheme +'213200' = { + table2Version = 213 ; + indicatorOfParameter = 200 ; + } +#Random pattern 101 for SPP scheme +'213201' = { + table2Version = 213 ; + indicatorOfParameter = 201 ; + } +#Random pattern 102 for SPP scheme +'213202' = { + table2Version = 213 ; + indicatorOfParameter = 202 ; + } +#Random pattern 103 for SPP scheme +'213203' = { + table2Version = 213 ; + indicatorOfParameter = 203 ; + } +#Random pattern 104 for SPP scheme +'213204' = { + table2Version = 213 ; + indicatorOfParameter = 204 ; + } +#Random pattern 105 for SPP scheme +'213205' = { + table2Version = 213 ; + indicatorOfParameter = 205 ; + } +#Random pattern 106 for SPP scheme +'213206' = { + table2Version = 213 ; + indicatorOfParameter = 206 ; + } +#Random pattern 107 for SPP scheme +'213207' = { + table2Version = 213 ; + indicatorOfParameter = 207 ; + } +#Random pattern 108 for SPP scheme +'213208' = { + table2Version = 213 ; + indicatorOfParameter = 208 ; + } +#Random pattern 109 for SPP scheme +'213209' = { + table2Version = 213 ; + indicatorOfParameter = 209 ; + } +#Random pattern 110 for SPP scheme +'213210' = { + table2Version = 213 ; + indicatorOfParameter = 210 ; + } +#Random pattern 111 for SPP scheme +'213211' = { + table2Version = 213 ; + indicatorOfParameter = 211 ; + } +#Random pattern 112 for SPP scheme +'213212' = { + table2Version = 213 ; + indicatorOfParameter = 212 ; + } +#Random pattern 113 for SPP scheme +'213213' = { + table2Version = 213 ; + indicatorOfParameter = 213 ; + } +#Random pattern 114 for SPP scheme +'213214' = { + table2Version = 213 ; + indicatorOfParameter = 214 ; + } +#Random pattern 115 for SPP scheme +'213215' = { + table2Version = 213 ; + indicatorOfParameter = 215 ; + } +#Random pattern 116 for SPP scheme +'213216' = { + table2Version = 213 ; + indicatorOfParameter = 216 ; + } +#Random pattern 117 for SPP scheme +'213217' = { + table2Version = 213 ; + indicatorOfParameter = 217 ; + } +#Random pattern 118 for SPP scheme +'213218' = { + table2Version = 213 ; + indicatorOfParameter = 218 ; + } +#Random pattern 119 for SPP scheme +'213219' = { + table2Version = 213 ; + indicatorOfParameter = 219 ; + } +#Random pattern 120 for SPP scheme +'213220' = { + table2Version = 213 ; + indicatorOfParameter = 220 ; + } +#Random pattern 121 for SPP scheme +'213221' = { + table2Version = 213 ; + indicatorOfParameter = 221 ; + } #Cosine of solar zenith angle '214001' = { table2Version = 214 ; diff --git a/definitions/grib1/localConcepts/ecmf/shortName.def b/definitions/grib1/localConcepts/ecmf/shortName.def index ba1b56168..a122c442e 100644 --- a/definitions/grib1/localConcepts/ecmf/shortName.def +++ b/definitions/grib1/localConcepts/ecmf/shortName.def @@ -1294,12 +1294,12 @@ table2Version = 190 ; indicatorOfParameter = 168 ; } -#Surface solar radiation downwards +#Surface short-wave (solar) radiation downwards 'ssrd' = { table2Version = 128 ; indicatorOfParameter = 169 ; } -#Surface solar radiation downwards +#Surface short-wave (solar) radiation downwards 'ssrd' = { table2Version = 190 ; indicatorOfParameter = 169 ; @@ -1379,82 +1379,82 @@ table2Version = 190 ; indicatorOfParameter = 174 ; } -#Surface thermal radiation downwards +#Surface long-wave (thermal) radiation downwards 'strd' = { table2Version = 128 ; indicatorOfParameter = 175 ; } -#Surface thermal radiation downwards +#Surface long-wave (thermal) radiation downwards 'strd' = { table2Version = 190 ; indicatorOfParameter = 175 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'ssr' = { table2Version = 128 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'ssr' = { table2Version = 160 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'ssr' = { table2Version = 170 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'ssr' = { table2Version = 190 ; indicatorOfParameter = 176 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'str' = { table2Version = 128 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'str' = { table2Version = 160 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'str' = { table2Version = 170 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'str' = { table2Version = 190 ; indicatorOfParameter = 177 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'tsr' = { table2Version = 128 ; indicatorOfParameter = 178 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'tsr' = { table2Version = 160 ; indicatorOfParameter = 178 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'tsr' = { table2Version = 190 ; indicatorOfParameter = 178 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'ttr' = { table2Version = 128 ; indicatorOfParameter = 179 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'ttr' = { table2Version = 160 ; indicatorOfParameter = 179 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'ttr' = { table2Version = 190 ; indicatorOfParameter = 179 ; @@ -1749,12 +1749,12 @@ table2Version = 128 ; indicatorOfParameter = 209 ; } -#Surface net solar radiation, clear sky +#Surface net short-wave (solar) radiation, clear sky 'ssrc' = { table2Version = 128 ; indicatorOfParameter = 210 ; } -#Surface net thermal radiation, clear sky +#Surface net long-wave (thermal) radiation, clear sky 'strc' = { table2Version = 128 ; indicatorOfParameter = 211 ; @@ -5879,6 +5879,361 @@ table2Version = 213 ; indicatorOfParameter = 150 ; } +#Random pattern 51 for SPP scheme +'spp51' = { + table2Version = 213 ; + indicatorOfParameter = 151 ; + } +#Random pattern 52 for SPP scheme +'spp52' = { + table2Version = 213 ; + indicatorOfParameter = 152 ; + } +#Random pattern 53 for SPP scheme +'spp53' = { + table2Version = 213 ; + indicatorOfParameter = 153 ; + } +#Random pattern 54 for SPP scheme +'spp54' = { + table2Version = 213 ; + indicatorOfParameter = 154 ; + } +#Random pattern 55 for SPP scheme +'spp55' = { + table2Version = 213 ; + indicatorOfParameter = 155 ; + } +#Random pattern 56 for SPP scheme +'spp56' = { + table2Version = 213 ; + indicatorOfParameter = 156 ; + } +#Random pattern 57 for SPP scheme +'spp57' = { + table2Version = 213 ; + indicatorOfParameter = 157 ; + } +#Random pattern 58 for SPP scheme +'spp58' = { + table2Version = 213 ; + indicatorOfParameter = 158 ; + } +#Random pattern 59 for SPP scheme +'spp59' = { + table2Version = 213 ; + indicatorOfParameter = 159 ; + } +#Random pattern 60 for SPP scheme +'spp60' = { + table2Version = 213 ; + indicatorOfParameter = 160 ; + } +#Random pattern 61 for SPP scheme +'spp61' = { + table2Version = 213 ; + indicatorOfParameter = 161 ; + } +#Random pattern 62 for SPP scheme +'spp62' = { + table2Version = 213 ; + indicatorOfParameter = 162 ; + } +#Random pattern 63 for SPP scheme +'spp63' = { + table2Version = 213 ; + indicatorOfParameter = 163 ; + } +#Random pattern 64 for SPP scheme +'spp64' = { + table2Version = 213 ; + indicatorOfParameter = 164 ; + } +#Random pattern 65 for SPP scheme +'spp65' = { + table2Version = 213 ; + indicatorOfParameter = 165 ; + } +#Random pattern 66 for SPP scheme +'spp66' = { + table2Version = 213 ; + indicatorOfParameter = 166 ; + } +#Random pattern 67 for SPP scheme +'spp67' = { + table2Version = 213 ; + indicatorOfParameter = 167 ; + } +#Random pattern 68 for SPP scheme +'spp68' = { + table2Version = 213 ; + indicatorOfParameter = 168 ; + } +#Random pattern 69 for SPP scheme +'spp69' = { + table2Version = 213 ; + indicatorOfParameter = 169 ; + } +#Random pattern 70 for SPP scheme +'spp70' = { + table2Version = 213 ; + indicatorOfParameter = 170 ; + } +#Random pattern 71 for SPP scheme +'spp71' = { + table2Version = 213 ; + indicatorOfParameter = 171 ; + } +#Random pattern 72 for SPP scheme +'spp72' = { + table2Version = 213 ; + indicatorOfParameter = 172 ; + } +#Random pattern 73 for SPP scheme +'spp73' = { + table2Version = 213 ; + indicatorOfParameter = 173 ; + } +#Random pattern 74 for SPP scheme +'spp74' = { + table2Version = 213 ; + indicatorOfParameter = 174 ; + } +#Random pattern 75 for SPP scheme +'spp75' = { + table2Version = 213 ; + indicatorOfParameter = 175 ; + } +#Random pattern 76 for SPP scheme +'spp76' = { + table2Version = 213 ; + indicatorOfParameter = 176 ; + } +#Random pattern 77 for SPP scheme +'spp77' = { + table2Version = 213 ; + indicatorOfParameter = 177 ; + } +#Random pattern 78 for SPP scheme +'spp78' = { + table2Version = 213 ; + indicatorOfParameter = 178 ; + } +#Random pattern 79 for SPP scheme +'spp79' = { + table2Version = 213 ; + indicatorOfParameter = 179 ; + } +#Random pattern 80 for SPP scheme +'spp80' = { + table2Version = 213 ; + indicatorOfParameter = 180 ; + } +#Random pattern 81 for SPP scheme +'spp81' = { + table2Version = 213 ; + indicatorOfParameter = 181 ; + } +#Random pattern 82 for SPP scheme +'spp82' = { + table2Version = 213 ; + indicatorOfParameter = 182 ; + } +#Random pattern 83 for SPP scheme +'spp83' = { + table2Version = 213 ; + indicatorOfParameter = 183 ; + } +#Random pattern 84 for SPP scheme +'spp84' = { + table2Version = 213 ; + indicatorOfParameter = 184 ; + } +#Random pattern 85 for SPP scheme +'spp85' = { + table2Version = 213 ; + indicatorOfParameter = 185 ; + } +#Random pattern 86 for SPP scheme +'spp86' = { + table2Version = 213 ; + indicatorOfParameter = 186 ; + } +#Random pattern 87 for SPP scheme +'spp87' = { + table2Version = 213 ; + indicatorOfParameter = 187 ; + } +#Random pattern 88 for SPP scheme +'spp88' = { + table2Version = 213 ; + indicatorOfParameter = 188 ; + } +#Random pattern 89 for SPP scheme +'spp89' = { + table2Version = 213 ; + indicatorOfParameter = 189 ; + } +#Random pattern 90 for SPP scheme +'spp90' = { + table2Version = 213 ; + indicatorOfParameter = 190 ; + } +#Random pattern 91 for SPP scheme +'spp91' = { + table2Version = 213 ; + indicatorOfParameter = 191 ; + } +#Random pattern 92 for SPP scheme +'spp92' = { + table2Version = 213 ; + indicatorOfParameter = 192 ; + } +#Random pattern 93 for SPP scheme +'spp93' = { + table2Version = 213 ; + indicatorOfParameter = 193 ; + } +#Random pattern 94 for SPP scheme +'spp94' = { + table2Version = 213 ; + indicatorOfParameter = 194 ; + } +#Random pattern 95 for SPP scheme +'spp95' = { + table2Version = 213 ; + indicatorOfParameter = 195 ; + } +#Random pattern 96 for SPP scheme +'spp96' = { + table2Version = 213 ; + indicatorOfParameter = 196 ; + } +#Random pattern 97 for SPP scheme +'spp97' = { + table2Version = 213 ; + indicatorOfParameter = 197 ; + } +#Random pattern 98 for SPP scheme +'spp98' = { + table2Version = 213 ; + indicatorOfParameter = 198 ; + } +#Random pattern 99 for SPP scheme +'spp99' = { + table2Version = 213 ; + indicatorOfParameter = 199 ; + } +#Random pattern 100 for SPP scheme +'spp100' = { + table2Version = 213 ; + indicatorOfParameter = 200 ; + } +#Random pattern 101 for SPP scheme +'spp101' = { + table2Version = 213 ; + indicatorOfParameter = 201 ; + } +#Random pattern 102 for SPP scheme +'spp102' = { + table2Version = 213 ; + indicatorOfParameter = 202 ; + } +#Random pattern 103 for SPP scheme +'spp103' = { + table2Version = 213 ; + indicatorOfParameter = 203 ; + } +#Random pattern 104 for SPP scheme +'spp104' = { + table2Version = 213 ; + indicatorOfParameter = 204 ; + } +#Random pattern 105 for SPP scheme +'spp105' = { + table2Version = 213 ; + indicatorOfParameter = 205 ; + } +#Random pattern 106 for SPP scheme +'spp106' = { + table2Version = 213 ; + indicatorOfParameter = 206 ; + } +#Random pattern 107 for SPP scheme +'spp107' = { + table2Version = 213 ; + indicatorOfParameter = 207 ; + } +#Random pattern 108 for SPP scheme +'spp108' = { + table2Version = 213 ; + indicatorOfParameter = 208 ; + } +#Random pattern 109 for SPP scheme +'spp109' = { + table2Version = 213 ; + indicatorOfParameter = 209 ; + } +#Random pattern 110 for SPP scheme +'spp110' = { + table2Version = 213 ; + indicatorOfParameter = 210 ; + } +#Random pattern 111 for SPP scheme +'spp111' = { + table2Version = 213 ; + indicatorOfParameter = 211 ; + } +#Random pattern 112 for SPP scheme +'spp112' = { + table2Version = 213 ; + indicatorOfParameter = 212 ; + } +#Random pattern 113 for SPP scheme +'spp113' = { + table2Version = 213 ; + indicatorOfParameter = 213 ; + } +#Random pattern 114 for SPP scheme +'spp114' = { + table2Version = 213 ; + indicatorOfParameter = 214 ; + } +#Random pattern 115 for SPP scheme +'spp115' = { + table2Version = 213 ; + indicatorOfParameter = 215 ; + } +#Random pattern 116 for SPP scheme +'spp116' = { + table2Version = 213 ; + indicatorOfParameter = 216 ; + } +#Random pattern 117 for SPP scheme +'spp117' = { + table2Version = 213 ; + indicatorOfParameter = 217 ; + } +#Random pattern 118 for SPP scheme +'spp118' = { + table2Version = 213 ; + indicatorOfParameter = 218 ; + } +#Random pattern 119 for SPP scheme +'spp119' = { + table2Version = 213 ; + indicatorOfParameter = 219 ; + } +#Random pattern 120 for SPP scheme +'spp120' = { + table2Version = 213 ; + indicatorOfParameter = 220 ; + } +#Random pattern 121 for SPP scheme +'spp121' = { + table2Version = 213 ; + indicatorOfParameter = 221 ; + } #Cosine of solar zenith angle 'uvcossza' = { table2Version = 214 ; diff --git a/definitions/grib1/localConcepts/ecmf/units.def b/definitions/grib1/localConcepts/ecmf/units.def index 6ff99939a..1f3f6ad9d 100644 --- a/definitions/grib1/localConcepts/ecmf/units.def +++ b/definitions/grib1/localConcepts/ecmf/units.def @@ -1294,12 +1294,12 @@ table2Version = 190 ; indicatorOfParameter = 168 ; } -#Surface solar radiation downwards +#Surface short-wave (solar) radiation downwards 'J m**-2' = { table2Version = 128 ; indicatorOfParameter = 169 ; } -#Surface solar radiation downwards +#Surface short-wave (solar) radiation downwards 'J m**-2' = { table2Version = 190 ; indicatorOfParameter = 169 ; @@ -1379,82 +1379,82 @@ table2Version = 190 ; indicatorOfParameter = 174 ; } -#Surface thermal radiation downwards +#Surface long-wave (thermal) radiation downwards 'J m**-2' = { table2Version = 128 ; indicatorOfParameter = 175 ; } -#Surface thermal radiation downwards +#Surface long-wave (thermal) radiation downwards 'J m**-2' = { table2Version = 190 ; indicatorOfParameter = 175 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'J m**-2' = { table2Version = 128 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'J m**-2' = { table2Version = 160 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'J m**-2' = { table2Version = 170 ; indicatorOfParameter = 176 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'J m**-2' = { table2Version = 190 ; indicatorOfParameter = 176 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'J m**-2' = { table2Version = 128 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'J m**-2' = { table2Version = 160 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'J m**-2' = { table2Version = 170 ; indicatorOfParameter = 177 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'J m**-2' = { table2Version = 190 ; indicatorOfParameter = 177 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'J m**-2' = { table2Version = 128 ; indicatorOfParameter = 178 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'J m**-2' = { table2Version = 160 ; indicatorOfParameter = 178 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'J m**-2' = { table2Version = 190 ; indicatorOfParameter = 178 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'J m**-2' = { table2Version = 128 ; indicatorOfParameter = 179 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'J m**-2' = { table2Version = 160 ; indicatorOfParameter = 179 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'J m**-2' = { table2Version = 190 ; indicatorOfParameter = 179 ; @@ -1749,12 +1749,12 @@ table2Version = 128 ; indicatorOfParameter = 209 ; } -#Surface net solar radiation, clear sky +#Surface net short-wave (solar) radiation, clear sky 'J m**-2' = { table2Version = 128 ; indicatorOfParameter = 210 ; } -#Surface net thermal radiation, clear sky +#Surface net long-wave (thermal) radiation, clear sky 'J m**-2' = { table2Version = 128 ; indicatorOfParameter = 211 ; @@ -5879,6 +5879,361 @@ table2Version = 213 ; indicatorOfParameter = 150 ; } +#Random pattern 51 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 151 ; + } +#Random pattern 52 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 152 ; + } +#Random pattern 53 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 153 ; + } +#Random pattern 54 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 154 ; + } +#Random pattern 55 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 155 ; + } +#Random pattern 56 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 156 ; + } +#Random pattern 57 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 157 ; + } +#Random pattern 58 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 158 ; + } +#Random pattern 59 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 159 ; + } +#Random pattern 60 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 160 ; + } +#Random pattern 61 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 161 ; + } +#Random pattern 62 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 162 ; + } +#Random pattern 63 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 163 ; + } +#Random pattern 64 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 164 ; + } +#Random pattern 65 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 165 ; + } +#Random pattern 66 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 166 ; + } +#Random pattern 67 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 167 ; + } +#Random pattern 68 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 168 ; + } +#Random pattern 69 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 169 ; + } +#Random pattern 70 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 170 ; + } +#Random pattern 71 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 171 ; + } +#Random pattern 72 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 172 ; + } +#Random pattern 73 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 173 ; + } +#Random pattern 74 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 174 ; + } +#Random pattern 75 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 175 ; + } +#Random pattern 76 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 176 ; + } +#Random pattern 77 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 177 ; + } +#Random pattern 78 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 178 ; + } +#Random pattern 79 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 179 ; + } +#Random pattern 80 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 180 ; + } +#Random pattern 81 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 181 ; + } +#Random pattern 82 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 182 ; + } +#Random pattern 83 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 183 ; + } +#Random pattern 84 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 184 ; + } +#Random pattern 85 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 185 ; + } +#Random pattern 86 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 186 ; + } +#Random pattern 87 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 187 ; + } +#Random pattern 88 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 188 ; + } +#Random pattern 89 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 189 ; + } +#Random pattern 90 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 190 ; + } +#Random pattern 91 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 191 ; + } +#Random pattern 92 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 192 ; + } +#Random pattern 93 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 193 ; + } +#Random pattern 94 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 194 ; + } +#Random pattern 95 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 195 ; + } +#Random pattern 96 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 196 ; + } +#Random pattern 97 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 197 ; + } +#Random pattern 98 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 198 ; + } +#Random pattern 99 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 199 ; + } +#Random pattern 100 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 200 ; + } +#Random pattern 101 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 201 ; + } +#Random pattern 102 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 202 ; + } +#Random pattern 103 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 203 ; + } +#Random pattern 104 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 204 ; + } +#Random pattern 105 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 205 ; + } +#Random pattern 106 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 206 ; + } +#Random pattern 107 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 207 ; + } +#Random pattern 108 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 208 ; + } +#Random pattern 109 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 209 ; + } +#Random pattern 110 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 210 ; + } +#Random pattern 111 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 211 ; + } +#Random pattern 112 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 212 ; + } +#Random pattern 113 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 213 ; + } +#Random pattern 114 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 214 ; + } +#Random pattern 115 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 215 ; + } +#Random pattern 116 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 216 ; + } +#Random pattern 117 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 217 ; + } +#Random pattern 118 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 218 ; + } +#Random pattern 119 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 219 ; + } +#Random pattern 120 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 220 ; + } +#Random pattern 121 for SPP scheme +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 221 ; + } #Cosine of solar zenith angle '~' = { table2Version = 214 ; diff --git a/definitions/grib1/localConcepts/edzw/name.def b/definitions/grib1/localConcepts/edzw/name.def old mode 100755 new mode 100644 diff --git a/definitions/grib1/localConcepts/edzw/paramId.def b/definitions/grib1/localConcepts/edzw/paramId.def old mode 100755 new mode 100644 diff --git a/definitions/grib1/localConcepts/edzw/shortName.def b/definitions/grib1/localConcepts/edzw/shortName.def old mode 100755 new mode 100644 diff --git a/definitions/grib1/localConcepts/edzw/units.def b/definitions/grib1/localConcepts/edzw/units.def old mode 100755 new mode 100644 diff --git a/definitions/grib1/scanning_mode.def b/definitions/grib1/scanning_mode.def index ccd4b3c18..ca2c5c60f 100644 --- a/definitions/grib1/scanning_mode.def +++ b/definitions/grib1/scanning_mode.def @@ -6,7 +6,9 @@ flagbit iScansNegatively(scanningMode,7) : dump; flagbit jScansPositively(scanningMode,6) : dump; flagbit jPointsAreConsecutive(scanningMode,5) : dump; constant alternativeRowScanning=0 : dump; + transient iScansPositively = !iScansNegatively : constraint; +transient jScansNegatively = !jScansPositively : constraint; alias geography.iScansNegatively=iScansNegatively; alias geography.jScansPositively=jScansPositively; diff --git a/definitions/grib1/section.1.def b/definitions/grib1/section.1.def index ff89dcd09..974977dfd 100644 --- a/definitions/grib1/section.1.def +++ b/definitions/grib1/section.1.def @@ -160,16 +160,16 @@ concept paramIdECMF (defaultParameter,"paramId.def",conceptsMasterDir,conceptsLo concept paramId (paramIdECMF,"paramId.def",conceptsDir2,conceptsDir1): long_type,dump; # transient pid = paramId : hidden; -concept cfNameECMF(defaultName,"cfName.def",conceptsMasterDir,conceptsLocalDirECMF) : dump,no_copy,read_only; +concept cfNameECMF(defaultName,"cfName.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy,read_only; concept cfName(cfNameECMF,"cfName.def",conceptsDir2,conceptsDir1) : dump,no_copy,read_only; -concept cfVarNameECMF(defaultName,"cfVarName.def",conceptsMasterDir,conceptsLocalDirECMF) : dump,no_copy,read_only; +concept cfVarNameECMF(defaultName,"cfVarName.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy,read_only; concept cfVarName(cfVarNameECMF,"cfVarName.def",conceptsDir2,conceptsDir1) : dump,no_copy,read_only; concept unitsECMF(defaultName,"units.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy,read_only; concept units(unitsECMF,"units.def",conceptsDir2,conceptsDir1) : dump,no_copy,read_only; -concept nameECMF(defaultName,"name.def",conceptsMasterDir,conceptsLocalDirECMF) : dump,no_copy,read_only; +concept nameECMF(defaultName,"name.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy,read_only; concept name(nameECMF,"name.def",conceptsDir2,conceptsDir1) : dump,no_copy,read_only; signed[2] decimalScaleFactor :dump; diff --git a/definitions/grib2/boot.def b/definitions/grib2/boot.def index 8986940a0..c86ba9922 100644 --- a/definitions/grib2/boot.def +++ b/definitions/grib2/boot.def @@ -9,9 +9,9 @@ # This gets updated twice a year by WMO. # See https://community.wmo.int/activity-areas/wmo-codes/manual-codes/latest-version -constant tablesVersionLatestOfficial = 29 : edition_specific; +constant tablesVersionLatestOfficial = 30 : edition_specific; # If this is different from the official version, then it is the pre-operational version -constant tablesVersionLatest = 29 : edition_specific; +constant tablesVersionLatest = 30 : edition_specific; constant million = 1000000 : hidden; constant grib2divider = 1000000; diff --git a/definitions/grib2/cfName.def b/definitions/grib2/cfName.def index 1e7ecb41c..7055d11f9 100644 --- a/definitions/grib2/cfName.def +++ b/definitions/grib2/cfName.def @@ -4,14 +4,24 @@ discipline = 10 ; parameterCategory = 2 ; parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; } #Total column vertically-integrated water vapour 'lwe_thickness_of_atmosphere_mass_content_of_water_vapor' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } -#Surface solar radiation downwards +#Boundary layer dissipation +'kinetic_energy_dissipation_in_atmosphere_boundary_layer' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 1 ; + } +#Surface short-wave (solar) radiation downwards 'surface_downwelling_shortwave_flux_in_air' = { discipline = 0 ; parameterCategory = 4 ; @@ -19,7 +29,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'toa_net_upward_shortwave_flux' = { discipline = 0 ; parameterCategory = 4 ; @@ -32,12 +42,16 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 38 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Northward turbulent surface stress 'surface_downward_northward_stress' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Ozone mass mixing ratio 'mass_fraction_of_ozone_in_air' = { @@ -45,7 +59,7 @@ parameterCategory = 14 ; parameterNumber = 1 ; } -#Surface net solar radiation, clear sky +#Surface net short-wave (solar) radiation, clear sky 'surface_net_downward_shortwave_flux_assuming_clear_sky' = { discipline = 0 ; parameterCategory = 4 ; @@ -53,7 +67,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface net thermal radiation, clear sky +#Surface net long-wave (thermal) radiation, clear sky 'surface_net_downward_longwave_flux_assuming_clear_sky' = { discipline = 0 ; parameterCategory = 5 ; @@ -271,12 +285,6 @@ parameterCategory = 2 ; parameterNumber = 12 ; } -#Boundary layer dissipation -'kinetic_energy_dissipation_in_atmosphere_boundary_layer' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 20 ; - } #Surface sensible heat flux 'surface_upward_sensible_heat_flux' = { discipline = 0 ; @@ -331,7 +339,7 @@ parameterCategory = 0 ; parameterNumber = 1 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'surface_net_downward_shortwave_flux' = { discipline = 0 ; parameterCategory = 4 ; @@ -339,7 +347,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'surface_net_upward_longwave_flux' = { discipline = 0 ; parameterCategory = 5 ; @@ -347,7 +355,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'toa_outgoing_longwave_flux' = { discipline = 0 ; parameterCategory = 5 ; diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index ddf1413f0..27aedbe25 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -4,8 +4,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 1 ; scaleFactorOfLowerLimit = 0 ; @@ -16,8 +16,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 5 ; scaleFactorOfLowerLimit = 0 ; @@ -28,8 +28,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 40 ; scaleFactorOfLowerLimit = 0 ; @@ -40,8 +40,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 60 ; scaleFactorOfLowerLimit = 0 ; @@ -52,8 +52,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 80 ; scaleFactorOfLowerLimit = 0 ; @@ -64,8 +64,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 100 ; scaleFactorOfLowerLimit = 0 ; @@ -76,8 +76,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 150 ; scaleFactorOfLowerLimit = 0 ; @@ -88,8 +88,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 200 ; scaleFactorOfLowerLimit = 0 ; @@ -100,8 +100,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 3 ; scaleFactorOfLowerLimit = -2 ; @@ -136,6 +136,7 @@ discipline = 10 ; parameterCategory = 2 ; parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; } #Snow density 'rsn' = { @@ -165,6 +166,30 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } +#Large-scale precipitation fraction +'lspf' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Downward UV radiation at the surface +'uvb' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Photosynthetically active radiation at the surface +'par' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Specific rain water content 'crwc' = { discipline = 0 ; @@ -204,8 +229,23 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } -#Surface solar radiation downwards +#Boundary layer dissipation +'bld' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 1 ; + } +#Boundary layer height +'blh' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + } +#Surface short-wave (solar) radiation downwards 'ssrd' = { discipline = 0 ; parameterCategory = 4 ; @@ -213,15 +253,15 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface thermal radiation downwards +#Surface long-wave (thermal) radiation downwards 'strd' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 3 ; - typeOfStatisticalProcessing = 1 ; typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'tsr' = { discipline = 0 ; parameterCategory = 4 ; @@ -234,12 +274,39 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 38 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Northward turbulent surface stress 'nsss' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Eastward gravity wave surface stress +'lgws' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Northward gravity wave surface stress +'mgws' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Gravity wave dissipation +'gwd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 1 ; } #Ozone mass mixing ratio 'o3' = { @@ -247,7 +314,23 @@ parameterCategory = 14 ; parameterNumber = 1 ; } -#Surface net solar radiation, clear sky +#Top net solar radiation, clear sky +'tsrc' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; + } +#Top net thermal radiation, clear sky +'ttrc' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; + } +#Surface net short-wave (solar) radiation, clear sky 'ssrc' = { discipline = 0 ; parameterCategory = 4 ; @@ -255,7 +338,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface net thermal radiation, clear sky +#Surface net long-wave (thermal) radiation, clear sky 'strc' = { discipline = 0 ; parameterCategory = 5 ; @@ -263,6 +346,42 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#TOA incident solar radiation +'tisr' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; + } +#Instantaneous eastward turbulent surface stress +'iews' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 38 ; + typeOfFirstFixedSurface = 1 ; + } +#Instantaneous northward turbulent surface stress +'inss' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + } +#Instantaneous surface sensible heat flux +'ishf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } +#Instantaneous moisture flux +'ie' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + } #Temperature of snow layer 'tsn' = { discipline = 2 ; @@ -325,47 +444,47 @@ parameterCategory = 1 ; parameterNumber = 52 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 25 ; - probabilityType = 3 ; scaleFactorOfLowerLimit = 0 ; - typeOfFirstFixedSurface = 1 ; + probabilityType = 3 ; } #Total precipitation of at least 50 mm 'tpg50' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - probabilityType = 3 ; - scaleFactorOfLowerLimit = 0 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 50 ; + scaleFactorOfLowerLimit = 0 ; + probabilityType = 3 ; } #10 metre wind gust of at least 10 m/s 'fgg1010' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; - scaleFactorOfLowerLimit = 0 ; - scaledValueOfFirstFixedSurface = 10 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 10 ; - typeOfFirstFixedSurface = 103 ; + scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; - scaleFactorOfFirstFixedSurface = 0 ; } #Probability of temperature standardized anomaly greater than 1 standard deviation 'ptsa_gt_1stdev' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 0 ; - scaleFactorOfLowerLimit = 0 ; productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 10 ; scaledValueOfLowerLimit = 1 ; + scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; } #Probability of temperature standardized anomaly greater than 1.5 standard deviation @@ -373,11 +492,11 @@ discipline = 0 ; parameterCategory = 0 ; parameterNumber = 0 ; + productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 10 ; scaledValueOfLowerLimit = 15 ; - probabilityType = 3 ; scaleFactorOfLowerLimit = 1 ; - productDefinitionTemplateNumber = 9 ; + probabilityType = 3 ; } #Probability of temperature standardized anomaly greater than 2 standard deviation 'ptsa_gt_2stdev' = { @@ -387,18 +506,18 @@ productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 10 ; scaledValueOfLowerLimit = 2 ; - probabilityType = 3 ; scaleFactorOfLowerLimit = 0 ; + probabilityType = 3 ; } #Probability of temperature standardized anomaly less than -1 standard deviation 'ptsa_lt_1stdev' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 0 ; - scaleFactorOfLowerLimit = 0 ; productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 10 ; scaledValueOfLowerLimit = -1 ; + scaleFactorOfLowerLimit = 0 ; probabilityType = 0 ; } #Probability of temperature standardized anomaly less than -1.5 standard deviation @@ -406,22 +525,22 @@ discipline = 0 ; parameterCategory = 0 ; parameterNumber = 0 ; - probabilityType = 0 ; - scaleFactorOfLowerLimit = 1 ; productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 10 ; scaledValueOfLowerLimit = -15 ; + scaleFactorOfLowerLimit = 1 ; + probabilityType = 0 ; } #Probability of temperature standardized anomaly less than -2 standard deviation 'ptsa_lt_2stdev' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 0 ; + productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 10 ; scaledValueOfLowerLimit = -2 ; - probabilityType = 0 ; scaleFactorOfLowerLimit = 0 ; - productDefinitionTemplateNumber = 9 ; + probabilityType = 0 ; } #Mean sea water temperature in the upper 300 m 'mswt300m' = { @@ -430,8 +549,8 @@ parameterNumber = 15 ; typeOfFirstFixedSurface = 160 ; typeOfSecondFixedSurface = 160 ; - scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = 300 ; scaleFactorOfSecondFixedSurface = 0 ; } @@ -506,12 +625,12 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 102 ; - is_aerosol_optical = 1 ; - typeOfWavelengthInterval = 11 ; scaleFactorOfFirstWavelength = 8 ; - scaledValueOfFirstWavelength = 55 ; typeOfSizeInterval = 255 ; aerosolType = 62004 ; + scaledValueOfFirstWavelength = 55 ; + typeOfWavelengthInterval = 11 ; + is_aerosol_optical = 1 ; } #Ammonium aerosol optical depth at 550 nm 'amaod550' = { @@ -519,11 +638,11 @@ parameterCategory = 20 ; parameterNumber = 102 ; scaleFactorOfFirstWavelength = 8 ; - scaledValueOfFirstWavelength = 55 ; typeOfSizeInterval = 255 ; aerosolType = 62003 ; - is_aerosol_optical = 1 ; + scaledValueOfFirstWavelength = 55 ; typeOfWavelengthInterval = 11 ; + is_aerosol_optical = 1 ; } #Biogenic secondary organic aerosol mass mixing ratio 'aermr19' = { @@ -556,8 +675,8 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 2 ; - typeOfGeneratingProcess = 20 ; aerosolType = 62003 ; + typeOfGeneratingProcess = 20 ; is_aerosol = 1 ; } #Biogenic secondary organic aerosol mass mixing ratio increment @@ -566,17 +685,17 @@ parameterCategory = 20 ; parameterNumber = 2 ; aerosolType = 62032 ; - is_aerosol = 1 ; typeOfGeneratingProcess = 20 ; + is_aerosol = 1 ; } #Anthropogenic secondary organic aerosol mass mixing ratio increment 'aermr20diff' = { discipline = 0 ; parameterCategory = 20 ; parameterNumber = 2 ; - is_aerosol = 1 ; - typeOfGeneratingProcess = 20 ; aerosolType = 62033 ; + typeOfGeneratingProcess = 20 ; + is_aerosol = 1 ; } #Dry deposition of ammonium aerosol 'aerddpam' = { @@ -607,26 +726,26 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 10 ; - is_aerosol = 1 ; aerosolType = 62003 ; + is_aerosol = 1 ; } #Vertically integrated mass of ammonium aerosol 'aermssam' = { discipline = 0 ; parameterCategory = 20 ; parameterNumber = 1 ; - is_aerosol = 1 ; - typeOfSecondFixedSurface = 8 ; typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; aerosolType = 62003 ; + is_aerosol = 1 ; } #Dry deposition of biogenic secondary organic aerosol 'aerddpsoab' = { discipline = 0 ; parameterCategory = 20 ; parameterNumber = 12 ; - is_aerosol = 1 ; aerosolType = 62032 ; + is_aerosol = 1 ; } #Sedimentation of biogenic secondary organic aerosol 'aersdmsoab' = { @@ -657,8 +776,8 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 1 ; - is_aerosol = 1 ; aerosolType = 62032 ; + is_aerosol = 1 ; } #Dry deposition of anthropogenic secondary organic aerosol 'aerddpsoaa' = { @@ -689,8 +808,8 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 10 ; - is_aerosol = 1 ; aerosolType = 62033 ; + is_aerosol = 1 ; } #Vertically integrated mass of anthropogenic secondary organic aerosol 'aermsssoaa' = { @@ -1842,12 +1961,21 @@ parameterCategory = 2 ; parameterNumber = 22 ; typeOfFirstFixedSurface = 103 ; - scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfFirstFixedSurface = 10 ; - typeOfStatisticalProcessing = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 3 ; } +#Instantaneous 10 metre wind gust +'i10fg' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } #Relative humidity with respect to water 'rhw' = { discipline = 0 ; @@ -1866,12 +1994,6 @@ parameterCategory = 19 ; parameterNumber = 19 ; } -#Fraction of stratiform precipitation cover -'fspc' = { - discipline = 0 ; - parameterCategory = 6 ; - parameterNumber = 36 ; - } #Fraction of convective precipitation cover 'fcpc' = { discipline = 0 ; @@ -1883,21 +2005,21 @@ discipline = 0 ; parameterCategory = 7 ; parameterNumber = 6 ; - typeOfStatisticalProcessing = 2 ; - typeOfSecondFixedSurface = 8 ; - lengthOfTimeRange = 6 ; - indicatorOfUnitForTimeRange = 1 ; typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 6 ; } #Maximum CAPES in the last 6 hours 'mxcapes6' = { discipline = 0 ; parameterCategory = 7 ; parameterNumber = 19 ; - indicatorOfUnitForTimeRange = 1 ; typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 2 ; typeOfSecondFixedSurface = 8 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 6 ; } #2 metre relative humidity with respect to water @@ -1906,8 +2028,8 @@ parameterCategory = 1 ; parameterNumber = 93 ; typeOfFirstFixedSurface = 103 ; - scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; } #Liquid water content in snow pack 'lwcs' = { @@ -1942,9 +2064,9 @@ discipline = 0 ; parameterCategory = 17 ; parameterNumber = 4 ; - indicatorOfUnitForTimeRange = 1 ; typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 8 ; + indicatorOfUnitForTimeRange = 1 ; typeOfStatisticalProcessing = 0 ; lengthOfTimeRange = 1 ; } @@ -1953,8 +2075,8 @@ discipline = 0 ; parameterCategory = 17 ; parameterNumber = 2 ; - typeOfSecondFixedSurface = 8 ; typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Averaged cloud-to-ground lightning flash density in the last hour 'licga1' = { @@ -1963,9 +2085,9 @@ parameterNumber = 2 ; typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 8 ; + indicatorOfUnitForTimeRange = 1 ; typeOfStatisticalProcessing = 0 ; lengthOfTimeRange = 1 ; - indicatorOfUnitForTimeRange = 1 ; } #Unbalanced component of specific humidity 'ucq' = { @@ -1992,31 +2114,31 @@ parameterNumber = 4 ; typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 8 ; + indicatorOfUnitForTimeRange = 1 ; typeOfStatisticalProcessing = 0 ; lengthOfTimeRange = 3 ; - indicatorOfUnitForTimeRange = 1 ; } #Averaged total lightning flash density in the last 6 hours 'litota6' = { discipline = 0 ; parameterCategory = 17 ; parameterNumber = 4 ; - typeOfStatisticalProcessing = 0 ; - lengthOfTimeRange = 6 ; - indicatorOfUnitForTimeRange = 1 ; typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 8 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 6 ; } #Averaged cloud-to-ground lightning flash density in the last 3 hours 'licga3' = { discipline = 0 ; parameterCategory = 17 ; parameterNumber = 2 ; - typeOfStatisticalProcessing = 0 ; typeOfFirstFixedSurface = 1 ; - lengthOfTimeRange = 3 ; typeOfSecondFixedSurface = 8 ; indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 3 ; } #Averaged cloud-to-ground lightning flash density in the last 6 hours 'licga6' = { @@ -2024,58 +2146,80 @@ parameterCategory = 17 ; parameterNumber = 2 ; typeOfFirstFixedSurface = 1 ; - typeOfStatisticalProcessing = 0 ; typeOfSecondFixedSurface = 8 ; - lengthOfTimeRange = 6 ; indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 0 ; + lengthOfTimeRange = 6 ; } #Soil moisture top 20 cm 'sm20' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 22 ; - scaleFactorOfFirstFixedSurface = 0 ; - scaledValueOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 106 ; typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = 2 ; scaleFactorOfSecondFixedSurface = 1 ; - typeOfFirstFixedSurface = 106 ; } #Soil moisture top 100 cm 'sm100' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 22 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = 10 ; scaleFactorOfSecondFixedSurface = 1 ; - typeOfFirstFixedSurface = 106 ; - scaleFactorOfFirstFixedSurface = 0 ; - scaledValueOfFirstFixedSurface = 0 ; - typeOfSecondFixedSurface = 106 ; + } +#Total column rain water +'tcrw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Total column snow water +'tcsw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Ice temperature +'ist' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; } #Soil temperature top 20 cm 'st20' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 2 ; - scaledValueOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 106 ; typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = 2 ; scaleFactorOfSecondFixedSurface = 1 ; - typeOfFirstFixedSurface = 106 ; - scaleFactorOfFirstFixedSurface = 0 ; } #Soil temperature top 100 cm 'st100' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 2 ; - scaleFactorOfSecondFixedSurface = 1 ; typeOfFirstFixedSurface = 106 ; - scaleFactorOfFirstFixedSurface = 0 ; - scaledValueOfFirstFixedSurface = 0 ; typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = 1 ; } #Atmosphere emission mass flux of Methane from Wetlands 'e_WLCH4' = { @@ -2100,6 +2244,27 @@ parameterCategory = 0 ; parameterNumber = 33 ; } +#Instantaneous large-scale surface precipitation fraction +'ilspf' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective rain rate +'crr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale rain rate +'lsrr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + } #Mixed-layer CAPE in the lowest 50 hPa 'mlcape50' = { discipline = 0 ; @@ -2168,9 +2333,9 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 2 ; - scaleFactorOfFirstFixedSurface = 0 ; - scaledValueOfFirstFixedSurface = 200 ; typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; } #200 metre V wind component 'v200' = { @@ -2178,8 +2343,8 @@ parameterCategory = 2 ; parameterNumber = 3 ; typeOfFirstFixedSurface = 103 ; - scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfFirstFixedSurface = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; } #200 metre wind speed 'si200' = { @@ -2187,16 +2352,16 @@ parameterCategory = 2 ; parameterNumber = 1 ; typeOfFirstFixedSurface = 103 ; - scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfFirstFixedSurface = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; } #100 metre wind speed 'si100' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 1 ; - scaledValueOfFirstFixedSurface = 100 ; typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 100 ; scaleFactorOfFirstFixedSurface = 0 ; } #Urban cover @@ -2265,6 +2430,29 @@ parameterCategory = 0 ; parameterNumber = 49 ; } +#Accumulated freezing rain water equivalent +'fzrawe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Runoff water equivalent +'rowe' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow evaporation water equivalent +'eswe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Mean temperature tendency due to short-wave radiation 'mttswr' = { discipline = 0 ; @@ -2488,18 +2676,18 @@ discipline = 1 ; parameterCategory = 0 ; parameterNumber = 7 ; + typeOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; typeOfStatisticalProcessing = 0 ; lengthOfTimeRange = 6 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfFirstFixedSurface = 1 ; } #Mean discharge in the last 24 hours 'dis24' = { discipline = 1 ; parameterCategory = 0 ; parameterNumber = 7 ; - indicatorOfUnitForTimeRange = 1 ; typeOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; typeOfStatisticalProcessing = 0 ; lengthOfTimeRange = 24 ; } @@ -2648,19 +2836,13 @@ parameterCategory = 6 ; parameterNumber = 22 ; } -#Evaporation rate -'evarate' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 79 ; - } #Evaporation 'eva' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 79 ; - typeOfStatisticalProcessing = 1 ; typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #10 metre wind direction 'wdir10' = { @@ -2668,8 +2850,8 @@ parameterCategory = 2 ; parameterNumber = 0 ; typeOfFirstFixedSurface = 103 ; - scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; } #Direct short wave radiation flux 'dirswrf' = { @@ -2688,8 +2870,8 @@ discipline = 0 ; parameterCategory = 4 ; parameterNumber = 13 ; - typeOfStatisticalProcessing = 1 ; typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Evaporation in the last 6 hours 'eva06' = { @@ -2697,17 +2879,17 @@ parameterCategory = 1 ; parameterNumber = 79 ; typeOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; typeOfStatisticalProcessing = 1 ; lengthOfTimeRange = 6 ; - indicatorOfUnitForTimeRange = 1 ; } #Evaporation in the last 24 hours 'eva24' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 79 ; - indicatorOfUnitForTimeRange = 1 ; typeOfFirstFixedSurface = 1 ; + indicatorOfUnitForTimeRange = 1 ; typeOfStatisticalProcessing = 1 ; lengthOfTimeRange = 24 ; } @@ -2843,6 +3025,12 @@ parameterCategory = 3 ; parameterNumber = 27 ; } +#Soil moisture +'som' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 19 ; + } #Accumulated surface downward short-wave radiation flux, clear sky 'adswrf_cs' = { discipline = 0 ; @@ -3052,43 +3240,43 @@ parameterCategory = 0 ; parameterNumber = 9 ; } -#Forest fire weather index +#Forest fire weather index (as defined by the Canadian Forest Service) 'fwinx' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 5 ; } -#Fine fuel moisture code +#Fine fuel moisture code (as defined by the Canadian Forest Service) 'ffmcode' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 6 ; } -#Duff moisture code +#Duff moisture code (as defined by the Canadian Forest Service) 'dufmcode' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 7 ; } -#Drought code +#Drought code (as defined by the Canadian Forest Service) 'drtcode' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 8 ; } -#Initial fire spread index +#Initial fire spread index (as defined by the Canadian Forest Service) 'infsinx' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 9 ; } -#Fire buildup index +#Fire buildup index (as defined by the Canadian Forest Service) 'fbupinx' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 10 ; } -#Fire daily severity rating +#Fire daily severity rating (as defined by the Canadian Forest Service) 'fdsrte' = { discipline = 2 ; parameterCategory = 4 ; @@ -4439,19 +4627,19 @@ parameterCategory = 20 ; parameterNumber = 7 ; } -#Dry deposition mass flux +#Dry deposition mass flux 'drydep_mflx' = { discipline = 0 ; parameterCategory = 20 ; parameterNumber = 6 ; } -#Sedimentation mass flux +#Sedimentation mass flux 'sed_mflx' = { discipline = 0 ; parameterCategory = 20 ; parameterNumber = 11 ; } -#Volume mixing ratio +#Volume mixing ratio 'vol_mixrat' = { discipline = 0 ; parameterCategory = 20 ; @@ -4533,7 +4721,7 @@ is_chemical_srcsink = 1 ; sourceSinkChemicalPhysicalProcess = 16 ; } -#Emission mass flux from residential, commercial and other combustion +#Emission mass flux from residential, commercial and other combustion 'emi_mflx_rescomb' = { discipline = 0 ; parameterCategory = 20 ; @@ -4683,6 +4871,18 @@ parameterCategory = 0 ; parameterNumber = 15 ; } +#Significant height of wind waves +'shww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean period of wind waves +'mpww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } #Eastward sea water velocity 'uoe' = { discipline = 10 ; @@ -4697,6 +4897,22 @@ parameterNumber = 3 ; typeOfFirstFixedSurface = 160 ; } +#Vertical integral of eastward water vapour flux +'viwve' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Vertical integral of northward water vapour flux +'viwvn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } #Surface runoff 'sro' = { discipline = 2 ; @@ -4771,6 +4987,12 @@ typeOfGeneratingProcess = 20 ; is_chemical = 1 ; } +#Friction velocity +'zust' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + } #Lake total depth 'dl' = { discipline = 1 ; @@ -4778,6 +5000,8 @@ parameterNumber = 0 ; typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; } #Lake mix-layer temperature 'lmlt' = { @@ -4810,6 +5034,8 @@ parameterNumber = 1 ; typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; } #Lake shape factor 'lshf' = { @@ -4832,14 +5058,18 @@ parameterNumber = 5 ; typeOfFirstFixedSurface = 174 ; typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; } #100 metre U wind component 'u100' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 2 ; - scaledValueOfFirstFixedSurface = 100 ; typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 100 ; scaleFactorOfFirstFixedSurface = 0 ; } #100 metre V wind component @@ -4848,31 +5078,31 @@ parameterCategory = 2 ; parameterNumber = 3 ; typeOfFirstFixedSurface = 103 ; - scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = 0 ; } #Total precipitation of at least 10 mm 'tpg10' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - probabilityType = 3 ; - scaledValueOfLowerLimit = 10 ; - scaleFactorOfLowerLimit = 0 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; - productDefinitionTemplateNumber = 9 ; + scaledValueOfLowerLimit = 10 ; + scaleFactorOfLowerLimit = 0 ; + probabilityType = 3 ; } #Total precipitation of at least 20 mm 'tpg20' = { discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; - scaleFactorOfLowerLimit = 0 ; - scaledValueOfLowerLimit = 20 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; + scaledValueOfLowerLimit = 20 ; + scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; } #Stream function @@ -4918,11 +5148,11 @@ discipline = 0 ; parameterCategory = 0 ; parameterNumber = 0 ; - typeOfStatisticalProcessing = 2 ; typeOfFirstFixedSurface = 103 ; - scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 6 ; } #Minimum temperature at 2 metres in the last 6 hours @@ -4931,10 +5161,10 @@ parameterCategory = 0 ; parameterNumber = 0 ; typeOfFirstFixedSurface = 103 ; - typeOfStatisticalProcessing = 3 ; - scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; lengthOfTimeRange = 6 ; } #Geopotential @@ -4994,12 +5224,6 @@ parameterCategory = 2 ; parameterNumber = 12 ; } -#Boundary layer dissipation -'bld' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 20 ; - } #Surface sensible heat flux 'sshf' = { discipline = 0 ; @@ -5013,8 +5237,8 @@ discipline = 0 ; parameterCategory = 0 ; parameterNumber = 10 ; - typeOfStatisticalProcessing = 1 ; typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Mean sea level pressure 'msl' = { @@ -5046,18 +5270,18 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - typeOfFirstFixedSurface = 103 ; } #10 metre V wind component 'v10' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - typeOfFirstFixedSurface = 103 ; } #2 metre temperature 't2m' = { @@ -5065,8 +5289,8 @@ parameterCategory = 0 ; parameterNumber = 0 ; typeOfFirstFixedSurface = 103 ; - scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; } #2 metre dewpoint temperature 'd2m' = { @@ -5074,8 +5298,8 @@ parameterCategory = 0 ; parameterNumber = 6 ; typeOfFirstFixedSurface = 103 ; - scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; } #Land-sea mask 'lsm' = { @@ -5090,37 +5314,37 @@ parameterCategory = 0 ; parameterNumber = 1 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'ssr' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 9 ; - typeOfStatisticalProcessing = 1 ; typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'str' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 5 ; - typeOfStatisticalProcessing = 1 ; typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'ttr' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 5 ; - typeOfStatisticalProcessing = 1 ; typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; } #Sunshine duration 'sund' = { discipline = 0 ; parameterCategory = 6 ; parameterNumber = 24 ; - typeOfStatisticalProcessing = 1 ; typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Brightness temperature 'btmp' = { @@ -5134,8 +5358,8 @@ parameterCategory = 2 ; parameterNumber = 1 ; typeOfFirstFixedSurface = 103 ; - scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; } #Skin temperature 'skt' = { @@ -5150,12 +5374,6 @@ parameterCategory = 0 ; parameterNumber = 10 ; } -#Sensible heat net flux -'shtfl' = { - discipline = 0 ; - parameterCategory = 0 ; - parameterNumber = 11 ; - } #Heat index 'heatx' = { discipline = 0 ; @@ -5425,6 +5643,7 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; } #Total snowfall rate water equivalent 'tsrwe' = { @@ -5449,6 +5668,7 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; } #Total snowfall rate 'tsrate' = { @@ -5576,12 +5796,6 @@ parameterCategory = 3 ; parameterNumber = 1 ; } -#Geometric height -'dist' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 6 ; - } #Altimeter setting 'alts' = { discipline = 0 ; @@ -5624,12 +5838,6 @@ parameterCategory = 3 ; parameterNumber = 17 ; } -#Planetary boundary layer height -'hpbl' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 18 ; - } #5-wave geopotential height anomaly 'p260084' = { discipline = 0 ; @@ -6194,12 +6402,6 @@ parameterCategory = 1 ; parameterNumber = 2 ; } -#Land cover (1=land, 0=sea) -'land' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 0 ; - } #Vegetation 'veg' = { discipline = 2 ; @@ -6824,18 +7026,6 @@ parameterCategory = 1 ; parameterNumber = 16 ; } -#Significant height of wind waves -'shww' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 5 ; - } -#Mean period of wind waves -'mpww' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 6 ; - } #Direction of swell waves 'swdir' = { discipline = 10 ; @@ -6896,35 +7086,35 @@ parameterCategory = 2 ; parameterNumber = 22 ; productDefinitionTemplateNumber = 9 ; - scaledValueOfFirstFixedSurface = 10 ; - probabilityType = 3 ; - scaleFactorOfFirstFixedSurface = 0 ; - scaleFactorOfLowerLimit = 0 ; - scaledValueOfLowerLimit = 15 ; typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 2 ; + scaledValueOfLowerLimit = 15 ; + scaleFactorOfLowerLimit = 0 ; + probabilityType = 3 ; } #10 metre wind gust of at least 20 m/s 'fg10g20' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; - typeOfStatisticalProcessing = 2 ; productDefinitionTemplateNumber = 9 ; - scaledValueOfFirstFixedSurface = 10 ; - probabilityType = 3 ; - scaleFactorOfLowerLimit = 0 ; - scaleFactorOfFirstFixedSurface = 0 ; - scaledValueOfLowerLimit = 20 ; typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfLowerLimit = 20 ; + scaleFactorOfLowerLimit = 0 ; + probabilityType = 3 ; } #Convective inhibition 'cin' = { discipline = 0 ; parameterCategory = 7 ; parameterNumber = 7 ; - typeOfSecondFixedSurface = 8 ; typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Orography 'orog' = { @@ -6956,8 +7146,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 53 ; - typeOfStatisticalProcessing = 1 ; typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Total Cloud Cover 'tcc' = { @@ -6974,22 +7164,22 @@ parameterNumber = 12 ; typeOfFirstFixedSurface = 106 ; typeOfSecondFixedSurface = 106 ; - scaledValueOfSecondFixedSurface = 2 ; scaledValueOfFirstFixedSurface = 0 ; - scaleFactorOfSecondFixedSurface = 1 ; scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 2 ; + scaleFactorOfSecondFixedSurface = 1 ; } #Wilting point 'wilt' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 26 ; - typeOfSecondFixedSurface = 106 ; typeOfFirstFixedSurface = 106 ; - scaleFactorOfFirstFixedSurface = 0 ; - scaleFactorOfSecondFixedSurface = 1 ; + typeOfSecondFixedSurface = 106 ; scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = 2 ; + scaleFactorOfSecondFixedSurface = 1 ; } #Total Precipitation 'tp' = { diff --git a/definitions/grib2/local.98.500.def b/definitions/grib2/local.98.500.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/localConcepts/ecmf/cfName.def b/definitions/grib2/localConcepts/ecmf/cfName.def index 759542767..d9435fbee 100644 --- a/definitions/grib2/localConcepts/ecmf/cfName.def +++ b/definitions/grib2/localConcepts/ecmf/cfName.def @@ -20,9 +20,12 @@ } #Large-scale precipitation 'lwe_thickness_of_stratiform_precipitation_amount' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 142 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Convective precipitation 'lwe_thickness_of_convective_precipitation_amount' = { @@ -33,9 +36,12 @@ } #Snowfall 'lwe_thickness_of_snowfall_amount' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 144 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Tendency of surface pressure 'tendency_of_surface_air_pressure' = { @@ -45,9 +51,12 @@ } #Total cloud cover 'cloud_area_fraction' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 164 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Albedo 'surface_albedo' = { @@ -57,9 +66,12 @@ } #Evaporation 'lwe_thickness_of_water_evaporation_amount' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 182 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Convective cloud cover 'convective_cloud_area_fraction' = { diff --git a/definitions/grib2/localConcepts/ecmf/cfName.legacy.def b/definitions/grib2/localConcepts/ecmf/cfName.legacy.def index 40921db07..6ef97fd7f 100644 --- a/definitions/grib2/localConcepts/ecmf/cfName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/cfName.legacy.def @@ -112,3 +112,27 @@ parameterCategory = 128 ; parameterNumber = 137 ; } +#Large-scale precipitation +'lwe_thickness_of_stratiform_precipitation_amount' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 142 ; +} +#Snowfall +'lwe_thickness_of_snowfall_amount' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 144 ; +} +#Total cloud cover +'cloud_area_fraction' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 164 ; +} +#Evaporation +'lwe_thickness_of_water_evaporation_amount' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 182 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index 792df8c02..5a6667f58 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -25,9 +25,12 @@ } #Surface runoff 'sro' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 8 ; + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Sub-surface runoff 'ssro' = { @@ -95,24 +98,6 @@ parameterCategory = 128 ; parameterNumber = 20 ; } -#Unbalanced component of temperature -'uctp' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 21 ; - } -#Unbalanced component of logarithm of surface pressure -'ucln' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 22 ; - } -#Unbalanced component of divergence -'ucdv' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 23 ; - } #Reserved for future unbalanced components 'p24.128' = { discipline = 192 ; @@ -157,9 +142,10 @@ } #Snow albedo 'asn' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 32 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; } #Ice temperature layer 1 'istl1' = { @@ -211,15 +197,21 @@ } #Snow evaporation 'es' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 44 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 197 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Snowmelt 'smlt' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 45 ; + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 203 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Solar duration 'sdur' = { @@ -233,35 +225,29 @@ parameterCategory = 128 ; parameterNumber = 48 ; } -#Large-scale precipitation fraction -'lspf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 50 ; - } #Maximum temperature at 2 metres in the last 24 hours 'mx2t24' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 0 ; - scaledValueOfFirstFixedSurface = 2 ; typeOfFirstFixedSurface = 103 ; - lengthOfTimeRange = 24 ; + scaledValueOfFirstFixedSurface = 2 ; scaleFactorOfFirstFixedSurface = 0 ; - typeOfStatisticalProcessing = 2 ; indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 24 ; } #Minimum temperature at 2 metres in the last 24 hours 'mn2t24' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 0 ; - lengthOfTimeRange = 24 ; - scaleFactorOfFirstFixedSurface = 0 ; - typeOfStatisticalProcessing = 3 ; - indicatorOfUnitForTimeRange = 1 ; - scaledValueOfFirstFixedSurface = 2 ; typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 24 ; } #Montgomery potential 'mont' = { @@ -281,18 +267,6 @@ parameterCategory = 128 ; parameterNumber = 56 ; } -#Downward UV radiation at the surface -'uvb' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 57 ; - } -#Photosynthetically active radiation at the surface -'par' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 58 ; - } #Observation count 'obct' = { discipline = 192 ; @@ -674,9 +648,12 @@ } #Large-scale precipitation 'lsp' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 142 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Convective precipitation 'cp' = { @@ -687,9 +664,12 @@ } #Snowfall 'sf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 144 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Charnock 'chnk' = { @@ -734,12 +714,6 @@ parameterCategory = 128 ; parameterNumber = 158 ; } -#Boundary layer height -'blh' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 159 ; - } #Standard deviation of orography 'sdor' = { discipline = 192 ; @@ -766,9 +740,12 @@ } #Total cloud cover 'tcc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 164 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Soil temperature level 2 'stl2' = { @@ -790,9 +767,12 @@ } #Evaporation 'e' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 182 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Soil temperature level 3 'stl3' = { @@ -814,21 +794,24 @@ } #Low cloud cover 'lcc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 186 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; } #Medium cloud cover 'mcc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 187 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; } #High cloud cover 'hcc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 188 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; } #East-West component of sub-gridscale orographic variance 'ewov' = { @@ -854,24 +837,6 @@ parameterCategory = 128 ; parameterNumber = 193 ; } -#Eastward gravity wave surface stress -'lgws' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 195 ; - } -#Northward gravity wave surface stress -'mgws' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 196 ; - } -#Gravity wave dissipation -'gwd' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 197 ; - } #Skin reservoir content 'src' = { discipline = 192 ; @@ -910,24 +875,6 @@ parameterCategory = 128 ; parameterNumber = 206 ; } -#Top net solar radiation, clear sky -'tsrc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 208 ; - } -#Top net thermal radiation, clear sky -'ttrc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 209 ; - } -#TOA incident solar radiation -'tisr' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 212 ; - } #Vertically integrated moisture divergence 'vimd' = { discipline = 192 ; @@ -1028,30 +975,6 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } -#Instantaneous eastward turbulent surface stress -'iews' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 229 ; - } -#Instantaneous northward turbulent surface stress -'inss' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 230 ; - } -#Instantaneous surface sensible heat flux -'ishf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 231 ; - } -#Instantaneous moisture flux -'ie' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 232 ; - } #Apparent surface humidity 'asq' = { discipline = 192 ; @@ -3167,8 +3090,8 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 2 ; - is_aerosol = 1 ; aerosolType = 65533 ; + is_aerosol = 1 ; } #Aerosol type 13 mass mixing ratio 'aermr13diff' = { @@ -3255,8 +3178,8 @@ parameterCategory = 20 ; parameterNumber = 2 ; aerosolType = 65534 ; - is_aerosol = 1 ; typeOfGeneratingProcess = 20 ; + is_aerosol = 1 ; } #Nitrate coarse mode aerosol mass mixing ratio 'aermr17diff' = { @@ -3264,8 +3187,8 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 2 ; - typeOfGeneratingProcess = 20 ; aerosolType = 65533 ; + typeOfGeneratingProcess = 20 ; is_aerosol = 1 ; } #Experimental product @@ -5128,6 +5051,432 @@ parameterCategory = 213 ; parameterNumber = 150 ; } +#Random pattern 51 for SPP scheme +'spp51' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 151 ; + } +#Random pattern 52 for SPP scheme +'spp52' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 152 ; + } +#Random pattern 53 for SPP scheme +'spp53' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 153 ; + } +#Random pattern 54 for SPP scheme +'spp54' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 154 ; + } +#Random pattern 55 for SPP scheme +'spp55' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 155 ; + } +#Random pattern 56 for SPP scheme +'spp56' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 156 ; + } +#Random pattern 57 for SPP scheme +'spp57' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 157 ; + } +#Random pattern 58 for SPP scheme +'spp58' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 158 ; + } +#Random pattern 59 for SPP scheme +'spp59' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 159 ; + } +#Random pattern 60 for SPP scheme +'spp60' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 160 ; + } +#Random pattern 61 for SPP scheme +'spp61' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 161 ; + } +#Random pattern 62 for SPP scheme +'spp62' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 162 ; + } +#Random pattern 63 for SPP scheme +'spp63' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 163 ; + } +#Random pattern 64 for SPP scheme +'spp64' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 164 ; + } +#Random pattern 65 for SPP scheme +'spp65' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 165 ; + } +#Random pattern 66 for SPP scheme +'spp66' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 166 ; + } +#Random pattern 67 for SPP scheme +'spp67' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 167 ; + } +#Random pattern 68 for SPP scheme +'spp68' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 168 ; + } +#Random pattern 69 for SPP scheme +'spp69' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 169 ; + } +#Random pattern 70 for SPP scheme +'spp70' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 170 ; + } +#Random pattern 71 for SPP scheme +'spp71' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 171 ; + } +#Random pattern 72 for SPP scheme +'spp72' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 172 ; + } +#Random pattern 73 for SPP scheme +'spp73' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 173 ; + } +#Random pattern 74 for SPP scheme +'spp74' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 174 ; + } +#Random pattern 75 for SPP scheme +'spp75' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 175 ; + } +#Random pattern 76 for SPP scheme +'spp76' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 176 ; + } +#Random pattern 77 for SPP scheme +'spp77' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 177 ; + } +#Random pattern 78 for SPP scheme +'spp78' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 178 ; + } +#Random pattern 79 for SPP scheme +'spp79' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 179 ; + } +#Random pattern 80 for SPP scheme +'spp80' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 180 ; + } +#Random pattern 81 for SPP scheme +'spp81' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 181 ; + } +#Random pattern 82 for SPP scheme +'spp82' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 182 ; + } +#Random pattern 83 for SPP scheme +'spp83' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 183 ; + } +#Random pattern 84 for SPP scheme +'spp84' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 184 ; + } +#Random pattern 85 for SPP scheme +'spp85' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 185 ; + } +#Random pattern 86 for SPP scheme +'spp86' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 186 ; + } +#Random pattern 87 for SPP scheme +'spp87' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 187 ; + } +#Random pattern 88 for SPP scheme +'spp88' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 188 ; + } +#Random pattern 89 for SPP scheme +'spp89' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 189 ; + } +#Random pattern 90 for SPP scheme +'spp90' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 190 ; + } +#Random pattern 91 for SPP scheme +'spp91' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 191 ; + } +#Random pattern 92 for SPP scheme +'spp92' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 192 ; + } +#Random pattern 93 for SPP scheme +'spp93' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 193 ; + } +#Random pattern 94 for SPP scheme +'spp94' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 194 ; + } +#Random pattern 95 for SPP scheme +'spp95' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 195 ; + } +#Random pattern 96 for SPP scheme +'spp96' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 196 ; + } +#Random pattern 97 for SPP scheme +'spp97' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 197 ; + } +#Random pattern 98 for SPP scheme +'spp98' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 198 ; + } +#Random pattern 99 for SPP scheme +'spp99' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 199 ; + } +#Random pattern 100 for SPP scheme +'spp100' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 200 ; + } +#Random pattern 101 for SPP scheme +'spp101' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 201 ; + } +#Random pattern 102 for SPP scheme +'spp102' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 202 ; + } +#Random pattern 103 for SPP scheme +'spp103' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 203 ; + } +#Random pattern 104 for SPP scheme +'spp104' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 204 ; + } +#Random pattern 105 for SPP scheme +'spp105' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 205 ; + } +#Random pattern 106 for SPP scheme +'spp106' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 206 ; + } +#Random pattern 107 for SPP scheme +'spp107' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 207 ; + } +#Random pattern 108 for SPP scheme +'spp108' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 208 ; + } +#Random pattern 109 for SPP scheme +'spp109' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 209 ; + } +#Random pattern 110 for SPP scheme +'spp110' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 210 ; + } +#Random pattern 111 for SPP scheme +'spp111' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 211 ; + } +#Random pattern 112 for SPP scheme +'spp112' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 212 ; + } +#Random pattern 113 for SPP scheme +'spp113' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 213 ; + } +#Random pattern 114 for SPP scheme +'spp114' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 214 ; + } +#Random pattern 115 for SPP scheme +'spp115' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 215 ; + } +#Random pattern 116 for SPP scheme +'spp116' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 216 ; + } +#Random pattern 117 for SPP scheme +'spp117' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 217 ; + } +#Random pattern 118 for SPP scheme +'spp118' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 218 ; + } +#Random pattern 119 for SPP scheme +'spp119' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 219 ; + } +#Random pattern 120 for SPP scheme +'spp120' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 220 ; + } +#Random pattern 121 for SPP scheme +'spp121' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 221 ; + } #Cosine of solar zenith angle 'uvcossza' = { discipline = 192 ; @@ -6583,8 +6932,8 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 192 ; - is_aerosol = 1 ; aerosolType = 65533 ; + is_aerosol = 1 ; } #Dry deposition of fine-mode nitrate aerosol 'aerddpnif' = { @@ -6601,8 +6950,8 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 6 ; - is_aerosol = 1 ; aerosolType = 65533 ; + is_aerosol = 1 ; } #Sedimentation of fine-mode nitrate aerosol 'aersdmnif' = { @@ -6682,10 +7031,10 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 1 ; - aerosolType = 65534 ; - is_aerosol = 1 ; typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 8 ; + aerosolType = 65534 ; + is_aerosol = 1 ; } #Vertically integrated mass of coarse-mode nitrate aerosol 'aermssnic' = { @@ -6704,12 +7053,12 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 102 ; - is_aerosol_optical = 1 ; - typeOfWavelengthInterval = 11 ; scaleFactorOfFirstWavelength = 8 ; - scaledValueOfFirstWavelength = 55 ; typeOfSizeInterval = 255 ; aerosolType = 65534 ; + scaledValueOfFirstWavelength = 55 ; + typeOfWavelengthInterval = 11 ; + is_aerosol_optical = 1 ; } #Coarse-mode nitrate aerosol optical depth at 550 nm 'aerodnic' = { @@ -6717,12 +7066,12 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 102 ; + scaleFactorOfFirstWavelength = 8 ; typeOfSizeInterval = 255 ; aerosolType = 65533 ; - is_aerosol_optical = 1 ; - typeOfWavelengthInterval = 11 ; - scaleFactorOfFirstWavelength = 8 ; scaledValueOfFirstWavelength = 55 ; + typeOfWavelengthInterval = 11 ; + is_aerosol_optical = 1 ; } #Source/gain of ammonium aerosol 'aersrcam' = { @@ -6739,8 +7088,8 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 193 ; - is_aerosol = 1 ; aerosolType = 62003 ; + is_aerosol = 1 ; } #Source/gain of biogenic secondary organic aerosol 'aersrcsoab' = { @@ -6748,8 +7097,8 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 192 ; - is_aerosol = 1 ; aerosolType = 62032 ; + is_aerosol = 1 ; } #Negative fixer of biogenic secondary organic aerosol 'aerngtsoab' = { @@ -6757,8 +7106,8 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 193 ; - is_aerosol = 1 ; aerosolType = 62032 ; + is_aerosol = 1 ; } #Source/gain of anthropogenic secondary organic aerosol 'aersrcsoaa' = { @@ -10717,8 +11066,8 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 1 ; - is_chemical = 1 ; constituentType = 65531 ; + is_chemical = 1 ; } #Ozone emissions 'e_go3' = { @@ -12046,8 +12395,8 @@ discipline = 0 ; parameterCategory = 20 ; parameterNumber = 3 ; - is_chemical = 1 ; constituentType = 65532 ; + is_chemical = 1 ; } #Atmosphere emission mass flux of Biomass burning volatile organic compounds 'e_VOCBB' = { @@ -13421,31 +13770,25 @@ discipline = 0 ; parameterCategory = 0 ; parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 3 ; - indicatorOfUnitForTimeRange = 1 ; - typeOfFirstFixedSurface = 103 ; - scaleFactorOfFirstFixedSurface = 0 ; - scaledValueOfFirstFixedSurface = 2 ; } #Minimum temperature at 2 metres in the last 3 hours 'mn2t3' = { discipline = 0 ; parameterCategory = 0 ; parameterNumber = 0 ; - indicatorOfUnitForTimeRange = 1 ; typeOfFirstFixedSurface = 103 ; - scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; typeOfStatisticalProcessing = 3 ; lengthOfTimeRange = 3 ; } -#10 metre wind gust in the last 3 hours -'fg310' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 28 ; - } #Soil wetness index in layer 1 'swi1' = { discipline = 192 ; @@ -13541,18 +13884,6 @@ parameterCategory = 0 ; parameterNumber = 196 ; } -#Total column rain water -'tcrw' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 89 ; - } -#Total column snow water -'tcsw' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 90 ; - } #Canopy cover fraction 'ccf' = { discipline = 192 ; @@ -13571,12 +13902,6 @@ parameterCategory = 228 ; parameterNumber = 93 ; } -#Ice temperature -'ist' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 94 ; - } #Evaporation from the top of canopy 'evatc' = { discipline = 192 ; @@ -13607,12 +13932,12 @@ discipline = 4 ; parameterCategory = 8 ; parameterNumber = 254 ; - scaledValueOfFirstWavelength = 740 ; - scaleFactorOfSecondWavelength = missing() ; - scaledValueOfSecondWavelength = missing() ; - is_aerosol_optical = 1 ; - typeOfWavelengthInterval = 11 ; scaleFactorOfFirstWavelength = 9 ; + scaledValueOfFirstWavelength = 740 ; + scaledValueOfSecondWavelength = missing() ; + typeOfWavelengthInterval = 11 ; + scaleFactorOfSecondWavelength = missing() ; + is_aerosol_optical = 1 ; } #Solar induced Chlorophyll fluorescence at 755nm 'sif755' = { @@ -13620,11 +13945,11 @@ discipline = 4 ; parameterCategory = 8 ; parameterNumber = 254 ; - typeOfWavelengthInterval = 11 ; scaleFactorOfFirstWavelength = 9 ; scaledValueOfFirstWavelength = 755 ; - scaleFactorOfSecondWavelength = missing() ; scaledValueOfSecondWavelength = missing() ; + typeOfWavelengthInterval = 11 ; + scaleFactorOfSecondWavelength = missing() ; is_aerosol_optical = 1 ; } #Solar induced Chlorophyll fluorescence at 771nm @@ -13633,12 +13958,12 @@ discipline = 4 ; parameterCategory = 8 ; parameterNumber = 254 ; - scaleFactorOfSecondWavelength = missing() ; - is_aerosol_optical = 1 ; - scaledValueOfSecondWavelength = missing() ; - typeOfWavelengthInterval = 11 ; scaleFactorOfFirstWavelength = 9 ; scaledValueOfFirstWavelength = 771 ; + scaledValueOfSecondWavelength = missing() ; + typeOfWavelengthInterval = 11 ; + scaleFactorOfSecondWavelength = missing() ; + is_aerosol_optical = 1 ; } #Solar induced Chlorophyll fluorescence at 757nm 'sif757' = { @@ -13647,11 +13972,11 @@ parameterCategory = 8 ; parameterNumber = 254 ; scaleFactorOfFirstWavelength = 9 ; - is_aerosol_optical = 1 ; scaledValueOfFirstWavelength = 757 ; - scaleFactorOfSecondWavelength = missing() ; scaledValueOfSecondWavelength = missing() ; typeOfWavelengthInterval = 11 ; + scaleFactorOfSecondWavelength = missing() ; + is_aerosol_optical = 1 ; } #Surface solar radiation downward clear-sky 'ssrdc' = { @@ -13665,6 +13990,15 @@ parameterCategory = 228 ; parameterNumber = 130 ; } +#Accumulated freezing rain +'fzra' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Surface short wave-effective total cloudiness 'tccsw' = { discipline = 192 ; @@ -13679,9 +14013,12 @@ } #Potential evaporation 'pev' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 251 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Irrigation 'irr' = { @@ -13755,7 +14092,7 @@ is_chemical_srcsink = 1 ; sourceSinkChemicalPhysicalProcess = 192 ; } -#Emission mass flux from biomass burning +#Emission mass flux from biomass burning 'emi_mflx_biomburn' = { localTablesVersion = 1 ; discipline = 0 ; @@ -15515,14 +15852,14 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; productDefinitionTemplateNumber = 9 ; - scaleFactorOfLowerLimit = 0 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 25 ; - typeOfFirstFixedSurface = 103 ; + scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; - scaleFactorOfFirstFixedSurface = 0 ; } #2 metre temperature less than 273.15 K 't2l273' = { @@ -15535,10 +15872,10 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - scaledValueOfLowerLimit = 2 ; - scaleFactorOfLowerLimit = 0 ; typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + scaledValueOfLowerLimit = 2 ; + scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; } #Significant wave height of at least 4 m @@ -15548,19 +15885,19 @@ parameterNumber = 3 ; typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + scaledValueOfLowerLimit = 4 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; - scaledValueOfLowerLimit = 4 ; } #Significant wave height of at least 6 m 'swhg6' = { discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - scaledValueOfLowerLimit = 6 ; - productDefinitionTemplateNumber = 5 ; - scaleFactorOfLowerLimit = 0 ; typeOfFirstFixedSurface = 101 ; + productDefinitionTemplateNumber = 5 ; + scaledValueOfLowerLimit = 6 ; + scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; } #Significant wave height of at least 8 m @@ -15568,11 +15905,11 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - probabilityType = 3 ; - scaleFactorOfLowerLimit = 0 ; - scaledValueOfLowerLimit = 8 ; typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + scaledValueOfLowerLimit = 8 ; + scaleFactorOfLowerLimit = 0 ; + probabilityType = 3 ; } #Mean wave period of at least 8 s 'mwpg8' = { @@ -16312,24 +16649,12 @@ parameterCategory = 140 ; parameterNumber = 233 ; } -#Significant height of wind waves -'shww' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 5 ; - } #Mean direction of wind waves 'mdww' = { discipline = 192 ; parameterCategory = 140 ; parameterNumber = 235 ; } -#Mean period of wind waves -'mpww' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 6 ; - } #Significant height of total swell 'shts' = { discipline = 192 ; @@ -17500,18 +17825,6 @@ parameterCategory = 162 ; parameterNumber = 70 ; } -#Vertical integral of eastward water vapour flux -'viwve' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 71 ; - } -#Vertical integral of northward water vapour flux -'viwvn' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 72 ; - } #Vertical integral of eastward geopotential flux 'vige' = { discipline = 192 ; @@ -21850,12 +22163,6 @@ parameterCategory = 220 ; parameterNumber = 228 ; } -#Friction velocity -'zust' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 3 ; - } #Mean temperature at 2 metres 'mean2t' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def index a0c5738a9..782e4fb08 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def @@ -400,3 +400,219 @@ parameterCategory = 228 ; parameterNumber = 60 ; } +#Eastward gravity wave surface stress +'lgws' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 195 ; +} +#Friction velocity +'zust' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 3 ; +} +#Instantaneous eastward turbulent surface stress +'iews' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 229 ; +} +#Instantaneous northward turbulent surface stress +'inss' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 230 ; +} +#Instantaneous surface sensible heat flux +'ishf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 231 ; +} +#Instantaneous moisture flux +'ie' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 232 ; +} +#Large-scale precipitation +'lsp' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 142 ; +} +#Large-scale precipitation fraction +'lspf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 50 ; +} +#Northward gravity wave surface stress +'mgws' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 196 ; +} +#Snow evaporation +'es' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 44 ; +} +#Snowfall +'sf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 144 ; +} +#Surface runoff +'sro' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 8 ; +} +#TOA incident solar radiation +'tisr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 212 ; +} +#Top net thermal radiation, clear sky +'ttrc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 209 ; +} +#Top net solar radiation, clear sky +'tsrc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 208 ; +} +#Total cloud cover +'tcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 164 ; +} +#Total column rain water +'tcrw' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 89 ; +} +#Total column snow water +'tcsw' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 90 ; +} +#Vertical integral of eastward water vapour flux +'viwve' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 71 ; +} +#Vertical integral of northward water vapour flux +'viwvn' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 72 ; +} +#Snow albedo +'asn' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 32 ; +} +#Ice temperature +'ist' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 94 ; +} +#Snowmelt +'smlt' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 45 ; +} +#Downward UV radiation at the surface +'uvb' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 57 ; +} +#Photosynthetically active radiation at the surface +'par' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 58 ; +} +#Boundary layer height +'blh' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 159 ; +} +#Evaporation +'e' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 182 ; +} +#Low cloud cover +'lcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 186 ; +} +#Medium cloud cover +'mcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 187 ; +} +#High cloud cover +'hcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 188 ; +} +#Gravity wave dissipation +'gwd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 197 ; +} +#Potential evaporation +'pev' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 251 ; +} +#Unbalanced component of temperature +'uctp' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 21 ; +} +#Unbalanced component of logarithm of surface pressure +'ucln' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 22 ; +} +#Unbalanced component of divergence +'ucdv' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 23 ; +} +#10 metre wind gust in the last 3 hours +'fg310' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 28 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index 365cc4c46..bb408666d 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -25,9 +25,12 @@ } #Surface runoff 'Surface runoff' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 8 ; + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Sub-surface runoff 'Sub-surface runoff' = { @@ -95,24 +98,6 @@ parameterCategory = 128 ; parameterNumber = 20 ; } -#Unbalanced component of temperature -'Unbalanced component of temperature' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 21 ; - } -#Unbalanced component of logarithm of surface pressure -'Unbalanced component of logarithm of surface pressure' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 22 ; - } -#Unbalanced component of divergence -'Unbalanced component of divergence' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 23 ; - } #Reserved for future unbalanced components 'Reserved for future unbalanced components' = { discipline = 192 ; @@ -157,9 +142,10 @@ } #Snow albedo 'Snow albedo' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 32 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; } #Ice temperature layer 1 'Ice temperature layer 1' = { @@ -211,15 +197,21 @@ } #Snow evaporation 'Snow evaporation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 44 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 197 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Snowmelt 'Snowmelt' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 45 ; + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 203 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Solar duration 'Solar duration' = { @@ -233,12 +225,6 @@ parameterCategory = 128 ; parameterNumber = 48 ; } -#Large-scale precipitation fraction -'Large-scale precipitation fraction' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 50 ; - } #Maximum temperature at 2 metres in the last 24 hours 'Maximum temperature at 2 metres in the last 24 hours' = { discipline = 0 ; @@ -281,18 +267,6 @@ parameterCategory = 128 ; parameterNumber = 56 ; } -#Downward UV radiation at the surface -'Downward UV radiation at the surface' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 57 ; - } -#Photosynthetically active radiation at the surface -'Photosynthetically active radiation at the surface' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 58 ; - } #Observation count 'Observation count' = { discipline = 192 ; @@ -674,9 +648,12 @@ } #Large-scale precipitation 'Large-scale precipitation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 142 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Convective precipitation 'Convective precipitation' = { @@ -687,9 +664,12 @@ } #Snowfall 'Snowfall' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 144 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Charnock 'Charnock' = { @@ -734,12 +714,6 @@ parameterCategory = 128 ; parameterNumber = 158 ; } -#Boundary layer height -'Boundary layer height' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 159 ; - } #Standard deviation of orography 'Standard deviation of orography' = { discipline = 192 ; @@ -766,9 +740,12 @@ } #Total cloud cover 'Total cloud cover' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 164 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Soil temperature level 2 'Soil temperature level 2' = { @@ -790,9 +767,12 @@ } #Evaporation 'Evaporation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 182 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Soil temperature level 3 'Soil temperature level 3' = { @@ -814,21 +794,24 @@ } #Low cloud cover 'Low cloud cover' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 186 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; } #Medium cloud cover 'Medium cloud cover' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 187 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; } #High cloud cover 'High cloud cover' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 188 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; } #East-West component of sub-gridscale orographic variance 'East-West component of sub-gridscale orographic variance' = { @@ -854,24 +837,6 @@ parameterCategory = 128 ; parameterNumber = 193 ; } -#Eastward gravity wave surface stress -'Eastward gravity wave surface stress' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 195 ; - } -#Northward gravity wave surface stress -'Northward gravity wave surface stress' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 196 ; - } -#Gravity wave dissipation -'Gravity wave dissipation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 197 ; - } #Skin reservoir content 'Skin reservoir content' = { discipline = 192 ; @@ -910,24 +875,6 @@ parameterCategory = 128 ; parameterNumber = 206 ; } -#Top net solar radiation, clear sky -'Top net solar radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 208 ; - } -#Top net thermal radiation, clear sky -'Top net thermal radiation, clear sky' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 209 ; - } -#TOA incident solar radiation -'TOA incident solar radiation' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 212 ; - } #Vertically integrated moisture divergence 'Vertically integrated moisture divergence' = { discipline = 192 ; @@ -1028,30 +975,6 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } -#Instantaneous eastward turbulent surface stress -'Instantaneous eastward turbulent surface stress' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 229 ; - } -#Instantaneous northward turbulent surface stress -'Instantaneous northward turbulent surface stress' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 230 ; - } -#Instantaneous surface sensible heat flux -'Instantaneous surface sensible heat flux' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 231 ; - } -#Instantaneous moisture flux -'Instantaneous moisture flux' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 232 ; - } #Apparent surface humidity 'Apparent surface humidity' = { discipline = 192 ; @@ -5128,6 +5051,432 @@ parameterCategory = 213 ; parameterNumber = 150 ; } +#Random pattern 51 for SPP scheme +'Random pattern 51 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 151 ; + } +#Random pattern 52 for SPP scheme +'Random pattern 52 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 152 ; + } +#Random pattern 53 for SPP scheme +'Random pattern 53 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 153 ; + } +#Random pattern 54 for SPP scheme +'Random pattern 54 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 154 ; + } +#Random pattern 55 for SPP scheme +'Random pattern 55 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 155 ; + } +#Random pattern 56 for SPP scheme +'Random pattern 56 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 156 ; + } +#Random pattern 57 for SPP scheme +'Random pattern 57 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 157 ; + } +#Random pattern 58 for SPP scheme +'Random pattern 58 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 158 ; + } +#Random pattern 59 for SPP scheme +'Random pattern 59 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 159 ; + } +#Random pattern 60 for SPP scheme +'Random pattern 60 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 160 ; + } +#Random pattern 61 for SPP scheme +'Random pattern 61 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 161 ; + } +#Random pattern 62 for SPP scheme +'Random pattern 62 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 162 ; + } +#Random pattern 63 for SPP scheme +'Random pattern 63 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 163 ; + } +#Random pattern 64 for SPP scheme +'Random pattern 64 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 164 ; + } +#Random pattern 65 for SPP scheme +'Random pattern 65 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 165 ; + } +#Random pattern 66 for SPP scheme +'Random pattern 66 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 166 ; + } +#Random pattern 67 for SPP scheme +'Random pattern 67 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 167 ; + } +#Random pattern 68 for SPP scheme +'Random pattern 68 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 168 ; + } +#Random pattern 69 for SPP scheme +'Random pattern 69 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 169 ; + } +#Random pattern 70 for SPP scheme +'Random pattern 70 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 170 ; + } +#Random pattern 71 for SPP scheme +'Random pattern 71 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 171 ; + } +#Random pattern 72 for SPP scheme +'Random pattern 72 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 172 ; + } +#Random pattern 73 for SPP scheme +'Random pattern 73 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 173 ; + } +#Random pattern 74 for SPP scheme +'Random pattern 74 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 174 ; + } +#Random pattern 75 for SPP scheme +'Random pattern 75 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 175 ; + } +#Random pattern 76 for SPP scheme +'Random pattern 76 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 176 ; + } +#Random pattern 77 for SPP scheme +'Random pattern 77 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 177 ; + } +#Random pattern 78 for SPP scheme +'Random pattern 78 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 178 ; + } +#Random pattern 79 for SPP scheme +'Random pattern 79 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 179 ; + } +#Random pattern 80 for SPP scheme +'Random pattern 80 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 180 ; + } +#Random pattern 81 for SPP scheme +'Random pattern 81 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 181 ; + } +#Random pattern 82 for SPP scheme +'Random pattern 82 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 182 ; + } +#Random pattern 83 for SPP scheme +'Random pattern 83 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 183 ; + } +#Random pattern 84 for SPP scheme +'Random pattern 84 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 184 ; + } +#Random pattern 85 for SPP scheme +'Random pattern 85 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 185 ; + } +#Random pattern 86 for SPP scheme +'Random pattern 86 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 186 ; + } +#Random pattern 87 for SPP scheme +'Random pattern 87 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 187 ; + } +#Random pattern 88 for SPP scheme +'Random pattern 88 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 188 ; + } +#Random pattern 89 for SPP scheme +'Random pattern 89 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 189 ; + } +#Random pattern 90 for SPP scheme +'Random pattern 90 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 190 ; + } +#Random pattern 91 for SPP scheme +'Random pattern 91 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 191 ; + } +#Random pattern 92 for SPP scheme +'Random pattern 92 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 192 ; + } +#Random pattern 93 for SPP scheme +'Random pattern 93 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 193 ; + } +#Random pattern 94 for SPP scheme +'Random pattern 94 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 194 ; + } +#Random pattern 95 for SPP scheme +'Random pattern 95 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 195 ; + } +#Random pattern 96 for SPP scheme +'Random pattern 96 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 196 ; + } +#Random pattern 97 for SPP scheme +'Random pattern 97 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 197 ; + } +#Random pattern 98 for SPP scheme +'Random pattern 98 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 198 ; + } +#Random pattern 99 for SPP scheme +'Random pattern 99 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 199 ; + } +#Random pattern 100 for SPP scheme +'Random pattern 100 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 200 ; + } +#Random pattern 101 for SPP scheme +'Random pattern 101 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 201 ; + } +#Random pattern 102 for SPP scheme +'Random pattern 102 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 202 ; + } +#Random pattern 103 for SPP scheme +'Random pattern 103 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 203 ; + } +#Random pattern 104 for SPP scheme +'Random pattern 104 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 204 ; + } +#Random pattern 105 for SPP scheme +'Random pattern 105 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 205 ; + } +#Random pattern 106 for SPP scheme +'Random pattern 106 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 206 ; + } +#Random pattern 107 for SPP scheme +'Random pattern 107 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 207 ; + } +#Random pattern 108 for SPP scheme +'Random pattern 108 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 208 ; + } +#Random pattern 109 for SPP scheme +'Random pattern 109 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 209 ; + } +#Random pattern 110 for SPP scheme +'Random pattern 110 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 210 ; + } +#Random pattern 111 for SPP scheme +'Random pattern 111 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 211 ; + } +#Random pattern 112 for SPP scheme +'Random pattern 112 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 212 ; + } +#Random pattern 113 for SPP scheme +'Random pattern 113 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 213 ; + } +#Random pattern 114 for SPP scheme +'Random pattern 114 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 214 ; + } +#Random pattern 115 for SPP scheme +'Random pattern 115 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 215 ; + } +#Random pattern 116 for SPP scheme +'Random pattern 116 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 216 ; + } +#Random pattern 117 for SPP scheme +'Random pattern 117 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 217 ; + } +#Random pattern 118 for SPP scheme +'Random pattern 118 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 218 ; + } +#Random pattern 119 for SPP scheme +'Random pattern 119 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 219 ; + } +#Random pattern 120 for SPP scheme +'Random pattern 120 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 220 ; + } +#Random pattern 121 for SPP scheme +'Random pattern 121 for SPP scheme' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 221 ; + } #Cosine of solar zenith angle 'Cosine of solar zenith angle' = { discipline = 192 ; @@ -13440,12 +13789,6 @@ typeOfStatisticalProcessing = 3 ; lengthOfTimeRange = 3 ; } -#10 metre wind gust in the last 3 hours -'10 metre wind gust in the last 3 hours' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 28 ; - } #Soil wetness index in layer 1 'Soil wetness index in layer 1' = { discipline = 192 ; @@ -13541,18 +13884,6 @@ parameterCategory = 0 ; parameterNumber = 196 ; } -#Total column rain water -'Total column rain water' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 89 ; - } -#Total column snow water -'Total column snow water' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 90 ; - } #Canopy cover fraction 'Canopy cover fraction' = { discipline = 192 ; @@ -13571,12 +13902,6 @@ parameterCategory = 228 ; parameterNumber = 93 ; } -#Ice temperature -'Ice temperature' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 94 ; - } #Evaporation from the top of canopy 'Evaporation from the top of canopy' = { discipline = 192 ; @@ -13665,6 +13990,15 @@ parameterCategory = 228 ; parameterNumber = 130 ; } +#Accumulated freezing rain +'Accumulated freezing rain' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Surface short wave-effective total cloudiness 'Surface short wave-effective total cloudiness' = { discipline = 192 ; @@ -13679,9 +14013,12 @@ } #Potential evaporation 'Potential evaporation' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 251 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Irrigation 'Irrigation' = { @@ -15515,10 +15852,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 25 ; scaleFactorOfLowerLimit = 0 ; @@ -15535,8 +15872,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 2 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -15546,8 +15883,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 4 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -15557,8 +15894,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 6 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -15568,8 +15905,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 8 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -16312,24 +16649,12 @@ parameterCategory = 140 ; parameterNumber = 233 ; } -#Significant height of wind waves -'Significant height of wind waves' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 5 ; - } #Mean direction of wind waves 'Mean direction of wind waves' = { discipline = 192 ; parameterCategory = 140 ; parameterNumber = 235 ; } -#Mean period of wind waves -'Mean period of wind waves' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 6 ; - } #Significant height of total swell 'Significant height of total swell' = { discipline = 192 ; @@ -17500,18 +17825,6 @@ parameterCategory = 162 ; parameterNumber = 70 ; } -#Vertical integral of eastward water vapour flux -'Vertical integral of eastward water vapour flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 71 ; - } -#Vertical integral of northward water vapour flux -'Vertical integral of northward water vapour flux' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 72 ; - } #Vertical integral of eastward geopotential flux 'Vertical integral of eastward geopotential flux' = { discipline = 192 ; @@ -21850,12 +22163,6 @@ parameterCategory = 220 ; parameterNumber = 228 ; } -#Friction velocity -'Friction velocity' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 3 ; - } #Mean temperature at 2 metres 'Mean temperature at 2 metres' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/name.legacy.def b/definitions/grib2/localConcepts/ecmf/name.legacy.def index 93facea47..c697ac4ac 100644 --- a/definitions/grib2/localConcepts/ecmf/name.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/name.legacy.def @@ -400,3 +400,219 @@ parameterCategory = 228 ; parameterNumber = 60 ; } +#Eastward gravity wave surface stress +'Eastward gravity wave surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 195 ; +} +#Friction velocity +'Friction velocity' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 3 ; +} +#Instantaneous eastward turbulent surface stress +'Instantaneous eastward turbulent surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 229 ; +} +#Instantaneous northward turbulent surface stress +'Instantaneous northward turbulent surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 230 ; +} +#Instantaneous surface sensible heat flux +'Instantaneous surface sensible heat flux' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 231 ; +} +#Instantaneous moisture flux +'Instantaneous moisture flux' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 232 ; +} +#Large-scale precipitation +'Large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 142 ; +} +#Large-scale precipitation fraction +'Large-scale precipitation fraction' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 50 ; +} +#Northward gravity wave surface stress +'Northward gravity wave surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 196 ; +} +#Snow evaporation +'Snow evaporation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 44 ; +} +#Snowfall +'Snowfall' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 144 ; +} +#Surface runoff +'Surface runoff' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 8 ; +} +#TOA incident solar radiation +'TOA incident solar radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 212 ; +} +#Top net thermal radiation, clear sky +'Top net thermal radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 209 ; +} +#Top net solar radiation, clear sky +'Top net solar radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 208 ; +} +#Total cloud cover +'Total cloud cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 164 ; +} +#Total column rain water +'Total column rain water' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 89 ; +} +#Total column snow water +'Total column snow water' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 90 ; +} +#Vertical integral of eastward water vapour flux +'Vertical integral of eastward water vapour flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 71 ; +} +#Vertical integral of northward water vapour flux +'Vertical integral of northward water vapour flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 72 ; +} +#Snow albedo +'Snow albedo' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 32 ; +} +#Ice temperature +'Ice temperature' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 94 ; +} +#Snowmelt +'Snowmelt' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 45 ; +} +#Downward UV radiation at the surface +'Downward UV radiation at the surface' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 57 ; +} +#Photosynthetically active radiation at the surface +'Photosynthetically active radiation at the surface' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 58 ; +} +#Boundary layer height +'Boundary layer height' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 159 ; +} +#Evaporation +'Evaporation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 182 ; +} +#Low cloud cover +'Low cloud cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 186 ; +} +#Medium cloud cover +'Medium cloud cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 187 ; +} +#High cloud cover +'High cloud cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 188 ; +} +#Gravity wave dissipation +'Gravity wave dissipation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 197 ; +} +#Potential evaporation +'Potential evaporation' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 251 ; +} +#Unbalanced component of temperature +'Unbalanced component of temperature' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 21 ; +} +#Unbalanced component of logarithm of surface pressure +'Unbalanced component of logarithm of surface pressure' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 22 ; +} +#Unbalanced component of divergence +'Unbalanced component of divergence' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 23 ; +} +#10 metre wind gust in the last 3 hours +'10 metre wind gust in the last 3 hours' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 28 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index 5946fc6f4..43d93d582 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -25,9 +25,12 @@ } #Surface runoff '8' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 8 ; + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Sub-surface runoff '9' = { @@ -95,24 +98,6 @@ parameterCategory = 128 ; parameterNumber = 20 ; } -#Unbalanced component of temperature -'21' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 21 ; - } -#Unbalanced component of logarithm of surface pressure -'22' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 22 ; - } -#Unbalanced component of divergence -'23' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 23 ; - } #Reserved for future unbalanced components '24' = { discipline = 192 ; @@ -157,9 +142,10 @@ } #Snow albedo '32' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 32 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; } #Ice temperature layer 1 '35' = { @@ -211,15 +197,21 @@ } #Snow evaporation '44' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 44 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 197 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Snowmelt '45' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 45 ; + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 203 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Solar duration '46' = { @@ -233,12 +225,6 @@ parameterCategory = 128 ; parameterNumber = 48 ; } -#Large-scale precipitation fraction -'50' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 50 ; - } #Maximum temperature at 2 metres in the last 24 hours '51' = { discipline = 0 ; @@ -281,18 +267,6 @@ parameterCategory = 128 ; parameterNumber = 56 ; } -#Downward UV radiation at the surface -'57' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 57 ; - } -#Photosynthetically active radiation at the surface -'58' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 58 ; - } #Observation count '62' = { discipline = 192 ; @@ -674,9 +648,12 @@ } #Large-scale precipitation '142' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 142 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Convective precipitation '143' = { @@ -687,9 +664,12 @@ } #Snowfall '144' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 144 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Charnock '148' = { @@ -734,12 +714,6 @@ parameterCategory = 128 ; parameterNumber = 158 ; } -#Boundary layer height -'159' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 159 ; - } #Standard deviation of orography '160' = { discipline = 192 ; @@ -766,9 +740,12 @@ } #Total cloud cover '164' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 164 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Soil temperature level 2 '170' = { @@ -790,9 +767,12 @@ } #Evaporation '182' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 182 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Soil temperature level 3 '183' = { @@ -814,21 +794,24 @@ } #Low cloud cover '186' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 186 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; } #Medium cloud cover '187' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 187 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; } #High cloud cover '188' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 188 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; } #East-West component of sub-gridscale orographic variance '190' = { @@ -854,24 +837,6 @@ parameterCategory = 128 ; parameterNumber = 193 ; } -#Eastward gravity wave surface stress -'195' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 195 ; - } -#Northward gravity wave surface stress -'196' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 196 ; - } -#Gravity wave dissipation -'197' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 197 ; - } #Skin reservoir content '198' = { discipline = 192 ; @@ -910,24 +875,6 @@ parameterCategory = 128 ; parameterNumber = 206 ; } -#Top net solar radiation, clear sky -'208' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 208 ; - } -#Top net thermal radiation, clear sky -'209' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 209 ; - } -#TOA incident solar radiation -'212' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 212 ; - } #Vertically integrated moisture divergence '213' = { discipline = 192 ; @@ -1028,30 +975,6 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } -#Instantaneous eastward turbulent surface stress -'229' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 229 ; - } -#Instantaneous northward turbulent surface stress -'230' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 230 ; - } -#Instantaneous surface sensible heat flux -'231' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 231 ; - } -#Instantaneous moisture flux -'232' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 232 ; - } #Apparent surface humidity '233' = { discipline = 192 ; @@ -5128,6 +5051,432 @@ parameterCategory = 213 ; parameterNumber = 150 ; } +#Random pattern 51 for SPP scheme +'213151' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 151 ; + } +#Random pattern 52 for SPP scheme +'213152' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 152 ; + } +#Random pattern 53 for SPP scheme +'213153' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 153 ; + } +#Random pattern 54 for SPP scheme +'213154' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 154 ; + } +#Random pattern 55 for SPP scheme +'213155' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 155 ; + } +#Random pattern 56 for SPP scheme +'213156' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 156 ; + } +#Random pattern 57 for SPP scheme +'213157' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 157 ; + } +#Random pattern 58 for SPP scheme +'213158' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 158 ; + } +#Random pattern 59 for SPP scheme +'213159' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 159 ; + } +#Random pattern 60 for SPP scheme +'213160' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 160 ; + } +#Random pattern 61 for SPP scheme +'213161' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 161 ; + } +#Random pattern 62 for SPP scheme +'213162' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 162 ; + } +#Random pattern 63 for SPP scheme +'213163' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 163 ; + } +#Random pattern 64 for SPP scheme +'213164' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 164 ; + } +#Random pattern 65 for SPP scheme +'213165' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 165 ; + } +#Random pattern 66 for SPP scheme +'213166' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 166 ; + } +#Random pattern 67 for SPP scheme +'213167' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 167 ; + } +#Random pattern 68 for SPP scheme +'213168' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 168 ; + } +#Random pattern 69 for SPP scheme +'213169' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 169 ; + } +#Random pattern 70 for SPP scheme +'213170' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 170 ; + } +#Random pattern 71 for SPP scheme +'213171' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 171 ; + } +#Random pattern 72 for SPP scheme +'213172' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 172 ; + } +#Random pattern 73 for SPP scheme +'213173' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 173 ; + } +#Random pattern 74 for SPP scheme +'213174' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 174 ; + } +#Random pattern 75 for SPP scheme +'213175' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 175 ; + } +#Random pattern 76 for SPP scheme +'213176' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 176 ; + } +#Random pattern 77 for SPP scheme +'213177' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 177 ; + } +#Random pattern 78 for SPP scheme +'213178' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 178 ; + } +#Random pattern 79 for SPP scheme +'213179' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 179 ; + } +#Random pattern 80 for SPP scheme +'213180' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 180 ; + } +#Random pattern 81 for SPP scheme +'213181' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 181 ; + } +#Random pattern 82 for SPP scheme +'213182' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 182 ; + } +#Random pattern 83 for SPP scheme +'213183' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 183 ; + } +#Random pattern 84 for SPP scheme +'213184' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 184 ; + } +#Random pattern 85 for SPP scheme +'213185' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 185 ; + } +#Random pattern 86 for SPP scheme +'213186' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 186 ; + } +#Random pattern 87 for SPP scheme +'213187' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 187 ; + } +#Random pattern 88 for SPP scheme +'213188' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 188 ; + } +#Random pattern 89 for SPP scheme +'213189' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 189 ; + } +#Random pattern 90 for SPP scheme +'213190' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 190 ; + } +#Random pattern 91 for SPP scheme +'213191' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 191 ; + } +#Random pattern 92 for SPP scheme +'213192' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 192 ; + } +#Random pattern 93 for SPP scheme +'213193' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 193 ; + } +#Random pattern 94 for SPP scheme +'213194' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 194 ; + } +#Random pattern 95 for SPP scheme +'213195' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 195 ; + } +#Random pattern 96 for SPP scheme +'213196' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 196 ; + } +#Random pattern 97 for SPP scheme +'213197' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 197 ; + } +#Random pattern 98 for SPP scheme +'213198' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 198 ; + } +#Random pattern 99 for SPP scheme +'213199' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 199 ; + } +#Random pattern 100 for SPP scheme +'213200' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 200 ; + } +#Random pattern 101 for SPP scheme +'213201' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 201 ; + } +#Random pattern 102 for SPP scheme +'213202' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 202 ; + } +#Random pattern 103 for SPP scheme +'213203' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 203 ; + } +#Random pattern 104 for SPP scheme +'213204' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 204 ; + } +#Random pattern 105 for SPP scheme +'213205' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 205 ; + } +#Random pattern 106 for SPP scheme +'213206' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 206 ; + } +#Random pattern 107 for SPP scheme +'213207' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 207 ; + } +#Random pattern 108 for SPP scheme +'213208' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 208 ; + } +#Random pattern 109 for SPP scheme +'213209' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 209 ; + } +#Random pattern 110 for SPP scheme +'213210' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 210 ; + } +#Random pattern 111 for SPP scheme +'213211' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 211 ; + } +#Random pattern 112 for SPP scheme +'213212' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 212 ; + } +#Random pattern 113 for SPP scheme +'213213' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 213 ; + } +#Random pattern 114 for SPP scheme +'213214' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 214 ; + } +#Random pattern 115 for SPP scheme +'213215' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 215 ; + } +#Random pattern 116 for SPP scheme +'213216' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 216 ; + } +#Random pattern 117 for SPP scheme +'213217' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 217 ; + } +#Random pattern 118 for SPP scheme +'213218' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 218 ; + } +#Random pattern 119 for SPP scheme +'213219' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 219 ; + } +#Random pattern 120 for SPP scheme +'213220' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 220 ; + } +#Random pattern 121 for SPP scheme +'213221' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 221 ; + } #Cosine of solar zenith angle '214001' = { discipline = 192 ; @@ -13440,12 +13789,6 @@ typeOfStatisticalProcessing = 3 ; lengthOfTimeRange = 3 ; } -#10 metre wind gust in the last 3 hours -'228028' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 28 ; - } #Soil wetness index in layer 1 '228040' = { discipline = 192 ; @@ -13541,18 +13884,6 @@ parameterCategory = 0 ; parameterNumber = 196 ; } -#Total column rain water -'228089' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 89 ; - } -#Total column snow water -'228090' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 90 ; - } #Canopy cover fraction '228091' = { discipline = 192 ; @@ -13571,12 +13902,6 @@ parameterCategory = 228 ; parameterNumber = 93 ; } -#Ice temperature -'228094' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 94 ; - } #Evaporation from the top of canopy '228100' = { discipline = 192 ; @@ -13665,6 +13990,15 @@ parameterCategory = 228 ; parameterNumber = 130 ; } +#Accumulated freezing rain +'228216' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Surface short wave-effective total cloudiness '228248' = { discipline = 192 ; @@ -13679,9 +14013,12 @@ } #Potential evaporation '228251' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 251 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Irrigation '228252' = { @@ -15515,10 +15852,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 25 ; scaleFactorOfLowerLimit = 0 ; @@ -15535,8 +15872,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 2 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -15546,8 +15883,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 4 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -15557,8 +15894,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 6 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -15568,8 +15905,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 8 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -16312,24 +16649,12 @@ parameterCategory = 140 ; parameterNumber = 233 ; } -#Significant height of wind waves -'140234' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 5 ; - } #Mean direction of wind waves '140235' = { discipline = 192 ; parameterCategory = 140 ; parameterNumber = 235 ; } -#Mean period of wind waves -'140236' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 6 ; - } #Significant height of total swell '140237' = { discipline = 192 ; @@ -17500,18 +17825,6 @@ parameterCategory = 162 ; parameterNumber = 70 ; } -#Vertical integral of eastward water vapour flux -'162071' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 71 ; - } -#Vertical integral of northward water vapour flux -'162072' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 72 ; - } #Vertical integral of eastward geopotential flux '162073' = { discipline = 192 ; @@ -21850,12 +22163,6 @@ parameterCategory = 220 ; parameterNumber = 228 ; } -#Friction velocity -'228003' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 3 ; - } #Mean temperature at 2 metres '228004' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def index f78b0ad01..ade474512 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def @@ -400,3 +400,219 @@ parameterCategory = 228 ; parameterNumber = 60 ; } +#Eastward gravity wave surface stress +'195' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 195 ; +} +#Friction velocity +'228003' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 3 ; +} +#Instantaneous eastward turbulent surface stress +'229' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 229 ; +} +#Instantaneous northward turbulent surface stress +'230' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 230 ; +} +#Instantaneous surface sensible heat flux +'231' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 231 ; +} +#Instantaneous moisture flux +'232' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 232 ; +} +#Large-scale precipitation +'142' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 142 ; +} +#Large-scale precipitation fraction +'50' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 50 ; +} +#Northward gravity wave surface stress +'196' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 196 ; +} +#Snow evaporation +'44' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 44 ; +} +#Snowfall +'144' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 144 ; +} +#Surface runoff +'8' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 8 ; +} +#TOA incident solar radiation +'212' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 212 ; +} +#Top net thermal radiation, clear sky +'209' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 209 ; +} +#Top net solar radiation, clear sky +'208' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 208 ; +} +#Total cloud cover +'164' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 164 ; +} +#Total column rain water +'228089' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 89 ; +} +#Total column snow water +'228090' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 90 ; +} +#Vertical integral of eastward water vapour flux +'162071' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 71 ; +} +#Vertical integral of northward water vapour flux +'162072' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 72 ; +} +#Snow albedo +'32' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 32 ; +} +#Ice temperature +'228094' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 94 ; +} +#Snowmelt +'45' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 45 ; +} +#Downward UV radiation at the surface +'57' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 57 ; +} +#Photosynthetically active radiation at the surface +'58' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 58 ; +} +#Boundary layer height +'159' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 159 ; +} +#Evaporation +'182' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 182 ; +} +#Low cloud cover +'186' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 186 ; +} +#Medium cloud cover +'187' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 187 ; +} +#High cloud cover +'188' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 188 ; +} +#Gravity wave dissipation +'197' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 197 ; +} +#Potential evaporation +'228251' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 251 ; +} +#Unbalanced component of temperature +'21' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 21 ; +} +#Unbalanced component of logarithm of surface pressure +'22' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 22 ; +} +#Unbalanced component of divergence +'23' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 23 ; +} +#10 metre wind gust in the last 3 hours +'228028' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 28 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index c9abed43d..917c0fb33 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -25,9 +25,12 @@ } #Surface runoff 'sro' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 8 ; + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Sub-surface runoff 'ssro' = { @@ -95,24 +98,6 @@ parameterCategory = 128 ; parameterNumber = 20 ; } -#Unbalanced component of temperature -'uctp' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 21 ; - } -#Unbalanced component of logarithm of surface pressure -'ucln' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 22 ; - } -#Unbalanced component of divergence -'ucdv' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 23 ; - } #Reserved for future unbalanced components '~' = { discipline = 192 ; @@ -157,9 +142,10 @@ } #Snow albedo 'asn' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 32 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; } #Ice temperature layer 1 'istl1' = { @@ -211,15 +197,21 @@ } #Snow evaporation 'es' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 44 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 197 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Snowmelt 'smlt' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 45 ; + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 203 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Solar duration 'sdur' = { @@ -233,12 +225,6 @@ parameterCategory = 128 ; parameterNumber = 48 ; } -#Large-scale precipitation fraction -'lspf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 50 ; - } #Maximum temperature at 2 metres in the last 24 hours 'mx2t24' = { discipline = 0 ; @@ -281,18 +267,6 @@ parameterCategory = 128 ; parameterNumber = 56 ; } -#Downward UV radiation at the surface -'uvb' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 57 ; - } -#Photosynthetically active radiation at the surface -'par' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 58 ; - } #Observation count 'obct' = { discipline = 192 ; @@ -674,9 +648,12 @@ } #Large-scale precipitation 'lsp' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 142 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Convective precipitation 'cp' = { @@ -687,9 +664,12 @@ } #Snowfall 'sf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 144 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Charnock 'chnk' = { @@ -734,12 +714,6 @@ parameterCategory = 128 ; parameterNumber = 158 ; } -#Boundary layer height -'blh' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 159 ; - } #Standard deviation of orography 'sdor' = { discipline = 192 ; @@ -766,9 +740,12 @@ } #Total cloud cover 'tcc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 164 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Soil temperature level 2 'stl2' = { @@ -790,9 +767,12 @@ } #Evaporation 'e' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 182 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Soil temperature level 3 'stl3' = { @@ -814,21 +794,24 @@ } #Low cloud cover 'lcc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 186 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; } #Medium cloud cover 'mcc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 187 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; } #High cloud cover 'hcc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 188 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; } #East-West component of sub-gridscale orographic variance 'ewov' = { @@ -854,24 +837,6 @@ parameterCategory = 128 ; parameterNumber = 193 ; } -#Eastward gravity wave surface stress -'lgws' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 195 ; - } -#Northward gravity wave surface stress -'mgws' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 196 ; - } -#Gravity wave dissipation -'gwd' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 197 ; - } #Skin reservoir content 'src' = { discipline = 192 ; @@ -910,24 +875,6 @@ parameterCategory = 128 ; parameterNumber = 206 ; } -#Top net solar radiation, clear sky -'tsrc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 208 ; - } -#Top net thermal radiation, clear sky -'ttrc' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 209 ; - } -#TOA incident solar radiation -'tisr' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 212 ; - } #Vertically integrated moisture divergence 'vimd' = { discipline = 192 ; @@ -1028,30 +975,6 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } -#Instantaneous eastward turbulent surface stress -'iews' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 229 ; - } -#Instantaneous northward turbulent surface stress -'inss' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 230 ; - } -#Instantaneous surface sensible heat flux -'ishf' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 231 ; - } -#Instantaneous moisture flux -'ie' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 232 ; - } #Apparent surface humidity 'asq' = { discipline = 192 ; @@ -5128,6 +5051,432 @@ parameterCategory = 213 ; parameterNumber = 150 ; } +#Random pattern 51 for SPP scheme +'spp51' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 151 ; + } +#Random pattern 52 for SPP scheme +'spp52' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 152 ; + } +#Random pattern 53 for SPP scheme +'spp53' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 153 ; + } +#Random pattern 54 for SPP scheme +'spp54' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 154 ; + } +#Random pattern 55 for SPP scheme +'spp55' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 155 ; + } +#Random pattern 56 for SPP scheme +'spp56' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 156 ; + } +#Random pattern 57 for SPP scheme +'spp57' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 157 ; + } +#Random pattern 58 for SPP scheme +'spp58' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 158 ; + } +#Random pattern 59 for SPP scheme +'spp59' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 159 ; + } +#Random pattern 60 for SPP scheme +'spp60' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 160 ; + } +#Random pattern 61 for SPP scheme +'spp61' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 161 ; + } +#Random pattern 62 for SPP scheme +'spp62' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 162 ; + } +#Random pattern 63 for SPP scheme +'spp63' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 163 ; + } +#Random pattern 64 for SPP scheme +'spp64' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 164 ; + } +#Random pattern 65 for SPP scheme +'spp65' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 165 ; + } +#Random pattern 66 for SPP scheme +'spp66' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 166 ; + } +#Random pattern 67 for SPP scheme +'spp67' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 167 ; + } +#Random pattern 68 for SPP scheme +'spp68' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 168 ; + } +#Random pattern 69 for SPP scheme +'spp69' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 169 ; + } +#Random pattern 70 for SPP scheme +'spp70' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 170 ; + } +#Random pattern 71 for SPP scheme +'spp71' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 171 ; + } +#Random pattern 72 for SPP scheme +'spp72' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 172 ; + } +#Random pattern 73 for SPP scheme +'spp73' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 173 ; + } +#Random pattern 74 for SPP scheme +'spp74' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 174 ; + } +#Random pattern 75 for SPP scheme +'spp75' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 175 ; + } +#Random pattern 76 for SPP scheme +'spp76' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 176 ; + } +#Random pattern 77 for SPP scheme +'spp77' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 177 ; + } +#Random pattern 78 for SPP scheme +'spp78' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 178 ; + } +#Random pattern 79 for SPP scheme +'spp79' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 179 ; + } +#Random pattern 80 for SPP scheme +'spp80' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 180 ; + } +#Random pattern 81 for SPP scheme +'spp81' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 181 ; + } +#Random pattern 82 for SPP scheme +'spp82' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 182 ; + } +#Random pattern 83 for SPP scheme +'spp83' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 183 ; + } +#Random pattern 84 for SPP scheme +'spp84' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 184 ; + } +#Random pattern 85 for SPP scheme +'spp85' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 185 ; + } +#Random pattern 86 for SPP scheme +'spp86' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 186 ; + } +#Random pattern 87 for SPP scheme +'spp87' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 187 ; + } +#Random pattern 88 for SPP scheme +'spp88' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 188 ; + } +#Random pattern 89 for SPP scheme +'spp89' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 189 ; + } +#Random pattern 90 for SPP scheme +'spp90' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 190 ; + } +#Random pattern 91 for SPP scheme +'spp91' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 191 ; + } +#Random pattern 92 for SPP scheme +'spp92' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 192 ; + } +#Random pattern 93 for SPP scheme +'spp93' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 193 ; + } +#Random pattern 94 for SPP scheme +'spp94' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 194 ; + } +#Random pattern 95 for SPP scheme +'spp95' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 195 ; + } +#Random pattern 96 for SPP scheme +'spp96' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 196 ; + } +#Random pattern 97 for SPP scheme +'spp97' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 197 ; + } +#Random pattern 98 for SPP scheme +'spp98' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 198 ; + } +#Random pattern 99 for SPP scheme +'spp99' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 199 ; + } +#Random pattern 100 for SPP scheme +'spp100' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 200 ; + } +#Random pattern 101 for SPP scheme +'spp101' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 201 ; + } +#Random pattern 102 for SPP scheme +'spp102' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 202 ; + } +#Random pattern 103 for SPP scheme +'spp103' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 203 ; + } +#Random pattern 104 for SPP scheme +'spp104' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 204 ; + } +#Random pattern 105 for SPP scheme +'spp105' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 205 ; + } +#Random pattern 106 for SPP scheme +'spp106' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 206 ; + } +#Random pattern 107 for SPP scheme +'spp107' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 207 ; + } +#Random pattern 108 for SPP scheme +'spp108' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 208 ; + } +#Random pattern 109 for SPP scheme +'spp109' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 209 ; + } +#Random pattern 110 for SPP scheme +'spp110' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 210 ; + } +#Random pattern 111 for SPP scheme +'spp111' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 211 ; + } +#Random pattern 112 for SPP scheme +'spp112' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 212 ; + } +#Random pattern 113 for SPP scheme +'spp113' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 213 ; + } +#Random pattern 114 for SPP scheme +'spp114' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 214 ; + } +#Random pattern 115 for SPP scheme +'spp115' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 215 ; + } +#Random pattern 116 for SPP scheme +'spp116' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 216 ; + } +#Random pattern 117 for SPP scheme +'spp117' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 217 ; + } +#Random pattern 118 for SPP scheme +'spp118' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 218 ; + } +#Random pattern 119 for SPP scheme +'spp119' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 219 ; + } +#Random pattern 120 for SPP scheme +'spp120' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 220 ; + } +#Random pattern 121 for SPP scheme +'spp121' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 221 ; + } #Cosine of solar zenith angle 'uvcossza' = { discipline = 192 ; @@ -13440,12 +13789,6 @@ typeOfStatisticalProcessing = 3 ; lengthOfTimeRange = 3 ; } -#10 metre wind gust in the last 3 hours -'10fg3' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 28 ; - } #Soil wetness index in layer 1 'swi1' = { discipline = 192 ; @@ -13541,18 +13884,6 @@ parameterCategory = 0 ; parameterNumber = 196 ; } -#Total column rain water -'tcrw' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 89 ; - } -#Total column snow water -'tcsw' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 90 ; - } #Canopy cover fraction 'ccf' = { discipline = 192 ; @@ -13571,12 +13902,6 @@ parameterCategory = 228 ; parameterNumber = 93 ; } -#Ice temperature -'ist' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 94 ; - } #Evaporation from the top of canopy 'evatc' = { discipline = 192 ; @@ -13665,6 +13990,15 @@ parameterCategory = 228 ; parameterNumber = 130 ; } +#Accumulated freezing rain +'fzra' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Surface short wave-effective total cloudiness 'tccsw' = { discipline = 192 ; @@ -13679,9 +14013,12 @@ } #Potential evaporation 'pev' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 251 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Irrigation 'irr' = { @@ -15515,10 +15852,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 25 ; scaleFactorOfLowerLimit = 0 ; @@ -15535,8 +15872,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 2 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -15546,8 +15883,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 4 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -15557,8 +15894,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 6 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -15568,8 +15905,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 8 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -16312,24 +16649,12 @@ parameterCategory = 140 ; parameterNumber = 233 ; } -#Significant height of wind waves -'shww' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 5 ; - } #Mean direction of wind waves 'mdww' = { discipline = 192 ; parameterCategory = 140 ; parameterNumber = 235 ; } -#Mean period of wind waves -'mpww' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 6 ; - } #Significant height of total swell 'shts' = { discipline = 192 ; @@ -17500,18 +17825,6 @@ parameterCategory = 162 ; parameterNumber = 70 ; } -#Vertical integral of eastward water vapour flux -'viwve' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 71 ; - } -#Vertical integral of northward water vapour flux -'viwvn' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 72 ; - } #Vertical integral of eastward geopotential flux 'vige' = { discipline = 192 ; @@ -21850,12 +22163,6 @@ parameterCategory = 220 ; parameterNumber = 228 ; } -#Friction velocity -'zust' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 3 ; - } #Mean temperature at 2 metres 'mean2t' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def index b3c1bb6dc..cbc86ac1a 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def @@ -400,3 +400,219 @@ parameterCategory = 228 ; parameterNumber = 60 ; } +#Eastward gravity wave surface stress +'lgws' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 195 ; +} +#Friction velocity +'zust' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 3 ; +} +#Instantaneous eastward turbulent surface stress +'iews' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 229 ; +} +#Instantaneous northward turbulent surface stress +'inss' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 230 ; +} +#Instantaneous surface sensible heat flux +'ishf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 231 ; +} +#Instantaneous moisture flux +'ie' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 232 ; +} +#Large-scale precipitation +'lsp' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 142 ; +} +#Large-scale precipitation fraction +'lspf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 50 ; +} +#Northward gravity wave surface stress +'mgws' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 196 ; +} +#Snow evaporation +'es' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 44 ; +} +#Snowfall +'sf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 144 ; +} +#Surface runoff +'sro' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 8 ; +} +#TOA incident solar radiation +'tisr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 212 ; +} +#Top net thermal radiation, clear sky +'ttrc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 209 ; +} +#Top net solar radiation, clear sky +'tsrc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 208 ; +} +#Total cloud cover +'tcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 164 ; +} +#Total column rain water +'tcrw' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 89 ; +} +#Total column snow water +'tcsw' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 90 ; +} +#Vertical integral of eastward water vapour flux +'viwve' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 71 ; +} +#Vertical integral of northward water vapour flux +'viwvn' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 72 ; +} +#Snow albedo +'asn' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 32 ; +} +#Ice temperature +'ist' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 94 ; +} +#Snowmelt +'smlt' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 45 ; +} +#Downward UV radiation at the surface +'uvb' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 57 ; +} +#Photosynthetically active radiation at the surface +'par' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 58 ; +} +#Boundary layer height +'blh' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 159 ; +} +#Evaporation +'e' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 182 ; +} +#Low cloud cover +'lcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 186 ; +} +#Medium cloud cover +'mcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 187 ; +} +#High cloud cover +'hcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 188 ; +} +#Gravity wave dissipation +'gwd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 197 ; +} +#Potential evaporation +'pev' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 251 ; +} +#Unbalanced component of temperature +'uctp' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 21 ; +} +#Unbalanced component of logarithm of surface pressure +'ucln' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 22 ; +} +#Unbalanced component of divergence +'ucdv' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 23 ; +} +#10 metre wind gust in the last 3 hours +'10fg3' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 28 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index feb1c90da..9483b29c3 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -25,9 +25,12 @@ } #Surface runoff 'm' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 8 ; + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Sub-surface runoff 'm' = { @@ -95,24 +98,6 @@ parameterCategory = 128 ; parameterNumber = 20 ; } -#Unbalanced component of temperature -'K' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 21 ; - } -#Unbalanced component of logarithm of surface pressure -'~' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 22 ; - } -#Unbalanced component of divergence -'s**-1' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 23 ; - } #Reserved for future unbalanced components '~' = { discipline = 192 ; @@ -157,9 +142,10 @@ } #Snow albedo '(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 32 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; } #Ice temperature layer 1 'K' = { @@ -211,15 +197,21 @@ } #Snow evaporation 'm of water equivalent' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 44 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 197 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Snowmelt 'm of water equivalent' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 45 ; + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 203 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Solar duration 's' = { @@ -233,12 +225,6 @@ parameterCategory = 128 ; parameterNumber = 48 ; } -#Large-scale precipitation fraction -'s' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 50 ; - } #Maximum temperature at 2 metres in the last 24 hours 'K' = { discipline = 0 ; @@ -281,18 +267,6 @@ parameterCategory = 128 ; parameterNumber = 56 ; } -#Downward UV radiation at the surface -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 57 ; - } -#Photosynthetically active radiation at the surface -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 58 ; - } #Observation count '~' = { discipline = 192 ; @@ -674,9 +648,12 @@ } #Large-scale precipitation 'm' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 142 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Convective precipitation 'm' = { @@ -687,9 +664,12 @@ } #Snowfall 'm of water equivalent' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 144 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Charnock '~' = { @@ -734,12 +714,6 @@ parameterCategory = 128 ; parameterNumber = 158 ; } -#Boundary layer height -'m' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 159 ; - } #Standard deviation of orography 'm' = { discipline = 192 ; @@ -766,9 +740,12 @@ } #Total cloud cover '(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 164 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #Soil temperature level 2 'K' = { @@ -790,9 +767,12 @@ } #Evaporation 'm of water equivalent' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 182 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Soil temperature level 3 'K' = { @@ -814,21 +794,24 @@ } #Low cloud cover '(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 186 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; } #Medium cloud cover '(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 187 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; } #High cloud cover '(0 - 1)' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 188 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; } #East-West component of sub-gridscale orographic variance 'm**2' = { @@ -854,24 +837,6 @@ parameterCategory = 128 ; parameterNumber = 193 ; } -#Eastward gravity wave surface stress -'N m**-2 s' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 195 ; - } -#Northward gravity wave surface stress -'N m**-2 s' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 196 ; - } -#Gravity wave dissipation -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 197 ; - } #Skin reservoir content 'm of water equivalent' = { discipline = 192 ; @@ -910,24 +875,6 @@ parameterCategory = 128 ; parameterNumber = 206 ; } -#Top net solar radiation, clear sky -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 208 ; - } -#Top net thermal radiation, clear sky -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 209 ; - } -#TOA incident solar radiation -'J m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 212 ; - } #Vertically integrated moisture divergence 'kg m**-2' = { discipline = 192 ; @@ -1028,30 +975,6 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } -#Instantaneous eastward turbulent surface stress -'N m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 229 ; - } -#Instantaneous northward turbulent surface stress -'N m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 230 ; - } -#Instantaneous surface sensible heat flux -'W m**-2' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 231 ; - } -#Instantaneous moisture flux -'kg m**-2 s**-1' = { - discipline = 192 ; - parameterCategory = 128 ; - parameterNumber = 232 ; - } #Apparent surface humidity 'kg kg**-1' = { discipline = 192 ; @@ -5128,6 +5051,432 @@ parameterCategory = 213 ; parameterNumber = 150 ; } +#Random pattern 51 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 151 ; + } +#Random pattern 52 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 152 ; + } +#Random pattern 53 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 153 ; + } +#Random pattern 54 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 154 ; + } +#Random pattern 55 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 155 ; + } +#Random pattern 56 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 156 ; + } +#Random pattern 57 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 157 ; + } +#Random pattern 58 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 158 ; + } +#Random pattern 59 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 159 ; + } +#Random pattern 60 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 160 ; + } +#Random pattern 61 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 161 ; + } +#Random pattern 62 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 162 ; + } +#Random pattern 63 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 163 ; + } +#Random pattern 64 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 164 ; + } +#Random pattern 65 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 165 ; + } +#Random pattern 66 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 166 ; + } +#Random pattern 67 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 167 ; + } +#Random pattern 68 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 168 ; + } +#Random pattern 69 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 169 ; + } +#Random pattern 70 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 170 ; + } +#Random pattern 71 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 171 ; + } +#Random pattern 72 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 172 ; + } +#Random pattern 73 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 173 ; + } +#Random pattern 74 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 174 ; + } +#Random pattern 75 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 175 ; + } +#Random pattern 76 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 176 ; + } +#Random pattern 77 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 177 ; + } +#Random pattern 78 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 178 ; + } +#Random pattern 79 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 179 ; + } +#Random pattern 80 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 180 ; + } +#Random pattern 81 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 181 ; + } +#Random pattern 82 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 182 ; + } +#Random pattern 83 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 183 ; + } +#Random pattern 84 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 184 ; + } +#Random pattern 85 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 185 ; + } +#Random pattern 86 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 186 ; + } +#Random pattern 87 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 187 ; + } +#Random pattern 88 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 188 ; + } +#Random pattern 89 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 189 ; + } +#Random pattern 90 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 190 ; + } +#Random pattern 91 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 191 ; + } +#Random pattern 92 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 192 ; + } +#Random pattern 93 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 193 ; + } +#Random pattern 94 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 194 ; + } +#Random pattern 95 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 195 ; + } +#Random pattern 96 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 196 ; + } +#Random pattern 97 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 197 ; + } +#Random pattern 98 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 198 ; + } +#Random pattern 99 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 199 ; + } +#Random pattern 100 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 200 ; + } +#Random pattern 101 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 201 ; + } +#Random pattern 102 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 202 ; + } +#Random pattern 103 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 203 ; + } +#Random pattern 104 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 204 ; + } +#Random pattern 105 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 205 ; + } +#Random pattern 106 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 206 ; + } +#Random pattern 107 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 207 ; + } +#Random pattern 108 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 208 ; + } +#Random pattern 109 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 209 ; + } +#Random pattern 110 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 210 ; + } +#Random pattern 111 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 211 ; + } +#Random pattern 112 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 212 ; + } +#Random pattern 113 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 213 ; + } +#Random pattern 114 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 214 ; + } +#Random pattern 115 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 215 ; + } +#Random pattern 116 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 216 ; + } +#Random pattern 117 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 217 ; + } +#Random pattern 118 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 218 ; + } +#Random pattern 119 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 219 ; + } +#Random pattern 120 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 220 ; + } +#Random pattern 121 for SPP scheme +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 221 ; + } #Cosine of solar zenith angle '~' = { discipline = 192 ; @@ -13440,12 +13789,6 @@ typeOfStatisticalProcessing = 3 ; lengthOfTimeRange = 3 ; } -#10 metre wind gust in the last 3 hours -'m s**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 28 ; - } #Soil wetness index in layer 1 'dimensionless' = { discipline = 192 ; @@ -13541,18 +13884,6 @@ parameterCategory = 0 ; parameterNumber = 196 ; } -#Total column rain water -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 89 ; - } -#Total column snow water -'kg m**-2' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 90 ; - } #Canopy cover fraction '(0 - 1)' = { discipline = 192 ; @@ -13571,12 +13902,6 @@ parameterCategory = 228 ; parameterNumber = 93 ; } -#Ice temperature -'K' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 94 ; - } #Evaporation from the top of canopy 'm of water equivalent' = { discipline = 192 ; @@ -13665,6 +13990,15 @@ parameterCategory = 228 ; parameterNumber = 130 ; } +#Accumulated freezing rain +'m' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Surface short wave-effective total cloudiness 'dimensionless' = { discipline = 192 ; @@ -13679,9 +14013,12 @@ } #Potential evaporation 'm' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 251 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Irrigation 'm' = { @@ -15515,10 +15852,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 25 ; scaleFactorOfLowerLimit = 0 ; @@ -15535,8 +15872,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 2 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -15546,8 +15883,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 4 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -15557,8 +15894,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 6 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -15568,8 +15905,8 @@ discipline = 10 ; parameterCategory = 0 ; parameterNumber = 3 ; - typeOfFirstFixedSurface = 101 ; productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; scaledValueOfLowerLimit = 8 ; scaleFactorOfLowerLimit = 0 ; probabilityType = 3 ; @@ -16312,24 +16649,12 @@ parameterCategory = 140 ; parameterNumber = 233 ; } -#Significant height of wind waves -'m' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 5 ; - } #Mean direction of wind waves 'degrees' = { discipline = 192 ; parameterCategory = 140 ; parameterNumber = 235 ; } -#Mean period of wind waves -'s' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 6 ; - } #Significant height of total swell 'm' = { discipline = 192 ; @@ -17500,18 +17825,6 @@ parameterCategory = 162 ; parameterNumber = 70 ; } -#Vertical integral of eastward water vapour flux -'kg m**-1 s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 71 ; - } -#Vertical integral of northward water vapour flux -'kg m**-1 s**-1' = { - discipline = 192 ; - parameterCategory = 162 ; - parameterNumber = 72 ; - } #Vertical integral of eastward geopotential flux 'W m**-1' = { discipline = 192 ; @@ -21850,12 +22163,6 @@ parameterCategory = 220 ; parameterNumber = 228 ; } -#Friction velocity -'m s**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 3 ; - } #Mean temperature at 2 metres 'K' = { discipline = 192 ; diff --git a/definitions/grib2/localConcepts/ecmf/units.legacy.def b/definitions/grib2/localConcepts/ecmf/units.legacy.def index efc91e877..e9138419d 100644 --- a/definitions/grib2/localConcepts/ecmf/units.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/units.legacy.def @@ -400,3 +400,219 @@ parameterCategory = 228 ; parameterNumber = 60 ; } +#Eastward gravity wave surface stress +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 195 ; +} +#Friction velocity +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 3 ; +} +#Instantaneous eastward turbulent surface stress +'N m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 229 ; +} +#Instantaneous northward turbulent surface stress +'N m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 230 ; +} +#Instantaneous surface sensible heat flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 231 ; +} +#Instantaneous moisture flux +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 232 ; +} +#Large-scale precipitation +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 142 ; +} +#Large-scale precipitation fraction +'s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 50 ; +} +#Northward gravity wave surface stress +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 196 ; +} +#Snow evaporation +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 44 ; +} +#Snowfall +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 144 ; +} +#Surface runoff +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 8 ; +} +#TOA incident solar radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 212 ; +} +#Top net thermal radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 209 ; +} +#Top net solar radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 208 ; +} +#Total cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 164 ; +} +#Total column rain water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 89 ; +} +#Total column snow water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 90 ; +} +#Vertical integral of eastward water vapour flux +'kg m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 71 ; +} +#Vertical integral of northward water vapour flux +'kg m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 72 ; +} +#Snow albedo +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 32 ; +} +#Ice temperature +'K' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 94 ; +} +#Snowmelt +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 45 ; +} +#Downward UV radiation at the surface +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 57 ; +} +#Photosynthetically active radiation at the surface +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 58 ; +} +#Boundary layer height +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 159 ; +} +#Evaporation +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 182 ; +} +#Low cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 186 ; +} +#Medium cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 187 ; +} +#High cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 188 ; +} +#Gravity wave dissipation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 197 ; +} +#Potential evaporation +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 251 ; +} +#Unbalanced component of temperature +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 21 ; +} +#Unbalanced component of logarithm of surface pressure +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 22 ; +} +#Unbalanced component of divergence +'s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 23 ; +} +#10 metre wind gust in the last 3 hours +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 28 ; +} diff --git a/definitions/grib2/localConcepts/edzw/name.def b/definitions/grib2/localConcepts/edzw/name.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/localConcepts/edzw/paramId.def b/definitions/grib2/localConcepts/edzw/paramId.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/localConcepts/edzw/shortName.def b/definitions/grib2/localConcepts/edzw/shortName.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/localConcepts/edzw/units.def b/definitions/grib2/localConcepts/edzw/units.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/localConcepts/kwbc/name.def b/definitions/grib2/localConcepts/kwbc/name.def index 67feb2d9e..b3bd218b1 100644 --- a/definitions/grib2/localConcepts/kwbc/name.def +++ b/definitions/grib2/localConcepts/kwbc/name.def @@ -161,12 +161,6 @@ parameterCategory = 3 ; parameterNumber = 195 ; } -#Planetary boundary layer height -'Planetary boundary layer height' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 196 ; - } #5-wave geopotential height anomaly '5-wave geopotential height anomaly' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/kwbc/paramId.def b/definitions/grib2/localConcepts/kwbc/paramId.def index ec9ab7d85..485f8288f 100644 --- a/definitions/grib2/localConcepts/kwbc/paramId.def +++ b/definitions/grib2/localConcepts/kwbc/paramId.def @@ -161,12 +161,6 @@ parameterCategory = 3 ; parameterNumber = 195 ; } -#Planetary boundary layer height -'260083' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 196 ; - } #5-wave geopotential height anomaly '260084' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/kwbc/shortName.def b/definitions/grib2/localConcepts/kwbc/shortName.def index deb863781..833599f6d 100644 --- a/definitions/grib2/localConcepts/kwbc/shortName.def +++ b/definitions/grib2/localConcepts/kwbc/shortName.def @@ -161,12 +161,6 @@ parameterCategory = 3 ; parameterNumber = 195 ; } -#Planetary boundary layer height -'hpbl' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 196 ; - } #5-wave geopotential height anomaly '5wava' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/kwbc/units.def b/definitions/grib2/localConcepts/kwbc/units.def index 9fc9d8d38..149cb6c3f 100644 --- a/definitions/grib2/localConcepts/kwbc/units.def +++ b/definitions/grib2/localConcepts/kwbc/units.def @@ -161,12 +161,6 @@ parameterCategory = 3 ; parameterNumber = 195 ; } -#Planetary boundary layer height -'m' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 196 ; - } #5-wave geopotential height anomaly 'gpm' = { discipline = 0 ; diff --git a/definitions/grib2/localConcepts/s2s/cfName.def b/definitions/grib2/localConcepts/s2s/cfName.def index 9fd002b59..140e70741 100644 --- a/definitions/grib2/localConcepts/s2s/cfName.def +++ b/definitions/grib2/localConcepts/s2s/cfName.def @@ -4,6 +4,7 @@ discipline = 10 ; parameterCategory = 2 ; parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; } #Sea surface practical salinity 'sea_surface_salinity' = { diff --git a/definitions/grib2/localConcepts/s2s/cfVarName.def b/definitions/grib2/localConcepts/s2s/cfVarName.def index aac03ffb7..d3598d7d0 100644 --- a/definitions/grib2/localConcepts/s2s/cfVarName.def +++ b/definitions/grib2/localConcepts/s2s/cfVarName.def @@ -4,6 +4,7 @@ discipline = 10 ; parameterCategory = 2 ; parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; } #Maximum temperature at 2 metres in the last 6 hours 'mx2t6' = { @@ -46,7 +47,7 @@ typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 2 ; scaleFactorOfFirstFixedSurface = 0 ; -} + } #2 metre dewpoint temperature 'd2m' = { discipline = 0 ; @@ -58,17 +59,17 @@ } #Mean sea water potential temperature in the upper 300 m 'mswpt300m' = { - discipline = 10 ; - parameterCategory = 4 ; - parameterNumber = 18 ; - typeOfFirstFixedSurface = 160 ; - typeOfSecondFixedSurface = 160 ; - scaledValueOfFirstFixedSurface = 0 ; - scaleFactorOfFirstFixedSurface = 0 ; - scaledValueOfSecondFixedSurface = 300 ; - scaleFactorOfSecondFixedSurface = 0 ; - typeOfStatisticalProcessing = 0 ; -} + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 160 ; + typeOfSecondFixedSurface = 160 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 300 ; + scaleFactorOfSecondFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Sea surface practical salinity 'sos' = { discipline = 10 ; @@ -97,54 +98,53 @@ } #Sea surface height 'zos' = { - discipline = 10 ; - parameterCategory = 3 ; - parameterNumber = 1 ; - typeOfFirstFixedSurface = 160 ; - typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = 0 ; - scaleFactorOfFirstFixedSurface = 0 ; - scaledValueOfSecondFixedSurface = missing() ; - scaleFactorOfSecondFixedSurface = missing() ; - typeOfStatisticalProcessing = 0 ; - } + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 160 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } #Depth of 20C isotherm 't20d' = { - discipline = 10 ; - parameterCategory = 4 ; - parameterNumber = 14 ; - typeOfFirstFixedSurface = 20 ; - typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = 29315 ; - scaleFactorOfFirstFixedSurface = 2 ; - scaledValueOfSecondFixedSurface = missing() ; - scaleFactorOfSecondFixedSurface = missing() ; - typeOfStatisticalProcessing = 0 ; - } + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 20 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 29315 ; + scaleFactorOfFirstFixedSurface = 2 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; + } #Average salinity in the upper 300m 'sav300' = { - discipline = 10 ; - parameterCategory = 4 ; - parameterNumber = 21 ; - typeOfFirstFixedSurface = 160 ; - typeOfSecondFixedSurface = 160 ; - scaledValueOfFirstFixedSurface = 0 ; - scaleFactorOfFirstFixedSurface = 0 ; - scaledValueOfSecondFixedSurface = 300 ; - scaleFactorOfSecondFixedSurface = 0 ; - typeOfStatisticalProcessing = 0 ; - } + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 160 ; + typeOfSecondFixedSurface = 160 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 300 ; + scaleFactorOfSecondFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Sea-ice thickness 'sithick' = { - discipline = 10 ; - parameterCategory = 2 ; - parameterNumber = 1 ; - typeOfFirstFixedSurface = 160 ; - typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = 0 ; - scaleFactorOfFirstFixedSurface = 0 ; - scaledValueOfSecondFixedSurface = missing() ; - scaleFactorOfSecondFixedSurface = missing() ; - typeOfStatisticalProcessing = 0 ; - } - + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 160 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + typeOfStatisticalProcessing = 0 ; +} diff --git a/definitions/grib2/localConcepts/s2s/name.def b/definitions/grib2/localConcepts/s2s/name.def index 6d8e9e58a..3821406fa 100644 --- a/definitions/grib2/localConcepts/s2s/name.def +++ b/definitions/grib2/localConcepts/s2s/name.def @@ -4,6 +4,7 @@ discipline = 10 ; parameterCategory = 2 ; parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; } #Maximum temperature at 2 metres in the last 6 hours 'Maximum temperature at 2 metres in the last 6 hours' = { diff --git a/definitions/grib2/localConcepts/s2s/paramId.def b/definitions/grib2/localConcepts/s2s/paramId.def index fba870c2f..ecd296acf 100644 --- a/definitions/grib2/localConcepts/s2s/paramId.def +++ b/definitions/grib2/localConcepts/s2s/paramId.def @@ -4,6 +4,7 @@ discipline = 10 ; parameterCategory = 2 ; parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; } #Maximum temperature at 2 metres in the last 6 hours '121' = { diff --git a/definitions/grib2/localConcepts/s2s/shortName.def b/definitions/grib2/localConcepts/s2s/shortName.def index d55b41aa3..a9f3910a6 100644 --- a/definitions/grib2/localConcepts/s2s/shortName.def +++ b/definitions/grib2/localConcepts/s2s/shortName.def @@ -4,6 +4,7 @@ discipline = 10 ; parameterCategory = 2 ; parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; } #Maximum temperature at 2 metres in the last 6 hours 'mx2t6' = { diff --git a/definitions/grib2/localConcepts/s2s/units.def b/definitions/grib2/localConcepts/s2s/units.def index b4587f8f3..3dbb1d7e8 100644 --- a/definitions/grib2/localConcepts/s2s/units.def +++ b/definitions/grib2/localConcepts/s2s/units.def @@ -4,6 +4,7 @@ discipline = 10 ; parameterCategory = 2 ; parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; } #Maximum temperature at 2 metres in the last 6 hours 'K' = { diff --git a/definitions/grib2/localConcepts/tigge/cfVarName.def b/definitions/grib2/localConcepts/tigge/cfVarName.def index b0e30b422..201740e2c 100644 --- a/definitions/grib2/localConcepts/tigge/cfVarName.def +++ b/definitions/grib2/localConcepts/tigge/cfVarName.def @@ -5,10 +5,10 @@ parameterCategory = 0 ; parameterNumber = 0 ; typeOfFirstFixedSurface = 103 ; - typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 15 ; scaleFactorOfFirstFixedSurface = 1 ; - scaledValueOfFirstFixedSurface = 15 ; indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 6 ; } #Minimum temperature at 2 metres in the last 6 hours @@ -16,11 +16,11 @@ discipline = 0 ; parameterCategory = 0 ; parameterNumber = 0 ; - typeOfStatisticalProcessing = 3 ; typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; scaleFactorOfFirstFixedSurface = 1 ; - scaledValueOfFirstFixedSurface = 15 ; indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; lengthOfTimeRange = 6 ; } #2 metre temperature @@ -38,18 +38,18 @@ parameterCategory = 0 ; parameterNumber = 6 ; typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 15 ; scaleFactorOfFirstFixedSurface = 1 ; - scaledValueOfFirstFixedSurface = 15 ; } #Soil moisture 'sm' = { discipline = 2 ; parameterCategory = 0 ; parameterNumber = 22 ; + typeOfFirstFixedSurface = 106 ; typeOfSecondFixedSurface = 106 ; - typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; scaleFactorOfFirstFixedSurface = 0 ; - scaledValueOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = 2 ; scaleFactorOfSecondFixedSurface = 1 ; } @@ -58,10 +58,10 @@ discipline = 2 ; parameterCategory = 0 ; parameterNumber = 2 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; scaledValueOfFirstFixedSurface = 0 ; - typeOfSecondFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = 0 ; scaledValueOfSecondFixedSurface = 2 ; scaleFactorOfSecondFixedSurface = 1 ; - typeOfFirstFixedSurface = 106 ; - scaleFactorOfFirstFixedSurface = 0 ; } diff --git a/definitions/grib2/localConcepts/uerra/cfVarName.def b/definitions/grib2/localConcepts/uerra/cfVarName.def index 5b7c9addb..997197396 100644 --- a/definitions/grib2/localConcepts/uerra/cfVarName.def +++ b/definitions/grib2/localConcepts/uerra/cfVarName.def @@ -130,6 +130,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #2 metre relative humidity 'r2' = { @@ -159,31 +161,31 @@ indicatorOfUnitForTimeRange = 1 ; typeOfStatisticalProcessing = 1 ; lengthOfTimeRange = 24 ; -} + } #Sea ice surface temperature 'sist' = { - discipline = 10 ; - parameterCategory = 2 ; - parameterNumber = 8 ; - typeOfFirstFixedSurface = 174 ; - typeOfSecondFixedSurface = 255 ; - scaledValueOfFirstFixedSurface = missing() ; - scaleFactorOfFirstFixedSurface = missing() ; - scaledValueOfSecondFixedSurface = missing() ; - scaleFactorOfSecondFixedSurface = missing() ; - } -#Snow on ice total depth -'sitd' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 11 ; - typeOfFirstFixedSurface = 174 ; - typeOfSecondFixedSurface = 255 ; + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; scaledValueOfFirstFixedSurface = missing() ; scaleFactorOfFirstFixedSurface = missing() ; scaledValueOfSecondFixedSurface = missing() ; scaleFactorOfSecondFixedSurface = missing() ; - } + } +#Snow on ice total depth +'sitd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 174 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; + } #Sea-ice thickness 'sithick' = { discipline = 10 ; diff --git a/definitions/grib2/localConcepts/uerra/name.def b/definitions/grib2/localConcepts/uerra/name.def index d6af04ff0..4075202ba 100644 --- a/definitions/grib2/localConcepts/uerra/name.def +++ b/definitions/grib2/localConcepts/uerra/name.def @@ -130,6 +130,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #2 metre relative humidity '2 metre relative humidity' = { diff --git a/definitions/grib2/localConcepts/uerra/paramId.def b/definitions/grib2/localConcepts/uerra/paramId.def index 94355ce36..deae813b8 100644 --- a/definitions/grib2/localConcepts/uerra/paramId.def +++ b/definitions/grib2/localConcepts/uerra/paramId.def @@ -130,6 +130,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #2 metre relative humidity '260242' = { diff --git a/definitions/grib2/localConcepts/uerra/shortName.def b/definitions/grib2/localConcepts/uerra/shortName.def index 94e948102..735a053df 100644 --- a/definitions/grib2/localConcepts/uerra/shortName.def +++ b/definitions/grib2/localConcepts/uerra/shortName.def @@ -130,6 +130,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #2 metre relative humidity '2r' = { diff --git a/definitions/grib2/localConcepts/uerra/units.def b/definitions/grib2/localConcepts/uerra/units.def index 63ab054bd..4396e0933 100644 --- a/definitions/grib2/localConcepts/uerra/units.def +++ b/definitions/grib2/localConcepts/uerra/units.def @@ -130,6 +130,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } #2 metre relative humidity '%' = { diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def index 726fbba69..52dc0489c 100644 --- a/definitions/grib2/name.def +++ b/definitions/grib2/name.def @@ -4,8 +4,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 1 ; scaleFactorOfLowerLimit = 0 ; @@ -16,8 +16,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 5 ; scaleFactorOfLowerLimit = 0 ; @@ -28,8 +28,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 40 ; scaleFactorOfLowerLimit = 0 ; @@ -40,8 +40,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 60 ; scaleFactorOfLowerLimit = 0 ; @@ -52,8 +52,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 80 ; scaleFactorOfLowerLimit = 0 ; @@ -64,8 +64,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 100 ; scaleFactorOfLowerLimit = 0 ; @@ -76,8 +76,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 150 ; scaleFactorOfLowerLimit = 0 ; @@ -88,8 +88,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 200 ; scaleFactorOfLowerLimit = 0 ; @@ -100,8 +100,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 3 ; scaleFactorOfLowerLimit = -2 ; @@ -136,6 +136,7 @@ discipline = 10 ; parameterCategory = 2 ; parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; } #Snow density 'Snow density' = { @@ -165,6 +166,30 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } +#Large-scale precipitation fraction +'Large-scale precipitation fraction' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Downward UV radiation at the surface +'Downward UV radiation at the surface' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Photosynthetically active radiation at the surface +'Photosynthetically active radiation at the surface' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Specific rain water content 'Specific rain water content' = { discipline = 0 ; @@ -204,25 +229,40 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } -#Surface solar radiation downwards -'Surface solar radiation downwards' = { +#Boundary layer dissipation +'Boundary layer dissipation' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 1 ; + } +#Boundary layer height +'Boundary layer height' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + } +#Surface short-wave (solar) radiation downwards +'Surface short-wave (solar) radiation downwards' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 7 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface thermal radiation downwards -'Surface thermal radiation downwards' = { +#Surface long-wave (thermal) radiation downwards +'Surface long-wave (thermal) radiation downwards' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 3 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Top net solar radiation -'Top net solar radiation' = { +#Top net short-wave (solar) radiation +'Top net short-wave (solar) radiation' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 1 ; @@ -234,12 +274,39 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 38 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Northward turbulent surface stress 'Northward turbulent surface stress' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Eastward gravity wave surface stress +'Eastward gravity wave surface stress' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Northward gravity wave surface stress +'Northward gravity wave surface stress' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Gravity wave dissipation +'Gravity wave dissipation' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 1 ; } #Ozone mass mixing ratio 'Ozone mass mixing ratio' = { @@ -247,22 +314,74 @@ parameterCategory = 14 ; parameterNumber = 1 ; } -#Surface net solar radiation, clear sky -'Surface net solar radiation, clear sky' = { +#Top net solar radiation, clear sky +'Top net solar radiation, clear sky' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; + } +#Top net thermal radiation, clear sky +'Top net thermal radiation, clear sky' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; + } +#Surface net short-wave (solar) radiation, clear sky +'Surface net short-wave (solar) radiation, clear sky' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 11 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface net thermal radiation, clear sky -'Surface net thermal radiation, clear sky' = { +#Surface net long-wave (thermal) radiation, clear sky +'Surface net long-wave (thermal) radiation, clear sky' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 6 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#TOA incident solar radiation +'TOA incident solar radiation' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; + } +#Instantaneous eastward turbulent surface stress +'Instantaneous eastward turbulent surface stress' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 38 ; + typeOfFirstFixedSurface = 1 ; + } +#Instantaneous northward turbulent surface stress +'Instantaneous northward turbulent surface stress' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + } +#Instantaneous surface sensible heat flux +'Instantaneous surface sensible heat flux' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } +#Instantaneous moisture flux +'Instantaneous moisture flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + } #Temperature of snow layer 'Temperature of snow layer' = { discipline = 2 ; @@ -324,8 +443,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 25 ; scaleFactorOfLowerLimit = 0 ; @@ -336,8 +455,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 50 ; scaleFactorOfLowerLimit = 0 ; @@ -348,10 +467,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 10 ; scaleFactorOfLowerLimit = 0 ; @@ -1848,6 +1967,15 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 3 ; } +#Instantaneous 10 metre wind gust +'Instantaneous 10 metre wind gust' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } #Relative humidity with respect to water 'Relative humidity with respect to water' = { discipline = 0 ; @@ -1866,12 +1994,6 @@ parameterCategory = 19 ; parameterNumber = 19 ; } -#Fraction of stratiform precipitation cover -'Fraction of stratiform precipitation cover' = { - discipline = 0 ; - parameterCategory = 6 ; - parameterNumber = 36 ; - } #Fraction of convective precipitation cover 'Fraction of convective precipitation cover' = { discipline = 0 ; @@ -2053,6 +2175,28 @@ scaledValueOfSecondFixedSurface = 10 ; scaleFactorOfSecondFixedSurface = 1 ; } +#Total column rain water +'Total column rain water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Total column snow water +'Total column snow water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Ice temperature +'Ice temperature' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + } #Soil temperature top 20 cm 'Soil temperature top 20 cm' = { discipline = 2 ; @@ -2100,6 +2244,27 @@ parameterCategory = 0 ; parameterNumber = 33 ; } +#Instantaneous large-scale surface precipitation fraction +'Instantaneous large-scale surface precipitation fraction' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective rain rate +'Convective rain rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale rain rate +'Large scale rain rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + } #Mixed-layer CAPE in the lowest 50 hPa 'Mixed-layer CAPE in the lowest 50 hPa' = { discipline = 0 ; @@ -2265,6 +2430,29 @@ parameterCategory = 0 ; parameterNumber = 49 ; } +#Accumulated freezing rain water equivalent +'Accumulated freezing rain water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Runoff water equivalent +'Runoff water equivalent' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow evaporation water equivalent +'Snow evaporation water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Mean temperature tendency due to short-wave radiation 'Mean temperature tendency due to short-wave radiation' = { discipline = 0 ; @@ -2648,12 +2836,6 @@ parameterCategory = 6 ; parameterNumber = 22 ; } -#Evaporation rate -'Evaporation rate' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 79 ; - } #Evaporation 'Evaporation' = { discipline = 0 ; @@ -2843,6 +3025,12 @@ parameterCategory = 3 ; parameterNumber = 27 ; } +#Soil moisture +'Soil moisture' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 19 ; + } #Accumulated surface downward short-wave radiation flux, clear sky 'Accumulated surface downward short-wave radiation flux, clear sky' = { discipline = 0 ; @@ -3052,44 +3240,44 @@ parameterCategory = 0 ; parameterNumber = 9 ; } -#Forest fire weather index -'Forest fire weather index' = { +#Forest fire weather index (as defined by the Canadian Forest Service) +'Forest fire weather index (as defined by the Canadian Forest Service)' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 5 ; } -#Fine fuel moisture code -'Fine fuel moisture code' = { +#Fine fuel moisture code (as defined by the Canadian Forest Service) +'Fine fuel moisture code (as defined by the Canadian Forest Service)' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 6 ; } -#Duff moisture code -'Duff moisture code' = { +#Duff moisture code (as defined by the Canadian Forest Service) +'Duff moisture code (as defined by the Canadian Forest Service)' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 7 ; } -#Drought code -'Drought code' = { +#Drought code (as defined by the Canadian Forest Service) +'Drought code (as defined by the Canadian Forest Service)' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 8 ; } -#Initial fire spread index -'Initial fire spread index' = { +#Initial fire spread index (as defined by the Canadian Forest Service) +'Initial fire spread index (as defined by the Canadian Forest Service)' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 9 ; } -#Fire buildup index -'Fire buildup index' = { +#Fire buildup index (as defined by the Canadian Forest Service) +'Fire buildup index (as defined by the Canadian Forest Service)' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 10 ; } -#Fire daily severity rating -'Fire daily severity rating' = { +#Fire daily severity rating (as defined by the Canadian Forest Service) +'Fire daily severity rating (as defined by the Canadian Forest Service)' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 11 ; @@ -4683,6 +4871,18 @@ parameterCategory = 0 ; parameterNumber = 15 ; } +#Significant height of wind waves +'Significant height of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean period of wind waves +'Mean period of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } #Eastward sea water velocity 'Eastward sea water velocity' = { discipline = 10 ; @@ -4697,6 +4897,22 @@ parameterNumber = 3 ; typeOfFirstFixedSurface = 160 ; } +#Vertical integral of eastward water vapour flux +'Vertical integral of eastward water vapour flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Vertical integral of northward water vapour flux +'Vertical integral of northward water vapour flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } #Surface runoff 'Surface runoff' = { discipline = 2 ; @@ -4771,6 +4987,12 @@ typeOfGeneratingProcess = 20 ; is_chemical = 1 ; } +#Friction velocity +'Friction velocity' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + } #Lake total depth 'Lake total depth' = { discipline = 1 ; @@ -4778,6 +5000,8 @@ parameterNumber = 0 ; typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; } #Lake mix-layer temperature 'Lake mix-layer temperature' = { @@ -4810,6 +5034,8 @@ parameterNumber = 1 ; typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; } #Lake shape factor 'Lake shape factor' = { @@ -4832,6 +5058,10 @@ parameterNumber = 5 ; typeOfFirstFixedSurface = 174 ; typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; } #100 metre U wind component '100 metre U wind component' = { @@ -4856,8 +5086,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 10 ; scaleFactorOfLowerLimit = 0 ; @@ -4868,8 +5098,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 20 ; scaleFactorOfLowerLimit = 0 ; @@ -4994,12 +5224,6 @@ parameterCategory = 2 ; parameterNumber = 12 ; } -#Boundary layer dissipation -'Boundary layer dissipation' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 20 ; - } #Surface sensible heat flux 'Surface sensible heat flux' = { discipline = 0 ; @@ -5090,24 +5314,24 @@ parameterCategory = 0 ; parameterNumber = 1 ; } -#Surface net solar radiation -'Surface net solar radiation' = { +#Surface net short-wave (solar) radiation +'Surface net short-wave (solar) radiation' = { discipline = 0 ; parameterCategory = 4 ; parameterNumber = 9 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface net thermal radiation -'Surface net thermal radiation' = { +#Surface net long-wave (thermal) radiation +'Surface net long-wave (thermal) radiation' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 5 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Top net thermal radiation -'Top net thermal radiation' = { +#Top net long-wave (thermal) radiation +'Top net long-wave (thermal) radiation' = { discipline = 0 ; parameterCategory = 5 ; parameterNumber = 5 ; @@ -5150,12 +5374,6 @@ parameterCategory = 0 ; parameterNumber = 10 ; } -#Sensible heat net flux -'Sensible heat net flux' = { - discipline = 0 ; - parameterCategory = 0 ; - parameterNumber = 11 ; - } #Heat index 'Heat index' = { discipline = 0 ; @@ -5425,6 +5643,7 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; } #Total snowfall rate water equivalent 'Total snowfall rate water equivalent' = { @@ -5449,6 +5668,7 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; } #Total snowfall rate 'Total snowfall rate' = { @@ -5576,12 +5796,6 @@ parameterCategory = 3 ; parameterNumber = 1 ; } -#Geometric height -'Geometric height' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 6 ; - } #Altimeter setting 'Altimeter setting' = { discipline = 0 ; @@ -5624,12 +5838,6 @@ parameterCategory = 3 ; parameterNumber = 17 ; } -#Planetary boundary layer height -'Planetary boundary layer height' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 18 ; - } #5-wave geopotential height anomaly '5-wave geopotential height anomaly' = { discipline = 0 ; @@ -6194,12 +6402,6 @@ parameterCategory = 1 ; parameterNumber = 2 ; } -#Land cover (1=land, 0=sea) -'Land cover (1=land, 0=sea)' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 0 ; - } #Vegetation 'Vegetation' = { discipline = 2 ; @@ -6824,18 +7026,6 @@ parameterCategory = 1 ; parameterNumber = 16 ; } -#Significant height of wind waves -'Significant height of wind waves' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 5 ; - } -#Mean period of wind waves -'Mean period of wind waves' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 6 ; - } #Direction of swell waves 'Direction of swell waves' = { discipline = 10 ; @@ -6895,10 +7085,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 15 ; scaleFactorOfLowerLimit = 0 ; @@ -6909,10 +7099,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 20 ; scaleFactorOfLowerLimit = 0 ; diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def index 8b5a0ed40..6eeb64341 100644 --- a/definitions/grib2/paramId.def +++ b/definitions/grib2/paramId.def @@ -4,8 +4,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 1 ; scaleFactorOfLowerLimit = 0 ; @@ -16,8 +16,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 5 ; scaleFactorOfLowerLimit = 0 ; @@ -28,8 +28,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 40 ; scaleFactorOfLowerLimit = 0 ; @@ -40,8 +40,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 60 ; scaleFactorOfLowerLimit = 0 ; @@ -52,8 +52,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 80 ; scaleFactorOfLowerLimit = 0 ; @@ -64,8 +64,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 100 ; scaleFactorOfLowerLimit = 0 ; @@ -76,8 +76,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 150 ; scaleFactorOfLowerLimit = 0 ; @@ -88,8 +88,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 200 ; scaleFactorOfLowerLimit = 0 ; @@ -100,8 +100,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 3 ; scaleFactorOfLowerLimit = -2 ; @@ -136,6 +136,7 @@ discipline = 10 ; parameterCategory = 2 ; parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; } #Snow density '33' = { @@ -165,6 +166,30 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } +#Large-scale precipitation fraction +'50' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Downward UV radiation at the surface +'57' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Photosynthetically active radiation at the surface +'58' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Specific rain water content '75' = { discipline = 0 ; @@ -204,8 +229,23 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } -#Surface solar radiation downwards +#Boundary layer dissipation +'145' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 1 ; + } +#Boundary layer height +'159' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + } +#Surface short-wave (solar) radiation downwards '169' = { discipline = 0 ; parameterCategory = 4 ; @@ -213,7 +253,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface thermal radiation downwards +#Surface long-wave (thermal) radiation downwards '175' = { discipline = 0 ; parameterCategory = 5 ; @@ -221,7 +261,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation '178' = { discipline = 0 ; parameterCategory = 4 ; @@ -234,12 +274,39 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 38 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Northward turbulent surface stress '181' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Eastward gravity wave surface stress +'195' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Northward gravity wave surface stress +'196' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Gravity wave dissipation +'197' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 1 ; } #Ozone mass mixing ratio '203' = { @@ -247,7 +314,23 @@ parameterCategory = 14 ; parameterNumber = 1 ; } -#Surface net solar radiation, clear sky +#Top net solar radiation, clear sky +'208' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; + } +#Top net thermal radiation, clear sky +'209' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; + } +#Surface net short-wave (solar) radiation, clear sky '210' = { discipline = 0 ; parameterCategory = 4 ; @@ -255,7 +338,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface net thermal radiation, clear sky +#Surface net long-wave (thermal) radiation, clear sky '211' = { discipline = 0 ; parameterCategory = 5 ; @@ -263,6 +346,42 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#TOA incident solar radiation +'212' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; + } +#Instantaneous eastward turbulent surface stress +'229' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 38 ; + typeOfFirstFixedSurface = 1 ; + } +#Instantaneous northward turbulent surface stress +'230' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + } +#Instantaneous surface sensible heat flux +'231' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } +#Instantaneous moisture flux +'232' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + } #Temperature of snow layer '238' = { discipline = 2 ; @@ -324,8 +443,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 25 ; scaleFactorOfLowerLimit = 0 ; @@ -336,8 +455,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 50 ; scaleFactorOfLowerLimit = 0 ; @@ -348,10 +467,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 10 ; scaleFactorOfLowerLimit = 0 ; @@ -1848,6 +1967,15 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 3 ; } +#Instantaneous 10 metre wind gust +'228029' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } #Relative humidity with respect to water '228030' = { discipline = 0 ; @@ -1866,12 +1994,6 @@ parameterCategory = 19 ; parameterNumber = 19 ; } -#Fraction of stratiform precipitation cover -'228033' = { - discipline = 0 ; - parameterCategory = 6 ; - parameterNumber = 36 ; - } #Fraction of convective precipitation cover '228034' = { discipline = 0 ; @@ -2053,6 +2175,28 @@ scaledValueOfSecondFixedSurface = 10 ; scaleFactorOfSecondFixedSurface = 1 ; } +#Total column rain water +'228089' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Total column snow water +'228090' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Ice temperature +'228094' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + } #Soil temperature top 20 cm '228095' = { discipline = 2 ; @@ -2100,6 +2244,27 @@ parameterCategory = 0 ; parameterNumber = 33 ; } +#Instantaneous large-scale surface precipitation fraction +'228217' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective rain rate +'228218' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale rain rate +'228219' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + } #Mixed-layer CAPE in the lowest 50 hPa '228231' = { discipline = 0 ; @@ -2265,6 +2430,29 @@ parameterCategory = 0 ; parameterNumber = 49 ; } +#Accumulated freezing rain water equivalent +'231001' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Runoff water equivalent +'231002' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow evaporation water equivalent +'231003' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Mean temperature tendency due to short-wave radiation '235001' = { discipline = 0 ; @@ -2648,12 +2836,6 @@ parameterCategory = 6 ; parameterNumber = 22 ; } -#Evaporation rate -'260258' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 79 ; - } #Evaporation '260259' = { discipline = 0 ; @@ -2843,6 +3025,12 @@ parameterCategory = 3 ; parameterNumber = 27 ; } +#Soil moisture +'260368' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 19 ; + } #Accumulated surface downward short-wave radiation flux, clear sky '260423' = { discipline = 0 ; @@ -3052,43 +3240,43 @@ parameterCategory = 0 ; parameterNumber = 9 ; } -#Forest fire weather index +#Forest fire weather index (as defined by the Canadian Forest Service) '260540' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 5 ; } -#Fine fuel moisture code +#Fine fuel moisture code (as defined by the Canadian Forest Service) '260541' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 6 ; } -#Duff moisture code +#Duff moisture code (as defined by the Canadian Forest Service) '260542' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 7 ; } -#Drought code +#Drought code (as defined by the Canadian Forest Service) '260543' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 8 ; } -#Initial fire spread index +#Initial fire spread index (as defined by the Canadian Forest Service) '260544' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 9 ; } -#Fire buildup index +#Fire buildup index (as defined by the Canadian Forest Service) '260545' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 10 ; } -#Fire daily severity rating +#Fire daily severity rating (as defined by the Canadian Forest Service) '260546' = { discipline = 2 ; parameterCategory = 4 ; @@ -4683,6 +4871,18 @@ parameterCategory = 0 ; parameterNumber = 15 ; } +#Significant height of wind waves +'140234' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean period of wind waves +'140236' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } #Eastward sea water velocity '151131' = { discipline = 10 ; @@ -4697,6 +4897,22 @@ parameterNumber = 3 ; typeOfFirstFixedSurface = 160 ; } +#Vertical integral of eastward water vapour flux +'162071' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Vertical integral of northward water vapour flux +'162072' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } #Surface runoff '174008' = { discipline = 2 ; @@ -4771,6 +4987,12 @@ typeOfGeneratingProcess = 20 ; is_chemical = 1 ; } +#Friction velocity +'228003' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + } #Lake total depth '228007' = { discipline = 1 ; @@ -4778,6 +5000,8 @@ parameterNumber = 0 ; typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; } #Lake mix-layer temperature '228008' = { @@ -4810,6 +5034,8 @@ parameterNumber = 1 ; typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; } #Lake shape factor '228012' = { @@ -4832,6 +5058,10 @@ parameterNumber = 5 ; typeOfFirstFixedSurface = 174 ; typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; } #100 metre U wind component '228246' = { @@ -4856,8 +5086,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 10 ; scaleFactorOfLowerLimit = 0 ; @@ -4868,8 +5098,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 20 ; scaleFactorOfLowerLimit = 0 ; @@ -4994,12 +5224,6 @@ parameterCategory = 2 ; parameterNumber = 12 ; } -#Boundary layer dissipation -'145' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 20 ; - } #Surface sensible heat flux '146' = { discipline = 0 ; @@ -5090,7 +5314,7 @@ parameterCategory = 0 ; parameterNumber = 1 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation '176' = { discipline = 0 ; parameterCategory = 4 ; @@ -5098,7 +5322,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation '177' = { discipline = 0 ; parameterCategory = 5 ; @@ -5106,7 +5330,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation '179' = { discipline = 0 ; parameterCategory = 5 ; @@ -5150,12 +5374,6 @@ parameterCategory = 0 ; parameterNumber = 10 ; } -#Sensible heat net flux -'260003' = { - discipline = 0 ; - parameterCategory = 0 ; - parameterNumber = 11 ; - } #Heat index '260004' = { discipline = 0 ; @@ -5425,6 +5643,7 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; } #Total snowfall rate water equivalent '260049' = { @@ -5449,6 +5668,7 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; } #Total snowfall rate '260053' = { @@ -5576,12 +5796,6 @@ parameterCategory = 3 ; parameterNumber = 1 ; } -#Geometric height -'260075' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 6 ; - } #Altimeter setting '260076' = { discipline = 0 ; @@ -5624,12 +5838,6 @@ parameterCategory = 3 ; parameterNumber = 17 ; } -#Planetary boundary layer height -'260083' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 18 ; - } #5-wave geopotential height anomaly '260084' = { discipline = 0 ; @@ -6194,12 +6402,6 @@ parameterCategory = 1 ; parameterNumber = 2 ; } -#Land cover (1=land, 0=sea) -'260179' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 0 ; - } #Vegetation '260180' = { discipline = 2 ; @@ -6824,18 +7026,6 @@ parameterCategory = 1 ; parameterNumber = 16 ; } -#Significant height of wind waves -'3102' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 5 ; - } -#Mean period of wind waves -'3103' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 6 ; - } #Direction of swell waves '3104' = { discipline = 10 ; @@ -6895,10 +7085,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 15 ; scaleFactorOfLowerLimit = 0 ; @@ -6909,10 +7099,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 20 ; scaleFactorOfLowerLimit = 0 ; diff --git a/definitions/grib2/parameters.def b/definitions/grib2/parameters.def index 2c6b703c8..6ffe2fe0d 100644 --- a/definitions/grib2/parameters.def +++ b/definitions/grib2/parameters.def @@ -7,24 +7,24 @@ concept paramIdLegacyECMF(defaultParameter,"paramId.legacy.def",conceptsMasterDi concept paramIdECMF (paramIdLegacyECMF,"paramId.def",conceptsMasterDir,conceptsLocalDirECMF): long_type,no_copy; concept paramId (paramIdECMF,"paramId.def",conceptsDir2,conceptsDir1): long_type; -concept shortNameLegacyECMF(defaultShortName,"shortName.legacy.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy,dump,hidden; -concept shortNameECMF (shortNameLegacyECMF,"shortName.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy,dump; +concept shortNameLegacyECMF(defaultShortName,"shortName.legacy.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy,hidden; +concept shortNameECMF (shortNameLegacyECMF,"shortName.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy; concept ls.shortName (shortNameECMF,"shortName.def",conceptsDir2,conceptsDir1): no_copy,dump; concept unitsLegacyECMF(defaultName,"units.legacy.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy,hidden,read_only; concept unitsECMF (unitsLegacyECMF,"units.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy, read_only; concept units (unitsECMF,"units.def",conceptsDir2,conceptsDir1): no_copy, read_only; -concept nameLegacyECMF(defaultName,"name.legacy.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy,dump,hidden; -concept nameECMF(nameLegacyECMF,"name.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy,dump; +concept nameLegacyECMF(defaultName,"name.legacy.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy,hidden; +concept nameECMF(nameLegacyECMF,"name.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy; concept name(nameECMF,"name.def",conceptsDir2,conceptsDir1): no_copy,dump; -concept cfNameLegacyECMF(defaultShortName,"cfName.legacy.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy,dump,hidden; -concept cfNameECMF(cfNameLegacyECMF,"cfName.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy,dump; +concept cfNameLegacyECMF(defaultShortName,"cfName.legacy.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy,hidden; +concept cfNameECMF(cfNameLegacyECMF,"cfName.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy; concept cfName(cfNameECMF,"cfName.def",conceptsDir2,conceptsDir1) : no_copy,dump; -concept cfVarNameLegacyECMF(defaultShortName,"cfVarName.legacy.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy,dump,hidden; -concept cfVarNameECMF (cfVarNameLegacyECMF,"cfVarName.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy,dump; +concept cfVarNameLegacyECMF(defaultShortName,"cfVarName.legacy.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy,hidden; +concept cfVarNameECMF (cfVarNameLegacyECMF,"cfVarName.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy; concept cfVarName (cfVarNameECMF,"cfVarName.def",conceptsDir2,conceptsDir1): no_copy,dump; # modelName: Contribution from Daniel Lee @ DWD diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def index 1982a740f..cd5a31566 100644 --- a/definitions/grib2/shortName.def +++ b/definitions/grib2/shortName.def @@ -4,8 +4,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 1 ; scaleFactorOfLowerLimit = 0 ; @@ -16,8 +16,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 5 ; scaleFactorOfLowerLimit = 0 ; @@ -28,8 +28,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 40 ; scaleFactorOfLowerLimit = 0 ; @@ -40,8 +40,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 60 ; scaleFactorOfLowerLimit = 0 ; @@ -52,8 +52,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 80 ; scaleFactorOfLowerLimit = 0 ; @@ -64,8 +64,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 100 ; scaleFactorOfLowerLimit = 0 ; @@ -76,8 +76,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 150 ; scaleFactorOfLowerLimit = 0 ; @@ -88,8 +88,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 200 ; scaleFactorOfLowerLimit = 0 ; @@ -100,8 +100,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 3 ; scaleFactorOfLowerLimit = -2 ; @@ -136,6 +136,7 @@ discipline = 10 ; parameterCategory = 2 ; parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; } #Snow density 'rsn' = { @@ -165,6 +166,30 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } +#Large-scale precipitation fraction +'lspf' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Downward UV radiation at the surface +'uvb' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Photosynthetically active radiation at the surface +'par' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Specific rain water content 'crwc' = { discipline = 0 ; @@ -204,8 +229,23 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } -#Surface solar radiation downwards +#Boundary layer dissipation +'bld' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 1 ; + } +#Boundary layer height +'blh' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + } +#Surface short-wave (solar) radiation downwards 'ssrd' = { discipline = 0 ; parameterCategory = 4 ; @@ -213,7 +253,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface thermal radiation downwards +#Surface long-wave (thermal) radiation downwards 'strd' = { discipline = 0 ; parameterCategory = 5 ; @@ -221,7 +261,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'tsr' = { discipline = 0 ; parameterCategory = 4 ; @@ -234,12 +274,39 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 38 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Northward turbulent surface stress 'nsss' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Eastward gravity wave surface stress +'lgws' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Northward gravity wave surface stress +'mgws' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Gravity wave dissipation +'gwd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 1 ; } #Ozone mass mixing ratio 'o3' = { @@ -247,7 +314,23 @@ parameterCategory = 14 ; parameterNumber = 1 ; } -#Surface net solar radiation, clear sky +#Top net solar radiation, clear sky +'tsrc' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; + } +#Top net thermal radiation, clear sky +'ttrc' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; + } +#Surface net short-wave (solar) radiation, clear sky 'ssrc' = { discipline = 0 ; parameterCategory = 4 ; @@ -255,7 +338,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface net thermal radiation, clear sky +#Surface net long-wave (thermal) radiation, clear sky 'strc' = { discipline = 0 ; parameterCategory = 5 ; @@ -263,6 +346,42 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#TOA incident solar radiation +'tisr' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; + } +#Instantaneous eastward turbulent surface stress +'iews' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 38 ; + typeOfFirstFixedSurface = 1 ; + } +#Instantaneous northward turbulent surface stress +'inss' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + } +#Instantaneous surface sensible heat flux +'ishf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } +#Instantaneous moisture flux +'ie' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + } #Temperature of snow layer 'tsn' = { discipline = 2 ; @@ -324,8 +443,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 25 ; scaleFactorOfLowerLimit = 0 ; @@ -336,8 +455,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 50 ; scaleFactorOfLowerLimit = 0 ; @@ -348,10 +467,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 10 ; scaleFactorOfLowerLimit = 0 ; @@ -1848,6 +1967,15 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 3 ; } +#Instantaneous 10 metre wind gust +'i10fg' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } #Relative humidity with respect to water 'rhw' = { discipline = 0 ; @@ -1866,12 +1994,6 @@ parameterCategory = 19 ; parameterNumber = 19 ; } -#Fraction of stratiform precipitation cover -'fspc' = { - discipline = 0 ; - parameterCategory = 6 ; - parameterNumber = 36 ; - } #Fraction of convective precipitation cover 'fcpc' = { discipline = 0 ; @@ -2053,6 +2175,28 @@ scaledValueOfSecondFixedSurface = 10 ; scaleFactorOfSecondFixedSurface = 1 ; } +#Total column rain water +'tcrw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Total column snow water +'tcsw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Ice temperature +'ist' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + } #Soil temperature top 20 cm 'st20' = { discipline = 2 ; @@ -2100,6 +2244,27 @@ parameterCategory = 0 ; parameterNumber = 33 ; } +#Instantaneous large-scale surface precipitation fraction +'ilspf' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective rain rate +'crr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale rain rate +'lsrr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + } #Mixed-layer CAPE in the lowest 50 hPa 'mlcape50' = { discipline = 0 ; @@ -2265,6 +2430,29 @@ parameterCategory = 0 ; parameterNumber = 49 ; } +#Accumulated freezing rain water equivalent +'fzrawe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Runoff water equivalent +'rowe' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow evaporation water equivalent +'eswe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Mean temperature tendency due to short-wave radiation 'mttswr' = { discipline = 0 ; @@ -2648,12 +2836,6 @@ parameterCategory = 6 ; parameterNumber = 22 ; } -#Evaporation rate -'evarate' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 79 ; - } #Evaporation 'eva' = { discipline = 0 ; @@ -2843,6 +3025,12 @@ parameterCategory = 3 ; parameterNumber = 27 ; } +#Soil moisture +'som' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 19 ; + } #Accumulated surface downward short-wave radiation flux, clear sky 'adswrf_cs' = { discipline = 0 ; @@ -3052,43 +3240,43 @@ parameterCategory = 0 ; parameterNumber = 9 ; } -#Forest fire weather index +#Forest fire weather index (as defined by the Canadian Forest Service) 'fwinx' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 5 ; } -#Fine fuel moisture code +#Fine fuel moisture code (as defined by the Canadian Forest Service) 'ffmcode' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 6 ; } -#Duff moisture code +#Duff moisture code (as defined by the Canadian Forest Service) 'dufmcode' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 7 ; } -#Drought code +#Drought code (as defined by the Canadian Forest Service) 'drtcode' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 8 ; } -#Initial fire spread index +#Initial fire spread index (as defined by the Canadian Forest Service) 'infsinx' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 9 ; } -#Fire buildup index +#Fire buildup index (as defined by the Canadian Forest Service) 'fbupinx' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 10 ; } -#Fire daily severity rating +#Fire daily severity rating (as defined by the Canadian Forest Service) 'fdsrte' = { discipline = 2 ; parameterCategory = 4 ; @@ -4683,6 +4871,18 @@ parameterCategory = 0 ; parameterNumber = 15 ; } +#Significant height of wind waves +'shww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean period of wind waves +'mpww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } #Eastward sea water velocity 'ocu' = { discipline = 10 ; @@ -4697,6 +4897,22 @@ parameterNumber = 3 ; typeOfFirstFixedSurface = 160 ; } +#Vertical integral of eastward water vapour flux +'viwve' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Vertical integral of northward water vapour flux +'viwvn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } #Surface runoff 'sro' = { discipline = 2 ; @@ -4771,6 +4987,12 @@ typeOfGeneratingProcess = 20 ; is_chemical = 1 ; } +#Friction velocity +'zust' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + } #Lake total depth 'dl' = { discipline = 1 ; @@ -4778,6 +5000,8 @@ parameterNumber = 0 ; typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; } #Lake mix-layer temperature 'lmlt' = { @@ -4810,6 +5034,8 @@ parameterNumber = 1 ; typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; } #Lake shape factor 'lshf' = { @@ -4832,6 +5058,10 @@ parameterNumber = 5 ; typeOfFirstFixedSurface = 174 ; typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; } #100 metre U wind component '100u' = { @@ -4856,8 +5086,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 10 ; scaleFactorOfLowerLimit = 0 ; @@ -4868,8 +5098,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 20 ; scaleFactorOfLowerLimit = 0 ; @@ -4994,12 +5224,6 @@ parameterCategory = 2 ; parameterNumber = 12 ; } -#Boundary layer dissipation -'bld' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 20 ; - } #Surface sensible heat flux 'sshf' = { discipline = 0 ; @@ -5090,7 +5314,7 @@ parameterCategory = 0 ; parameterNumber = 1 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'ssr' = { discipline = 0 ; parameterCategory = 4 ; @@ -5098,7 +5322,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'str' = { discipline = 0 ; parameterCategory = 5 ; @@ -5106,7 +5330,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'ttr' = { discipline = 0 ; parameterCategory = 5 ; @@ -5150,12 +5374,6 @@ parameterCategory = 0 ; parameterNumber = 10 ; } -#Sensible heat net flux -'shtfl' = { - discipline = 0 ; - parameterCategory = 0 ; - parameterNumber = 11 ; - } #Heat index 'heatx' = { discipline = 0 ; @@ -5425,6 +5643,7 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; } #Total snowfall rate water equivalent 'tsrwe' = { @@ -5449,6 +5668,7 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; } #Total snowfall rate 'tsrate' = { @@ -5576,12 +5796,6 @@ parameterCategory = 3 ; parameterNumber = 1 ; } -#Geometric height -'dist' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 6 ; - } #Altimeter setting 'alts' = { discipline = 0 ; @@ -5624,12 +5838,6 @@ parameterCategory = 3 ; parameterNumber = 17 ; } -#Planetary boundary layer height -'hpbl' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 18 ; - } #5-wave geopotential height anomaly '5wava' = { discipline = 0 ; @@ -6194,12 +6402,6 @@ parameterCategory = 1 ; parameterNumber = 2 ; } -#Land cover (1=land, 0=sea) -'land' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 0 ; - } #Vegetation 'veg' = { discipline = 2 ; @@ -6824,18 +7026,6 @@ parameterCategory = 1 ; parameterNumber = 16 ; } -#Significant height of wind waves -'shww' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 5 ; - } -#Mean period of wind waves -'mpww' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 6 ; - } #Direction of swell waves 'swdir' = { discipline = 10 ; @@ -6895,10 +7085,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 15 ; scaleFactorOfLowerLimit = 0 ; @@ -6909,10 +7099,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 20 ; scaleFactorOfLowerLimit = 0 ; diff --git a/definitions/grib2/tables/0.0.table b/definitions/grib2/tables/0.0.table index 415784e77..1746f737c 100644 --- a/definitions/grib2/tables/0.0.table +++ b/definitions/grib2/tables/0.0.table @@ -6,6 +6,8 @@ 4 4 Space weather products # 5-9 Reserved 10 10 Oceanographic products +# 11-19 Reserved 20 20 Health and socioeconomic impacts +# 21-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff --git a/definitions/grib2/tables/1.0.table b/definitions/grib2/tables/1.0.table index 4105db182..8401cd1a4 100644 --- a/definitions/grib2/tables/1.0.table +++ b/definitions/grib2/tables/1.0.table @@ -29,6 +29,7 @@ 27 27 Version implemented on 15 June 2021 28 28 Version implemented on 15 November 2021 29 29 Version implemented on 15 May 2022 -30 30 Pre-operational to be implemented by next amendment -# 31-254 Future versions +30 30 Version implemented on 15 November 2022 +31 31 Pre-operational to be implemented by next amendment +# 32-254 Future versions 255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used. diff --git a/definitions/grib2/tables/29/4.2.0.1.table b/definitions/grib2/tables/29/4.2.0.1.table index fb27e64ad..ec4a83543 100644 --- a/definitions/grib2/tables/29/4.2.0.1.table +++ b/definitions/grib2/tables/29/4.2.0.1.table @@ -50,7 +50,7 @@ 48 48 Convective water precipitation (kg m-2) 49 49 Total water precipitation (kg m-2) 50 50 Total snow precipitation (kg m-2) -51 51 Total column water (Vertically integrated total water (vapour + cloud water/ice)) (kg m-2) +51 51 Total column water [Vertically integrated total water=vapour + cloud water/ice] (kg m-2) 52 52 Total precipitation rate (kg m-2 s-1) 53 53 Total snowfall rate water equivalent (kg m-2 s-1) 54 54 Large scale precipitation rate (kg m-2 s-1) diff --git a/definitions/grib2/tables/30/0.0.table b/definitions/grib2/tables/30/0.0.table new file mode 100644 index 000000000..71ac57ab3 --- /dev/null +++ b/definitions/grib2/tables/30/0.0.table @@ -0,0 +1,13 @@ +# Code table 0.0 - Discipline of processed data in the GRIB message, number of GRIB Master table +0 0 Meteorological products +1 1 Hydrological products +2 2 Land surface products +3 3 Satellite remote sensing products (formerly Space products) +4 4 Space weather products +# 5-9 Reserved +10 10 Oceanographic products +# 11-19 Reserved +20 20 Health and socioeconomic impacts +# 21-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/1.0.table b/definitions/grib2/tables/30/1.0.table new file mode 100644 index 000000000..1da0452da --- /dev/null +++ b/definitions/grib2/tables/30/1.0.table @@ -0,0 +1,35 @@ +# Code table 1.0 - GRIB master tables version number +0 0 Experimental +1 1 Version implemented on 7 November 2001 +2 2 Version implemented on 4 November 2003 +3 3 Version implemented on 2 November 2005 +4 4 Version implemented on 7 November 2007 +5 5 Version implemented on 4 November 2009 +6 6 Version implemented on 15 September 2010 +7 7 Version implemented on 4 May 2011 +8 8 Version implemented on 2 November 2011 +9 9 Version implemented on 2 May 2012 +10 10 Version implemented on 7 November 2012 +11 11 Version implemented on 8 May 2013 +12 12 Version implemented on 14 November 2013 +13 13 Version implemented on 7 May 2014 +14 14 Version implemented on 5 November 2014 +15 15 Version implemented on 6 May 2015 +16 16 Version implemented on 11 November 2015 +17 17 Version implemented on 4 May 2016 +18 18 Version implemented on 2 November 2016 +19 19 Version implemented on 3 May 2017 +20 20 Version implemented on 8 November 2017 +21 21 Version implemented on 2 May 2018 +22 22 Version implemented on 7 November 2018 +23 23 Version implemented on 15 May 2019 +24 24 Version implemented on 6 November 2019 +25 25 Version implemented on 6 May 2020 +26 26 Version implemented on 16 November 2020 +27 27 Version implemented on 15 June 2021 +28 28 Version implemented on 15 November 2021 +29 29 Version implemented on 15 May 2022 +30 30 Version implemented on 15 November 2022 +31 31 Pre-operational to be implemented by next amendment +# 32-254 Future versions +255 255 Missing diff --git a/definitions/grib2/tables/30/1.1.table b/definitions/grib2/tables/30/1.1.table new file mode 100644 index 000000000..d50f8fd72 --- /dev/null +++ b/definitions/grib2/tables/30/1.1.table @@ -0,0 +1,4 @@ +# Code table 1.1 - GRIB local tables version number +0 0 Local tables not used. Only table entries and templates from the current master table are valid +# 1-254 Number of local tables version used +255 255 Missing diff --git a/definitions/grib2/tables/30/1.2.table b/definitions/grib2/tables/30/1.2.table new file mode 100644 index 000000000..44ea816e9 --- /dev/null +++ b/definitions/grib2/tables/30/1.2.table @@ -0,0 +1,9 @@ +# Code table 1.2 - Significance of reference time +0 0 Analysis +1 1 Start of forecast +2 2 Verifying time of forecast +3 3 Observation time +4 4 Local time +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/1.3.table b/definitions/grib2/tables/30/1.3.table new file mode 100644 index 000000000..dc138ef12 --- /dev/null +++ b/definitions/grib2/tables/30/1.3.table @@ -0,0 +1,16 @@ +# Code table 1.3 - Production status of data +0 0 Operational products +1 1 Operational test products +2 2 Research products +3 3 Re-analysis products +4 4 THORPEX Interactive Grand Global Ensemble (TIGGE) +5 5 THORPEX Interactive Grand Global Ensemble test (TIGGE) +6 6 S2S operational products +7 7 S2S test products +8 8 Uncertainties in Ensembles of Regional ReAnalyses project (UERRA) +9 9 Uncertainties in Ensembles of Regional ReAnalyses project test (UERRA) +10 10 Copernicus regional reanalysis (CARRA/CERRA) +11 11 Copernicus regional reanalysis test (CARRA/CERRA) +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/1.4.table b/definitions/grib2/tables/30/1.4.table new file mode 100644 index 000000000..03203d874 --- /dev/null +++ b/definitions/grib2/tables/30/1.4.table @@ -0,0 +1,13 @@ +# Code table 1.4 - Type of data +0 an Analysis products +1 fc Forecast products +2 af Analysis and forecast products +3 cf Control forecast products +4 pf Perturbed forecast products +5 cp Control and perturbed forecast products +6 sa Processed satellite observations +7 ra Processed radar observations +8 ep Event probability +# 9-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/30/1.5.table b/definitions/grib2/tables/30/1.5.table new file mode 100644 index 000000000..b2cf9f087 --- /dev/null +++ b/definitions/grib2/tables/30/1.5.table @@ -0,0 +1,7 @@ +# Code table 1.5 - Identification template number +0 0 Calendar definition +1 1 Paleontological offset +2 2 Calendar definition and paleontological offset +# 3-32767 Reserved +# 32768-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/30/1.6.table b/definitions/grib2/tables/30/1.6.table new file mode 100644 index 000000000..5db921990 --- /dev/null +++ b/definitions/grib2/tables/30/1.6.table @@ -0,0 +1,8 @@ +# Code table 1.6 - Type of calendar +0 0 Gregorian +1 1 360-day +2 2 365-day +3 3 Proleptic Gregorian +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/3.0.table b/definitions/grib2/tables/30/3.0.table new file mode 100644 index 000000000..45187b80d --- /dev/null +++ b/definitions/grib2/tables/30/3.0.table @@ -0,0 +1,6 @@ +# Code table 3.0 - Source of grid definition +0 0 Specified in Code table 3.1 +1 1 Predetermined grid definition (Defined by originating centre) +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 A grid definition does not apply to this product diff --git a/definitions/grib2/tables/30/3.1.table b/definitions/grib2/tables/30/3.1.table new file mode 100644 index 000000000..60a5eddb4 --- /dev/null +++ b/definitions/grib2/tables/30/3.1.table @@ -0,0 +1,55 @@ +# Code table 3.1 - Grid definition template number +0 0 Latitude/longitude (Also called equidistant cylindrical, or Plate Carree) +1 1 Rotated latitude/longitude +2 2 Stretched latitude/longitude +3 3 Stretched and rotated latitude/longitude +4 4 Variable resolution latitude/longitude +5 5 Variable resolution rotated latitude/longitude +# 6-9 Reserved +10 10 Mercator +# 11 Reserved +12 12 Transverse Mercator +13 13 Mercator with modelling subdomains definition +# 14-19 Reserved +20 20 Polar stereographic projection (Can be south or north) +# 21-22 Reserved +23 23 Polar stereographic with modelling subdomains definition +# 24-29 Reserved +30 30 Lambert conformal (Can be secant or tangent, conical or bipolar) +31 31 Albers equal area +32 32 Reserved +33 33 Lambert conformal with modelling subdomains definition +# 34-39 Reserved +40 40 Gaussian latitude/longitude +41 41 Rotated Gaussian latitude/longitude +42 42 Stretched Gaussian latitude/longitude +43 43 Stretched and rotated Gaussian latitude/longitude +# 44-49 Reserved +50 50 Spherical harmonic coefficients +51 51 Rotated spherical harmonic coefficients +52 52 Stretched spherical harmonic coefficients +53 53 Stretched and rotated spherical harmonic coefficients +# 54-60 Reserved +61 61 Spectral Mercator with modelling subdomains definition +62 62 Spectral polar stereographic with modelling subdomains definition +63 63 Spectral Lambert conformal with modelling subdomains definition +# 64-89 Reserved +90 90 Space view perspective or orthographic +# 91-99 Reserved +100 100 Triangular grid based on an icosahedron +101 101 General unstructured grid +# 102-109 Reserved +110 110 Equatorial azimuthal equidistant projection +# 111-119 Reserved +120 120 Azimuth-range projection +# 121-139 Reserved +140 140 Lambert azimuthal equal area projection +# 141-999 Reserved +1000 1000 Cross-section grid with points equally spaced on the horizontal +# 1001-1099 Reserved +1100 1100 Hovmoller diagram grid with points equally spaced on the horizontal +# 1101-1199 Reserved +1200 1200 Time section grid +# 1201-32767 Reserved +# 32768-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/30/3.10.table b/definitions/grib2/tables/30/3.10.table new file mode 100644 index 000000000..afa8843a7 --- /dev/null +++ b/definitions/grib2/tables/30/3.10.table @@ -0,0 +1,8 @@ +# Flag table 3.10 - Scanning mode for one diamond +1 0 Points scan in +i direction, i.e. from pole to Equator +1 1 Points scan in -i direction, i.e. from Equator to pole +2 0 Points scan in +j direction, i.e. from west to east +2 1 Points scan in -j direction, i.e. from east to west +3 0 Adjacent points in i direction are consecutive +3 1 Adjacent points in j direction are consecutive +# 4-8 Reserved diff --git a/definitions/grib2/tables/30/3.11.table b/definitions/grib2/tables/30/3.11.table new file mode 100644 index 000000000..e516a2ab9 --- /dev/null +++ b/definitions/grib2/tables/30/3.11.table @@ -0,0 +1,7 @@ +# Code table 3.11 - Interpretation of list of numbers at end of section 3 +0 0 There is no appended list +1 1 Numbers define number of points corresponding to full coordinate circles (i.e. parallels), coordinate values on each circle are multiple of the circle mesh, and extreme coordinate values given in grid definition (i.e. extreme longitudes) may not be reached in all rows +2 2 Numbers define number of points corresponding to coordinate lines delimited by extreme coordinate values given in grid definition (i.e. extreme longitudes) which are present in each row +3 3 Numbers define the actual latitudes for each row in the grid. The list of numbers are integer values of the valid latitudes in microdegrees (scaled by 10-6) or in unit equal to the ratio of the basic angle and the subdivisions number for each row, in the same order as specified in the scanning mode flag (bit no. 2) +# 4-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/30/3.15.table b/definitions/grib2/tables/30/3.15.table new file mode 100644 index 000000000..7c4626b88 --- /dev/null +++ b/definitions/grib2/tables/30/3.15.table @@ -0,0 +1,23 @@ +# Code table 3.15 - Physical meaning of vertical coordinate +# 0-19 Reserved +20 20 Temperature (K) +# 21-99 Reserved +100 100 Pressure (Pa) +101 101 Pressure deviation from mean sea level (Pa) +102 102 Altitude above mean sea level (m) +103 103 Height above ground (m) +104 104 Sigma coordinate +105 105 Hybrid coordinate +106 106 Depth below land surface (m) +107 pt Potential temperature (theta) (K) +108 108 Pressure deviation from ground to level (Pa) +109 pv Potential vorticity (K m2 kg-1 s-1) +110 110 Geometrical height (m) +111 111 Eta coordinate +112 112 Geopotential height (gpm) +113 113 Logarithmic hybrid coordinate +# 114-159 Reserved +160 160 Depth below sea level (m) +# 161-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/3.2.table b/definitions/grib2/tables/30/3.2.table new file mode 100644 index 000000000..bc3b653d0 --- /dev/null +++ b/definitions/grib2/tables/30/3.2.table @@ -0,0 +1,16 @@ +# Code table 3.2 - Shape of the reference system +0 0 Earth assumed spherical with radius = 6 367 470.0 m +1 1 Earth assumed spherical with radius specified (in m) by data producer +2 2 Earth assumed oblate spheroid with size as determined by IAU in 1965 (major axis = 6 378 160.0 m, minor axis = 6 356 775.0 m, f = 1/297.0) +3 3 Earth assumed oblate spheroid with major and minor axes specified (in km) by data producer +4 4 Earth assumed oblate spheroid as defined in IAG-GRS80 model (major axis = 6 378 137.0 m, minor axis = 6 356 752.314 m, f = 1/298.257 222 101) +5 5 Earth assumed represented by WGS-84 (as used by ICAO since 1998) +6 6 Earth assumed spherical with radius of 6 371 229.0 m +7 7 Earth assumed oblate spheroid with major or minor axes specified (in m) by data producer +8 8 Earth model assumed spherical with radius of 6 371 200 m, but the horizontal datum of the resulting latitude/longitude field is the WGS-84 reference frame +9 9 Earth represented by the Ordnance Survey Great Britain 1936 Datum, using the Airy 1830 Spheroid, the Greenwich meridian as 0 longitude, and the Newlyn datum as mean sea level, 0 height +10 10 Earth model assumed WGS84 with corrected geomagnetic coordinates (latitude and longitude) defined by Gustafsson et al., 1992 +11 11 Sun assumed spherical with radius = 695 990 000 m (Allen, C.W., Astrophysical Quantities, 3rd ed.; Athlone: London, 1976) and Stonyhurst latitude and longitude system with origin at the intersection of the solar central meridian (as seen from Earth) and the solar equator (Thompson, W., Coordinate systems for solar image data, Astron. Astrophys. 2006, 449, 791-803) +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/3.20.table b/definitions/grib2/tables/30/3.20.table new file mode 100644 index 000000000..efbf08d19 --- /dev/null +++ b/definitions/grib2/tables/30/3.20.table @@ -0,0 +1,6 @@ +# Code table 3.20 - Type of horizontal line +0 0 Rhumb +1 1 Great circle +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/3.21.table b/definitions/grib2/tables/30/3.21.table new file mode 100644 index 000000000..88dbb9019 --- /dev/null +++ b/definitions/grib2/tables/30/3.21.table @@ -0,0 +1,8 @@ +# Code table 3.21 - Vertical dimension coordinate values definition +0 0 Explicit coordinate values set +1 1 Linear coordinates f(1) = C1, f(n) = f(n-1) + C2 +# 2-10 Reserved +11 11 Geometric coordinates f(1) = C1, f(n) = C2 * f(n-1) +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/3.25.table b/definitions/grib2/tables/30/3.25.table new file mode 100644 index 000000000..de1bc74ed --- /dev/null +++ b/definitions/grib2/tables/30/3.25.table @@ -0,0 +1,10 @@ +# Code table 3.25 - Type of bi-Fourier truncation +# 0-76 Reserved +77 77 Rectangular +# 78-87 Reserved +88 88 Elliptic +# 89-98 Reserved +99 99 Diamond +# 100-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/3.3.table b/definitions/grib2/tables/30/3.3.table new file mode 100644 index 000000000..5dd7c7001 --- /dev/null +++ b/definitions/grib2/tables/30/3.3.table @@ -0,0 +1,9 @@ +# Flag table 3.3 - Resolution and component flags +# 1-2 Reserved +3 0 i direction increments not given +3 1 i direction increments given +4 0 j direction increments not given +4 1 j direction increments given +5 0 Resolved u- and v- components of vector quantities relative to easterly and northerly directions +5 1 Resolved u- and v- components of vector quantities relative to the defined grid in the direction of increasing x and y (or i and j) coordinates, respectively +# 6-8 Reserved - set to zero diff --git a/definitions/grib2/tables/30/3.4.table b/definitions/grib2/tables/30/3.4.table new file mode 100644 index 000000000..e5a628e45 --- /dev/null +++ b/definitions/grib2/tables/30/3.4.table @@ -0,0 +1,17 @@ +# Flag table 3.4 - Scanning mode +1 0 Points of first row or column scan in the +i (+x) direction +1 1 Points of first row or column scan in the -i (-x) direction +2 0 Points of first row or column scan in the -j (-y) direction +2 1 Points of first row or column scan in the +j (+y) direction +3 0 Adjacent points in i (x) direction are consecutive +3 1 Adjacent points in j (y) direction is consecutive +4 0 All rows scan in the same direction +4 1 Adjacent rows scan in the opposite direction +5 0 Points within odd rows are not offset in i (x) direction +5 1 Points within odd rows are offset by Di/2 in i (x) direction +6 0 Points within even rows are not offset in i (x) direction +6 1 Points within even rows are offset by Di/2 in i (x) direction +7 0 Points are not offset in j (y) direction +7 1 Points are offset by Dj/2 in j (y) direction +8 0 Rows have Ni grid points and columns have Nj grid points +8 1 Rows have Ni grid points if points are not offset in i direction Rows have Ni-1 grid points if points are offset by Di/2 in i direction Columns have Nj grid points if points are not offset in j direction Columns have Nj-1 grid points if points are offset by Dj/2 in j direction diff --git a/definitions/grib2/tables/30/3.5.table b/definitions/grib2/tables/30/3.5.table new file mode 100644 index 000000000..eabdde896 --- /dev/null +++ b/definitions/grib2/tables/30/3.5.table @@ -0,0 +1,5 @@ +# Flag table 3.5 - Projection centre +1 0 North Pole is on the projection plane +1 1 South Pole is on the projection plane +2 0 Only one projection centre is used +2 1 Projection is bipolar and symmetric diff --git a/definitions/grib2/tables/30/3.6.table b/definitions/grib2/tables/30/3.6.table new file mode 100644 index 000000000..3133b9cfe --- /dev/null +++ b/definitions/grib2/tables/30/3.6.table @@ -0,0 +1,3 @@ +# Code table 3.6 - Spectral data representation type +1 1 see separate doc or pdf file +2 2 Bi-Fourier representation diff --git a/definitions/grib2/tables/30/3.7.table b/definitions/grib2/tables/30/3.7.table new file mode 100644 index 000000000..cd566487b --- /dev/null +++ b/definitions/grib2/tables/30/3.7.table @@ -0,0 +1,5 @@ +# Code table 3.7 - Spectral data representation mode +0 0 Reserved +1 1 see separate doc or pdf file +# 2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/30/3.8.table b/definitions/grib2/tables/30/3.8.table new file mode 100644 index 000000000..844e74235 --- /dev/null +++ b/definitions/grib2/tables/30/3.8.table @@ -0,0 +1,7 @@ +# Code table 3.8 - Grid point position +0 0 Grid points at triangle vertices +1 1 Grid points at centres of triangles +2 2 Grid points at midpoints of triangle sides +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/3.9.table b/definitions/grib2/tables/30/3.9.table new file mode 100644 index 000000000..fd730bc64 --- /dev/null +++ b/definitions/grib2/tables/30/3.9.table @@ -0,0 +1,4 @@ +# Flag table 3.9 - Numbering order of diamonds as seen from the corresponding pole +1 0 Clockwise orientation +1 1 Anti-clockwise (i.e. counter-clockwise) orientation +# 2-8 Reserved diff --git a/definitions/grib2/tables/30/4.0.table b/definitions/grib2/tables/30/4.0.table new file mode 100644 index 000000000..3b35b9c5c --- /dev/null +++ b/definitions/grib2/tables/30/4.0.table @@ -0,0 +1,94 @@ +# 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-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/definitions/grib2/tables/30/4.1.0.table b/definitions/grib2/tables/30/4.1.0.table new file mode 100644 index 000000000..15c809738 --- /dev/null +++ b/definitions/grib2/tables/30/4.1.0.table @@ -0,0 +1,28 @@ +# Product discipline 0 - Meteorological products +0 0 Temperature +1 1 Moisture +2 2 Momentum +3 3 Mass +4 4 Short-wave radiation +5 5 Long-wave radiation +6 6 Cloud +7 7 Thermodynamic stability indices +8 8 Kinematic stability indices +9 9 Temperature probabilities +10 10 Moisture probabilities +11 11 Momentum probabilities +12 12 Mass probabilities +13 13 Aerosols +14 14 Trace gases (e.g. ozone, CO2) +15 15 Radar +16 16 Forecast radar imagery +17 17 Electrodynamics +18 18 Nuclear/radiology +19 19 Physical atmospheric properties +20 20 Atmospheric chemical constituents +21 21 Thermodynamic properties +# 22-189 Reserved +190 190 CCITT IA5 string +191 191 Miscellaneous +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.1.1.table b/definitions/grib2/tables/30/4.1.1.table new file mode 100644 index 000000000..20af0032a --- /dev/null +++ b/definitions/grib2/tables/30/4.1.1.table @@ -0,0 +1,7 @@ +# Product discipline 1 - Hydrological products +0 0 Hydrology basic products +1 1 Hydrology probabilities +2 2 Inland water and sediment properties +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.1.10.table b/definitions/grib2/tables/30/4.1.10.table new file mode 100644 index 000000000..afaea7619 --- /dev/null +++ b/definitions/grib2/tables/30/4.1.10.table @@ -0,0 +1,10 @@ +# Product discipline 10 - Oceanographic products +0 0 Waves +1 1 Currents +2 2 Ice +3 3 Surface properties +4 4 Subsurface properties +# 5-190 Reserved +191 191 Miscellaneous +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.1.192.table b/definitions/grib2/tables/30/4.1.192.table new file mode 100644 index 000000000..c428acab0 --- /dev/null +++ b/definitions/grib2/tables/30/4.1.192.table @@ -0,0 +1,4 @@ +#Discipline 192: ECMWF local parameters +255 255 Missing + + diff --git a/definitions/grib2/tables/30/4.1.2.table b/definitions/grib2/tables/30/4.1.2.table new file mode 100644 index 000000000..a81cbc129 --- /dev/null +++ b/definitions/grib2/tables/30/4.1.2.table @@ -0,0 +1,11 @@ +# Product discipline 2 - Land surface products +0 0 Vegetation/biomass +1 1 Agri-/aquacultural special products +2 2 Transportation-related products +3 3 Soil products +4 4 Fire weather products +5 5 Glaciers and inland ice +6 6 Urban areas +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.1.20.table b/definitions/grib2/tables/30/4.1.20.table new file mode 100644 index 000000000..235ed5810 --- /dev/null +++ b/definitions/grib2/tables/30/4.1.20.table @@ -0,0 +1,7 @@ +# Product discipline 20 - Health and socioeconomic impacts +0 0 Health indicators +1 1 Epidemiology +2 2 Socioeconomic indicators +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.1.3.table b/definitions/grib2/tables/30/4.1.3.table new file mode 100644 index 000000000..130b899bf --- /dev/null +++ b/definitions/grib2/tables/30/4.1.3.table @@ -0,0 +1,11 @@ +# Product discipline 3 - Satellite remote sensing products (formerly Space products) +0 0 Image format products +1 1 Quantitative products +2 2 Cloud properties +3 3 Flight rule conditions +4 4 Volcanic ash +5 5 Sea-surface temperature +6 6 Solar radiation +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.1.4.table b/definitions/grib2/tables/30/4.1.4.table new file mode 100644 index 000000000..3c769dcf7 --- /dev/null +++ b/definitions/grib2/tables/30/4.1.4.table @@ -0,0 +1,15 @@ +# Product discipline 4 - Space weather products +0 0 Temperature +1 1 Momentum +2 2 Charged particle mass and number +3 3 Electric and magnetic fields +4 4 Energetic particles +5 5 Waves +6 6 Solar electromagnetic emissions +7 7 Terrestrial electromagnetic emissions +8 8 Imagery +9 9 Ion-neutral coupling +10 10 Space weather indices +# 11-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.10.table b/definitions/grib2/tables/30/4.10.table new file mode 100644 index 000000000..1eee9c096 --- /dev/null +++ b/definitions/grib2/tables/30/4.10.table @@ -0,0 +1,20 @@ +# Code table 4.10 - Type of statistical processing +0 avg Average +1 accum Accumulation +2 max Maximum +3 min Minimum +4 diff Difference (value at the end of time range minus value at the beginning) +5 rms Root mean square +6 sd Standard deviation +7 cov Covariance (temporal variance) +8 8 Difference (value at the start of time range minus value at the end) +9 ratio Ratio +10 10 Standardized anomaly +11 11 Summation +12 12 Return period +# 13-99 Reserved +100 100 Severity +101 101 Mode +# 102-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/30/4.11.table b/definitions/grib2/tables/30/4.11.table new file mode 100644 index 000000000..7f404c849 --- /dev/null +++ b/definitions/grib2/tables/30/4.11.table @@ -0,0 +1,10 @@ +# Code table 4.11 - Type of time intervals +0 0 Reserved +1 1 Successive times processed have same forecast time, start time of forecast is incremented +2 2 Successive times processed have same start time of forecast, forecast time is incremented +3 3 Successive times processed have start time of forecast incremented and forecast time decremented so that valid time remains constant +4 4 Successive times processed have start time of forecast decremented and forecast time incremented so that valid time remains constant +5 5 Floating subinterval of time between forecast time and end of overall time interval +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.12.table b/definitions/grib2/tables/30/4.12.table new file mode 100644 index 000000000..03fd89b36 --- /dev/null +++ b/definitions/grib2/tables/30/4.12.table @@ -0,0 +1,7 @@ +# Code table 4.12 - Operating mode +0 0 Maintenance mode +1 1 Clear air +2 2 Precipitation +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.13.table b/definitions/grib2/tables/30/4.13.table new file mode 100644 index 000000000..c92854eec --- /dev/null +++ b/definitions/grib2/tables/30/4.13.table @@ -0,0 +1,6 @@ +# Code table 4.13 - Quality control indicator +0 0 No quality control applied +1 1 Quality control applied +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.14.table b/definitions/grib2/tables/30/4.14.table new file mode 100644 index 000000000..a88cb93fa --- /dev/null +++ b/definitions/grib2/tables/30/4.14.table @@ -0,0 +1,6 @@ +# Code table 4.14 - Clutter filter indicator +0 0 No clutter filter used +1 1 Clutter filter used +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.15.table b/definitions/grib2/tables/30/4.15.table new file mode 100644 index 000000000..2e5f3dea3 --- /dev/null +++ b/definitions/grib2/tables/30/4.15.table @@ -0,0 +1,11 @@ +# Code table 4.15 - Type of spatial processing used to arrive at given data value from the source data +0 0 Data is calculated directly from the source grid with no interpolation +1 1 Bilinear interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +2 2 Bicubic interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +3 3 Using the value from the source grid grid-point which is nearest to the nominal grid-point +4 4 Budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +5 5 Spectral interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +6 6 Neighbor-budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.16.table b/definitions/grib2/tables/30/4.16.table new file mode 100644 index 000000000..fedb05324 --- /dev/null +++ b/definitions/grib2/tables/30/4.16.table @@ -0,0 +1,10 @@ +# Code table 4.16 - Quality value associated with parameter +0 0 Confidence index +1 1 Quality indicator +2 2 Correlation of product with used calibration product +3 3 Standard deviation +4 4 Random error +5 5 Probability +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.192.table b/definitions/grib2/tables/30/4.192.table new file mode 100644 index 000000000..e1fd91594 --- /dev/null +++ b/definitions/grib2/tables/30/4.192.table @@ -0,0 +1,4 @@ +1 1 first +2 2 second +3 3 third +4 4 fourth diff --git a/definitions/grib2/tables/30/4.2.0.0.table b/definitions/grib2/tables/30/4.2.0.0.table new file mode 100644 index 000000000..e4912c9d6 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.0.table @@ -0,0 +1,37 @@ +# Product discipline 0 - Meteorological products, parameter category 0: temperature +0 0 Temperature (K) +1 1 Virtual temperature (K) +2 2 Potential temperature (K) +3 3 Pseudo-adiabatic potential temperature or equivalent potential temperature (K) +4 4 Maximum temperature (K) +5 5 Minimum temperature (K) +6 6 Dewpoint temperature (K) +7 7 Dewpoint depression (or deficit) (K) +8 8 Lapse rate (K/m) +9 9 Temperature anomaly (K) +10 10 Latent heat net flux (W m-2) +11 11 Sensible heat net flux (W m-2) +12 12 Heat index (K) +13 13 Wind chill factor (K) +14 14 Minimum dewpoint depression (K) +15 15 Virtual potential temperature (K) +16 16 Snow phase change heat flux (W m-2) +17 17 Skin temperature (K) +18 18 Snow temperature (top of snow) (K) +19 19 Turbulent transfer coefficient for heat (Numeric) +20 20 Turbulent diffusion coefficient for heat (m2/s) +21 21 Apparent temperature (K) +22 22 Temperature tendency due to short-wave radiation (K s-1) +23 23 Temperature tendency due to long-wave radiation (K s-1) +24 24 Temperature tendency due to short-wave radiation, clear sky (K s-1) +25 25 Temperature tendency due to long-wave radiation, clear sky (K s-1) +26 26 Temperature tendency due to parameterization (K s-1) +27 27 Wet-bulb temperature (K) +28 28 Unbalanced component of temperature (K) +29 29 Temperature advection (K s-1) +30 30 Latent heat net flux due to evaporation (W m-2) +31 31 Latent heat net flux due to sublimation (W m-2) +32 32 Wet-bulb potential temperature (K) +# 33-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.1.table b/definitions/grib2/tables/30/4.2.0.1.table new file mode 100644 index 000000000..7b456353f --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.1.table @@ -0,0 +1,169 @@ +# Product discipline 0 - Meteorological products, parameter category 1: moisture +0 0 Specific humidity (kg/kg) +1 1 Relative humidity (%) +2 2 Humidity mixing ratio (kg/kg) +3 3 Precipitable water (kg m-2) +4 4 Vapour pressure (Pa) +5 5 Saturation deficit (Pa) +6 6 Evaporation (kg m-2) +7 7 Precipitation rate (kg m-2 s-1) +8 8 Total precipitation (kg m-2) +9 9 Large-scale precipitation (non-convective) (kg m-2) +10 10 Convective precipitation (kg m-2) +11 11 Snow depth (m) +12 12 Snowfall rate water equivalent (kg m-2 s-1) +13 13 Water equivalent of accumulated snow depth (kg m-2) +14 14 Convective snow (kg m-2) +15 15 Large-scale snow (kg m-2) +16 16 Snow melt (kg m-2) +17 17 Snow age (d) +18 18 Absolute humidity (kg m-3) +19 19 Precipitation type (Code table 4.201) +20 20 Integrated liquid water (kg m-2) +21 21 Condensate (kg/kg) +22 22 Cloud mixing ratio (kg/kg) +23 23 Ice water mixing ratio (kg/kg) +24 24 Rain mixing ratio (kg/kg) +25 25 Snow mixing ratio (kg/kg) +26 26 Horizontal moisture convergence (kg kg-1 s-1) +27 27 Maximum relative humidity (%) +28 28 Maximum absolute humidity (kg m-3) +29 29 Total snowfall (m) +30 30 Precipitable water category (Code table 4.202) +31 31 Hail (m) +32 32 Graupel (snow pellets) (kg/kg) +33 33 Categorical rain (Code table 4.222) +34 34 Categorical freezing rain (Code table 4.222) +35 35 Categorical ice pellets (Code table 4.222) +36 36 Categorical snow (Code table 4.222) +37 37 Convective precipitation rate (kg m-2 s-1) +38 38 Horizontal moisture divergence (kg kg-1 s-1) +39 39 Per cent frozen precipitation (%) +40 40 Potential evaporation (kg m-2) +41 41 Potential evaporation rate (W m-2) +42 42 Snow cover (%) +43 43 Rain fraction of total cloud water (Proportion) +44 44 Rime factor (Numeric) +45 45 Total column integrated rain (kg m-2) +46 46 Total column integrated snow (kg m-2) +47 47 Large scale water precipitation (non-convective) (kg m-2) +48 48 Convective water precipitation (kg m-2) +49 49 Total water precipitation (kg m-2) +50 50 Total snow precipitation (kg m-2) +51 51 Total column water [Vertically integrated total water=vapour + cloud water/ice] (kg m-2) +52 52 Total precipitation rate (kg m-2 s-1) +53 53 Total snowfall rate water equivalent (kg m-2 s-1) +54 54 Large scale precipitation rate (kg m-2 s-1) +55 55 Convective snowfall rate water equivalent (kg m-2 s-1) +56 56 Large scale snowfall rate water equivalent (kg m-2 s-1) +57 57 Total snowfall rate (m/s) +58 58 Convective snowfall rate (m/s) +59 59 Large scale snowfall rate (m/s) +60 60 Snow depth water equivalent (kg m-2) +61 61 Snow density (kg m-3) +62 62 Snow evaporation (kg m-2) +63 63 Reserved +64 64 Total column integrated water vapour (kg m-2) +65 65 Rain precipitation rate (kg m-2 s-1) +66 66 Snow precipitation rate (kg m-2 s-1) +67 67 Freezing rain precipitation rate (kg m-2 s-1) +68 68 Ice pellets precipitation rate (kg m-2 s-1) +69 69 Total column integrated cloud water (kg m-2) +70 70 Total column integrated cloud ice (kg m-2) +71 71 Hail mixing ratio (kg/kg) +72 72 Total column integrated hail (kg m-2) +73 73 Hail precipitation rate (kg m-2 s-1) +74 74 Total column integrated graupel (kg m-2) +75 75 Graupel (snow pellets) precipitation rate (kg m-2 s-1) +76 76 Convective rain rate (kg m-2 s-1) +77 77 Large scale rain rate (kg m-2 s-1) +78 78 Total column integrated water (all components including precipitation) (kg m-2) +79 79 Evaporation rate (kg m-2 s-1) +80 80 Total condensate (kg/kg) +81 81 Total column-integrated condensate (kg m-2) +82 82 Cloud ice mixing-ratio (kg/kg) +83 83 Specific cloud liquid water content (kg/kg) +84 84 Specific cloud ice water content (kg/kg) +85 85 Specific rainwater content (kg/kg) +86 86 Specific snow water content (kg/kg) +87 87 Stratiform precipitation rate (kg m-2 s-1) +88 88 Categorical convective precipitation (Code table 4.222) +# 89 Reserved +90 90 Total kinematic moisture flux (kg kg-1 m s-1) +91 91 u-component (zonal) kinematic moisture flux (kg kg-1 m s-1) +92 92 v-component (meridional) kinematic moisture flux (kg kg-1 m s-1) +93 93 Relative humidity with respect to water (%) +94 94 Relative humidity with respect to ice (%) +95 95 Freezing or frozen precipitation rate (kg m-2 s-1) +96 96 Mass density of rain (kg m-3) +97 97 Mass density of snow (kg m-3) +98 98 Mass density of graupel (kg m-3) +99 99 Mass density of hail (kg m-3) +100 100 Specific number concentration of rain (kg-1) +101 101 Specific number concentration of snow (kg-1) +102 102 Specific number concentration of graupel (kg-1) +103 103 Specific number concentration of hail (kg-1) +104 104 Number density of rain (m-3) +105 105 Number density of snow (m-3) +106 106 Number density of graupel (m-3) +107 107 Number density of hail (m-3) +108 108 Specific humidity tendency due to parameterization (kg kg-1 s-1) +109 109 Mass density of liquid water coating on hail expressed as mass of liquid water per unit volume of air (kg m-3) +110 110 Specific mass of liquid water coating on hail expressed as mass of liquid water per unit mass of moist air (kg kg-1) +111 111 Mass mixing ratio of liquid water coating on hail expressed as mass of liquid water per unit mass of dry air (kg kg-1) +112 112 Mass density of liquid water coating on graupel expressed as mass of liquid water per unit volume of air (kg m-3) +113 113 Specific mass of liquid water coating on graupel expressed as mass of liquid water per unit mass of moist air (kg kg-1) +114 114 Mass mixing ratio of liquid water coating on graupel expressed as mass of liquid water per unit mass of dry air (kg kg-1) +115 115 Mass density of liquid water coating on snow expressed as mass of liquid water per unit volume of air (kg m-3) +116 116 Specific mass of liquid water coating on snow expressed as mass of liquid water per unit mass of moist air (kg kg-1) +117 117 Mass mixing ratio of liquid water coating on snow expressed as mass of liquid water per unit mass of dry air (kg kg-1) +118 118 Unbalanced component of specific humidity (kg kg-1) +119 119 Unbalanced component of specific cloud liquid water content (kg kg-1) +120 120 Unbalanced component of specific cloud ice water content (kg kg-1) +121 121 Fraction of snow cover (Proportion) +122 122 Precipitation intensity index (Code table 4.247) +123 123 Dominant precipitation type (Code table 4.201) +124 124 Presence of showers (Code table 4.222) +125 125 Presence of blowing snow (Code table 4.222) +126 126 Presence of blizzard (Code table 4.222) +127 127 Ice pellets (non-water equivalent) precipitation rate (m/s) +128 128 Total solid precipitation rate (kg m-2 s-1) +129 129 Effective radius of cloud water (m) +130 130 Effective radius of rain (m) +131 131 Effective radius of cloud ice (m) +132 132 Effective radius of snow (m) +133 133 Effective radius of graupel (m) +134 134 Effective radius of hail (m) +135 135 Effective radius of subgrid liquid clouds (m) +136 136 Effective radius of subgrid ice clouds (m) +137 137 Effective aspect ratio of rain (-) +138 138 Effective aspect ratio of cloud ice (-) +139 139 Effective aspect ratio of snow (-) +140 140 Effective aspect ratio of graupel (-) +141 141 Effective aspect ratio of hail (-) +142 142 Effective aspect ratio of subgrid ice clouds (-) +143 143 Potential evaporation rate (kg m-2 s-1) +144 144 Specific rain water content (convective) (kg kg-1) +145 145 Specific snow water content (convective) (kg kg-1) +146 146 Cloud ice precipitation rate (kg m-2 s-1) +147 147 Character of precipitation (Code table 4.249) +148 148 Snow evaporation rate (kg m-2 s-1) +149 149 Cloud water mixing ratio (kg kg-1) +150 150 Column integrated eastward water vapour mass flux (kg m-1 s-1) +151 151 Column integrated northward water vapour mass flux (kg m-1 s-1) +152 152 Column integrated eastward cloud liquid water mass flux (kg m-1 s-1) +153 153 Column integrated northward cloud liquid water mass flux (kg m-1 s-1) +154 154 Column integrated eastward cloud ice mass flux (kg m-1 s-1) +155 155 Column integrated northward cloud ice mass flux (kg m-1 s-1) +156 156 Column integrated eastward rain mass flux (kg m-1 s-1) +157 157 Column integrated northward rain mass flux (kg m-1 s-1) +158 158 Column integrated eastward snow mass flux (kg m-1 s-1) +159 159 Column integrated northward snow mass flux (kg m-1 s-1) +160 160 Column integrated divergence of water vapour mass flux (kg m-2 s-1) +161 161 Column integrated divergence of cloud liquid water mass flux (kg m-2 s-1) +162 162 Column integrated divergence of cloud ice mass flux (kg m-2 s-1) +163 163 Column integrated divergence of rain mass flux (kg m-2 s-1) +164 164 Column integrated divergence of snow mass flux (kg m-2 s-1) +# 165-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.13.table b/definitions/grib2/tables/30/4.2.0.13.table new file mode 100644 index 000000000..4c1253b96 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.13.table @@ -0,0 +1,5 @@ +# Product discipline 0 - Meteorological products, parameter category 13: aerosols +0 0 Aerosol type (Code table 4.205) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.14.table b/definitions/grib2/tables/30/4.2.0.14.table new file mode 100644 index 000000000..df0f721ea --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.14.table @@ -0,0 +1,7 @@ +# Product discipline 0 - Meteorological products, parameter category 14: trace gases +0 0 Total ozone (DU) +1 1 Ozone mixing ratio (kg/kg) +2 2 Total column integrated ozone (DU) +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.15.table b/definitions/grib2/tables/30/4.2.0.15.table new file mode 100644 index 000000000..ac49ad402 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.15.table @@ -0,0 +1,21 @@ +# Product discipline 0 - Meteorological products, parameter category 15: radar +0 0 Base spectrum width (m/s) +1 1 Base reflectivity (dB) +2 2 Base radial velocity (m/s) +3 3 Vertically integrated liquid water (VIL) (kg m-2) +4 4 Layer-maximum base reflectivity (dB) +5 5 Precipitation (kg m-2) +6 6 Radar spectra (1) (-) +7 7 Radar spectra (2) (-) +8 8 Radar spectra (3) (-) +9 9 Reflectivity of cloud droplets (dB) +10 10 Reflectivity of cloud ice (dB) +11 11 Reflectivity of snow (dB) +12 12 Reflectivity of rain (dB) +13 13 Reflectivity of graupel (dB) +14 14 Reflectivity of hail (dB) +15 15 Hybrid scan reflectivity (dB) +16 16 Hybrid scan reflectivity height (m) +# 17-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.16.table b/definitions/grib2/tables/30/4.2.0.16.table new file mode 100644 index 000000000..111e6d986 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.16.table @@ -0,0 +1,10 @@ +# Product discipline 0 - Meteorological products, parameter category 16: forecast radar imagery +0 0 Equivalent radar reflectivity factor for rain (mm6 m-3) +1 1 Equivalent radar reflectivity factor for snow (mm6 m-3) +2 2 Equivalent radar reflectivity factor for parameterized convection (mm6 m-3) +3 3 Echo top (m) +4 4 Reflectivity (dB) +5 5 Composite reflectivity (dB) +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.17.table b/definitions/grib2/tables/30/4.2.0.17.table new file mode 100644 index 000000000..90ef72d87 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.17.table @@ -0,0 +1,7 @@ +# Product discipline 0 - Meteorological products, parameter category 17: electrodynamics +0 0 Lightning strike density (m-2 s-1) +1 1 Lightning potential index (LPI) (J kg-1) +2 2 Cloud-to-ground lightning flash density (km-2 day-1) +3 3 Cloud-to-cloud lightning flash density (km-2 day-1) +4 4 Total lightning flash density (km-2 day-1) +5 5 Subgrid-scale lightning potential index (J kg-1) diff --git a/definitions/grib2/tables/30/4.2.0.18.table b/definitions/grib2/tables/30/4.2.0.18.table new file mode 100644 index 000000000..fe2dac3dc --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.18.table @@ -0,0 +1,23 @@ +# Product discipline 0 - Meteorological products, parameter category 18: nuclear/radiology +0 0 Air concentration of caesium 137 (Bq m-3) +1 1 Air concentration of iodine 131 (Bq m-3) +2 2 Air concentration of radioactive pollutant (Bq m-3) +3 3 Ground deposition of caesium 137 (Bq m-2) +4 4 Ground deposition of iodine 131 (Bq m-2) +5 5 Ground deposition of radioactive pollutant (Bq m-2) +6 6 Time-integrated air concentration of caesium pollutant (Bq s m-3) +7 7 Time-integrated air concentration of iodine pollutant (Bq s m-3) +8 8 Time-integrated air concentration of radioactive pollutant (Bq s m-3) +9 9 Reserved +10 10 Air concentration (Bq m-3) +11 11 Wet deposition (Bq m-2) +12 12 Dry deposition (Bq m-2) +13 13 Total deposition (wet + dry) (Bq m-2) +14 14 Specific activity concentration (Bq kg-1) +15 15 Maximum of air concentration in layer (Bq m-3) +16 16 Height of maximum air concentration (m) +17 17 Column-integrated air concentration (Bq m-2) +18 18 Column-averaged air concentration in layer (Bq m-3) +# 19-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.19.table b/definitions/grib2/tables/30/4.2.0.19.table new file mode 100644 index 000000000..42712fd92 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.19.table @@ -0,0 +1,45 @@ +# Product discipline 0 - Meteorological products, parameter category 19: physical atmospheric properties +0 0 Visibility (m) +1 1 Albedo (%) +2 2 Thunderstorm probability (%) +3 3 Mixed layer depth (m) +4 4 Volcanic ash (Code table 4.206) +5 5 Icing top (m) +6 6 Icing base (m) +7 7 Icing (Code table 4.207) +8 8 Turbulence top (m) +9 9 Turbulence base (m) +10 10 Turbulence (Code table 4.208) +11 11 Turbulent kinetic energy (J/kg) +12 12 Planetary boundary-layer regime (Code table 4.209) +13 13 Contrail intensity (Code table 4.210) +14 14 Contrail engine type (Code table 4.211) +15 15 Contrail top (m) +16 16 Contrail base (m) +17 17 Maximum snow albedo (%) +18 18 Snow free albedo (%) +19 19 Snow albedo (%) +20 20 Icing (%) +21 21 In-cloud turbulence (%) +22 22 Clear air turbulence (CAT) (%) +23 23 Supercooled large droplet probability (%) +24 24 Convective turbulent kinetic energy (J/kg) +25 25 Weather (Code table 4.225) +26 26 Convective outlook (Code table 4.224) +27 27 Icing scenario (Code table 4.227) +28 28 Mountain wave turbulence (eddy dissipation rate) (m2/3 s-1) +29 29 Clear air turbulence (CAT) (m2/3 s-1) +30 30 Eddy dissipation parameter (m2/3 s-1) +31 31 Maximum of eddy dissipation parameter in layer (m2/3 s-1) +32 32 Highest freezing level (m) +33 33 Visibility through liquid fog (m) +34 34 Visibility through ice fog (m) +35 35 Visibility through blowing snow (m) +36 36 Presence of snow squalls (Code table 4.222) +37 37 Icing severity (Code table 4.228) +38 38 Sky transparency index (Code table 4.214) +39 39 Seeing index (Code table 4.214) +40 40 Snow level (m) +# 41-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.190.table b/definitions/grib2/tables/30/4.2.0.190.table new file mode 100644 index 000000000..e5d6618cf --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.190.table @@ -0,0 +1,5 @@ +# Product discipline 0 - Meteorological products, parameter category 190: CCITT IA5 string +0 0 Arbitrary text string (CCITT IA5) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.191.table b/definitions/grib2/tables/30/4.2.0.191.table new file mode 100644 index 000000000..d375dbd4a --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.191.table @@ -0,0 +1,8 @@ +# Product discipline 0 - Meteorological products, parameter category 191: miscellaneous +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +1 1 Geographical latitude (deg N) +2 2 Geographical longitude (deg E) +3 3 Days since last observation (d) +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.2.table b/definitions/grib2/tables/30/4.2.0.2.table new file mode 100644 index 000000000..ce965eb42 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.2.table @@ -0,0 +1,58 @@ +# Product discipline 0 - Meteorological products, parameter category 2: momentum +0 0 Wind direction (from which blowing) (degree true) +1 1 Wind speed (m/s) +2 2 u-component of wind (m/s) +3 3 v-component of wind (m/s) +4 4 Stream function (m2/s) +5 5 Velocity potential (m2/s) +6 6 Montgomery stream function (m2 s-2) +7 7 Sigma coordinate vertical velocity (/s) +8 8 Vertical velocity (pressure) (Pa/s) +9 9 Vertical velocity (geometric) (m/s) +10 10 Absolute vorticity (/s) +11 11 Absolute divergence (/s) +12 12 Relative vorticity (/s) +13 13 Relative divergence (/s) +14 14 Potential vorticity (K m2 kg-1 s-1) +15 15 Vertical u-component shear (/s) +16 16 Vertical v-component shear (/s) +17 17 Momentum flux, u-component (N m-2) +18 18 Momentum flux, v-component (N m-2) +19 19 Wind mixing energy (J) +20 20 Boundary layer dissipation (W m-2) +21 21 Maximum wind speed (m/s) +22 22 Wind speed (gust) (m/s) +23 23 u-component of wind (gust) (m/s) +24 24 v-component of wind (gust) (m/s) +25 25 Vertical speed shear (/s) +26 26 Horizontal momentum flux (N m-2) +27 27 u-component storm motion (m/s) +28 28 v-component storm motion (m/s) +29 29 Drag coefficient (Numeric) +30 30 Frictional velocity (m/s) +31 31 Turbulent diffusion coefficient for momentum (m2/s) +32 32 Eta coordinate vertical velocity (/s) +33 33 Wind fetch (m) +34 34 Normal wind component (m/s) +35 35 Tangential wind component (m/s) +36 36 Amplitude function for Rossby wave envelope for meridional wind (m/s) +37 37 Northward turbulent surface stress (N m-2 s) +38 38 Eastward turbulent surface stress (N m-2 s) +39 39 Eastward wind tendency due to parameterization (m s-2) +40 40 Northward wind tendency due to parameterization (m s-2) +41 41 u-component of geostrophic wind (m s-1) +42 42 v-component of geostrophic wind (m s-1) +43 43 Geostrophic wind direction (degree true) +44 44 Geostrophic wind speed (m s-1) +45 45 Unbalanced component of divergence (s-1) +46 46 Vorticity advection (s-2) +47 47 Surface roughness for heat (m) +48 48 Surface roughness for moisture (m) +49 49 Wind stress (N m-2) +50 50 Eastward wind stress (N m-2) +51 51 Northward wind stress (N m-2) +52 52 u-component of wind stress (N m-2) +53 53 v-component of wind stress (N m-2) +# 54-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.20.table b/definitions/grib2/tables/30/4.2.0.20.table new file mode 100644 index 000000000..7855a8618 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.20.table @@ -0,0 +1,69 @@ +# Product discipline 0 - Meteorological products, parameter category 20: atmospheric chemical constituents +0 0 Mass density (concentration) (kg m-3) +1 1 Column-integrated mass density (kg m-2) +2 2 Mass mixing ratio (mass fraction in air) (kg/kg) +3 3 Atmosphere emission mass flux (kg m-2 s-1) +4 4 Atmosphere net production mass flux (kg m-2 s-1) +5 5 Atmosphere net production and emission mass flux (kg m-2 s-1) +6 6 Surface dry deposition mass flux (kg m-2 s-1) +7 7 Surface wet deposition mass flux (kg m-2 s-1) +8 8 Atmosphere re-emission mass flux (kg m-2 s-1) +9 9 Wet deposition by large-scale precipitation mass flux (kg m-2 s-1) +10 10 Wet deposition by convective precipitation mass flux (kg m-2 s-1) +11 11 Sedimentation mass flux (kg m-2 s-1) +12 12 Dry deposition mass flux (kg m-2 s-1) +13 13 Transfer from hydrophobic to hydrophilic (kg kg-1 s-1) +14 14 Transfer from SO2 (sulphur dioxide) to SO4 (sulphate) (kg kg-1 s-1) +15 15 Dry deposition velocity (m/s) +16 16 Mass mixing ratio with respect to dry air (kg/kg) +17 17 Mass mixing ratio with respect to wet air (kg/kg) +18 18 Potential of hydrogen (pH) (pH) +# 19-49 Reserved +50 50 Amount in atmosphere (mol) +51 51 Concentration in air (mol m-3) +52 52 Volume mixing ratio (fraction in air) (mol/mol) +53 53 Chemical gross production rate of concentration (mol m-3 s-1) +54 54 Chemical gross destruction rate of concentration (mol m-3 s-1) +55 55 Surface flux (mol m-2 s-1) +56 56 Changes of amount in atmosphere (mol/s) +57 57 Total yearly average burden of the atmosphere (mol) +58 58 Total yearly averaged atmospheric loss (mol/s) +59 59 Aerosol number concentration (m-3) +60 60 Aerosol specific number concentration (kg-1) +61 61 Maximum of mass density in layer (kg m-3) +62 62 Height of maximum mass density (m) +63 63 Column-averaged mass density in layer (kg m-3) +64 64 Mole fraction with respect to dry air (mol/mol) +65 65 Mole fraction with respect to wet air (mol/mol) +66 66 Column-integrated in-cloud scavenging rate by precipitation (kg m-2 s-1) +67 67 Column-integrated below-cloud scavenging rate by precipitation (kg m-2 s-1) +68 68 Column-integrated release rate from evaporating precipitation (kg m-2 s-1) +69 69 Column-integrated in-cloud scavenging rate by large-scale precipitation (kg m-2 s-1) +70 70 Column-integrated below-cloud scavenging rate by large-scale precipitation (kg m-2 s-1) +71 71 Column-integrated release rate from evaporating large-scale precipitation (kg m-2 s-1) +72 72 Column-integrated in-cloud scavenging rate by convective precipitation (kg m-2 s-1) +73 73 Column-integrated below-cloud scavenging rate by convective precipitation (kg m-2 s-1) +74 74 Column-integrated release rate from evaporating convective precipitation (kg m-2 s-1) +75 75 Wildfire flux (kg m-2 s-1) +76 76 Emission rate (kg kg-1 s-1) +77 77 Surface emission flux (kg m-2 s-1) +78 78 Column integrated eastward mass flux (kg m-1 s-1) +79 79 Column integrated northward mass flux (kg m-1 s-1) +80 80 Column integrated divergence of mass flux (kg m-2 s-1) +81 81 Column integrated net source (kg m-2 s-1) +# 82-99 Reserved +100 100 Surface area density (aerosol) (/m) +101 101 Vertical visual range (m) +102 102 Aerosol optical thickness (Numeric) +103 103 Single scattering albedo (Numeric) +104 104 Asymmetry factor (Numeric) +105 105 Aerosol extinction coefficient (/m) +106 106 Aerosol absorption coefficient (/m) +107 107 Aerosol lidar backscatter from satellite (m-1 sr-1) +108 108 Aerosol lidar backscatter from the ground (m-1 sr-1) +109 109 Aerosol lidar extinction from satellite (/m) +110 110 Aerosol lidar extinction from the ground (/m) +111 111 Angstrom exponent (Numeric) +# 112-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.21.table b/definitions/grib2/tables/30/4.2.0.21.table new file mode 100644 index 000000000..f66574d16 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.21.table @@ -0,0 +1,23 @@ +# Product discipline 0 - Meteorological products, parameter category 21: thermodynamic properties +0 0 Column integrated potential + internal energy (J m-2) +1 1 Column integrated kinetic energy (J m-2) +2 2 Column integrated total energy (J m-2) +3 3 Column integrated enthalpy (J m-2) +4 4 Column integrated water enthalpy (J m-2) +5 5 Column integrated eastward enthalpy flux (W m-1) +6 6 Column integrated northward enthalpy flux (W m-1) +7 7 Column integrated eastward potential energy flux (W m-1) +8 8 Column integrated northward potential energy flux (W m-1) +9 9 Column integrated eastward kinetic energy flux (W m-1) +10 10 Column integrated northward kinetic energy flux (W m-1) +11 11 Column integrated eastward total energy flux (W m-1) +12 12 Column integrated northward total energy flux (W m-1) +13 13 Divergence of column integrated enthalpy flux (W m-2) +14 14 Divergence of column integrated potential energy flux (W m-2) +15 15 Divergence of column integrated water potential energy flux (W m-2) +16 16 Divergence of column integrated kinetic energy flux (W m-2) +17 17 Divergence of column integrated total energy flux (W m-2) +18 18 Divergence of column integrated water enthalpy flux (W m-2) +# 19-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.3.table b/definitions/grib2/tables/30/4.2.0.3.table new file mode 100644 index 000000000..aa5a1b5fb --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.3.table @@ -0,0 +1,42 @@ +# Product discipline 0 - Meteorological products, parameter category 3: mass +0 0 Pressure (Pa) +1 1 Pressure reduced to MSL (Pa) +2 2 Pressure tendency (Pa/s) +3 3 ICAO Standard Atmosphere Reference Height (m) +4 4 Geopotential (m2 s-2) +5 5 Geopotential height (gpm) +6 6 Geometric height (m) +7 7 Standard deviation of height (m) +8 8 Pressure anomaly (Pa) +9 9 Geopotential height anomaly (gpm) +10 10 Density (kg m-3) +11 11 Altimeter setting (Pa) +12 12 Thickness (m) +13 13 Pressure altitude (m) +14 14 Density altitude (m) +15 15 5-wave geopotential height (gpm) +16 16 Zonal flux of gravity wave stress (N m-2) +17 17 Meridional flux of gravity wave stress (N m-2) +18 18 Planetary boundary layer height (m) +19 19 5-wave geopotential height anomaly (gpm) +20 20 Standard deviation of sub-grid scale orography (m) +21 21 Angle of sub-gridscale orography (rad) +22 22 Slope of sub-gridscale orography (Numeric) +23 23 Gravity wave dissipation (W m-2) +24 24 Anisotropy of sub-gridscale orography (Numeric) +25 25 Natural logarithm of pressure in Pa (Numeric) +26 26 Exner pressure (Numeric) +27 27 Updraught mass flux (kg m-2 s-1) +28 28 Downdraught mass flux (kg m-2 s-1) +29 29 Updraught detrainment rate (kg m-3 s-1) +30 30 Downdraught detrainment rate (kg m-3 s-1) +31 31 Unbalanced component of logarithm of surface pressure (-) +32 32 Saturation water vapour pressure (Pa) +33 33 Geometric altitude above mean sea level (m) +34 34 Geometric height above ground level (m) +35 35 Column integrated divergence of total mass flux (kg m-2 s-1) +36 36 Column integrated eastward total mass flux (kg m-1 s-1) +37 37 Column integrated northward total mass flux (kg m-1 s-1) +# 38-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.4.table b/definitions/grib2/tables/30/4.2.0.4.table new file mode 100644 index 000000000..2443d8348 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.4.table @@ -0,0 +1,26 @@ +# Product discipline 0 - Meteorological products, parameter category 4: short-wave radiation +0 0 Net short-wave radiation flux (surface) (W m-2) +1 1 Net short-wave radiation flux (top of atmosphere) (W m-2) +2 2 Short-wave radiation flux (W m-2) +3 3 Global radiation flux (W m-2) +4 4 Brightness temperature (K) +5 5 Radiance (with respect to wave number) (W m-1 sr-1) +6 6 Radiance (with respect to wavelength) (W m-3 sr-1) +7 7 Downward short-wave radiation flux (W m-2) +8 8 Upward short-wave radiation flux (W m-2) +9 9 Net short wave radiation flux (W m-2) +10 10 Photosynthetically active radiation (W m-2) +11 11 Net short-wave radiation flux, clear sky (W m-2) +12 12 Downward UV radiation (W m-2) +13 13 Direct short-wave radiation flux (W m-2) +14 14 Diffuse short-wave radiation flux (W m-2) +15 15 Upward UV radiation emitted/reflected from the Earth's surface (W m-2) +# 16-49 Reserved +50 50 UV index (under clear sky) (Numeric) +51 51 UV index (Numeric) +52 52 Downward short-wave radiation flux, clear sky (W m-2) +53 53 Upward short-wave radiation flux, clear sky (W m-2) +54 54 Direct normal short-wave radiation flux (W m-2) +# 55-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.5.table b/definitions/grib2/tables/30/4.2.0.5.table new file mode 100644 index 000000000..204e89307 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.5.table @@ -0,0 +1,13 @@ +# Product discipline 0 - Meteorological products, parameter category 5: long-wave radiation +0 0 Net long-wave radiation flux (surface) (W m-2) +1 1 Net long-wave radiation flux (top of atmosphere) (W m-2) +2 2 Long-wave radiation flux (W m-2) +3 3 Downward long-wave radiation flux (W m-2) +4 4 Upward long-wave radiation flux (W m-2) +5 5 Net long-wave radiation flux (W m-2) +6 6 Net long-wave radiation flux, clear sky (W m-2) +7 7 Brightness temperature (K) +8 8 Downward long-wave radiation flux, clear sky (W m-2) +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.6.table b/definitions/grib2/tables/30/4.2.0.6.table new file mode 100644 index 000000000..7aa178d2e --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.6.table @@ -0,0 +1,50 @@ +# Product discipline 0 - Meteorological products, parameter category 6: cloud +0 0 Cloud ice (kg m-2) +1 1 Total cloud cover (%) +2 2 Convective cloud cover (%) +3 3 Low cloud cover (%) +4 4 Medium cloud cover (%) +5 5 High cloud cover (%) +6 6 Cloud water (kg m-2) +7 7 Cloud amount (%) +8 8 Cloud type (Code table 4.203) +9 9 Thunderstorm maximum tops (m) +10 10 Thunderstorm coverage (Code table 4.204) +11 11 Cloud base (m) +12 12 Cloud top (m) +13 13 Ceiling (m) +14 14 Non-convective cloud cover (%) +15 15 Cloud work function (J/kg) +16 16 Convective cloud efficiency (Proportion) +17 17 Total condensate (kg/kg) +18 18 Total column-integrated cloud water (kg m-2) +19 19 Total column-integrated cloud ice (kg m-2) +20 20 Total column-integrated condensate (kg m-2) +21 21 Ice fraction of total condensate (Proportion) +22 22 Cloud cover (%) +23 23 Cloud ice mixing ratio (kg/kg) +24 24 Sunshine (Numeric) +25 25 Horizontal extent of cumulonimbus (CB) (%) +26 26 Height of convective cloud base (m) +27 27 Height of convective cloud top (m) +28 28 Number of cloud droplets per unit mass of air (/kg) +29 29 Number of cloud ice particles per unit mass of air (/kg) +30 30 Number density of cloud droplets (m-3) +31 31 Number density of cloud ice particles (m-3) +32 32 Fraction of cloud cover (Numeric) +33 33 Sunshine duration (s) +34 34 Surface long-wave effective total cloudiness (Numeric) +35 35 Surface short-wave effective total cloudiness (Numeric) +36 36 Fraction of stratiform precipitation cover (Proportion) +37 37 Fraction of convective precipitation cover (Proportion) +38 38 Mass density of cloud droplets (kg m-3) +39 39 Mass density of cloud ice (kg m-3) +40 40 Mass density of convective cloud water droplets (kg m-3) +# 41-46 Reserved +47 47 Volume fraction of cloud water droplets (Numeric) +48 48 Volume fraction of cloud ice particles (Numeric) +49 49 Volume fraction of cloud (ice and/or water) (Numeric) +50 50 Fog (%) +# 51-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.0.7.table b/definitions/grib2/tables/30/4.2.0.7.table new file mode 100644 index 000000000..93d4d1335 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.0.7.table @@ -0,0 +1,25 @@ +# Product discipline 0 - Meteorological products, parameter category 7: thermodynamic stability indices +0 0 Parcel lifted index (to 500 hPa) (K) +1 1 Best lifted index (to 500 hPa) (K) +2 2 K index (K) +3 3 KO index (K) +4 4 Total totals index (K) +5 5 Sweat index (Numeric) +6 6 Convective available potential energy (J/kg) +7 7 Convective inhibition (J/kg) +8 8 Storm relative helicity (J/kg) +9 9 Energy helicity index (Numeric) +10 10 Surface lifted index (K) +11 11 Best (4-layer) lifted index (K) +12 12 Richardson number (Numeric) +13 13 Showalter index (K) +14 14 Reserved +15 15 Updraught helicity (m2 s-2) +16 16 Bulk Richardson number (Numeric) +17 17 Gradient Richardson number (Numeric) +18 18 Flux Richardson number (Numeric) +19 19 Convective available potential energy - shear (m2 s-2) +20 20 Thunderstorm intensity index (Code table 4.246) +# 21-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.1.0.table b/definitions/grib2/tables/30/4.2.1.0.table new file mode 100644 index 000000000..0ce4b8fc4 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.1.0.table @@ -0,0 +1,21 @@ +# Product discipline 1 - Hydrological products, parameter category 0: hydrology basic products +0 0 Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the reference time and valid time) (kg m-2) +1 1 Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) (kg m-2) +2 2 Remotely-sensed snow cover (Code table 4.215) +3 3 Elevation of snow-covered terrain (Code table 4.216) +4 4 Snow water equivalent per cent of normal (%) +5 5 Baseflow-groundwater runoff (kg m-2) +6 6 Storm surface runoff (kg m-2) +7 7 Discharge from rivers or streams (m3/s) +8 8 Groundwater upper storage (kg m-2) +9 9 Groundwater lower storage (kg m-2) +10 10 Side flow into river channel (m3 s-1 m-1) +11 11 River storage of water (m3) +12 12 Floodplain storage of water (m3) +13 13 Depth of water on soil surface (kg m-2) +14 14 Upstream accumulated precipitation (kg m-2) +15 15 Upstream accumulated snow melt (kg m-2) +16 16 Percolation rate (kg m-2 s-1) +# 17-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.1.1.table b/definitions/grib2/tables/30/4.2.1.1.table new file mode 100644 index 000000000..ede9a3a72 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.1.1.table @@ -0,0 +1,7 @@ +# Product discipline 1 - Hydrological products, parameter category 1: hydrology probabilities +0 0 Conditional per cent precipitation amount fractile for an overall period (Encoded as an accumulation) (kg m-2) +1 1 Per cent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over the sub-period) (%) +2 2 Probability of 0.01 inch of precipitation (POP) (%) +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.1.2.table b/definitions/grib2/tables/30/4.2.1.2.table new file mode 100644 index 000000000..97f062dbc --- /dev/null +++ b/definitions/grib2/tables/30/4.2.1.2.table @@ -0,0 +1,19 @@ +# Product discipline 1 - Hydrological products, parameter category 2: inland water and sediment properties +0 0 Water depth (m) +1 1 Water temperature (K) +2 2 Water fraction (Proportion) +3 3 Sediment thickness (m) +4 4 Sediment temperature (K) +5 5 Ice thickness (m) +6 6 Ice temperature (K) +7 7 Ice cover (Proportion) +8 8 Land cover (0 = water, 1 = land) (Proportion) +9 9 Shape factor with respect to salinity profile (-) +10 10 Shape factor with respect to temperature profile in thermocline (-) +11 11 Attenuation coefficient of water with respect to solar radiation (/m) +12 12 Salinity (kg/kg) +13 13 Cross-sectional area of flow in channel (m2) +14 14 Snow temperature (K) +# 15-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.10.0.table b/definitions/grib2/tables/30/4.2.10.0.table new file mode 100644 index 000000000..a7b020933 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.10.0.table @@ -0,0 +1,78 @@ +# Product discipline 10 - Oceanographic products, parameter category 0: waves +0 0 Wave spectra (1) (-) +1 1 Wave spectra (2) (-) +2 2 Wave spectra (3) (-) +3 3 Significant height of combined wind waves and swell (m) +4 4 Direction of wind waves (degree true) +5 5 Significant height of wind waves (m) +6 6 Mean period of wind waves (s) +7 7 Direction of swell waves (degree true) +8 8 Significant height of swell waves (m) +9 9 Mean period of swell waves (s) +10 10 Primary wave direction (degree true) +11 11 Primary wave mean period (s) +12 12 Secondary wave direction (degree true) +13 13 Secondary wave mean period (s) +14 14 Mean direction of combined wind waves and swell (degree true) +15 15 Mean period of combined wind waves and swell (s) +16 16 Coefficient of drag with waves (-) +17 17 Friction velocity (m/s) +18 18 Wave stress (N m-2) +19 19 Normalized wave stress (-) +20 20 Mean square slope of waves (-) +21 21 u-component surface Stokes drift (m/s) +22 22 v-component surface Stokes drift (m/s) +23 23 Period of maximum individual wave height (s) +24 24 Maximum individual wave height (m) +25 25 Inverse mean wave frequency (s) +26 26 Inverse mean frequency of wind waves (s) +27 27 Inverse mean frequency of total swell (s) +28 28 Mean zero-crossing wave period (s) +29 29 Mean zero-crossing period of wind waves (s) +30 30 Mean zero-crossing period of total swell (s) +31 31 Wave directional width (-) +32 32 Directional width of wind waves (-) +33 33 Directional width of total swell (-) +34 34 Peak wave period (s) +35 35 Peak period of wind waves (s) +36 36 Peak period of total swell (s) +37 37 Altimeter wave height (m) +38 38 Altimeter corrected wave height (m) +39 39 Altimeter range relative correction (-) +40 40 10-metre neutral wind speed over waves (m/s) +41 41 10-metre wind direction over waves (deg) +42 42 Wave energy spectrum (m2 s rad-1) +43 43 Kurtosis of the sea-surface elevation due to waves (-) +44 44 Benjamin-Feir index (-) +45 45 Spectral peakedness factor (/s) +46 46 Peak wave direction (deg) +47 47 Significant wave height of first swell partition (m) +48 48 Significant wave height of second swell partition (m) +49 49 Significant wave height of third swell partition (m) +50 50 Mean wave period of first swell partition (s) +51 51 Mean wave period of second swell partition (s) +52 52 Mean wave period of third swell partition (s) +53 53 Mean wave direction of first swell partition (deg) +54 54 Mean wave direction of second swell partition (deg) +55 55 Mean wave direction of third swell partition (deg) +56 56 Wave directional width of first swell partition (-) +57 57 Wave directional width of second swell partition (-) +58 58 Wave directional width of third swell partition (-) +59 59 Wave frequency width of first swell partition (-) +60 60 Wave frequency width of second swell partition (-) +61 61 Wave frequency width of third swell partition (-) +62 62 Wave frequency width (-) +63 63 Frequency width of wind waves (-) +64 64 Frequency width of total swell (-) +65 65 Peak wave period of first swell partition (s) +66 66 Peak wave period of second swell partition (s) +67 67 Peak wave period of third swell partition (s) +68 68 Peak wave direction of first swell partition (degree true) +69 69 Peak wave direction of second swell partition (degree true) +70 70 Peak wave direction of third swell partition (degree true) +71 71 Peak direction of wind waves (degree true) +72 72 Peak direction of total swell (degree true) +73 73 Whitecap fraction (fraction) +# 74-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.10.1.table b/definitions/grib2/tables/30/4.2.10.1.table new file mode 100644 index 000000000..8d1afe640 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.10.1.table @@ -0,0 +1,11 @@ +# Product discipline 10 - Oceanographic products, parameter category 1: currents +0 0 Current direction (degree true) +1 1 Current speed (m/s) +2 2 u-component of current (m/s) +3 3 v-component of current (m/s) +4 4 Rip current occurrence probability (%) +5 5 Eastward current (m s-1) +6 6 Northward current (m s-1) +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.10.191.table b/definitions/grib2/tables/30/4.2.10.191.table new file mode 100644 index 000000000..bda676c83 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.10.191.table @@ -0,0 +1,9 @@ +# Product discipline 10 - Oceanographic products, parameter category 191: miscellaneous +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +1 1 Meridional overturning stream function (m3/s) +2 2 Reserved +3 3 Days since last observation (d) +4 4 Barotropic stream function (m3 s-1) +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.10.2.table b/definitions/grib2/tables/30/4.2.10.2.table new file mode 100644 index 000000000..0f96b47ff --- /dev/null +++ b/definitions/grib2/tables/30/4.2.10.2.table @@ -0,0 +1,28 @@ +# Product discipline 10 - Oceanographic products, parameter category 2: ice +0 0 Ice cover (Proportion) +1 1 Ice thickness (m) +2 2 Direction of ice drift (degree true) +3 3 Speed of ice drift (m/s) +4 4 u-component of ice drift (m/s) +5 5 v-component of ice drift (m/s) +6 6 Ice growth rate (m/s) +7 7 Ice divergence (/s) +8 8 Ice temperature (K) +9 9 Module of ice internal pressure (Pa m) +10 10 Zonal vector component of vertically integrated ice internal pressure (Pa m) +11 11 Meridional vector component of vertically integrated ice internal pressure (Pa m) +12 12 Compressive ice strength (N/m) +13 13 Snow temperature (over sea ice) (K) +14 14 Albedo (Numeric) +15 15 Sea ice volume per unit area (m3 m-2) +16 16 Snow volume over sea ice per unit area (m3 m-2) +17 17 Sea ice heat content (J m-2) +18 18 Snow over sea ice heat content (J m-2) +19 19 Ice freeboard thickness (m) +20 20 Ice melt pond fraction (fraction) +21 21 Ice melt pond depth (m) +22 22 Ice melt pond volume per unit area (m3 m-2) +23 23 Sea ice fraction tendency due to parameterization (s-1) +# 24-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.10.3.table b/definitions/grib2/tables/30/4.2.10.3.table new file mode 100644 index 000000000..4fb3d4597 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.10.3.table @@ -0,0 +1,24 @@ +# Product discipline 10 - Oceanographic products, parameter category 3: surface properties +0 0 Water temperature (K) +1 1 Deviation of sea level from mean (m) +2 2 Heat exchange coefficient (-) +3 3 Practical salinity (Numeric) +4 4 Downward heat flux (W m-2) +5 5 Eastward surface stress (N m-2) +6 6 Northward surface stress (N m-2) +7 7 x-component surface stress (N m-2) +8 8 y-component surface stress (N m-2) +9 9 Thermosteric change in sea surface height (m) +10 10 Halosteric change in sea surface height (m) +11 11 Steric change in sea surface height (m) +12 12 Sea salt flux (kg m-2 s-1) +13 13 Net upward water flux (kg m-2 s-1) +14 14 Eastward surface water velocity (m s-1) +15 15 Northward surface water velocity (m s-1) +16 16 x-component of surface water velocity (m s-1) +17 17 y-component of surface water velocity (m s-1) +18 18 Heat flux correction (W m-2) +19 19 Sea surface height tendency due to parameterization (m s-1) +# 20-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.10.4.table b/definitions/grib2/tables/30/4.2.10.4.table new file mode 100644 index 000000000..2787e1791 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.10.4.table @@ -0,0 +1,44 @@ +# Product discipline 10 - Oceanographic products, parameter category 4: subsurface properties +0 0 Main thermocline depth (m) +1 1 Main thermocline anomaly (m) +2 2 Transient thermocline depth (m) +3 3 Salinity (kg/kg) +4 4 Ocean vertical heat diffusivity (m2/s) +5 5 Ocean vertical salt diffusivity (m2/s) +6 6 Ocean vertical momentum diffusivity (m2/s) +7 7 Bathymetry (m) +# 8-10 Reserved +11 11 Shape factor with respect to salinity profile (-) +12 12 Shape factor with respect to temperature profile in thermocline (-) +13 13 Attenuation coefficient of water with respect to solar radiation (/m) +14 14 Water depth (m) +15 15 Water temperature (K) +16 16 Water density (rho) (kg m-3) +17 17 Water density anomaly (sigma) (kg m-3) +18 18 Water potential temperature (theta) (K) +19 19 Water potential density (rho theta) (kg m-3) +20 20 Water potential density anomaly (sigma theta) (kg m-3) +21 21 Practical salinity (Numeric) +22 22 Water column-integrated heat content (J m-2) +23 23 Eastward water velocity (m s-1) +24 24 Northward water velocity (m s-1) +25 25 x-component water velocity (m s-1) +26 26 y-component water velocity (m s-1) +27 27 Upward water velocity (m s-1) +28 28 Vertical eddy diffusivity (m2 s-1) +29 29 Bottom pressure equivalent height (m) +30 30 Fresh water flux into sea water from rivers (kg m-2 s-1) +31 31 Fresh water flux correction (kg m-2 s-1) +32 32 Virtual salt flux into sea water (g kg-1 m-2 s-1) +33 33 Virtual salt flux correction (g kg-1 m-2 s-1) +34 34 Sea water temperature tendency due to Newtonian relaxation (K s-1) +35 35 Sea water salinity tendency due to Newtonian relaxation (g kg-1 s-1) +36 36 Sea water temperature tendency due to parameterization (K s-1) +37 37 Sea water salinity tendency due to parameterization (g kg-1 s-1) +38 38 Eastward sea water velocity tendency due to parameterization (m-2 s-1) +39 39 Northward sea water velocity tendency due to parameterization (m-2 s-1) +40 40 Sea water temperature tendency due to direct bias correction (K s-1) +41 41 Sea water salinity tendency due to direct bias correction (g kg-1 s-1) +# 42-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.2.0.table b/definitions/grib2/tables/30/4.2.2.0.table new file mode 100644 index 000000000..e8cacaf45 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.2.0.table @@ -0,0 +1,54 @@ +# Product discipline 2 - Land surface products, parameter category 0: vegetation/biomass +0 0 Land cover (0 = sea, 1 = land) (Proportion) +1 1 Surface roughness (m) +2 2 Soil temperature (K) +3 3 Soil moisture content (kg m-2) +4 4 Vegetation (%) +5 5 Water runoff (kg m-2) +6 6 Evapotranspiration (kg-2 s-1) +7 7 Model terrain height (m) +8 8 Land use (Code table 4.212) +9 9 Volumetric soil moisture content (Proportion) +10 10 Ground heat flux (W m-2) +11 11 Moisture availability (%) +12 12 Exchange coefficient (kg m-2 s-1) +13 13 Plant canopy surface water (kg m-2) +14 14 Blackadar's mixing length scale (m) +15 15 Canopy conductance (m/s) +16 16 Minimal stomatal resistance (s/m) +17 17 Wilting point (Proportion) +18 18 Solar parameter in canopy conductance (Proportion) +19 19 Temperature parameter in canopy (Proportion) +20 20 Humidity parameter in canopy conductance (Proportion) +21 21 Soil moisture parameter in canopy conductance (Proportion) +22 22 Soil moisture (kg m-3) +23 23 Column-integrated soil water (kg m-2) +24 24 Heat flux (W m-2) +25 25 Volumetric soil moisture (m3 m-3) +26 26 Wilting point (kg m-3) +27 27 Volumetric wilting point (m3 m-3) +28 28 Leaf area index (Numeric) +29 29 Evergreen forest cover (Proportion) +30 30 Deciduous forest cover (Proportion) +31 31 Normalized differential vegetation index (NDVI) (Numeric) +32 32 Root depth of vegetation (m) +33 33 Water runoff and drainage (kg m-2) +34 34 Surface water runoff (kg m-2) +35 35 Tile class (Code table 4.243) +36 36 Tile fraction (Proportion) +37 37 Tile percentage (%) +38 38 Soil volumetric ice content (water equivalent) (m3 m-3) +39 39 Evapotranspiration rate (kg m-2 s-1) +40 40 Potential evapotranspiration rate (kg m-2 s-1) +41 41 Snow melt rate (kg m-2 s-1) +42 42 Water runoff and drainage rate (kg m-2 s-1) +43 43 Drainage direction (Code table 4.250) +44 44 Upstream area (m2) +45 45 Wetland cover (Proportion) +46 46 Wetland type (Code table 4.239) +47 47 Irrigation cover (Proportion) +48 48 C4 crop cover (Proportion) +49 49 C4 grass cover (Proportion) +# 50-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.2.3.table b/definitions/grib2/tables/30/4.2.2.3.table new file mode 100644 index 000000000..4e2187a5b --- /dev/null +++ b/definitions/grib2/tables/30/4.2.2.3.table @@ -0,0 +1,34 @@ +# Product discipline 2 - Land surface products, parameter category 3: soil products +0 0 Soil type (Code table 4.213) +1 1 Upper layer soil temperature (K) +2 2 Upper layer soil moisture (kg m-3) +3 3 Lower layer soil moisture (kg m-3) +4 4 Bottom layer soil temperature (K) +5 5 Liquid volumetric soil moisture (non-frozen) (Proportion) +6 6 Number of soil layers in root zone (Numeric) +7 7 Transpiration stress-onset (soil moisture) (Proportion) +8 8 Direct evaporation cease (soil moisture) (Proportion) +9 9 Soil porosity (Proportion) +10 10 Liquid volumetric soil moisture (non-frozen) (m3 m-3) +11 11 Volumetric transpiration stress-onset (soil moisture) (m3 m-3) +12 12 Transpiration stress-onset (soil moisture) (kg m-3) +13 13 Volumetric direct evaporation cease (soil moisture) (m3 m-3) +14 14 Direct evaporation cease (soil moisture) (kg m-3) +15 15 Soil porosity (m3 m-3) +16 16 Volumetric saturation of soil moisture (m3 m-3) +17 17 Saturation of soil moisture (kg m-3) +18 18 Soil temperature (K) +19 19 Soil moisture (kg m-3) +20 20 Column-integrated soil moisture (kg m-2) +21 21 Soil ice (kg m-3) +22 22 Column-integrated soil ice (kg m-2) +23 23 Liquid water in snow pack (kg m-2) +24 24 Frost index (K day-1) +25 25 Snow depth at elevation bands (kg m-2) +26 26 Soil heat flux (W m-2) +27 27 Soil depth (m) +28 28 Snow temperature (K) +29 29 Ice temperature (K) +# 30-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.2.4.table b/definitions/grib2/tables/30/4.2.2.4.table new file mode 100644 index 000000000..6083f2a98 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.2.4.table @@ -0,0 +1,24 @@ +# Product discipline 2 - Land surface products, parameter category 4: fire weather products +0 0 Fire outlook (Code table 4.224) +1 1 Fire outlook due to dry thunderstorm (Code table 4.224) +2 2 Haines index (Numeric) +3 3 Fire burned area (%) +4 4 Fosberg index (Numeric) +5 5 Forest Fire Weather Index (as defined by the Canadian Forest Service) (Numeric) +6 6 Fine Fuel Moisture Code (as defined by the Canadian Forest Service) (Numeric) +7 7 Duff Moisture Code (as defined by the Canadian Forest Service) (Numeric) +8 8 Drought Code (as defined by the Canadian Forest Service) (Numeric) +9 9 Initial Fire Spread Index (as defined by the Canadian Forest Service) (Numeric) +10 10 Fire Buildup Index (as defined by the Canadian Forest Service) (Numeric) +11 11 Fire Daily Severity Rating (as defined by the Canadian Forest Service) (Numeric) +12 12 Keetch-Byram drought index (Numeric) +13 13 Drought factor (as defined by the Australian forest service ) (Numeric) +14 14 Rate of spread (as defined by the Australian forest service ) (m/s) +15 15 Fire danger index (as defined by the Australian forest service ) (Numeric) +16 16 Spread component (as defined by the US Forest Service National Fire Danger Rating System) (Numeric) +17 17 Burning index (as defined by the US Forest Service National Fire Danger Rating System) (Numeric) +18 18 Ignition component (as defined by the US Forest Service National Fire Danger Rating System) (%) +19 19 Energy release component (as defined by the US Forest Service National Fire Danger Rating System) (Joule/m2) +# 20-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.2.5.table b/definitions/grib2/tables/30/4.2.2.5.table new file mode 100644 index 000000000..1d08dd573 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.2.5.table @@ -0,0 +1,6 @@ +# Product discipline 2 - Land surface products, parameter category 5: glaciers and inland ice +0 0 Glacier cover (Proportion) +1 1 Glacier temperature (K) +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.2.6.table b/definitions/grib2/tables/30/4.2.2.6.table new file mode 100644 index 000000000..b0e37883a --- /dev/null +++ b/definitions/grib2/tables/30/4.2.2.6.table @@ -0,0 +1,10 @@ +# Product discipline 2 - Land surface products, parameter category 6: urban areas +0 0 Urban cover (Proportion) +1 1 Road cover (Proportion) +2 2 Building cover (Proportion) +3 3 Building height (m) +4 4 Vertical-to-horizontal area fraction (m2 m-2) +5 5 Standard deviation of building height (m) +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.20.0.table b/definitions/grib2/tables/30/4.2.20.0.table new file mode 100644 index 000000000..a997371d9 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.20.0.table @@ -0,0 +1,13 @@ +# Product discipline 20 - Health and socioeconomic impacts, parameter category 0: health indicators +0 0 Universal thermal climate index (K) +1 1 Mean radiant temperature (K) +2 2 Wet-bulb globe temperature (K) +3 3 Globe temperature (K) +4 4 Humidex (K) +5 5 Effective temperature (K) +6 6 Normal effective temperature (K) +7 7 Standard effective temperature (K) +8 8 Physiological equivalent temperature (K) +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.20.1.table b/definitions/grib2/tables/30/4.2.20.1.table new file mode 100644 index 000000000..0712cd8d1 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.20.1.table @@ -0,0 +1,14 @@ +# Product discipline 20 - Health and socioeconomic impacts, parameter category 1: epidemiology +0 0 Malaria cases (Fraction) +1 1 Malaria circumsporozoite protein rate (Fraction) +2 2 Plasmodium falciparum entomological inoculation rate (Bites per day per person) +3 3 Human bite rate by anopheles vectors (Bites per day per person) +4 4 Malaria immunity (Fraction) +5 5 Falciparum parasite rates (Fraction) +6 6 Detectable falciparum parasite ratio (after day 10) (Fraction) +7 7 Anopheles vector to host ratio (Fraction) +8 8 Anopheles vector number (Number m-2) +9 9 Fraction of malarial vector reproductive habitat (Fraction) +# 10-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.20.2.table b/definitions/grib2/tables/30/4.2.20.2.table new file mode 100644 index 000000000..d6b9083d1 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.20.2.table @@ -0,0 +1,5 @@ +# Product discipline 20 - Health and socioeconomic impacts, parameter category 2: socioeconomic indicators +0 0 Population density (Person m-2) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.3.0.table b/definitions/grib2/tables/30/4.2.3.0.table new file mode 100644 index 000000000..fd75ee1b8 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.3.0.table @@ -0,0 +1,14 @@ +# Product discipline 3 - Space products, parameter category 0: image format products +0 0 Scaled radiance (Numeric) +1 1 Scaled albedo (Numeric) +2 2 Scaled brightness temperature (Numeric) +3 3 Scaled precipitable water (Numeric) +4 4 Scaled lifted index (Numeric) +5 5 Scaled cloud top pressure (Numeric) +6 6 Scaled skin temperature (Numeric) +7 7 Cloud mask (Code table 4.217) +8 8 Pixel scene type (Code table 4.218) +9 9 Fire detection indicator (Code table 4.223) +# 10-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.3.1.table b/definitions/grib2/tables/30/4.2.3.1.table new file mode 100644 index 000000000..c321976da --- /dev/null +++ b/definitions/grib2/tables/30/4.2.3.1.table @@ -0,0 +1,35 @@ +# Product discipline 3 - Space products, parameter category 1: quantitative products +0 0 Estimated precipitation (kg m-2) +1 1 Instantaneous rain rate (kg m-2 s-1) +2 2 Cloud top height (m) +3 3 Cloud top height quality indicator (Code table 4.219) +4 4 Estimated u-component of wind (m/s) +5 5 Estimated v-component of wind (m/s) +6 6 Number of pixel used (Numeric) +7 7 Solar zenith angle (deg) +8 8 Relative azimuth angle (deg) +9 9 Reflectance in 0.6 micron channel (%) +10 10 Reflectance in 0.8 micron channel (%) +11 11 Reflectance in 1.6 micron channel (%) +12 12 Reflectance in 3.9 micron channel (%) +13 13 Atmospheric divergence (/s) +14 14 Cloudy brightness temperature (K) +15 15 Clear-sky brightness temperature (K) +16 16 Cloudy radiance (with respect to wave number) (W m-1 sr-1) +17 17 Clear-sky radiance (with respect to wave number) (W m-1 sr-1) +18 18 Reserved +19 19 Wind speed (m/s) +20 20 Aerosol optical thickness at 0.635 um +21 21 Aerosol optical thickness at 0.810 um +22 22 Aerosol optical thickness at 1.640 um +23 23 Angstrom coefficient +# 24-26 Reserved +27 27 Bidirectional reflectance factor (numeric) +28 28 Brightness temperature (K) +29 29 Scaled radiance (numeric) +# 30-97 Reserved +98 98 Correlation coefficient between MPE rain-rates for the co-located IR data and the microwave data rain-rates (Numeric) +99 99 Standard deviation between MPE rain-rates for the co-located IR data and the microwave data rain-rates (kg m-2 s-1) +# 100-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.3.2.table b/definitions/grib2/tables/30/4.2.3.2.table new file mode 100644 index 000000000..a97ce4942 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.3.2.table @@ -0,0 +1,24 @@ +# Product discipline 3 - Space products, parameter category 2: cloud properties +0 0 Clear sky probability (%) +1 1 Cloud top temperature (K) +2 2 Cloud top pressure (Pa) +3 3 Cloud type (Code table 4.218) +4 4 Cloud phase (Code table 4.218) +5 5 Cloud optical depth (Numeric) +6 6 Cloud particle effective radius (m) +7 7 Cloud liquid water path (kg m-2) +8 8 Cloud ice water path (kg m-2) +9 9 Cloud albedo (Numeric) +10 10 Cloud emissivity (Numeric) +11 11 Effective absorption optical depth ratio (Numeric) +30 30 Measurement cost (Numeric) +31 31 Upper layer cloud optical depth (Numeric) +32 32 Upper layer cloud top pressure (Pa) +33 33 Upper layer cloud effective radius (m) +34 34 Error in upper layer cloud optical depth (Numeric) +35 35 Error in upper layer cloud top pressure (Pa) +36 36 Error in upper layer cloud effective radius (m) +37 37 Lower layer cloud optical depth (Numeric) +38 38 Lower layer cloud top pressure (Pa) +39 39 Error in lower layer cloud optical depth (Numeric) +40 40 Error in lower layer cloud top pressure (Pa) diff --git a/definitions/grib2/tables/30/4.2.3.3.table b/definitions/grib2/tables/30/4.2.3.3.table new file mode 100644 index 000000000..c487a578e --- /dev/null +++ b/definitions/grib2/tables/30/4.2.3.3.table @@ -0,0 +1,4 @@ +# Product discipline 3 - Space products, parameter category 3: flight rule conditions +0 0 Probability of encountering marginal visual flight rule conditions (%) +1 1 Probability of encountering low instrument flight rule conditions (%) +2 2 Probability of encountering instrument flight rule conditions (%) diff --git a/definitions/grib2/tables/30/4.2.3.4.table b/definitions/grib2/tables/30/4.2.3.4.table new file mode 100644 index 000000000..7f832ff3c --- /dev/null +++ b/definitions/grib2/tables/30/4.2.3.4.table @@ -0,0 +1,10 @@ +# Product discipline 3 - Space products, parameter category 4: volcanic ash +0 0 Volcanic ash probability (%) +1 1 Volcanic ash cloud top temperature (K) +2 2 Volcanic ash cloud top pressure (Pa) +3 3 Volcanic ash cloud top height (m) +4 4 Volcanic ash cloud emissivity (Numeric) +5 5 Volcanic ash effective absorption optical depth ratio (Numeric) +6 6 Volcanic ash cloud optical depth (Numeric) +7 7 Volcanic ash column density (kg m-2) +8 8 Volcanic ash particle effective radius (m) diff --git a/definitions/grib2/tables/30/4.2.3.5.table b/definitions/grib2/tables/30/4.2.3.5.table new file mode 100644 index 000000000..58a3f12cb --- /dev/null +++ b/definitions/grib2/tables/30/4.2.3.5.table @@ -0,0 +1,7 @@ +# Product discipline 3 - Space products, parameter category 5: sea-surface temperature +0 0 Interface sea-surface temperature (K) +1 1 Skin sea-surface temperature (K) +2 2 Sub-skin sea-surface temperature (K) +3 3 Foundation sea-surface temperature (K) +4 4 Estimated bias between sea-surface temperature and standard (K) +5 5 Estimated standard deviation between sea surface temperature and standard (K) diff --git a/definitions/grib2/tables/30/4.2.3.6.table b/definitions/grib2/tables/30/4.2.3.6.table new file mode 100644 index 000000000..62a5ba656 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.3.6.table @@ -0,0 +1,7 @@ +# Product discipline 3 - Space products, parameter category 6: solar radiation +0 0 Global solar irradiance (W m-2) +1 1 Global solar exposure (J m-2) +2 2 Direct solar irradiance (W m-2) +3 3 Direct solar exposure (J m-2) +4 4 Diffuse solar irradiance (W m-2) +5 5 Diffuse solar exposure (J m-2) diff --git a/definitions/grib2/tables/30/4.2.4.0.table b/definitions/grib2/tables/30/4.2.4.0.table new file mode 100644 index 000000000..1a9318430 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.4.0.table @@ -0,0 +1,10 @@ +# Product discipline 4 - Space weather products, parameter category 0: temperature +0 0 Temperature (K) +1 1 Electron temperature (K) +2 2 Proton temperature (K) +3 3 Ion temperature (K) +4 4 Parallel temperature (K) +5 5 Perpendicular temperature (K) +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.4.1.table b/definitions/grib2/tables/30/4.2.4.1.table new file mode 100644 index 000000000..ba2d09db8 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.4.1.table @@ -0,0 +1,8 @@ +# Product discipline 4 - Space weather products, parameter category 1: momentum +0 0 Velocity magnitude (speed) (m s-1) +1 1 1st vector component of velocity (coordinate system dependent) (m s-1) +2 2 2nd vector component of velocity (coordinate system dependent) (m s-1) +3 3 3rd vector component of velocity (coordinate system dependent) (m s-1) +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.4.10.table b/definitions/grib2/tables/30/4.2.4.10.table new file mode 100644 index 000000000..fd9b2db49 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.4.10.table @@ -0,0 +1,12 @@ +# Product discipline 4 - Space weather products, parameter category 10: space weather indices +0 0 Scintillation index (sigma phi) (rad) +1 1 Scintillation index S4 (Numeric) +2 2 Rate of change of TEC index (ROTI) (TECU/min) +3 3 Disturbance ionosphere index spatial gradient (DIXSG) (Numeric) +4 4 Along arc TEC rate (AATR) (TECU/min) +5 5 Kp (Numeric) +6 6 Equatorial disturbance storm time index (Dst) (nT) +7 7 Auroral electrojet (AE) (nT) +# 8-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.4.2.table b/definitions/grib2/tables/30/4.2.4.2.table new file mode 100644 index 000000000..90a94d23d --- /dev/null +++ b/definitions/grib2/tables/30/4.2.4.2.table @@ -0,0 +1,18 @@ +# Product discipline 4 - Space weather products, parameter category 2: charged particle mass and number +0 0 Particle number density (m-3) +1 1 Electron density (m-3) +2 2 Proton density (m-3) +3 3 Ion density (m-3) +4 4 Vertical total electron content (TECU) +5 5 HF absorption frequency (Hz) +6 6 HF absorption (dB) +7 7 Spread F (m) +8 8 h'F (m) +9 9 Critical frequency (Hz) +10 10 Maximal usable frequency (MUF) (Hz) +11 11 Peak height (hm) (m) +12 12 Peak density (Nm) (m-3) +13 13 Equivalent slab thickness (tau) (km) +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.4.3.table b/definitions/grib2/tables/30/4.2.4.3.table new file mode 100644 index 000000000..aabee3d3a --- /dev/null +++ b/definitions/grib2/tables/30/4.2.4.3.table @@ -0,0 +1,12 @@ +# Product discipline 4 - Space weather products, parameter category 3: electric and magnetic fields +0 0 Magnetic field magnitude (T) +1 1 1st vector component of magnetic field (T) +2 2 2nd vector component of magnetic field (T) +3 3 3rd vector component of magnetic field (T) +4 4 Electric field magnitude (V m-1) +5 5 1st vector component of electric field (V m-1) +6 6 2nd vector component of electric field (V m-1) +7 7 3rd vector component of electric field (V m-1) +# 8-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.4.4.table b/definitions/grib2/tables/30/4.2.4.4.table new file mode 100644 index 000000000..694c8cacc --- /dev/null +++ b/definitions/grib2/tables/30/4.2.4.4.table @@ -0,0 +1,11 @@ +# Product discipline 4 - Space weather products, parameter category 4: energetic particles +0 0 Proton flux (differential) ((m2 s sr eV)-1) +1 1 Proton flux (integral) ((m2 s sr )-1) +2 2 Electron flux (differential) ((m2 s sr eV)-1) +3 3 Electron flux (integral) ((m2 s sr)-1) +4 4 Heavy ion flux (differential) ((m2 s sr eV/nuc)-1) +5 5 Heavy ion flux (integral) ((m2 s sr)-1) +6 6 Cosmic ray neutron flux (h-1) +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.4.5.table b/definitions/grib2/tables/30/4.2.4.5.table new file mode 100644 index 000000000..93bfa1d01 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.4.5.table @@ -0,0 +1,8 @@ +# Product discipline 4 - Space weather products, parameter category 5: waves +0 0 Amplitude (dB) +1 1 Phase (rad) +2 2 Frequency (Hz) +3 3 Wavelength (m) +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.4.6.table b/definitions/grib2/tables/30/4.2.4.6.table new file mode 100644 index 000000000..92bdcb92c --- /dev/null +++ b/definitions/grib2/tables/30/4.2.4.6.table @@ -0,0 +1,11 @@ +# Product discipline 4 - Space weather products, parameter category 6: solar electromagnetic emissions +0 0 Integrated solar irradiance (W m-2) +1 1 Solar X-ray flux (XRS long) (W m-2) +2 2 Solar X-ray flux (XRS short) (W m-2) +3 3 Solar EUV irradiance (W m-2) +4 4 Solar spectral irradiance (W m-2 nm-1) +5 5 F10.7 (W m-2 Hz-1) +6 6 Solar radio emissions (W m-2 Hz-1) +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.4.7.table b/definitions/grib2/tables/30/4.2.4.7.table new file mode 100644 index 000000000..da779d098 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.4.7.table @@ -0,0 +1,8 @@ +# Product discipline 4 - Space weather products, parameter category 7: terrestrial electromagnetic emissions +0 0 Limb intensity (J m-2 s-1) +1 1 Disk intensity (J m-2 s-1) +2 2 Disk intensity day (J m-2 s-1) +3 3 Disk intensity night (J m-2 s-1) +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.4.8.table b/definitions/grib2/tables/30/4.2.4.8.table new file mode 100644 index 000000000..fd2227ccd --- /dev/null +++ b/definitions/grib2/tables/30/4.2.4.8.table @@ -0,0 +1,13 @@ +# Product discipline 4 - Space weather products, parameter category 8: imagery +0 0 X-ray radiance (W sr-1 m-2) +1 1 EUV radiance (W sr-1 m-2) +2 2 H-alpha radiance (W sr-1 m-2) +3 3 White light radiance (W sr-1 m-2) +4 4 CaII-K radiance (W sr-1 m-2) +5 5 White light coronagraph radiance (W sr-1 m-2) +6 6 Heliospheric radiance (W sr-1 m-2) +7 7 Thematic mask (Numeric) +8 8 Solar induced chlorophyll fluorescence (W m-2 sr-1 m-1) +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.2.4.9.table b/definitions/grib2/tables/30/4.2.4.9.table new file mode 100644 index 000000000..9c4e93ec7 --- /dev/null +++ b/definitions/grib2/tables/30/4.2.4.9.table @@ -0,0 +1,7 @@ +# Product discipline 4 - Space weather products, parameter category 9: ion-neutral coupling +0 0 Pedersen conductivity (S m-1) +1 1 Hall conductivity (S m-1) +2 2 Parallel conductivity (S m-1) +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.201.table b/definitions/grib2/tables/30/4.201.table new file mode 100644 index 000000000..49fe27c85 --- /dev/null +++ b/definitions/grib2/tables/30/4.201.table @@ -0,0 +1,17 @@ +# Code table 4.201 - Precipitation type +0 0 No precipitation +1 1 Rain +2 2 Thunderstorm +3 3 Freezing rain +4 4 Mixed/ice +5 5 Snow +6 6 Wet snow +7 7 Mixture of rain and snow +8 8 Ice pellets +9 9 Graupel +10 10 Hail +11 11 Drizzle +12 12 Freezing drizzle +# 13-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.202.table b/definitions/grib2/tables/30/4.202.table new file mode 100644 index 000000000..438502ff9 --- /dev/null +++ b/definitions/grib2/tables/30/4.202.table @@ -0,0 +1,4 @@ +# Code table 4.202 - Precipitable water category +# 0-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.203.table b/definitions/grib2/tables/30/4.203.table new file mode 100644 index 000000000..8a9aedf7a --- /dev/null +++ b/definitions/grib2/tables/30/4.203.table @@ -0,0 +1,26 @@ +# Code table 4.203 - Cloud type +0 0 Clear +1 1 Cumulonimbus +2 2 Stratus +3 3 Stratocumulus +4 4 Cumulus +5 5 Altostratus +6 6 Nimbostratus +7 7 Altocumulus +8 8 Cirrostratus +9 9 Cirrocumulus +10 10 Cirrus +11 11 Cumulonimbus - ground-based fog beneath the lowest layer +12 12 Stratus - ground-based fog beneath the lowest layer +13 13 Stratocumulus - ground-based fog beneath the lowest layer +14 14 Cumulus - ground-based fog beneath the lowest layer +15 15 Altostratus - ground-based fog beneath the lowest layer +16 16 Nimbostratus - ground-based fog beneath the lowest layer +17 17 Altocumulus - ground-based fog beneath the lowest layer +18 18 Cirrostratus - ground-based fog beneath the lowest layer +19 19 Cirrocumulus - ground-based fog beneath the lowest layer +20 20 Cirrus - ground-based fog beneath the lowest layer +# 21-190 Reserved +191 191 Unknown +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.204.table b/definitions/grib2/tables/30/4.204.table new file mode 100644 index 000000000..481372936 --- /dev/null +++ b/definitions/grib2/tables/30/4.204.table @@ -0,0 +1,9 @@ +# Code table 4.204 - Thunderstorm coverage +0 0 None +1 1 Isolated (1-2%) +2 2 Few (3-5%) +3 3 Scattered (6-45%) +4 4 Numerous (> 45%) +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.205.table b/definitions/grib2/tables/30/4.205.table new file mode 100644 index 000000000..5b4484dfd --- /dev/null +++ b/definitions/grib2/tables/30/4.205.table @@ -0,0 +1,6 @@ +# Code table 4.205 - Presence of aerosol +0 0 Aerosol not present +1 1 Aerosol present +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.206.table b/definitions/grib2/tables/30/4.206.table new file mode 100644 index 000000000..02c3dfdf9 --- /dev/null +++ b/definitions/grib2/tables/30/4.206.table @@ -0,0 +1,6 @@ +# Code table 4.206 - Volcanic ash +0 0 Not present +1 1 Present +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.207.table b/definitions/grib2/tables/30/4.207.table new file mode 100644 index 000000000..8ddb2e048 --- /dev/null +++ b/definitions/grib2/tables/30/4.207.table @@ -0,0 +1,10 @@ +# Code table 4.207 - Icing +0 0 None +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Trace +5 5 Heavy +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.208.table b/definitions/grib2/tables/30/4.208.table new file mode 100644 index 000000000..b83685a1a --- /dev/null +++ b/definitions/grib2/tables/30/4.208.table @@ -0,0 +1,9 @@ +# Code table 4.208 - Turbulence +0 0 None (smooth) +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Extreme +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.209.table b/definitions/grib2/tables/30/4.209.table new file mode 100644 index 000000000..cb7617071 --- /dev/null +++ b/definitions/grib2/tables/30/4.209.table @@ -0,0 +1,9 @@ +# Code table 4.209 - Planetary boundary-layer regime +0 0 Reserved +1 1 Stable +2 2 Mechanically driven turbulence +3 3 Forced convection +4 4 Free convection +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.210.table b/definitions/grib2/tables/30/4.210.table new file mode 100644 index 000000000..524a6ca73 --- /dev/null +++ b/definitions/grib2/tables/30/4.210.table @@ -0,0 +1,6 @@ +# Code table 4.210 - Contrail intensity +0 0 Contrail not present +1 1 Contrail present +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.211.table b/definitions/grib2/tables/30/4.211.table new file mode 100644 index 000000000..098eb2d43 --- /dev/null +++ b/definitions/grib2/tables/30/4.211.table @@ -0,0 +1,7 @@ +# Code table 4.211 - Contrail engine type +0 0 Low bypass +1 1 High bypass +2 2 Non-bypass +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.212.table b/definitions/grib2/tables/30/4.212.table new file mode 100644 index 000000000..1a085b88d --- /dev/null +++ b/definitions/grib2/tables/30/4.212.table @@ -0,0 +1,18 @@ +# Code table 4.212 - Land use +0 0 Reserved +1 1 Urban land +2 2 Agriculture +3 3 Range land +4 4 Deciduous forest +5 5 Coniferous forest +6 6 Forest/wetland +7 7 Water +8 8 Wetlands +9 9 Desert +10 10 Tundra +11 11 Ice +12 12 Tropical forest +13 13 Savannah +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.213.table b/definitions/grib2/tables/30/4.213.table new file mode 100644 index 000000000..c65784a00 --- /dev/null +++ b/definitions/grib2/tables/30/4.213.table @@ -0,0 +1,16 @@ +# Code table 4.213 - Soil type +0 0 Reserved +1 1 Sand +2 2 Loamy sand +3 3 Sandy loam +4 4 Silt loam +5 5 Organic (redefined) +6 6 Sandy clay loam +7 7 Silt clay loam +8 8 Clay loam +9 9 Sandy clay +10 10 Silty clay +11 11 Clay +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.214.table b/definitions/grib2/tables/30/4.214.table new file mode 100644 index 000000000..9df466fe5 --- /dev/null +++ b/definitions/grib2/tables/30/4.214.table @@ -0,0 +1,11 @@ +# Code table 4.214 - Environmental Factor Qualifier +0 0 Worst +1 1 Very poor +2 2 Poor +3 3 Average +4 4 Good +5 5 Excellent +# 6-190 Reserved +191 191 Unknown +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.215.table b/definitions/grib2/tables/30/4.215.table new file mode 100644 index 000000000..034db72be --- /dev/null +++ b/definitions/grib2/tables/30/4.215.table @@ -0,0 +1,9 @@ +# Code table 4.215 - Remotely sensed snow coverage +# 0-49 Reserved +50 50 No-snow/no-cloud +# 51-99 Reserved +100 100 Clouds +# 101-249 Reserved +250 250 Snow +# 251-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.216.table b/definitions/grib2/tables/30/4.216.table new file mode 100644 index 000000000..5d1460cef --- /dev/null +++ b/definitions/grib2/tables/30/4.216.table @@ -0,0 +1,5 @@ +# Code table 4.216 - Elevation of snow-covered terrain +# 0-90 Elevation in increments of 100 m +# 91-253 Reserved +254 254 Clouds +255 255 Missing diff --git a/definitions/grib2/tables/30/4.217.table b/definitions/grib2/tables/30/4.217.table new file mode 100644 index 000000000..a4452182c --- /dev/null +++ b/definitions/grib2/tables/30/4.217.table @@ -0,0 +1,8 @@ +# Code table 4.217 - Cloud mask type +0 0 Clear over water +1 1 Clear over land +2 2 Cloud +3 3 No data +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.218.table b/definitions/grib2/tables/30/4.218.table new file mode 100644 index 000000000..fcd06c348 --- /dev/null +++ b/definitions/grib2/tables/30/4.218.table @@ -0,0 +1,46 @@ +# Code table 4.218 - Pixel scene type +0 0 No scene identified +1 1 Green needle-leafed forest +2 2 Green broad-leafed forest +3 3 Deciduous needle-leafed forest +4 4 Deciduous broad-leafed forest +5 5 Deciduous mixed forest +6 6 Closed shrub-land +7 7 Open shrub-land +8 8 Woody savannah +9 9 Savannah +10 10 Grassland +11 11 Permanent wetland +12 12 Cropland +13 13 Urban +14 14 Vegetation/crops +15 15 Permanent snow/ice +16 16 Barren desert +17 17 Water bodies +18 18 Tundra +19 19 Warm liquid water cloud +20 20 Supercooled liquid water cloud +21 21 Mixed-phase cloud +22 22 Optically thin ice cloud +23 23 Optically thick ice cloud +24 24 Multilayered cloud +# 25-96 Reserved +97 97 Snow/ice on land +98 98 Snow/ice on water +99 99 Sun-glint +100 100 General cloud +101 101 Low cloud/fog/stratus +102 102 Low cloud/stratocumulus +103 103 Low cloud/unknown type +104 104 Medium cloud/nimbostratus +105 105 Medium cloud/altostratus +106 106 Medium cloud/unknown type +107 107 High cloud/cumulus +108 108 High cloud/cirrus +109 109 High cloud/unknown +110 110 Unknown cloud type +111 111 Single layer water cloud +112 112 Single layer ice cloud +# 113-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.219.table b/definitions/grib2/tables/30/4.219.table new file mode 100644 index 000000000..86df0522e --- /dev/null +++ b/definitions/grib2/tables/30/4.219.table @@ -0,0 +1,8 @@ +# Code table 4.219 - Cloud top height quality indicator +0 0 Nominal cloud top height quality +1 1 Fog in segment +2 2 Poor quality height estimation +3 3 Fog in segment and poor quality height estimation +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.220.table b/definitions/grib2/tables/30/4.220.table new file mode 100644 index 000000000..93e841f8b --- /dev/null +++ b/definitions/grib2/tables/30/4.220.table @@ -0,0 +1,6 @@ +# Code table 4.220 - Horizontal dimension processed +0 0 Latitude +1 1 Longitude +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.221.table b/definitions/grib2/tables/30/4.221.table new file mode 100644 index 000000000..8448533d7 --- /dev/null +++ b/definitions/grib2/tables/30/4.221.table @@ -0,0 +1,6 @@ +# Code table 4.221 - Treatment of missing data +0 0 Not included +1 1 Extrapolated +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.222.table b/definitions/grib2/tables/30/4.222.table new file mode 100644 index 000000000..57f113014 --- /dev/null +++ b/definitions/grib2/tables/30/4.222.table @@ -0,0 +1,6 @@ +# Code table 4.222 - Categorical result +0 0 No +1 1 Yes +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.223.table b/definitions/grib2/tables/30/4.223.table new file mode 100644 index 000000000..f0deb076a --- /dev/null +++ b/definitions/grib2/tables/30/4.223.table @@ -0,0 +1,5 @@ +# Code table 4.223 - Fire detection indicator +0 0 No fire detected +1 1 Possible fire detected +2 2 Probable fire detected +3 3 Missing diff --git a/definitions/grib2/tables/30/4.224.table b/definitions/grib2/tables/30/4.224.table new file mode 100644 index 000000000..e87cde4bb --- /dev/null +++ b/definitions/grib2/tables/30/4.224.table @@ -0,0 +1,18 @@ +# Code table 4.224 - Categorical outlook +0 0 No risk area +1 1 Reserved +2 2 General thunderstorm risk area +3 3 Reserved +4 4 Slight risk area +5 5 Reserved +6 6 Moderate risk area +7 7 Reserved +8 8 High risk area +# 9-10 Reserved +11 11 Dry thunderstorm (dry lightning) risk area +# 12-13 Reserved +14 14 Critical risk area +# 15-17 Reserved +18 18 Extremely critical risk area +# 19-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/30/4.225.table b/definitions/grib2/tables/30/4.225.table new file mode 100644 index 000000000..9dc374087 --- /dev/null +++ b/definitions/grib2/tables/30/4.225.table @@ -0,0 +1,2 @@ +# Code table 4.225 - Weather (see FM 94 BUFR/FM 95 CREX Code table 0 20 003 - Present weather) +511 511 Missing value diff --git a/definitions/grib2/tables/30/4.227.table b/definitions/grib2/tables/30/4.227.table new file mode 100644 index 000000000..27c76553d --- /dev/null +++ b/definitions/grib2/tables/30/4.227.table @@ -0,0 +1,9 @@ +# Code table 4.227 - Icing scenario (weather/cloud classification) +0 0 None +1 1 General +2 2 Convective +3 3 Stratiform +4 4 Freezing +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing value diff --git a/definitions/grib2/tables/30/4.228.table b/definitions/grib2/tables/30/4.228.table new file mode 100644 index 000000000..559ae916a --- /dev/null +++ b/definitions/grib2/tables/30/4.228.table @@ -0,0 +1,8 @@ +# Code table 4.228 - Icing severity +0 0 None +1 1 Trace +2 2 Light +3 3 Moderate +4 4 Severe +# 5-254 Reserved +255 255 Missing value diff --git a/definitions/grib2/tables/30/4.230.table b/definitions/grib2/tables/30/4.230.table new file mode 100644 index 000000000..47e011140 --- /dev/null +++ b/definitions/grib2/tables/30/4.230.table @@ -0,0 +1,534 @@ +# Code table 4.230 - Atmospheric chemical constituent type +0 0 Ozone O3 +1 1 Water vapour H2O +2 2 Methane CH4 +3 3 Carbon dioxide CO2 +4 4 Carbon monoxide CO +5 5 Nitrogen dioxide NO2 +6 6 Nitrous oxide N2O +7 7 Formaldehyde HCHO +8 8 Sulphur dioxide SO2 +9 9 Ammonia NH3 +10 10 Ammonium cation NH4+ +11 11 Nitrogen monoxide NO +12 12 Atomic oxygen O +13 13 Nitrate radical NO3* +14 14 Hydroperoxyl radical HOO* +15 15 Dinitrogen pentoxide N2O5 +16 16 Nitrous acid HONO +17 17 Nitric acid HNO3 +18 18 Peroxynitric acid HO2NO2 +19 19 Hydrogen peroxide H2O2 +20 20 Dihydrogen H2 +21 21 Atomic nitrogen N +22 22 Sulphate anion SO42- +23 23 Atomic Radon Rn +24 24 Mercury vapour Hg(0) +25 25 Mercury(II) cation Hg2+ +26 26 Atomic chlorine Cl +27 27 Chlorine monoxide ClO +28 28 Dichlorine peroxide Cl2O2 +29 29 Hypochlorous acid HClO +30 30 Chlorine nitrate ClONO2 +31 31 Chlorine dioxide ClO2 +32 32 Atomic bromine Br +33 33 Bromine monoxide BrO +34 34 Bromine chloride BrCl +35 35 Hydrogen bromide HBr +36 36 Hypobromous acid HBrO +37 37 Bromine nitrate BrONO2 +38 38 Dioxygen O2 +39 39 Nitryl chloride NO2Cl +40 40 Sulphuric acid H2SO4 +41 41 Hydrogen sulphide H2S +42 42 Sulphur trioxide SO3 +43 43 Bromine Br2 +44 44 Hydrofluoric acid HF +45 45 Sulphur hexafluoride SF6 +46 46 Chlorine Cl2 +# 47-9999 Reserved +10000 10000 Hydroxyl radical HO* +10001 10001 Methyl peroxy radical CH3OO* +10002 10002 Methyl hydroperoxide CH3OOH +10004 10004 Methanol CH3OH +10005 10005 Formic acid HCOOH +10006 10006 Hydrogen cyanide HCN +10007 10007 Aceto nitrile CH3CN +10008 10008 Ethane C2H6 +10009 10009 Ethene (= Ethylene) C2H4 +10010 10010 Ethyne (= Acetylene) C2H2 +10011 10011 Ethanol C2H5OH +10012 10012 Acetic acid C2H5OOH +10013 10013 Peroxyacetyl nitrate CH3C(O)OONO2 +10014 10014 Propane C3H8 +10015 10015 Propene C3H6 +10016 10016 Butane (all isomers) C4H10 +10017 10017 Isoprene C5H10 +10018 10018 Alpha pinene C10H16 +10019 10019 Beta pinene C10H16 +10020 10020 Limonene C10H16 +10021 10021 Benzene C6H6 +10022 10022 Toluene C7H8 +10023 10023 Xylene C8H10 +10024 10024 Methanesulphonic acid CH3SO3H +10025 10025 Methylglyoxal (2-oxopropanal) CH3C(O)CHO +10026 10026 Peroxyacetyl radical CH3C(O)OO* +10027 10027 Methacrylic acid (2-methylprop-2-enoic acid) CH2C(CH3)COOH +10028 10028 Methacrolein (2-methylprop-2-enal) CH2C(CH3)CHO +10029 10029 Acetone (propan-2-one) CH3C(O)CH3 +10030 10030 Ethyl dioxidanyl radical CH3CH2OO* +10031 10031 Butadiene (buta-1,3-diene) (CH2CH)2 +10032 10032 Acetaldehyde (ethanal) CH3CHO +10033 10033 Glycolaldehyde (hydroxyethanal) HOCH2CHO +10034 10034 Cresol (methylphenol), all isomers CH3C6H4OH +10035 10035 Peracetic acid (ethaneperoxoic acid) CH3C(O)OOH +10036 10036 2-hydroxyethyl oxidanyl radical HOCH2CH2O* +10037 10037 2-hydroxyethyl dioxidanyl radical HOCH2CH2OO* +10038 10038 Glyoxal (oxaldehyde) OCHCHO +10039 10039 Isopropyl dioxidanyl radical (CH3)2CHOO* +10040 10040 Isopropyl hydroperoxide (2-hydroperoxypropane) (CH3)2CHOOH +10041 10041 Hydroxyacetone (1-hydroxypropan-2-one) CH3C(O)CH2OH +10042 10042 Peroxyacetic acid (ethaneperoxoic acid) CH3C(O)OOH +10043 10043 Methyl vinyl ketone (but-3-en-2-one) CH3C(O)CHCH2 +10044 10044 Phenoxy radical C6H5O* +10045 10045 Methyl radical CH3* +10046 10046 Carbonyl sulphide (carbon oxide sulphide) OCS +10047 10047 Dibromomethane CH2Br2 +10048 10048 Methoxy radical CH3O* +10049 10049 Tribromomethane CHBr3 +10050 10050 Formyl radical (oxomethyl radical) HOC* +10051 10051 Hydroxymethyl dioxidanyl radical HOCH2OO* +10052 10052 Ethyl hydroperoxide CH3CH2OOH +10053 10053 3-hydroxypropyl dioxidanyl radical HOCH2CH2CH2OO* +10054 10054 3-hydroxypropyl hydroperoxide HOCH2CH2CH2OOH +10055 10055 Methyl-peroxy-nitrate (nitroperoxy-methane) CH3OONO2 +10056 10056 2-lambda^1-oxidanyloxy-2-methylbut-3-en-1-ol (4-hydroxy-3-methyl-1-butene-3-ylperoxy radical) HOCH2C(CH3)(OO*)CHCH2 +10057 10057 2-lambda^1-oxidanyloxy-3-methylbut-3-en-1-ol (2-hydroxy-1-isopropenylethylperoxy radical) HOCH2CH(OO*)C(CH3)CH2 +10058 10058 (Z)-4-hydroperoxy-2-methyl-2-butenal CH2(OOH)CHC(CH3)CHO +10059 10059 (Z)-4-hydroperoxy-3-methyl-2-butenal CH2(OOH)C(CH3)CHCHO +# 10060-10499 Reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides, etc.) +10500 10500 Dimethyl sulphide CH3SCH3 (DMS) +10501 10501 DMSO (dimethyl sulfoxide) (CH3)2SO +# 10502-20000 Reserved +20001 20001 Hydrogen chloride HCl +20002 20002 CFC-11 (trichlorofluoromethane) CCl3F +20003 20003 CFC-12 (dichlorodifluoromethane) CCl2F2 +20004 20004 CFC-113 (1,1,2-trichloro-1,2,2-trifluoroethane) Cl2FC-CClF2 +20005 20005 CFC-113a (1,1,1-trichloro-2,2,2-trifluoroethane) Cl3C-CF3 +20006 20006 CFC-114 (1,2-dichloro-1,1,2,2-tetrafluoroethane) ClF2C-CClF2 +20007 20007 CFC-115 (1-chloro-1,1,2,2,2-pentafluoroethane) ClF2C-CF3 +20008 20008 HCFC-22 (chlorodifluoromethane) CHClF2 +20009 20009 HCFC-141b (1,1-dichloro-1-fluoroethane) Cl2FC-CH3 +20010 20010 HCFC-142b (1-chloro-1,1-difluoroethane) ClF2C-CH3 +20011 20011 Halon-1202 (dibromodifluoromethane) CBr2F2 +20012 20012 Halon-1211 (bromochlorodifluoromethane) CBrClF2 +20013 20013 Halon-1301 (bromotrifluoromethane) CBrF3 +20014 20014 Halon-2402 (1,2-dibromo-1,1,2,2-tetrafluoroethane) BrF2C-CBrF2 +20015 20015 HCC-40 (methyl chloride) CH3Cl +20016 20016 HCC-10 (carbon tetrachloride) CCl4 +20017 20017 HCC-140a (1,1,1-trichloroethane) Cl3C-CH3 +20018 20018 HBC-40B1 (methyl bromide) CH3Br +20019 20019 HCH (hexachlorocyclohexane) all isomers C6H6Cl6 +20020 20020 alpha-HCH (alpha-hexachlorocyclohexane) both enantiomers alpha-C6H6Cl6 +20021 20021 PCB-153 (2,2',4,4',5,5'-hexachlorobiphenyl) (C6H2Cl3)2 +20022 20022 HCFC-141a (1,1-dichloro-2-fluoroethane) Cl2HC-CH2F +# 20023-29999 Reserved +30000 30000 Radioactive pollutant (tracer, defined by originating centre) +# 30001-30009 Reserved +30010 30010 Tritium (Hydrogen 3) H-3 +30011 30011 Tritium organic bounded H-3o +30012 30012 Tritium inorganic H-3a +30013 30013 Beryllium 7 Be-7 +30014 30014 Beryllium 10 Be-10 +30015 30015 Carbon 14 C-14 +30016 30016 Carbon 14 CO2 C-14CO2 +30017 30017 Carbon 14 other gases C-14og +30018 30018 Nitrogen 13 N-13 +30019 30019 Nitrogen 16 N-16 +30020 30020 Fluorine 18 F-18 +30021 30021 Sodium 22 Na-22 +30022 30022 Phosphate 32 P-32 +30023 30023 Phosphate 33 P-33 +30024 30024 Sulphur 35 S-35 +30025 30025 Chlorine 36 Cl-36 +30026 30026 Potassium 40 K-40 +30027 30027 Argon 41 Ar-41 +30028 30028 Calcium 41 Ca-41 +30029 30029 Calcium 45 Ca-45 +30030 30030 Titanium 44 Ti-44 +30031 30031 Scandium 46 Sc-46 +30032 30032 Vanadium 48 V-48 +30033 30033 Vanadium 49 V-49 +30034 30034 Chrome 51 Cr-51 +30035 30035 Manganese 52 Mn-52 +30036 30036 Manganese 54 Mn-54 +30037 30037 Iron 55 Fe-55 +30038 30038 Iron 59 Fe-59 +30039 30039 Cobalt 56 Co-56 +30040 30040 Cobalt 57 Co-57 +30041 30041 Cobalt 58 Co-58 +30042 30042 Cobalt 60 Co-60 +30043 30043 Nickel 59 Ni-59 +30044 30044 Nickel 63 Ni-63 +30045 30045 Zinc 65 Zn-65 +30046 30046 Gallium 67 Ga-67 +30047 30047 Gallium 68 Ga-68 +30048 30048 Germanium 68 Ge-68 +30049 30049 Germanium 69 Ge-69 +30050 30050 Arsenic 73 As-73 +30051 30051 Selenium 75 Se-75 +30052 30052 Selenium 79 Se-79 +30053 30053 Rubidium 81 Rb-81 +30054 30054 Rubidium 83 Rb-83 +30055 30055 Rubidium 84 Rb-84 +30056 30056 Rubidium 86 Rb-86 +30057 30057 Rubidium 87 Rb-87 +30058 30058 Rubidium 88 Rb-88 +30059 30059 Krypton 85 Kr-85 +30060 30060 Krypton 85 metastable Kr-85m +30061 30061 Krypton 87 Kr-87 +30062 30062 Krypton 88 Kr-88 +30063 30063 Krypton 89 Kr-89 +30064 30064 Strontium 85 Sr-85 +30065 30065 Strontium 89 Sr-89 +30066 30066 Strontium 89/90 Sr-8990 +30067 30067 Strontium 90 Sr-90 +30068 30068 Strontium 91 Sr-91 +30069 30069 Strontium 92 Sr-92 +30070 30070 Yttrium 87 Y-87 +30071 30071 Yttrium 88 Y-88 +30072 30072 Yttrium 90 Y-90 +30073 30073 Yttrium 91 Y-91 +30074 30074 Yttrium 91 metastable Y-91m +30075 30075 Yttrium 92 Y-92 +30076 30076 Yttrium 93 Y-93 +30077 30077 Zirconium 89 Zr-89 +30078 30078 Zirconium 93 Zr-93 +30079 30079 Zirconium 95 Zr-95 +30080 30080 Zirconium 97 Zr-97 +30081 30081 Niobium 93 metastable Nb-93m +30082 30082 Niobium 94 Nb-94 +30083 30083 Niobium 95 Nb-95 +30084 30084 Niobium 95 metastable Nb-95m +30085 30085 Niobium 97 Nb-97 +30086 30086 Niobium 97 metastable Nb-97m +30087 30087 Molybdenum 93 Mo-93 +30088 30088 Molybdenum 99 Mo-99 +30089 30089 Technetium 95 metastable Tc-95m +30090 30090 Technetium 96 Tc-96 +30091 30091 Technetium 99 Tc-99 +30092 30092 Technetium 99 metastable Tc-99m +30093 30093 Rhodium 99 Rh-99 +30094 30094 Rhodium 101 Rh-101 +30095 30095 Rhodium 102 metastable Rh-102m +30096 30096 Rhodium 103 metastable Rh-103m +30097 30097 Rhodium 105 Rh-105 +30098 30098 Rhodium 106 Rh-106 +30099 30099 Palladium 100 Pd-100 +30100 30100 Palladium 103 Pd-103 +30101 30101 Palladium 107 Pd-107 +30102 30102 Ruthenium 103 Ru-103 +30103 30103 Ruthenium 105 Ru-105 +30104 30104 Ruthenium 106 Ru-106 +30105 30105 Silver 108 metastable Ag-108m +30106 30106 Silver 110 metastable Ag-110m +30107 30107 Cadmium 109 Cd-109 +30108 30108 Cadmium 113 metastable Cd-113m +30109 30109 Cadmium 115 metastable Cd-115m +30110 30110 Indium 114 metastable In-114m +30111 30111 Tin 113 Sn-113 +30112 30112 Tin 119 metastable Sn-119m +30113 30113 Tin 121 metastable Sn-121m +30114 30114 Tin 122 Sn-122 +30115 30115 Tin 123 Sn-123 +30116 30116 Tin 126 Sn-126 +30117 30117 Antimony 124 Sb-124 +30118 30118 Antimony 125 Sb-125 +30119 30119 Antimony 126 Sb-126 +30120 30120 Antimony 127 Sb-127 +30121 30121 Antimony 129 Sb-129 +30122 30122 Tellurium 123 metastable Te-123m +30123 30123 Tellurium 125 metastable Te-125m +30124 30124 Tellurium 127 Te-127 +30125 30125 Tellurium 127 metastable Te-127m +30126 30126 Tellurium 129 Te-129 +30127 30127 Tellurium 129 metastable Te-129m +30128 30128 Tellurium 131 metastable Te-131m +30129 30129 Tellurium 132 Te-132 +30130 30130 Iodine 123 I-123 +30131 30131 Iodine 124 I-124 +30132 30132 Iodine 125 I-125 +30133 30133 Iodine 126 I-126 +30134 30134 Iodine 129 I-129 +30135 30135 Iodine 129 elementary gaseous I-129g +30136 30136 Iodine 129 organic bounded I-129o +30137 30137 Iodine 131 I-131 +30138 30138 Iodine 131 elementary gaseous I-131g +30139 30139 Iodine 131 organic bounded I-131o +30140 30140 Iodine 131 gaseous elementary and organic bounded I-131go +30141 30141 Iodine 131 aerosol I-131a +30142 30142 Iodine 132 I-132 +30143 30143 Iodine 132 elementary gaseous I-132g +30144 30144 Iodine 132 organic bounded I-132o +30145 30145 Iodine 132 gaseous elementary and organic bounded I-132go +30146 30146 Iodine 132 aerosol I-132a +30147 30147 Iodine 133 I-133 +30148 30148 Iodine 133 elementary gaseous I-133g +30149 30149 Iodine 133 organic bounded I-133o +30150 30150 Iodine 133 gaseous elementary and organic bounded I-133go +30151 30151 Iodine 133 aerosol I-133a +30152 30152 Iodine 134 I-134 +30153 30153 Iodine 134 elementary gaseous I-134g +30154 30154 Iodine 134 organic bounded I-134o +30155 30155 Iodine 135 I-135 +30156 30156 Iodine 135 elementary gaseous I-135g +30157 30157 Iodine 135 organic bounded I-135o +30158 30158 Iodine 135 gaseous elementary and organic bounded I-135go +30159 30159 Iodine 135 aerosol I-135a +30160 30160 Xenon 131 metastable Xe-131m +30161 30161 Xenon 133 Xe-133 +30162 30162 Xenon 133 metastable Xe-133m +30163 30163 Xenon 135 Xe-135 +30164 30164 Xenon 135 metastable Xe-135m +30165 30165 Xenon 137 Xe-137 +30166 30166 Xenon 138 Xe-138 +30167 30167 Xenon sum of all Xenon isotopes Xe-sum +30168 30168 Caesium 131 Cs-131 +30169 30169 Caesium 134 Cs-134 +30170 30170 Caesium 135 Cs-135 +30171 30171 Caesium 136 Cs-136 +30172 30172 Caesium 137 Cs-137 +30173 30173 Barium 133 Ba-133 +30174 30174 Barium 137 metastable Ba-137m +30175 30175 Barium 140 Ba-140 +30176 30176 Cerium 139 Ce-139 +30177 30177 Cerium 141 Ce-141 +30178 30178 Cerium 143 Ce-143 +30179 30179 Cerium 144 Ce-144 +30180 30180 Lanthanum 140 La-140 +30181 30181 Lanthanum 141 La-141 +30182 30182 Praseodymium 143 Pr-143 +30183 30183 Praseodymium 144 Pr-144 +30184 30184 Praseodymium 144 metastable Pr-144m +30185 30185 Samarium 145 Sm-145 +30186 30186 Samarium 147 Sm-147 +30187 30187 Samarium 151 Sm-151 +30188 30188 Neodymium 147 Nd-147 +30189 30189 Promethium 146 Pm-146 +30190 30190 Promethium 147 Pm-147 +30191 30191 Promethium 151 Pm-151 +30192 30192 Europium 152 Eu-152 +30193 30193 Europium 154 Eu-154 +30194 30194 Europium 155 Eu-155 +30195 30195 Gadolinium 153 Gd-153 +30196 30196 Terbium 160 Tb-160 +30197 30197 Holmium 166 metastable Ho-166m +30198 30198 Thulium 170 Tm-170 +30199 30199 Ytterbium 169 Yb-169 +30200 30200 Hafnium 175 Hf-175 +30201 30201 Hafnium 181 Hf-181 +30202 30202 Tantalum 179 Ta-179 +30203 30203 Tantalum 182 Ta-182 +30204 30204 Rhenium 184 Re-184 +30205 30205 Iridium 192 Ir-192 +30206 30206 Mercury 203 Hg-203 +30207 30207 Thallium 204 Tl-204 +30208 30208 Thallium 207 Tl-207 +30209 30209 Thallium 208 Tl-208 +30210 30210 Thallium 209 Tl-209 +30211 30211 Bismuth 205 Bi-205 +30212 30212 Bismuth 207 Bi-207 +30213 30213 Bismuth 210 Bi-210 +30214 30214 Bismuth 211 Bi-211 +30215 30215 Bismuth 212 Bi-212 +30216 30216 Bismuth 213 Bi-213 +30217 30217 Bismuth 214 Bi-214 +30218 30218 Polonium 208 Po-208 +30219 30219 Polonium 210 Po-210 +30220 30220 Polonium 212 Po-212 +30221 30221 Polonium 213 Po-213 +30222 30222 Polonium 214 Po-214 +30223 30223 Polonium 215 Po-215 +30224 30224 Polonium 216 Po-216 +30225 30225 Polonium 218 Po-218 +30226 30226 Lead 209 Pb-209 +30227 30227 Lead 210 Pb-210 +30228 30228 Lead 211 Pb-211 +30229 30229 Lead 212 Pb-212 +30230 30230 Lead 214 Pb-214 +30231 30231 Astatine 217 At-217 +30232 30232 Radon 219 Rn-219 +30233 30233 Radon 220 Rn-220 +30234 30234 Radon 222 Rn-222 +30235 30235 Francium 221 Fr-221 +30236 30236 Francium 223 Fr-223 +30237 30237 Radium 223 Ra-223 +30238 30238 Radium 224 Ra-224 +30239 30239 Radium 225 Ra-225 +30240 30240 Radium 226 Ra-226 +30241 30241 Radium 228 Ra-228 +30242 30242 Actinium 225 Ac-225 +30243 30243 Actinium 227 Ac-227 +30244 30244 Actinium 228 Ac-228 +30245 30245 Thorium 227 Th-227 +30246 30246 Thorium 228 Th-228 +30247 30247 Thorium 229 Th-229 +30248 30248 Thorium 230 Th-230 +30249 30249 Thorium 231 Th-231 +30250 30250 Thorium 232 Th-232 +30251 30251 Thorium 234 Th-234 +30252 30252 Protactinium 231 Pa-231 +30253 30253 Protactinium 233 Pa-233 +30254 30254 Protactinium 234 metastable Pa-234m +30255 30255 Uranium 232 U-232 +30256 30256 Uranium 233 U-233 +30257 30257 Uranium 234 U-234 +30258 30258 Uranium 235 U-235 +30259 30259 Uranium 236 U-236 +30260 30260 Uranium 237 U-237 +30261 30261 Uranium 238 U-238 +30262 30262 Plutonium 236 Pu-236 +30263 30263 Plutonium 238 Pu-238 +30264 30264 Plutonium 239 Pu-239 +30265 30265 Plutonium 240 Pu-240 +30266 30266 Plutonium 241 Pu-241 +30267 30267 Plutonium 242 Pu-242 +30268 30268 Plutonium 244 Pu-244 +30269 30269 Neptunium 237 Np-237 +30270 30270 Neptunium 238 Np-238 +30271 30271 Neptunium 239 Np-239 +30272 30272 Americium 241 Am-241 +30273 30273 Americium 242 Am-242 +30274 30274 Americium 242 metastable Am-242m +30275 30275 Americium 243 Am-243 +30276 30276 Curium 242 Cm-242 +30277 30277 Curium 243 Cm-243 +30278 30278 Curium 244 Cm-244 +30279 30279 Curium 245 Cm-245 +30280 30280 Curium 246 Cm-246 +30281 30281 Curium 247 Cm-247 +30282 30282 Curium 248 Cm-248 +30283 30283 Curium 243/244 Cm-243244 +30284 30284 Plutonium 238/Americium 241 Pu-238Am-241 +30285 30285 Plutonium 239/240 Pu-239240 +30286 30286 Berkelium 249 Bk-249 +30287 30287 Californium 249 Cf-249 +30288 30288 Californium 250 Cf-250 +30289 30289 Californium 252 Cf-252 +30290 30290 Sum aerosol particulates SumAer +30291 30291 Sum Iodine SumIod +30292 30292 Sum noble gas SumNG +30293 30293 Activation gas ActGas +30294 30294 Cs-137 Equivalent EquCs137 +30295 30295 Carbon-13 C-13 +30296 30296 Lead Pb +30297 30297 Tellurium 131 Te-131 +30298 30298 Neodymium 137 Nd-137 +# 30299-39999 Reserved +40000 40000 Singlet sigma oxygen (dioxygen (sigma singlet)) O2 +40001 40001 Singlet delta oxygen (dioxygen (delta singlet)) O2 +40002 40002 Singlet excited oxygen atom O(1D) +40003 40003 Triplet ground state oxygen atom O(3P) +# 40004-59999 Reserved +60000 60000 HOx radical (OH+HO2) HOx* +60001 60001 Total inorganic and organic peroxy radicals (HOO* + ROO*) ROO* +60002 60002 Passive Ozone +60003 60003 NOx expressed as nitrogen NOx +60004 60004 All nitrogen oxides (NOy) expressed as nitrogen NOy +60005 60005 Total inorganic chlorine Clx +60006 60006 Total inorganic bromine Brx +60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx +60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx +60009 60009 Lumped alkanes +60010 60010 Lumped alkenes +60011 60011 Lumped aromatic compounds +60012 60012 Lumped terpenes +60013 60013 Non-methane volatile organic compounds expressed as carbon NMVOC +60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon aNMVOC +60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon bNMVOC +60016 60016 Lumped oxygenated hydrocarbons OVOC +60017 60017 NOx expressed as nitrogen dioxide (NO2) NOx +60018 60018 Organic aldehydes RCHO +60019 60019 Organic peroxides ROOH +60020 60020 Organic nitrates RNO3 +60021 60021 Ethers ROR' +60022 60022 Amines NRR'R'' +60023 60023 Ketones RC(O)R' +60024 60024 Dicarbonyls unsaturated RC(O)CH2C(O)R' +60025 60025 Hydroxy dicarbonyls unsaturated RC(O)CHOHC(O)R' +60026 60026 Hydroxy ketones RC(OH)C(O)R' +60027 60027 Oxides Ox +60028 60028 Peroxyacyl nitrates RC(O)OONO2 +60029 60029 Aromatic peroxide radical (Aryl dioxydanyl radicals) ArOO* +60030 60030 Biogenic secondary organic compound +60031 60031 Anthropogenic secondary organic compound +60032 60032 All hydroxy-peroxides products of the reaction of hydroxy-isoprene adducts with O2 ISOPOOH +60033 60033 Anthropogenic volatile organic compounds aVOC +60034 60034 Biomass burning volatile organic compounds bbVOC +# 60035-61999 Reserved +62000 62000 Total aerosol +62001 62001 Dust dry +62002 62002 Water in ambient +62003 62003 Ammonium dry +62004 62004 Nitrate dry +62005 62005 Nitric acid trihydrate +62006 62006 Sulphate dry +62007 62007 Mercury dry +62008 62008 Sea salt dry +62009 62009 Black carbon dry +62010 62010 Particulate organic matter dry +62011 62011 Primary particulate organic matter dry +62012 62012 Secondary particulate organic matter dry +62013 62013 Black carbon hydrophilic dry +62014 62014 Black carbon hydrophobic dry +62015 62015 Particulate organic matter hydrophilic dry +62016 62016 Particulate organic matter hydrophobic dry +62017 62017 Nitrate hydrophilic dry +62018 62018 Nitrate hydrophobic dry +# 62019 Reserved +62020 62020 Smoke - high absorption +62021 62021 Smoke - low absorption +62022 62022 Aerosol - high absorption +62023 62023 Aerosol - low absorption +# 62024 Reserved +62025 62025 Volcanic ash +62026 62026 Particulate matter (PM) +# 62027 Reserved +62028 62028 Total aerosol hydrophilic +62029 62029 Total aerosol hydrophobic +62030 62030 Primary particulate inorganic matter dry +62031 62031 Secondary particulate inorganic matter dry +62032 62032 Biogenic secondary organic aerosol +62033 62033 Anthropogenic secondary organic aerosol +62034 62034 Rain water H2Orain +62035 62035 Cloud water H2Ocloud +62036 62036 Brown carbon dry +# 62037-62099 Reserved +62100 62100 Alnus (alder) pollen +62101 62101 Betula (birch) pollen +62102 62102 Castanea (chestnut) pollen +62103 62103 Carpinus (hornbeam) pollen +62104 62104 Corylus (hazel) pollen +62105 62105 Fagus (beech) pollen +62106 62106 Fraxinus (ash) pollen +62107 62107 Pinus (pine) pollen +62108 62108 Platanus (plane) pollen +62109 62109 Populus (cottonwood, poplar) pollen +62110 62110 Quercus (oak) pollen +62111 62111 Salix (willow) pollen +62112 62112 Taxus (yew) pollen +62113 62113 Tilia (lime, linden) pollen +62114 62114 Ulmus (elm) pollen +62115 62115 Olea (olive) pollen +# 62116-62199 Reserved +62200 62200 Ambrosia (ragweed, burr-ragweed) pollen +62201 62201 Artemisia (sagebrush, wormwood, mugwort) pollen +62202 62202 Brassica (rape, broccoli, Brussels sprouts, cabbage, cauliflower, collards, kale, kohlrabi, mustard, rutabaga) pollen +62203 62203 Plantago (plantain) pollen +62204 62204 Rumex (dock, sorrel) pollen +62205 62205 Urtica (nettle) pollen +# 62206-62299 Reserved +62300 62300 Poaceae (grass family) pollen +# 62301-62999 Reserved +# 63000-65534 For experimental use at local level +65535 65535 Missing diff --git a/definitions/grib2/tables/30/4.233.table b/definitions/grib2/tables/30/4.233.table new file mode 100644 index 000000000..011c7d6af --- /dev/null +++ b/definitions/grib2/tables/30/4.233.table @@ -0,0 +1,534 @@ +# Code table 4.233 - Aerosol type +0 0 Ozone O3 +1 1 Water vapour H2O +2 2 Methane CH4 +3 3 Carbon dioxide CO2 +4 4 Carbon monoxide CO +5 5 Nitrogen dioxide NO2 +6 6 Nitrous oxide N2O +7 7 Formaldehyde HCHO +8 8 Sulphur dioxide SO2 +9 9 Ammonia NH3 +10 10 Ammonium cation NH4+ +11 11 Nitrogen monoxide NO +12 12 Atomic oxygen O +13 13 Nitrate radical NO3* +14 14 Hydroperoxyl radical HOO* +15 15 Dinitrogen pentoxide N2O5 +16 16 Nitrous acid HONO +17 17 Nitric acid HNO3 +18 18 Peroxynitric acid HO2NO2 +19 19 Hydrogen peroxide H2O2 +20 20 Dihydrogen H2 +21 21 Atomic nitrogen N +22 22 Sulphate anion SO42- +23 23 Atomic Radon Rn +24 24 Mercury vapour Hg(0) +25 25 Mercury(II) cation Hg2+ +26 26 Atomic chlorine Cl +27 27 Chlorine monoxide ClO +28 28 Dichlorine peroxide Cl2O2 +29 29 Hypochlorous acid HClO +30 30 Chlorine nitrate ClONO2 +31 31 Chlorine dioxide ClO2 +32 32 Atomic bromine Br +33 33 Bromine monoxide BrO +34 34 Bromine chloride BrCl +35 35 Hydrogen bromide HBr +36 36 Hypobromous acid HBrO +37 37 Bromine nitrate BrONO2 +38 38 Dioxygen O2 +39 39 Nitryl chloride NO2Cl +40 40 Sulphuric acid H2SO4 +41 41 Hydrogen sulphide H2S +42 42 Sulphur trioxide SO3 +43 43 Bromine Br2 +44 44 Hydrofluoric acid HF +45 45 Sulphur hexafluoride SF6 +46 46 Chlorine Cl2 +# 47-9999 Reserved +10000 10000 Hydroxyl radical HO* +10001 10001 Methyl peroxy radical CH3OO* +10002 10002 Methyl hydroperoxide CH3OOH +10004 10004 Methanol CH3OH +10005 10005 Formic acid HCOOH +10006 10006 Hydrogen cyanide HCN +10007 10007 Aceto nitrile CH3CN +10008 10008 Ethane C2H6 +10009 10009 Ethene (= Ethylene) C2H4 +10010 10010 Ethyne (= Acetylene) C2H2 +10011 10011 Ethanol C2H5OH +10012 10012 Acetic acid C2H5OOH +10013 10013 Peroxyacetyl nitrate CH3C(O)OONO2 +10014 10014 Propane C3H8 +10015 10015 Propene C3H6 +10016 10016 Butane (all isomers) C4H10 +10017 10017 Isoprene C5H10 +10018 10018 Alpha pinene C10H16 +10019 10019 Beta pinene C10H16 +10020 10020 Limonene C10H16 +10021 10021 Benzene C6H6 +10022 10022 Toluene C7H8 +10023 10023 Xylene C8H10 +10024 10024 Methanesulphonic acid CH3SO3H +10025 10025 Methylglyoxal (2-oxopropanal) CH3C(O)CHO +10026 10026 Peroxyacetyl radical CH3C(O)OO* +10027 10027 Methacrylic acid (2-methylprop-2-enoic acid) CH2C(CH3)COOH +10028 10028 Methacrolein (2-methylprop-2-enal) CH2C(CH3)CHO +10029 10029 Acetone (propan-2-one) CH3C(O)CH3 +10030 10030 Ethyl dioxidanyl radical CH3CH2OO* +10031 10031 Butadiene (buta-1,3-diene) (CH2CH)2 +10032 10032 Acetaldehyde (ethanal) CH3CHO +10033 10033 Glycolaldehyde (hydroxyethanal) HOCH2CHO +10034 10034 Cresol (methylphenol), all isomers CH3C6H4OH +10035 10035 Peracetic acid (ethaneperoxoic acid) CH3C(O)OOH +10036 10036 2-hydroxyethyl oxidanyl radical HOCH2CH2O* +10037 10037 2-hydroxyethyl dioxidanyl radical HOCH2CH2OO* +10038 10038 Glyoxal (oxaldehyde) OCHCHO +10039 10039 Isopropyl dioxidanyl radical (CH3)2CHOO* +10040 10040 Isopropyl hydroperoxide (2-hydroperoxypropane) (CH3)2CHOOH +10041 10041 Hydroxyacetone (1-hydroxypropan-2-one) CH3C(O)CH2OH +10042 10042 Peroxyacetic acid (ethaneperoxoic acid) CH3C(O)OOH +10043 10043 Methyl vinyl ketone (but-3-en-2-one) CH3C(O)CHCH2 +10044 10044 Phenoxy radical C6H5O* +10045 10045 Methyl radical CH3* +10046 10046 Carbonyl sulphide (carbon oxide sulphide) OCS +10047 10047 Dibromomethane CH2Br2 +10048 10048 Methoxy radical CH3O* +10049 10049 Tribromomethane CHBr3 +10050 10050 Formyl radical (oxomethyl radical) HOC* +10051 10051 Hydroxymethyl dioxidanyl radical HOCH2OO* +10052 10052 Ethyl hydroperoxide CH3CH2OOH +10053 10053 3-hydroxypropyl dioxidanyl radical HOCH2CH2CH2OO* +10054 10054 3-hydroxypropyl hydroperoxide HOCH2CH2CH2OOH +10055 10055 Methyl-peroxy-nitrate (nitroperoxy-methane) CH3OONO2 +10056 10056 2-lambda^1-oxidanyloxy-2-methylbut-3-en-1-ol (4-hydroxy-3-methyl-1-butene-3-ylperoxy radical) HOCH2C(CH3)(OO*)CHCH2 +10057 10057 2-lambda^1-oxidanyloxy-3-methylbut-3-en-1-ol (2-hydroxy-1-isopropenylethylperoxy radical) HOCH2CH(OO*)C(CH3)CH2 +10058 10058 (Z)-4-hydroperoxy-2-methyl-2-butenal CH2(OOH)CHC(CH3)CHO +10059 10059 (Z)-4-hydroperoxy-3-methyl-2-butenal CH2(OOH)C(CH3)CHCHO +# 10060-10499 Reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides, etc.) +10500 10500 Dimethyl sulphide CH3SCH3 (DMS) +10501 10501 DMSO (dimethyl sulfoxide) (CH3)2SO +# 10502-20000 Reserved +20001 20001 Hydrogen chloride HCl +20002 20002 CFC-11 (trichlorofluoromethane) CCl3F +20003 20003 CFC-12 (dichlorodifluoromethane) CCl2F2 +20004 20004 CFC-113 (1,1,2-trichloro-1,2,2-trifluoroethane) Cl2FC-CClF2 +20005 20005 CFC-113a (1,1,1-trichloro-2,2,2-trifluoroethane) Cl3C-CF3 +20006 20006 CFC-114 (1,2-dichloro-1,1,2,2-tetrafluoroethane) ClF2C-CClF2 +20007 20007 CFC-115 (1-chloro-1,1,2,2,2-pentafluoroethane) ClF2C-CF3 +20008 20008 HCFC-22 (chlorodifluoromethane) CHClF2 +20009 20009 HCFC-141b (1,1-dichloro-1-fluoroethane) Cl2FC-CH3 +20010 20010 HCFC-142b (1-chloro-1,1-difluoroethane) ClF2C-CH3 +20011 20011 Halon-1202 (dibromodifluoromethane) CBr2F2 +20012 20012 Halon-1211 (bromochlorodifluoromethane) CBrClF2 +20013 20013 Halon-1301 (bromotrifluoromethane) CBrF3 +20014 20014 Halon-2402 (1,2-dibromo-1,1,2,2-tetrafluoroethane) BrF2C-CBrF2 +20015 20015 HCC-40 (methyl chloride) CH3Cl +20016 20016 HCC-10 (carbon tetrachloride) CCl4 +20017 20017 HCC-140a (1,1,1-trichloroethane) Cl3C-CH3 +20018 20018 HBC-40B1 (methyl bromide) CH3Br +20019 20019 HCH (hexachlorocyclohexane) all isomers C6H6Cl6 +20020 20020 alpha-HCH (alpha-hexachlorocyclohexane) both enantiomers alpha-C6H6Cl6 +20021 20021 PCB-153 (2,2',4,4',5,5'-hexachlorobiphenyl) (C6H2Cl3)2 +20022 20022 HCFC-141a (1,1-dichloro-2-fluoroethane) Cl2HC-CH2F +# 20023-29999 Reserved +30000 30000 Radioactive pollutant (tracer, defined by originating centre) +# 30001-30009 Reserved +30010 30010 Tritium (Hydrogen 3) H-3 +30011 30011 Tritium organic bounded H-3o +30012 30012 Tritium inorganic H-3a +30013 30013 Beryllium 7 Be-7 +30014 30014 Beryllium 10 Be-10 +30015 30015 Carbon 14 C-14 +30016 30016 Carbon 14 CO2 C-14CO2 +30017 30017 Carbon 14 other gases C-14og +30018 30018 Nitrogen 13 N-13 +30019 30019 Nitrogen 16 N-16 +30020 30020 Fluorine 18 F-18 +30021 30021 Sodium 22 Na-22 +30022 30022 Phosphate 32 P-32 +30023 30023 Phosphate 33 P-33 +30024 30024 Sulphur 35 S-35 +30025 30025 Chlorine 36 Cl-36 +30026 30026 Potassium 40 K-40 +30027 30027 Argon 41 Ar-41 +30028 30028 Calcium 41 Ca-41 +30029 30029 Calcium 45 Ca-45 +30030 30030 Titanium 44 Ti-44 +30031 30031 Scandium 46 Sc-46 +30032 30032 Vanadium 48 V-48 +30033 30033 Vanadium 49 V-49 +30034 30034 Chrome 51 Cr-51 +30035 30035 Manganese 52 Mn-52 +30036 30036 Manganese 54 Mn-54 +30037 30037 Iron 55 Fe-55 +30038 30038 Iron 59 Fe-59 +30039 30039 Cobalt 56 Co-56 +30040 30040 Cobalt 57 Co-57 +30041 30041 Cobalt 58 Co-58 +30042 30042 Cobalt 60 Co-60 +30043 30043 Nickel 59 Ni-59 +30044 30044 Nickel 63 Ni-63 +30045 30045 Zinc 65 Zn-65 +30046 30046 Gallium 67 Ga-67 +30047 30047 Gallium 68 Ga-68 +30048 30048 Germanium 68 Ge-68 +30049 30049 Germanium 69 Ge-69 +30050 30050 Arsenic 73 As-73 +30051 30051 Selenium 75 Se-75 +30052 30052 Selenium 79 Se-79 +30053 30053 Rubidium 81 Rb-81 +30054 30054 Rubidium 83 Rb-83 +30055 30055 Rubidium 84 Rb-84 +30056 30056 Rubidium 86 Rb-86 +30057 30057 Rubidium 87 Rb-87 +30058 30058 Rubidium 88 Rb-88 +30059 30059 Krypton 85 Kr-85 +30060 30060 Krypton 85 metastable Kr-85m +30061 30061 Krypton 87 Kr-87 +30062 30062 Krypton 88 Kr-88 +30063 30063 Krypton 89 Kr-89 +30064 30064 Strontium 85 Sr-85 +30065 30065 Strontium 89 Sr-89 +30066 30066 Strontium 89/90 Sr-8990 +30067 30067 Strontium 90 Sr-90 +30068 30068 Strontium 91 Sr-91 +30069 30069 Strontium 92 Sr-92 +30070 30070 Yttrium 87 Y-87 +30071 30071 Yttrium 88 Y-88 +30072 30072 Yttrium 90 Y-90 +30073 30073 Yttrium 91 Y-91 +30074 30074 Yttrium 91 metastable Y-91m +30075 30075 Yttrium 92 Y-92 +30076 30076 Yttrium 93 Y-93 +30077 30077 Zirconium 89 Zr-89 +30078 30078 Zirconium 93 Zr-93 +30079 30079 Zirconium 95 Zr-95 +30080 30080 Zirconium 97 Zr-97 +30081 30081 Niobium 93 metastable Nb-93m +30082 30082 Niobium 94 Nb-94 +30083 30083 Niobium 95 Nb-95 +30084 30084 Niobium 95 metastable Nb-95m +30085 30085 Niobium 97 Nb-97 +30086 30086 Niobium 97 metastable Nb-97m +30087 30087 Molybdenum 93 Mo-93 +30088 30088 Molybdenum 99 Mo-99 +30089 30089 Technetium 95 metastable Tc-95m +30090 30090 Technetium 96 Tc-96 +30091 30091 Technetium 99 Tc-99 +30092 30092 Technetium 99 metastable Tc-99m +30093 30093 Rhodium 99 Rh-99 +30094 30094 Rhodium 101 Rh-101 +30095 30095 Rhodium 102 metastable Rh-102m +30096 30096 Rhodium 103 metastable Rh-103m +30097 30097 Rhodium 105 Rh-105 +30098 30098 Rhodium 106 Rh-106 +30099 30099 Palladium 100 Pd-100 +30100 30100 Palladium 103 Pd-103 +30101 30101 Palladium 107 Pd-107 +30102 30102 Ruthenium 103 Ru-103 +30103 30103 Ruthenium 105 Ru-105 +30104 30104 Ruthenium 106 Ru-106 +30105 30105 Silver 108 metastable Ag-108m +30106 30106 Silver 110 metastable Ag-110m +30107 30107 Cadmium 109 Cd-109 +30108 30108 Cadmium 113 metastable Cd-113m +30109 30109 Cadmium 115 metastable Cd-115m +30110 30110 Indium 114 metastable In-114m +30111 30111 Tin 113 Sn-113 +30112 30112 Tin 119 metastable Sn-119m +30113 30113 Tin 121 metastable Sn-121m +30114 30114 Tin 122 Sn-122 +30115 30115 Tin 123 Sn-123 +30116 30116 Tin 126 Sn-126 +30117 30117 Antimony 124 Sb-124 +30118 30118 Antimony 125 Sb-125 +30119 30119 Antimony 126 Sb-126 +30120 30120 Antimony 127 Sb-127 +30121 30121 Antimony 129 Sb-129 +30122 30122 Tellurium 123 metastable Te-123m +30123 30123 Tellurium 125 metastable Te-125m +30124 30124 Tellurium 127 Te-127 +30125 30125 Tellurium 127 metastable Te-127m +30126 30126 Tellurium 129 Te-129 +30127 30127 Tellurium 129 metastable Te-129m +30128 30128 Tellurium 131 metastable Te-131m +30129 30129 Tellurium 132 Te-132 +30130 30130 Iodine 123 I-123 +30131 30131 Iodine 124 I-124 +30132 30132 Iodine 125 I-125 +30133 30133 Iodine 126 I-126 +30134 30134 Iodine 129 I-129 +30135 30135 Iodine 129 elementary gaseous I-129g +30136 30136 Iodine 129 organic bounded I-129o +30137 30137 Iodine 131 I-131 +30138 30138 Iodine 131 elementary gaseous I-131g +30139 30139 Iodine 131 organic bounded I-131o +30140 30140 Iodine 131 gaseous elementary and organic bounded I-131go +30141 30141 Iodine 131 aerosol I-131a +30142 30142 Iodine 132 I-132 +30143 30143 Iodine 132 elementary gaseous I-132g +30144 30144 Iodine 132 organic bounded I-132o +30145 30145 Iodine 132 gaseous elementary and organic bounded I-132go +30146 30146 Iodine 132 aerosol I-132a +30147 30147 Iodine 133 I-133 +30148 30148 Iodine 133 elementary gaseous I-133g +30149 30149 Iodine 133 organic bounded I-133o +30150 30150 Iodine 133 gaseous elementary and organic bounded I-133go +30151 30151 Iodine 133 aerosol I-133a +30152 30152 Iodine 134 I-134 +30153 30153 Iodine 134 elementary gaseous I-134g +30154 30154 Iodine 134 organic bounded I-134o +30155 30155 Iodine 135 I-135 +30156 30156 Iodine 135 elementary gaseous I-135g +30157 30157 Iodine 135 organic bounded I-135o +30158 30158 Iodine 135 gaseous elementary and organic bounded I-135go +30159 30159 Iodine 135 aerosol I-135a +30160 30160 Xenon 131 metastable Xe-131m +30161 30161 Xenon 133 Xe-133 +30162 30162 Xenon 133 metastable Xe-133m +30163 30163 Xenon 135 Xe-135 +30164 30164 Xenon 135 metastable Xe-135m +30165 30165 Xenon 137 Xe-137 +30166 30166 Xenon 138 Xe-138 +30167 30167 Xenon sum of all Xenon isotopes Xe-sum +30168 30168 Caesium 131 Cs-131 +30169 30169 Caesium 134 Cs-134 +30170 30170 Caesium 135 Cs-135 +30171 30171 Caesium 136 Cs-136 +30172 30172 Caesium 137 Cs-137 +30173 30173 Barium 133 Ba-133 +30174 30174 Barium 137 metastable Ba-137m +30175 30175 Barium 140 Ba-140 +30176 30176 Cerium 139 Ce-139 +30177 30177 Cerium 141 Ce-141 +30178 30178 Cerium 143 Ce-143 +30179 30179 Cerium 144 Ce-144 +30180 30180 Lanthanum 140 La-140 +30181 30181 Lanthanum 141 La-141 +30182 30182 Praseodymium 143 Pr-143 +30183 30183 Praseodymium 144 Pr-144 +30184 30184 Praseodymium 144 metastable Pr-144m +30185 30185 Samarium 145 Sm-145 +30186 30186 Samarium 147 Sm-147 +30187 30187 Samarium 151 Sm-151 +30188 30188 Neodymium 147 Nd-147 +30189 30189 Promethium 146 Pm-146 +30190 30190 Promethium 147 Pm-147 +30191 30191 Promethium 151 Pm-151 +30192 30192 Europium 152 Eu-152 +30193 30193 Europium 154 Eu-154 +30194 30194 Europium 155 Eu-155 +30195 30195 Gadolinium 153 Gd-153 +30196 30196 Terbium 160 Tb-160 +30197 30197 Holmium 166 metastable Ho-166m +30198 30198 Thulium 170 Tm-170 +30199 30199 Ytterbium 169 Yb-169 +30200 30200 Hafnium 175 Hf-175 +30201 30201 Hafnium 181 Hf-181 +30202 30202 Tantalum 179 Ta-179 +30203 30203 Tantalum 182 Ta-182 +30204 30204 Rhenium 184 Re-184 +30205 30205 Iridium 192 Ir-192 +30206 30206 Mercury 203 Hg-203 +30207 30207 Thallium 204 Tl-204 +30208 30208 Thallium 207 Tl-207 +30209 30209 Thallium 208 Tl-208 +30210 30210 Thallium 209 Tl-209 +30211 30211 Bismuth 205 Bi-205 +30212 30212 Bismuth 207 Bi-207 +30213 30213 Bismuth 210 Bi-210 +30214 30214 Bismuth 211 Bi-211 +30215 30215 Bismuth 212 Bi-212 +30216 30216 Bismuth 213 Bi-213 +30217 30217 Bismuth 214 Bi-214 +30218 30218 Polonium 208 Po-208 +30219 30219 Polonium 210 Po-210 +30220 30220 Polonium 212 Po-212 +30221 30221 Polonium 213 Po-213 +30222 30222 Polonium 214 Po-214 +30223 30223 Polonium 215 Po-215 +30224 30224 Polonium 216 Po-216 +30225 30225 Polonium 218 Po-218 +30226 30226 Lead 209 Pb-209 +30227 30227 Lead 210 Pb-210 +30228 30228 Lead 211 Pb-211 +30229 30229 Lead 212 Pb-212 +30230 30230 Lead 214 Pb-214 +30231 30231 Astatine 217 At-217 +30232 30232 Radon 219 Rn-219 +30233 30233 Radon 220 Rn-220 +30234 30234 Radon 222 Rn-222 +30235 30235 Francium 221 Fr-221 +30236 30236 Francium 223 Fr-223 +30237 30237 Radium 223 Ra-223 +30238 30238 Radium 224 Ra-224 +30239 30239 Radium 225 Ra-225 +30240 30240 Radium 226 Ra-226 +30241 30241 Radium 228 Ra-228 +30242 30242 Actinium 225 Ac-225 +30243 30243 Actinium 227 Ac-227 +30244 30244 Actinium 228 Ac-228 +30245 30245 Thorium 227 Th-227 +30246 30246 Thorium 228 Th-228 +30247 30247 Thorium 229 Th-229 +30248 30248 Thorium 230 Th-230 +30249 30249 Thorium 231 Th-231 +30250 30250 Thorium 232 Th-232 +30251 30251 Thorium 234 Th-234 +30252 30252 Protactinium 231 Pa-231 +30253 30253 Protactinium 233 Pa-233 +30254 30254 Protactinium 234 metastable Pa-234m +30255 30255 Uranium 232 U-232 +30256 30256 Uranium 233 U-233 +30257 30257 Uranium 234 U-234 +30258 30258 Uranium 235 U-235 +30259 30259 Uranium 236 U-236 +30260 30260 Uranium 237 U-237 +30261 30261 Uranium 238 U-238 +30262 30262 Plutonium 236 Pu-236 +30263 30263 Plutonium 238 Pu-238 +30264 30264 Plutonium 239 Pu-239 +30265 30265 Plutonium 240 Pu-240 +30266 30266 Plutonium 241 Pu-241 +30267 30267 Plutonium 242 Pu-242 +30268 30268 Plutonium 244 Pu-244 +30269 30269 Neptunium 237 Np-237 +30270 30270 Neptunium 238 Np-238 +30271 30271 Neptunium 239 Np-239 +30272 30272 Americium 241 Am-241 +30273 30273 Americium 242 Am-242 +30274 30274 Americium 242 metastable Am-242m +30275 30275 Americium 243 Am-243 +30276 30276 Curium 242 Cm-242 +30277 30277 Curium 243 Cm-243 +30278 30278 Curium 244 Cm-244 +30279 30279 Curium 245 Cm-245 +30280 30280 Curium 246 Cm-246 +30281 30281 Curium 247 Cm-247 +30282 30282 Curium 248 Cm-248 +30283 30283 Curium 243/244 Cm-243244 +30284 30284 Plutonium 238/Americium 241 Pu-238Am-241 +30285 30285 Plutonium 239/240 Pu-239240 +30286 30286 Berkelium 249 Bk-249 +30287 30287 Californium 249 Cf-249 +30288 30288 Californium 250 Cf-250 +30289 30289 Californium 252 Cf-252 +30290 30290 Sum aerosol particulates SumAer +30291 30291 Sum Iodine SumIod +30292 30292 Sum noble gas SumNG +30293 30293 Activation gas ActGas +30294 30294 Cs-137 Equivalent EquCs137 +30295 30295 Carbon-13 C-13 +30296 30296 Lead Pb +30297 30297 Tellurium 131 Te-131 +30298 30298 Neodymium 137 Nd-137 +# 30299-39999 Reserved +40000 40000 Singlet sigma oxygen (dioxygen (sigma singlet)) O2 +40001 40001 Singlet delta oxygen (dioxygen (delta singlet)) O2 +40002 40002 Singlet excited oxygen atom O(1D) +40003 40003 Triplet ground state oxygen atom O(3P) +# 40004-59999 Reserved +60000 60000 HOx radical (OH+HO2) HOx* +60001 60001 Total inorganic and organic peroxy radicals (HOO* + ROO*) ROO* +60002 60002 Passive Ozone +60003 60003 NOx expressed as nitrogen NOx +60004 60004 All nitrogen oxides (NOy) expressed as nitrogen NOy +60005 60005 Total inorganic chlorine Clx +60006 60006 Total inorganic bromine Brx +60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx +60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx +60009 60009 Lumped alkanes +60010 60010 Lumped alkenes +60011 60011 Lumped aromatic compounds +60012 60012 Lumped terpenes +60013 60013 Non-methane volatile organic compounds expressed as carbon NMVOC +60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon aNMVOC +60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon bNMVOC +60016 60016 Lumped oxygenated hydrocarbons OVOC +60017 60017 NOx expressed as nitrogen dioxide (NO2) NOx +60018 60018 Organic aldehydes RCHO +60019 60019 Organic peroxides ROOH +60020 60020 Organic nitrates RNO3 +60021 60021 Ethers ROR' +60022 60022 Amines NRR'R'' +60023 60023 Ketones RC(O)R' +60024 60024 Dicarbonyls unsaturated RC(O)CH2C(O)R' +60025 60025 Hydroxy dicarbonyls unsaturated RC(O)CHOHC(O)R' +60026 60026 Hydroxy ketones RC(OH)C(O)R' +60027 60027 Oxides Ox +60028 60028 Peroxyacyl nitrates RC(O)OONO2 +60029 60029 Aromatic peroxide radical (Aryl dioxydanyl radicals) ArOO* +60030 60030 Biogenic secondary organic compound +60031 60031 Anthropogenic secondary organic compound +60032 60032 All hydroxy-peroxides products of the reaction of hydroxy-isoprene adducts with O2 ISOPOOH +60033 60033 Anthropogenic volatile organic compounds aVOC +60034 60034 Biomass burning volatile organic compounds bbVOC +# 60035-61999 Reserved +62000 62000 Total aerosol +62001 62001 Dust dry +62002 62002 Water in ambient +62003 62003 Ammonium dry +62004 62004 Nitrate dry +62005 62005 Nitric acid trihydrate +62006 62006 Sulphate dry +62007 62007 Mercury dry +62008 62008 Sea salt dry +62009 62009 Black carbon dry +62010 62010 Particulate organic matter dry +62011 62011 Primary particulate organic matter dry +62012 62012 Secondary particulate organic matter dry +62013 62013 Black carbon hydrophilic dry +62014 62014 Black carbon hydrophobic dry +62015 62015 Particulate organic matter hydrophilic dry +62016 62016 Particulate organic matter hydrophobic dry +62017 62017 Nitrate hydrophilic dry +62018 62018 Nitrate hydrophobic dry +# 62019 Reserved +62020 62020 Smoke - high absorption +62021 62021 Smoke - low absorption +62022 62022 Aerosol - high absorption +62023 62023 Aerosol - low absorption +# 62024 Reserved +62025 62025 Volcanic ash +62026 62026 Particulate matter (PM) +# 62027 Reserved +62028 62028 Total aerosol hydrophilic +62029 62029 Total aerosol hydrophobic +62030 62030 Primary particulate inorganic matter dry +62031 62031 Secondary particulate inorganic matter dry +62032 62032 Biogenic secondary organic aerosol +62033 62033 Anthropogenic secondary organic aerosol +62034 62034 Rain water H2Orain +62035 62035 Cloud water H2Ocloud +62036 62036 Brown carbon dry +# 62037-62099 Reserved +62100 62100 Alnus (alder) pollen +62101 62101 Betula (birch) pollen +62102 62102 Castanea (chestnut) pollen +62103 62103 Carpinus (hornbeam) pollen +62104 62104 Corylus (hazel) pollen +62105 62105 Fagus (beech) pollen +62106 62106 Fraxinus (ash) pollen +62107 62107 Pinus (pine) pollen +62108 62108 Platanus (plane) pollen +62109 62109 Populus (cottonwood, poplar) pollen +62110 62110 Quercus (oak) pollen +62111 62111 Salix (willow) pollen +62112 62112 Taxus (yew) pollen +62113 62113 Tilia (lime, linden) pollen +62114 62114 Ulmus (elm) pollen +62115 62115 Olea (olive) pollen +# 62116-62199 Reserved +62200 62200 Ambrosia (ragweed, burr-ragweed) pollen +62201 62201 Artemisia (sagebrush, wormwood, mugwort) pollen +62202 62202 Brassica (rape, broccoli, Brussels sprouts, cabbage, cauliflower, collards, kale, kohlrabi, mustard, rutabaga) pollen +62203 62203 Plantago (plantain) pollen +62204 62204 Rumex (dock, sorrel) pollen +62205 62205 Urtica (nettle) pollen +# 62206-62299 Reserved +62300 62300 Poaceae (grass family) pollen +# 62301-62999 Reserved +# 63000-65534 For experimental use at local level +65535 65535 Missing diff --git a/definitions/grib2/tables/30/4.234.table b/definitions/grib2/tables/30/4.234.table new file mode 100644 index 000000000..816541ce9 --- /dev/null +++ b/definitions/grib2/tables/30/4.234.table @@ -0,0 +1,21 @@ +# Code table 4.234 - Canopy cover fraction (to be used as partitioned parameter in product definition template 4.53 or 4.54) +1 1 Crops, mixed farming +2 2 Short grass +3 3 Evergreen needleleaf trees +4 4 Deciduous needleleaf trees +5 5 Deciduous broadleaf trees +6 6 Evergreen broadleaf trees +7 7 Tall grass +8 8 Desert +9 9 Tundra +10 10 Irrigated crops +11 11 Semidesert +12 12 Ice caps and glaciers +13 13 Bogs and marshes +14 14 Inland water +15 15 Ocean +16 16 Evergreen shrubs +17 17 Deciduous shrubs +18 18 Mixed forest +19 19 Interrupted forest +20 20 Water and land mixtures diff --git a/definitions/grib2/tables/30/4.236.table b/definitions/grib2/tables/30/4.236.table new file mode 100644 index 000000000..fbe093ce9 --- /dev/null +++ b/definitions/grib2/tables/30/4.236.table @@ -0,0 +1,8 @@ +# Code table 4.236 - Soil texture fraction (to be used as partitioned parameter in product definition template 4.53 or 4.54) +1 1 Coarse +2 2 Medium +3 3 Medium-fine +4 4 Fine +5 5 Very-fine +6 6 Organic +7 7 Tropical-organic diff --git a/definitions/grib2/tables/30/4.238.table b/definitions/grib2/tables/30/4.238.table new file mode 100644 index 000000000..7e1c8e4d0 --- /dev/null +++ b/definitions/grib2/tables/30/4.238.table @@ -0,0 +1,32 @@ +# Code table 4.238 - Source or sink +0 0 Other +1 1 Aviation +2 2 Lightning +3 3 Biogenic sources +4 4 Anthropogenic sources +5 5 Wild fires +6 6 Natural sources +7 7 Volcanoes +8 8 Bio-fuel +9 9 Fossil-fuel +10 10 Wetlands +11 11 Oceans +12 12 Elevated anthropogenic sources +13 13 Surface anthropogenic sources +14 14 Agriculture livestock +15 15 Agriculture soils +16 16 Agriculture waste burning +17 17 Agriculture (all) +18 18 Residential, commercial and other combustion +19 19 Power generation +20 20 Super power stations +21 21 Fugitives +22 22 Industrial process +23 23 Solvents +24 24 Ships +25 25 Wastes (solid and water) +26 26 Road transportation +27 27 Off-road transportation +# 28-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.239.table b/definitions/grib2/tables/30/4.239.table new file mode 100644 index 000000000..c038926a5 --- /dev/null +++ b/definitions/grib2/tables/30/4.239.table @@ -0,0 +1,17 @@ +# Code table 4.239 - Wetland Type +0 0 Reserved +1 1 Bog +2 2 Drained +3 3 Fen +4 4 Floodplain +5 5 Mangrove +6 6 Marsh +7 7 Rice +8 8 Riverine +9 9 Salt marsh +10 10 Swamp +11 11 Upland +12 12 Wet tundra +# 13-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.240.table b/definitions/grib2/tables/30/4.240.table new file mode 100644 index 000000000..e34ad678c --- /dev/null +++ b/definitions/grib2/tables/30/4.240.table @@ -0,0 +1,13 @@ +# Code table 4.240 - Type of distribution function +0 0 No specific distribution function given +1 1 Delta functions with spatially variable concentration and fixed diameters Dl (p1) in metre +2 2 Delta functions with spatially variable concentration and fixed masses Ml (p1) in kg +3 3 Gaussian (normal) distribution with spatially variable concentration and fixed mean diameter Dl(p1) and variance(p2) +4 4 Gaussian (normal) distribution with spatially variable concentration, mean diameter and variance +5 5 Log-normal distribution with spatially variable number density, mean diameter and variance +6 6 Log-normal distribution with spatially variable number density, mean diameter and fixed variance(p1) +7 7 Log-normal distribution with spatially variable number density and mass density and fixed variance(p1) and fixed particle density(p2) +8 8 No distribution function. The encoded variable is derived from variables characterized by type of distribution function of type No. 7 (see above) with fixed variance(p1) and fixed particle density(p2) +# 9-49151 Reserved +# 49152-65534 Reserved for local use +65535 65535 Missing value diff --git a/definitions/grib2/tables/30/4.241.table b/definitions/grib2/tables/30/4.241.table new file mode 100644 index 000000000..a037b4ba5 --- /dev/null +++ b/definitions/grib2/tables/30/4.241.table @@ -0,0 +1,9 @@ +# Code table 4.241 - Coverage attributes +0 0 Undefined +1 1 Unmodified +2 2 Snow covered +3 3 Flooded +4 4 Ice covered +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing value diff --git a/definitions/grib2/tables/30/4.242.table b/definitions/grib2/tables/30/4.242.table new file mode 100644 index 000000000..083f88c29 --- /dev/null +++ b/definitions/grib2/tables/30/4.242.table @@ -0,0 +1,7 @@ +# Code table 4.242 - Tile classification +0 0 Reserved +1 1 Land use classes according to ESA-GlobCover GCV2009 +2 2 Land use classes according to European Commission-Global Land Cover Project GLC2000 +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing value diff --git a/definitions/grib2/tables/30/4.243.table b/definitions/grib2/tables/30/4.243.table new file mode 100644 index 000000000..b39053311 --- /dev/null +++ b/definitions/grib2/tables/30/4.243.table @@ -0,0 +1,43 @@ +# Code table 4.243 - Tile class +0 0 Reserved +1 1 Evergreen broadleaved forest +2 2 Deciduous broadleaved closed forest +3 3 Deciduous broadleaved open forest +4 4 Evergreen needle-leaf forest +5 5 Deciduous needle-leaf forest +6 6 Mixed leaf trees +7 7 Freshwater flooded trees +8 8 Saline water flooded trees +9 9 Mosaic tree/natural vegetation +10 10 Burnt tree cover +11 11 Evergreen shrubs closed-open +12 12 Deciduous shrubs closed-open +13 13 Herbaceous vegetation closed-open +14 14 Sparse herbaceous or grass +15 15 Flooded shrubs or herbaceous +16 16 Cultivated and managed areas +17 17 Mosaic crop/tree/natural vegetation +18 18 Mosaic crop/shrub/grass +19 19 Bare areas +20 20 Water +21 21 Snow and ice +22 22 Artificial surface +23 23 Ocean +24 24 Irrigated croplands +25 25 Rainfed croplands +26 26 Mosaic cropland (50-70%) - vegetation (20-50%) +27 27 Mosaic vegetation (50-70%) - cropland (20-50%) +28 28 Closed broadleaved evergreen forest +29 29 Closed needle-leaved evergreen forest +30 30 Open needle-leaved deciduous forest +31 31 Mixed broadleaved and needle-leaved forest +32 32 Mosaic shrubland (50-70%) - grassland (20-50%) +33 33 Mosaic grassland (50-70%) - shrubland (20-50%) +34 34 Closed to open shrubland +35 35 Sparse vegetation +36 36 Closed to open forest regularly flooded +37 37 Closed forest or shrubland permanently flooded +38 38 Closed to open grassland regularly flooded +39 39 Undefined +# 40-32767 Reserved +# 32768- Reserved for local use diff --git a/definitions/grib2/tables/30/4.244.table b/definitions/grib2/tables/30/4.244.table new file mode 100644 index 000000000..40534ee09 --- /dev/null +++ b/definitions/grib2/tables/30/4.244.table @@ -0,0 +1,7 @@ +# Code table 4.244 - Quality indicator +0 0 No quality information available +1 1 Failed +2 2 Passed +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.246.table b/definitions/grib2/tables/30/4.246.table new file mode 100644 index 000000000..bc89c27b9 --- /dev/null +++ b/definitions/grib2/tables/30/4.246.table @@ -0,0 +1,7 @@ +# Code table 4.246 - Thunderstorm intensity +0 0 No thunderstorm occurrence +1 1 Weak thunderstorm +2 2 Moderate thunderstorm +3 3 Severe thunderstorm +# 4-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/30/4.247.table b/definitions/grib2/tables/30/4.247.table new file mode 100644 index 000000000..cd7fc90bd --- /dev/null +++ b/definitions/grib2/tables/30/4.247.table @@ -0,0 +1,7 @@ +# Code table 4.247 - Precipitation intensity +0 0 No precipitation occurrence +1 1 Light precipitation +2 2 Moderate precipitation +3 3 Heavy precipitation +# 4-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/30/4.248.table b/definitions/grib2/tables/30/4.248.table new file mode 100644 index 000000000..694eebb72 --- /dev/null +++ b/definitions/grib2/tables/30/4.248.table @@ -0,0 +1,6 @@ +# Code table 4.248 - Method used to derive data values for a given local time +0 0 Nearest forecast or analysis time to specified local time +1 1 Interpolated to be valid at the specified local time +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.249.table b/definitions/grib2/tables/30/4.249.table new file mode 100644 index 000000000..9e62d9bbb --- /dev/null +++ b/definitions/grib2/tables/30/4.249.table @@ -0,0 +1,7 @@ +# Code table 4.249 - Character of precipitation +0 0 None +1 1 Showers +2 2 Intermittent +3 3 Continuous +# 4-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/30/4.250.table b/definitions/grib2/tables/30/4.250.table new file mode 100644 index 000000000..a249158ca --- /dev/null +++ b/definitions/grib2/tables/30/4.250.table @@ -0,0 +1,14 @@ +# Code table 4.250 - Drainage direction +0 0 Reserved +1 1 South-west +2 2 South +3 3 South-east +4 4 West +5 5 No direction +6 6 East +7 7 North-west +8 8 North +9 9 North-east +# 10-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.3.table b/definitions/grib2/tables/30/4.3.table new file mode 100644 index 000000000..7ad6be363 --- /dev/null +++ b/definitions/grib2/tables/30/4.3.table @@ -0,0 +1,26 @@ +# Code table 4.3 - Type of generating process +0 0 Analysis +1 1 Initialization +2 2 Forecast +3 3 Bias corrected forecast +4 4 Ensemble forecast +5 5 Probability forecast +6 6 Forecast error +7 7 Analysis error +8 8 Observation +9 9 Climatological +10 10 Probability-weighted forecast +11 11 Bias-corrected ensemble forecast +12 12 Post-processed analysis +13 13 Post-processed forecast +14 14 Nowcast +15 15 Hindcast +16 16 Physical retrieval +17 17 Regression analysis +18 18 Difference between two forecasts +19 19 First guess +20 20 Analysis increment +21 21 Initialization increment for analysis +# 22-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.4.table b/definitions/grib2/tables/30/4.4.table new file mode 100644 index 000000000..7087ebddb --- /dev/null +++ b/definitions/grib2/tables/30/4.4.table @@ -0,0 +1,17 @@ +# Code table 4.4 - Indicator of unit of time range +0 m Minute +1 h Hour +2 D Day +3 M Month +4 Y Year +5 10Y Decade (10 years) +6 30Y Normal (30 years) +7 C Century (100 years) +# 8-9 Reserved +10 3h 3 hours +11 6h 6 hours +12 12h 12 hours +13 s Second +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.5.table b/definitions/grib2/tables/30/4.5.table new file mode 100644 index 000000000..3c338232d --- /dev/null +++ b/definitions/grib2/tables/30/4.5.table @@ -0,0 +1,89 @@ +# Code table 4.5 - Fixed surface types and units +0 0 Reserved +1 sfc Ground or water surface (-) +2 2 Cloud base level (-) +3 3 Level of cloud tops (-) +4 4 Level of 0 degree C isotherm (-) +5 5 Level of adiabatic condensation lifted from the surface (-) +6 6 Maximum wind level (-) +7 sfc Tropopause (-) +8 sfc Nominal top of the atmosphere (-) +9 9 Sea bottom (-) +10 10 Entire atmosphere (-) +11 11 Cumulonimbus (CB) base (m) +12 12 Cumulonimbus (CB) top (m) +13 13 Lowest level where vertically integrated cloud cover exceeds the specified percentage (cloud base for a given percentage cloud cover) (%) +14 14 Level of free convection (LFC) (-) +15 15 Convective condensation level (CCL) (-) +16 16 Level of neutral buoyancy or equilibrium level (LNB) (-) +17 sfc Departure level of the most unstable parcel of air (MUDL) +18 sfc Departure level of a mixed layer parcel of air with specified layer depth (Pa) +# 19 Reserved +20 20 Isothermal level (K) +21 21 Lowest level where mass density exceeds the specified value (base for a given threshold of mass density) (kg m-3) +22 22 Highest level where mass density exceeds the specified value (top for a given threshold of mass density) (kg m-3) +23 23 Lowest level where air concentration exceeds the specified value (base for a given threshold of air concentration) (Bq m-3) +24 24 Highest level where air concentration exceeds the specified value (top for a given threshold of air concentration) (Bq m-3) +25 25 Highest level where radar reflectivity exceeds the specified value (echo top for a given threshold of reflectivity) (dBZ) +26 26 Convective cloud layer base (m) +27 27 Convective cloud layer top (m) +# 28-29 Reserved +30 30 Specified radius from the centre of the Sun (m) +31 31 Solar photosphere +32 32 Ionospheric D-region level +33 33 Ionospheric E-region level +34 34 Ionospheric F1-region level +35 35 Ionospheric F2-region level +# 36-99 Reserved +100 pl Isobaric surface (Pa) +101 sfc Mean sea level +102 102 Specific altitude above mean sea level (m) +103 sfc Specified height level above ground (m) +104 104 Sigma level (sigma value) +105 ml Hybrid level (-) +106 sfc Depth below land surface (m) +107 pt Isentropic (theta) level (K) +108 108 Level at specified pressure difference from ground to level (Pa) +109 pv Potential vorticity surface (K m2 kg-1 s-1) +110 110 Reserved +111 111 Eta level (-) +112 112 Reserved +113 113 Logarithmic hybrid level +114 sol Snow level (Numeric) +115 115 Sigma height level +# 116 Reserved +117 117 Mixed layer depth (m) +118 hhl Hybrid height level (-) +119 hpl Hybrid pressure level (-) +# 120-149 Reserved +150 150 Generalized vertical height coordinate +151 sol Soil level (Numeric) +152 sol Sea-ice level (Numeric) +# 153-159 Reserved +160 160 Depth below sea level (m) +161 161 Depth below water surface (m) +162 sfc Lake or river bottom (-) +163 163 Bottom of sediment layer (-) +164 164 Bottom of thermally active sediment layer (-) +165 165 Bottom of sediment layer penetrated by thermal wave (-) +166 sfc Mixing layer (-) +167 167 Bottom of root zone (-) +168 168 Ocean model level (Numeric) +169 169 Ocean level defined by water density (sigma-theta) difference from near-surface to level (kg m-3) +170 170 Ocean level defined by water potential temperature difference from near-surface to level (K) +171 171 Ocean level defined by vertical eddy diffusivity difference from near-surface to level (m2 s-1) +# 172-173 Reserved +174 sfc Top surface of ice on sea, lake or river +175 175 Top surface of ice, under snow cover, on sea, lake or river +176 176 Bottom surface (underside) ice on sea, lake or river +177 sfc Deep soil (of indefinite depth) +# 178 Reserved +179 179 Top surface of glacier ice and inland ice +180 180 Deep inland or glacier ice (of indefinite depth) +181 181 Grid tile land fraction as a model surface +182 182 Grid tile water fraction as a model surface +183 183 Grid tile ice fraction on sea, lake or river as a model surface +184 184 Grid tile glacier ice and inland ice fraction as a model surface +# 185-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.6.table b/definitions/grib2/tables/30/4.6.table new file mode 100644 index 000000000..b2dfeb498 --- /dev/null +++ b/definitions/grib2/tables/30/4.6.table @@ -0,0 +1,9 @@ +# Code table 4.6 - Type of ensemble forecast +0 0 Unperturbed high-resolution control forecast +1 1 Unperturbed low-resolution control forecast +2 2 Negatively perturbed forecast +3 3 Positively perturbed forecast +4 4 Multi-model forecast +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.7.table b/definitions/grib2/tables/30/4.7.table new file mode 100644 index 000000000..e0de0e1b2 --- /dev/null +++ b/definitions/grib2/tables/30/4.7.table @@ -0,0 +1,14 @@ +# Code table 4.7 - Derived forecast +0 0 Unweighted mean of all members +1 1 Weighted mean of all members +2 2 Standard deviation with respect to cluster mean +3 3 Standard deviation with respect to cluster mean, normalized +4 4 Spread of all members +5 5 Large anomaly index of all members +6 6 Unweighted mean of the cluster members +7 7 Interquartile range (range between the 25th and 75th quantile) +8 8 Minimum of all ensemble members +9 9 Maximum of all ensemble members +# 10-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.8.table b/definitions/grib2/tables/30/4.8.table new file mode 100644 index 000000000..ad883039c --- /dev/null +++ b/definitions/grib2/tables/30/4.8.table @@ -0,0 +1,6 @@ +# Code table 4.8 - Clustering method +0 0 Anomaly correlation +1 1 Root mean square +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.9.table b/definitions/grib2/tables/30/4.9.table new file mode 100644 index 000000000..9f74599c3 --- /dev/null +++ b/definitions/grib2/tables/30/4.9.table @@ -0,0 +1,13 @@ +# Code table 4.9 - Probability type +0 0 Probability of event below lower limit +1 1 Probability of event above upper limit +2 2 Probability of event between lower and upper limits (the range includes the lower limit but not the upper limit) +3 3 Probability of event above lower limit +4 4 Probability of event below upper limit +5 5 Probability of event equal to lower limit +6 6 Probability of event in above normal category +7 7 Probability of event in near normal category +8 8 Probability of event in below normal category +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/4.91.table b/definitions/grib2/tables/30/4.91.table new file mode 100644 index 000000000..ae31ed61c --- /dev/null +++ b/definitions/grib2/tables/30/4.91.table @@ -0,0 +1,16 @@ +# Code table 4.91 - Type of Interval +0 0 Smaller than first limit +1 1 Greater than second limit +2 2 Between first and second limit. The range includes the first limit but not the second limit +3 3 Greater than first limit +4 4 Smaller than second limit +5 5 Smaller or equal first limit +6 6 Greater or equal second limit +7 7 Between first and second. The range includes the first limit and the second limit +8 8 Greater or equal first limit +9 9 Smaller or equal second limit +10 10 Between first and second limit. The range includes the second limit but not the first limit +11 11 Equal to first limit +# 12-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/30/5.0.table b/definitions/grib2/tables/30/5.0.table new file mode 100644 index 000000000..5e00004b0 --- /dev/null +++ b/definitions/grib2/tables/30/5.0.table @@ -0,0 +1,22 @@ +# Code table 5.0 - Data representation template number +0 0 Grid point data - simple packing +1 1 Matrix value at grid point - simple packing +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 +# 5-39 Reserved +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 +# 43-49 Reserved +50 50 Spectral data - simple packing +51 51 Spherical harmonics data - complex packing +# 52 Reserved +53 53 Spectral data for limited area models - complex packing +# 54-60 Reserved +61 61 Grid point data - simple packing with logarithm pre-processing +# 62-199 Reserved +200 200 Run length packing with level values +# 201-49151 Reserved +# 49152-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/30/5.1.table b/definitions/grib2/tables/30/5.1.table new file mode 100644 index 000000000..1189b5e46 --- /dev/null +++ b/definitions/grib2/tables/30/5.1.table @@ -0,0 +1,6 @@ +# Code table 5.1 - Type of original field values +0 0 Floating point +1 1 Integer +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/5.2.table b/definitions/grib2/tables/30/5.2.table new file mode 100644 index 000000000..60d557a0d --- /dev/null +++ b/definitions/grib2/tables/30/5.2.table @@ -0,0 +1,8 @@ +# Code table 5.2 - Matrix coordinate value function definition +0 0 Explicit coordinate values set +1 1 Linear coordinates f(1) = C1, f(n) = f(n-1) + C2 +# 2-10 Reserved +11 11 Geometric coordinates f(1) = C1, f(n) = C2 * f(n-1) +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/5.25.table b/definitions/grib2/tables/30/5.25.table new file mode 100644 index 000000000..79e9fd69a --- /dev/null +++ b/definitions/grib2/tables/30/5.25.table @@ -0,0 +1,9 @@ +# Code table 5.25 - type of bi-Fourier subtruncation +# 0-76 Reserved +77 77 Rectangular +# 78-87 Reserved +88 88 Elliptic +# 89-98 Reserved +99 99 Diamond +# 100-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/30/5.26.table b/definitions/grib2/tables/30/5.26.table new file mode 100644 index 000000000..298f3fcd0 --- /dev/null +++ b/definitions/grib2/tables/30/5.26.table @@ -0,0 +1,5 @@ +# Code table 5.26 - packing mode for axes +0 0 Spectral coefficients for axes are packed +1 1 Spectral coefficients for axes included in the unpacked subset +# 2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/30/5.3.table b/definitions/grib2/tables/30/5.3.table new file mode 100644 index 000000000..481331791 --- /dev/null +++ b/definitions/grib2/tables/30/5.3.table @@ -0,0 +1,7 @@ +# Code table 5.3 - Matrix coordinate parameter +1 1 Direction degrees true +2 2 Frequency (s-1) +3 3 Radial number (2pi/lambda) (m-1) +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/5.4.table b/definitions/grib2/tables/30/5.4.table new file mode 100644 index 000000000..e84ab1901 --- /dev/null +++ b/definitions/grib2/tables/30/5.4.table @@ -0,0 +1,6 @@ +# Code table 5.4 - Group splitting method +0 0 Row by row splitting +1 1 General group splitting +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/5.40.table b/definitions/grib2/tables/30/5.40.table new file mode 100644 index 000000000..97e8880ab --- /dev/null +++ b/definitions/grib2/tables/30/5.40.table @@ -0,0 +1,5 @@ +# 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/30/5.5.table b/definitions/grib2/tables/30/5.5.table new file mode 100644 index 000000000..f2316975a --- /dev/null +++ b/definitions/grib2/tables/30/5.5.table @@ -0,0 +1,7 @@ +# Code table 5.5 - Missing value management for complex packing +0 0 No explicit missing values included within data values +1 1 Primary missing values included within data values +2 2 Primary and secondary missing values included within data values +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/5.6.table b/definitions/grib2/tables/30/5.6.table new file mode 100644 index 000000000..db68ead9c --- /dev/null +++ b/definitions/grib2/tables/30/5.6.table @@ -0,0 +1,7 @@ +# Code table 5.6 - Order of spatial differencing +0 0 Reserved +1 1 First-order spatial differencing +2 2 Second-order spatial differencing +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/30/5.7.table b/definitions/grib2/tables/30/5.7.table new file mode 100644 index 000000000..e54862c19 --- /dev/null +++ b/definitions/grib2/tables/30/5.7.table @@ -0,0 +1,7 @@ +# Code table 5.7 - Precision of floating-point numbers +0 0 Reserved +1 1 IEEE 32-bit (I=4 in section 7) +2 2 IEEE 64-bit (I=8 in section 7) +3 3 IEEE 128-bit (I=16 in section 7) +# 4-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/30/6.0.table b/definitions/grib2/tables/30/6.0.table new file mode 100644 index 000000000..a8f30f5a4 --- /dev/null +++ b/definitions/grib2/tables/30/6.0.table @@ -0,0 +1,6 @@ +# Code table 6.0 - Bit map indicator +0 0 A bit map applies to this product and is specified in this Section +1 1 A bit map pre-determined by the originating/generating centre applies to this product and is not specified in this Section +# 1-253 A bit map predetermined by the originating/generating centre applies to this product and is not specified in this Section +254 254 A bit map defined previously in the same GRIB message applies to this product +255 255 A bit map does not apply to this product 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 387f915de..bee2409ab 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,3 +1,10 @@ # 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) +194 194 Accumulated freezing rain (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) +254 254 Snow depth (m of water equivalent) diff --git a/definitions/grib2/tables/local/ecmf/1/4.2.0.19.table b/definitions/grib2/tables/local/ecmf/1/4.2.0.19.table new file mode 100644 index 000000000..77627555f --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/1/4.2.0.19.table @@ -0,0 +1,3 @@ +# Code table 4.2 - discipline=0 category=19 for ECMWF +192 192 Snow albedo (0-1) +255 255 Missing diff --git a/definitions/grib2/tables/local/ecmf/1/4.2.0.20.table b/definitions/grib2/tables/local/ecmf/1/4.2.0.20.table index 46fce15a8..eb52cb575 100644 --- a/definitions/grib2/tables/local/ecmf/1/4.2.0.20.table +++ b/definitions/grib2/tables/local/ecmf/1/4.2.0.20.table @@ -1,3 +1,5 @@ # Code table 4.2 - discipline=0 category=20 for ECMWF 192 192 Source/gain (kg m-2 s-1) 193 193 Negative Fixer (kg m-2 s-1) +194 194 Aerosol sink/loss mass flux (kg m**-2 s**-1) +195 195 Volume-mean total column mixing ratio (mol mol**-1) diff --git a/definitions/grib2/tables/local/ecmf/1/4.2.0.6.table b/definitions/grib2/tables/local/ecmf/1/4.2.0.6.table new file mode 100644 index 000000000..16eaca829 --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/1/4.2.0.6.table @@ -0,0 +1,5 @@ +# Code table 4.2 - discipline=0 category=6 for ECMWF +192 192 Total cloud cover (0-1) +193 193 Low cloud cover (0-1) +194 194 Medium cloud cover (0-1) +195 195 High cloud cover (0-1) 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 97f95b595..bdc028ffe 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 @@ -9,4 +9,6 @@ 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) 255 255 Missing diff --git a/definitions/grib2/tables/local/ecmf/1/4.238.table b/definitions/grib2/tables/local/ecmf/1/4.238.table new file mode 100644 index 000000000..36b20e9a2 --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/1/4.238.table @@ -0,0 +1,5 @@ +# Code table 4.238 - Source or sink for ECMWF +192 192 Vegetation +193 193 Biomass burning +194 194 Settlements + diff --git a/definitions/grib2/template.3.gaussian.def b/definitions/grib2/template.3.gaussian.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/template.3.latlon.def b/definitions/grib2/template.3.latlon.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/template.3.latlon_vares.def b/definitions/grib2/template.3.latlon_vares.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/template.3.rotation.def b/definitions/grib2/template.3.rotation.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/template.3.scanning_mode.def b/definitions/grib2/template.3.scanning_mode.def index 6f90222da..793b8946f 100644 --- a/definitions/grib2/template.3.scanning_mode.def +++ b/definitions/grib2/template.3.scanning_mode.def @@ -21,6 +21,7 @@ alias geography.jScansPositively=jScansPositively; alias geography.jPointsAreConsecutive=jPointsAreConsecutive; transient iScansPositively = !iScansNegatively : constraint; +transient jScansNegatively = !jScansPositively : constraint; flagbit scanningMode5(scanningMode,3) = 0: read_only; flagbit scanningMode6(scanningMode,2) = 0: read_only; diff --git a/definitions/grib2/template.3.shape_of_the_earth.def b/definitions/grib2/template.3.shape_of_the_earth.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/template.3.spherical_harmonics.def b/definitions/grib2/template.3.spherical_harmonics.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/template.3.stretching.def b/definitions/grib2/template.3.stretching.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/template.4.categorical.def b/definitions/grib2/template.4.categorical.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/template.4.circular_cluster.def b/definitions/grib2/template.4.circular_cluster.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/template.4.derived.def b/definitions/grib2/template.4.derived.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/template.4.horizontal.def b/definitions/grib2/template.4.horizontal.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/template.4.percentile.def b/definitions/grib2/template.4.percentile.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/template.4.probability.def b/definitions/grib2/template.4.probability.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/template.4.quantile.def b/definitions/grib2/template.4.quantile.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/template.4.rectangular_cluster.def b/definitions/grib2/template.4.rectangular_cluster.def old mode 100755 new mode 100644 diff --git a/definitions/grib2/template.7.0.def b/definitions/grib2/template.7.0.def index d23d33b6b..02b4ea60c 100644 --- a/definitions/grib2/template.7.0.def +++ b/definitions/grib2/template.7.0.def @@ -32,3 +32,4 @@ meta unpackedError simple_packing_error(zero,binaryScaleFactor,decimalScaleFacto alias data.packedValues=codedValues; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib2/template.7.1.def b/definitions/grib2/template.7.1.def index f4b2c3054..1f1f6ab57 100644 --- a/definitions/grib2/template.7.1.def +++ b/definitions/grib2/template.7.1.def @@ -33,3 +33,4 @@ meta unpackedError simple_packing_error(zero,binaryScaleFactor,decimalScaleFacto alias data.packedValues = codedValues; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib2/template.7.2.def b/definitions/grib2/template.7.2.def index 8c13829aa..3e8ca8f5e 100644 --- a/definitions/grib2/template.7.2.def +++ b/definitions/grib2/template.7.2.def @@ -45,3 +45,5 @@ meta values data_apply_bitmap(codedValues, alias data.packedValues = codedValues; template statistics "common/statistics_grid.def"; +meta numberOfMissing count_missing(bitmap,unusedBitsInBitmap,numberOfDataPoints,missingValueManagementUsed) : dump; +alias numberOfMissingValues=numberOfMissing; diff --git a/definitions/grib2/template.7.3.def b/definitions/grib2/template.7.3.def index dd2a40be0..13fff2006 100644 --- a/definitions/grib2/template.7.3.def +++ b/definitions/grib2/template.7.3.def @@ -42,3 +42,6 @@ meta values data_apply_bitmap(codedValues, alias data.packedValues=codedValues; template statistics "common/statistics_grid.def"; + +meta numberOfMissing count_missing(bitmap,unusedBitsInBitmap,numberOfDataPoints,missingValueManagementUsed) : dump; +alias numberOfMissingValues=numberOfMissing; diff --git a/definitions/grib2/template.7.4.def b/definitions/grib2/template.7.4.def index 2ef305f6b..203f19c5c 100644 --- a/definitions/grib2/template.7.4.def +++ b/definitions/grib2/template.7.4.def @@ -20,3 +20,4 @@ meta values data_apply_bitmap(codedValues, alias data.packedValues = codedValues; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib2/template.7.40.def b/definitions/grib2/template.7.40.def index d5b93c0de..731d7979e 100644 --- a/definitions/grib2/template.7.40.def +++ b/definitions/grib2/template.7.40.def @@ -49,3 +49,4 @@ meta values data_apply_bitmap(codedValues, alias data.packedValues = codedValues; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib2/template.7.41.def b/definitions/grib2/template.7.41.def index bd59ee357..31e90a54e 100644 --- a/definitions/grib2/template.7.41.def +++ b/definitions/grib2/template.7.41.def @@ -30,3 +30,4 @@ meta values data_apply_bitmap(codedValues, alias data.packedValues = codedValues; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib2/template.7.42.def b/definitions/grib2/template.7.42.def index ff68e0664..6f456485f 100644 --- a/definitions/grib2/template.7.42.def +++ b/definitions/grib2/template.7.42.def @@ -33,3 +33,4 @@ meta unpackedError simple_packing_error(zero,binaryScaleFactor,decimalScaleFacto alias data.packedValues = codedValues; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib2/template.7.50001.def b/definitions/grib2/template.7.50001.def index 6a7a0f5a0..35e5fe602 100644 --- a/definitions/grib2/template.7.50001.def +++ b/definitions/grib2/template.7.50001.def @@ -99,3 +99,4 @@ if(bitmapPresent) { meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib2/template.7.50002.def b/definitions/grib2/template.7.50002.def index c29b61379..e274aaa19 100644 --- a/definitions/grib2/template.7.50002.def +++ b/definitions/grib2/template.7.50002.def @@ -146,3 +146,4 @@ if(bitmapPresent) { meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib2/template.7.6.def b/definitions/grib2/template.7.6.def index ef5c7101a..5fd1c1afe 100644 --- a/definitions/grib2/template.7.6.def +++ b/definitions/grib2/template.7.6.def @@ -30,3 +30,4 @@ meta values data_apply_bitmap(codedValues, alias data.packedValues = codedValues; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib2/template.7.61.def b/definitions/grib2/template.7.61.def index ef5c7101a..5fd1c1afe 100644 --- a/definitions/grib2/template.7.61.def +++ b/definitions/grib2/template.7.61.def @@ -30,3 +30,4 @@ meta values data_apply_bitmap(codedValues, alias data.packedValues = codedValues; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib2/template.7.second_order.def b/definitions/grib2/template.7.second_order.def index 2e1796700..9bc13b274 100644 --- a/definitions/grib2/template.7.second_order.def +++ b/definitions/grib2/template.7.second_order.def @@ -54,3 +54,4 @@ meta values data_apply_bitmap(codedValues, alias data.packedValues = codedValues; template statistics "common/statistics_grid.def"; +template missing_values "common/missing_values_grid.def"; diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def index 04b39e072..833208e24 100644 --- a/definitions/grib2/units.def +++ b/definitions/grib2/units.def @@ -4,8 +4,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 1 ; scaleFactorOfLowerLimit = 0 ; @@ -16,8 +16,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 5 ; scaleFactorOfLowerLimit = 0 ; @@ -28,8 +28,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 40 ; scaleFactorOfLowerLimit = 0 ; @@ -40,8 +40,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 60 ; scaleFactorOfLowerLimit = 0 ; @@ -52,8 +52,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 80 ; scaleFactorOfLowerLimit = 0 ; @@ -64,8 +64,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 100 ; scaleFactorOfLowerLimit = 0 ; @@ -76,8 +76,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 150 ; scaleFactorOfLowerLimit = 0 ; @@ -88,8 +88,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 200 ; scaleFactorOfLowerLimit = 0 ; @@ -100,8 +100,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 3 ; scaleFactorOfLowerLimit = -2 ; @@ -136,6 +136,7 @@ discipline = 10 ; parameterCategory = 2 ; parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; } #Snow density 'kg m**-3' = { @@ -165,6 +166,30 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } +#Large-scale precipitation fraction +'s' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Downward UV radiation at the surface +'J m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Photosynthetically active radiation at the surface +'J m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Specific rain water content 'kg kg**-1' = { discipline = 0 ; @@ -204,8 +229,23 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; } -#Surface solar radiation downwards +#Boundary layer dissipation +'J m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + typeOfStatisticalProcessing = 1 ; + } +#Boundary layer height +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + } +#Surface short-wave (solar) radiation downwards 'J m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -213,7 +253,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface thermal radiation downwards +#Surface long-wave (thermal) radiation downwards 'J m**-2' = { discipline = 0 ; parameterCategory = 5 ; @@ -221,7 +261,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Top net solar radiation +#Top net short-wave (solar) radiation 'J m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -234,12 +274,39 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 38 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; } #Northward turbulent surface stress 'N m**-2 s' = { discipline = 0 ; parameterCategory = 2 ; parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Eastward gravity wave surface stress +'N m**-2 s' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Northward gravity wave surface stress +'N m**-2 s' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Gravity wave dissipation +'J m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 1 ; } #Ozone mass mixing ratio 'kg kg**-1' = { @@ -247,7 +314,23 @@ parameterCategory = 14 ; parameterNumber = 1 ; } -#Surface net solar radiation, clear sky +#Top net solar radiation, clear sky +'J m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; + } +#Top net thermal radiation, clear sky +'J m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; + } +#Surface net short-wave (solar) radiation, clear sky 'J m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -255,7 +338,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface net thermal radiation, clear sky +#Surface net long-wave (thermal) radiation, clear sky 'J m**-2' = { discipline = 0 ; parameterCategory = 5 ; @@ -263,6 +346,42 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } +#TOA incident solar radiation +'J m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 8 ; + typeOfStatisticalProcessing = 1 ; + } +#Instantaneous eastward turbulent surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 38 ; + typeOfFirstFixedSurface = 1 ; + } +#Instantaneous northward turbulent surface stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 37 ; + typeOfFirstFixedSurface = 1 ; + } +#Instantaneous surface sensible heat flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } +#Instantaneous moisture flux +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + } #Temperature of snow layer 'K' = { discipline = 2 ; @@ -324,8 +443,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 25 ; scaleFactorOfLowerLimit = 0 ; @@ -336,8 +455,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 50 ; scaleFactorOfLowerLimit = 0 ; @@ -348,10 +467,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 10 ; scaleFactorOfLowerLimit = 0 ; @@ -1848,6 +1967,15 @@ typeOfStatisticalProcessing = 2 ; lengthOfTimeRange = 3 ; } +#Instantaneous 10 metre wind gust +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } #Relative humidity with respect to water '%' = { discipline = 0 ; @@ -1866,12 +1994,6 @@ parameterCategory = 19 ; parameterNumber = 19 ; } -#Fraction of stratiform precipitation cover -'Proportion' = { - discipline = 0 ; - parameterCategory = 6 ; - parameterNumber = 36 ; - } #Fraction of convective precipitation cover 'Proportion' = { discipline = 0 ; @@ -2053,6 +2175,28 @@ scaledValueOfSecondFixedSurface = 10 ; scaleFactorOfSecondFixedSurface = 1 ; } +#Total column rain water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Total column snow water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Ice temperature +'K' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + } #Soil temperature top 20 cm 'K' = { discipline = 2 ; @@ -2100,6 +2244,27 @@ parameterCategory = 0 ; parameterNumber = 33 ; } +#Instantaneous large-scale surface precipitation fraction +'(0 - 1)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 36 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective rain rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale rain rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + } #Mixed-layer CAPE in the lowest 50 hPa 'J kg**-1' = { discipline = 0 ; @@ -2265,6 +2430,29 @@ parameterCategory = 0 ; parameterNumber = 49 ; } +#Accumulated freezing rain water equivalent +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Runoff water equivalent +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 42 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow evaporation water equivalent +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 148 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } #Mean temperature tendency due to short-wave radiation 'K s**-1' = { discipline = 0 ; @@ -2648,12 +2836,6 @@ parameterCategory = 6 ; parameterNumber = 22 ; } -#Evaporation rate -'kg m**-2 s**-1' = { - discipline = 0 ; - parameterCategory = 1 ; - parameterNumber = 79 ; - } #Evaporation 'kg m**-2' = { discipline = 0 ; @@ -2843,6 +3025,12 @@ parameterCategory = 3 ; parameterNumber = 27 ; } +#Soil moisture +'kg m**-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 19 ; + } #Accumulated surface downward short-wave radiation flux, clear sky 'J m**-2' = { discipline = 0 ; @@ -3052,43 +3240,43 @@ parameterCategory = 0 ; parameterNumber = 9 ; } -#Forest fire weather index +#Forest fire weather index (as defined by the Canadian Forest Service) 'Numeric' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 5 ; } -#Fine fuel moisture code +#Fine fuel moisture code (as defined by the Canadian Forest Service) 'Numeric' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 6 ; } -#Duff moisture code +#Duff moisture code (as defined by the Canadian Forest Service) 'Numeric' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 7 ; } -#Drought code +#Drought code (as defined by the Canadian Forest Service) 'Numeric' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 8 ; } -#Initial fire spread index +#Initial fire spread index (as defined by the Canadian Forest Service) 'Numeric' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 9 ; } -#Fire buildup index +#Fire buildup index (as defined by the Canadian Forest Service) 'Numeric' = { discipline = 2 ; parameterCategory = 4 ; parameterNumber = 10 ; } -#Fire daily severity rating +#Fire daily severity rating (as defined by the Canadian Forest Service) 'Numeric' = { discipline = 2 ; parameterCategory = 4 ; @@ -4683,6 +4871,18 @@ parameterCategory = 0 ; parameterNumber = 15 ; } +#Significant height of wind waves +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean period of wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } #Eastward sea water velocity 'm s**-1' = { discipline = 10 ; @@ -4697,6 +4897,22 @@ parameterNumber = 3 ; typeOfFirstFixedSurface = 160 ; } +#Vertical integral of eastward water vapour flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 150 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Vertical integral of northward water vapour flux +'kg m**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 151 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } #Surface runoff 'kg m**-2' = { discipline = 2 ; @@ -4771,6 +4987,12 @@ typeOfGeneratingProcess = 20 ; is_chemical = 1 ; } +#Friction velocity +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + } #Lake total depth 'm' = { discipline = 1 ; @@ -4778,6 +5000,8 @@ parameterNumber = 0 ; typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; } #Lake mix-layer temperature 'K' = { @@ -4810,6 +5034,8 @@ parameterNumber = 1 ; typeOfFirstFixedSurface = 1 ; typeOfSecondFixedSurface = 162 ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; } #Lake shape factor 'dimensionless' = { @@ -4832,6 +5058,10 @@ parameterNumber = 5 ; typeOfFirstFixedSurface = 174 ; typeOfSecondFixedSurface = 176 ; + scaledValueOfFirstFixedSurface = missing() ; + scaleFactorOfFirstFixedSurface = missing() ; + scaledValueOfSecondFixedSurface = missing() ; + scaleFactorOfSecondFixedSurface = missing() ; } #100 metre U wind component 'm s**-1' = { @@ -4856,8 +5086,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 10 ; scaleFactorOfLowerLimit = 0 ; @@ -4868,8 +5098,8 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; - typeOfFirstFixedSurface = 1 ; productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; scaledValueOfLowerLimit = 20 ; scaleFactorOfLowerLimit = 0 ; @@ -4994,12 +5224,6 @@ parameterCategory = 2 ; parameterNumber = 12 ; } -#Boundary layer dissipation -'J m**-2' = { - discipline = 0 ; - parameterCategory = 2 ; - parameterNumber = 20 ; - } #Surface sensible heat flux 'J m**-2' = { discipline = 0 ; @@ -5090,7 +5314,7 @@ parameterCategory = 0 ; parameterNumber = 1 ; } -#Surface net solar radiation +#Surface net short-wave (solar) radiation 'J m**-2' = { discipline = 0 ; parameterCategory = 4 ; @@ -5098,7 +5322,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Surface net thermal radiation +#Surface net long-wave (thermal) radiation 'J m**-2' = { discipline = 0 ; parameterCategory = 5 ; @@ -5106,7 +5330,7 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 1 ; } -#Top net thermal radiation +#Top net long-wave (thermal) radiation 'J m**-2' = { discipline = 0 ; parameterCategory = 5 ; @@ -5150,12 +5374,6 @@ parameterCategory = 0 ; parameterNumber = 10 ; } -#Sensible heat net flux -'W m**-2' = { - discipline = 0 ; - parameterCategory = 0 ; - parameterNumber = 11 ; - } #Heat index 'K' = { discipline = 0 ; @@ -5425,6 +5643,7 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; } #Total snowfall rate water equivalent 'kg m**-2 s**-1' = { @@ -5449,6 +5668,7 @@ discipline = 0 ; parameterCategory = 1 ; parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; } #Total snowfall rate 'm s**-1' = { @@ -5576,12 +5796,6 @@ parameterCategory = 3 ; parameterNumber = 1 ; } -#Geometric height -'m' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 6 ; - } #Altimeter setting 'Pa' = { discipline = 0 ; @@ -5624,12 +5838,6 @@ parameterCategory = 3 ; parameterNumber = 17 ; } -#Planetary boundary layer height -'m' = { - discipline = 0 ; - parameterCategory = 3 ; - parameterNumber = 18 ; - } #5-wave geopotential height anomaly 'gpm' = { discipline = 0 ; @@ -6194,12 +6402,6 @@ parameterCategory = 1 ; parameterNumber = 2 ; } -#Land cover (1=land, 0=sea) -'Proportion' = { - discipline = 2 ; - parameterCategory = 0 ; - parameterNumber = 0 ; - } #Vegetation '%' = { discipline = 2 ; @@ -6824,18 +7026,6 @@ parameterCategory = 1 ; parameterNumber = 16 ; } -#Significant height of wind waves -'m' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 5 ; - } -#Mean period of wind waves -'s' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 6 ; - } #Direction of swell waves 'Degree true' = { discipline = 10 ; @@ -6895,10 +7085,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 15 ; scaleFactorOfLowerLimit = 0 ; @@ -6909,10 +7099,10 @@ discipline = 0 ; parameterCategory = 2 ; parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; typeOfFirstFixedSurface = 103 ; scaledValueOfFirstFixedSurface = 10 ; scaleFactorOfFirstFixedSurface = 0 ; - productDefinitionTemplateNumber = 9 ; typeOfStatisticalProcessing = 2 ; scaledValueOfLowerLimit = 20 ; scaleFactorOfLowerLimit = 0 ; diff --git a/definitions/grib3/local.98.500.def b/definitions/grib3/local.98.500.def old mode 100755 new mode 100644 diff --git a/definitions/grib3/local/1098/2.1.table b/definitions/grib3/local/1098/2.1.table deleted file mode 100644 index d8d1c0d0f..000000000 --- a/definitions/grib3/local/1098/2.1.table +++ /dev/null @@ -1 +0,0 @@ -0 model Model info diff --git a/definitions/grib3/local/1098/centres.table b/definitions/grib3/local/1098/centres.table deleted file mode 100644 index 2f0d02a3b..000000000 --- a/definitions/grib3/local/1098/centres.table +++ /dev/null @@ -1,12 +0,0 @@ -0 eggr UK Met Office - UK -1 aemet AEMET- Spain HIRLAM -2 arpasim ARPA-SIM - Italy COSMO -3 metno Met.NO -4 zamg ZAMG / Austria -5 dwd DWD - Germany SRNWP -6 dnmi DNMI/Univ Oslo - Norway HIRLAM ALADIN -7 meteofrance Meteo-France / France -8 dmi DMI -9 hungary Hungary -10 czech Czech Republic -11 croatia Croatia diff --git a/definitions/grib3/local/1098/models.table b/definitions/grib3/local/1098/models.table deleted file mode 100644 index 70e03f70d..000000000 --- a/definitions/grib3/local/1098/models.table +++ /dev/null @@ -1,13 +0,0 @@ -0 0 MOGREPS -1 1 SREPS -2 2 SRNWP PEPS -3 3 COSMO-LEPS -4 4 NORLAMEPS -5 5 ALADIN LAEF -6 6 COSMO DE EPS -7 7 COSMO-SREPS -8 8 GLAMEPS -9 9 PEARCE -10 10 DMI - HIRLAM -11 11 OMSZ ALADIN EPS - diff --git a/definitions/grib3/local/1098/template.2.0.def b/definitions/grib3/local/1098/template.2.0.def deleted file mode 100644 index 38324e78f..000000000 --- a/definitions/grib3/local/1098/template.2.0.def +++ /dev/null @@ -1,19 +0,0 @@ -codetable[2] tiggeModel 'grib3/local/[localSubSectionCentre:l]/models.table'; -codetable[2] tiggeCentre 'grib3/local/[localSubSectionCentre:l]/centres.table'; -concept tiggeLAMName { - "MOGREPS-MO- EUA" = {tiggeCentre=0;tiggeModel=0;} - "AEMet-SREPS-MM-EUAT"= {tiggeCentre=1;tiggeModel=1;} - "SRNWP-PEPS"= {tiggeCentre=1;tiggeModel=2;} - "COSMOLEPS-ARPASIMC-EU"= {tiggeCentre=2;tiggeModel=3;} - "NORLAMEPS" = {tiggeCentre=3;tiggeModel=4;} - "ALADIN-LAEF" = {tiggeCentre=4;tiggeModel=5;} - "COSMO-DE EPS" = {tiggeCentre=5;tiggeModel=6;} - "COSMO-SREPS-BO-EU" = {tiggeCentre=2;tiggeModel=7;} - "GLAMEPS" = {tiggeCentre=6;tiggeModel=8;} - "PEARCE" = {tiggeCentre=7;tiggeModel=9;} - "DMI- HIRLAM" = {tiggeCentre=8;tiggeModel=10;} - "OMSZ- ALADIN-EPS" = {tiggeCentre=9;tiggeModel=11;} - "OMSZ- ALADIN-EPS" = {tiggeCentre=10;tiggeModel=11;} - "OMSZ- ALADIN-EPS" = {tiggeCentre=11;tiggeModel=11;} -} - diff --git a/definitions/grib3/local/edzw/2.0.3.table b/definitions/grib3/local/edzw/2.0.3.table deleted file mode 100755 index efa3bd13a..000000000 --- a/definitions/grib3/local/edzw/2.0.3.table +++ /dev/null @@ -1,130 +0,0 @@ -1 p P Pressure Pa -2 msl MSL Mean sea level pressure Pa -3 3 None Pressure tendency Pa s**-1 -4 pv PV Potential vorticity K m**2 kg**-1 s**-1 -5 5 None ICAO Standard Atmosphere reference height m -6 z Z Geopotential m**2 s**-2 -7 gh GH Geopotential height gpm -8 h H Geometrical height m -9 9 None Standard deviation of height m -10 tco3 TCO3 Total (column) ozone Dobson (kg m**-2) -11 t T Temperature K -12 12 None Virtual temperature K -13 13 None Potential temperature K -14 14 None Pseudo-adiabatic potential temperature K -15 15 None Maximum temperature K -16 16 None Minimum temperature K -17 17 None Dew-point temperature K -18 18 None Dew-point depression (or deficit) K -19 19 None Lapse rate K s**-1 -20 20 None Visibility m -21 21 None Radar spectra (1) - -22 22 None Radar spectra (2) - -23 23 None Radar spectra (3) - -24 24 None Parcel lifted index (to 500 hPa) K -25 25 None Temperature anomaly K -26 26 None Pressure anomaly Pa -27 27 None Geopotential height anomaly gpm -28 28 None Wave spectra (1) - -29 29 None Wave spectra (2) - -30 30 None Wave spectra (3) - -31 31 None Wind direction Degree true -32 32 None Wind speed m s**-1 -33 u U U-component of wind m s**-1 -34 v V V-component of wind m s**-1 -35 35 None Stream Function m**2 s**-1 -36 36 None Velocity Potential m**2 s**-1 -37 37 None Montgomery stream Function m**2 s**-1 -38 38 None Sigma coordinate vertical velocity s**-1 -39 w W Vertical velocity Pa s**-1 -40 40 None Vertical velocity m s**-1 -41 41 None Absolute vorticity s**-1 -42 42 None Absolute divergence s**-1 -43 vo VO Relative vorticity s**-1 -44 d D Relative divergence s**-1 -45 45 None Vertical u-component shear s**-1 -46 46 None Vertical v-component shear s**-1 -47 47 None Direction of current Degree true -48 48 None Speed of current m s**-1 -49 49 None U-component of current m s**-1 -50 50 None V-component of current m s**-1 -51 q Q Specific humidity kg kg**-1 -52 r R Relative humidity % -53 53 None Humidity mixing ratio kg m**-2 -54 54 None Precipitable water kg m**-2 -55 55 None Vapour pressure Pa -56 56 None Saturation deficit Pa -57 e E Evaporation kg m**-2 -58 ciwc CIWC Cloud ice kg m**-2 -59 59 None Precipitation rate kg m**-2 s**-1 -60 60 None Thunderstorm probability % -61 tp TP Total precipitation kg m**-2 -62 62 LSP Large scale precipitation kg m**-2 -63 63 None Convective precipitation (water) kg m**-2 -64 64 None Snow fall rate water equivalent kg m**-2 s**-1 -65 sf SF Water equivalentof accumulated snow depth kg m**-2 -66 sd SD Snow depth m (of water equivalent) -67 67 None Mixed layer depth m -68 68 None Transient thermocline depth m -69 69 None Main thermocline depth m -70 70 None Main thermocline anomaly m -71 tcc TCC Total cloud cover % -72 ccc CCC Convective cloud cover % -73 lcc LCC Low cloud cover % -74 mcc MCC Medium cloud cover % -75 hcc HCC High cloud cover % -76 clwc CLWC Cloud liquid water content kg kg**-1 -77 77 None Best lifted index (to 500 hPa) K -78 csf CSF Convective snow-fall kg m**-2 -79 lsf LSF Large scale snow-fall kg m**-2 -80 80 None Water temperature K -81 lsm LSM Land cover (1=land, 0=sea) (0 - 1) -82 82 None Deviation of sea-level from mean m -83 sr SR Surface roughness m -84 al AL Albedo - -85 st ST Surface temperature of soil K -86 ssw SSW Soil moisture content kg m**-2 -87 veg VEG Percentage of vegetation % -88 88 None Salinity kg kg**-1 -89 89 None Density kg m**-3 -90 ro RO Water run-off kg m**-2 -91 91 None Ice cover (1=land, 0=sea) (0 - 1) -92 92 None Ice thickness m -93 93 None Direction of ice drift Degree true -94 94 None Speed of ice drift m s*-1 -95 95 None U-component of ice drift m s**-1 -96 96 None V-component of ice drift m s**-1 -97 97 None Ice growth rate m s**-1 -98 98 None Ice divergence s**-1 -99 99 None Snow melt kg m**-2 -100 swh SWH Signific.height,combined wind waves+swell m -101 mdww MDWW Mean direction of wind waves Degree true -102 shww SHWW Significant height of wind waves m -103 mpww MPWW Mean period of wind waves s -104 104 None Direction of swell waves Degree true -105 105 None Significant height of swell waves m -106 106 None Mean period of swell waves s -107 mdps MDPS Mean direction of primary swell Degree true -108 mpps MPPS Mean period of primary swell s -109 109 None Secondary wave direction Degree true -110 110 None Secondary wave period s -111 111 None Net short-wave radiation flux (surface) W m**-2 -112 112 None Net long-wave radiation flux (surface) W m**-2 -113 113 None Net short-wave radiation flux(atmosph.top) W m**-2 -114 114 None Net long-wave radiation flux(atmosph.top) W m**-2 -115 115 None Long-wave radiation flux W m**-2 -116 116 None Short-wave radiation flux W m**-2 -117 117 None Global radiation flux W m**-2 -118 118 None Brightness temperature K -119 119 None Radiance (with respect to wave number) W m**-1 sr**-1 -120 120 None Radiance (with respect to wave length) W m**-1 sr**-1 -121 slhf SLHF (surface) Latent heat flux W m**-2 -122 sshf SSHF (surface) Sensible heat flux W m**-2 -123 bld BLD Boundary layer dissipation W m**-2 -124 124 None Momentum flux, u-component N m**-2 -125 125 None Momentum flux, v-component N m**-2 -126 126 None Wind mixing energy J -127 127 None Image data - -148 lsm LSM LandSeaMask -160 160 Unknown -255 - - Indicates a missing value - diff --git a/definitions/grib3/local/edzw/3.table b/definitions/grib3/local/edzw/3.table deleted file mode 100755 index 7c4cc88b1..000000000 --- a/definitions/grib3/local/edzw/3.table +++ /dev/null @@ -1,51 +0,0 @@ -# CODE TABLE 3 Fixed levels or layers for wich the data are included -0 0 Reserved -1 G Surface (of the Earth, which includes sea surface) -2 CB Cloud base level -3 CT Cloud top level -4 IZ 0 deg (C) isotherm level -5 AC Adiabatic condensation level (parcel lifted from surface) -6 WM Maximum wind speed level -7 TP Tropopause level -8 AU Nominal top of atmosphere -9 9 Sea bottom -# 10-19 Reserved -20 20 Isothermal level Temperature in 1/100 K -# 21-99 Reserved -100 P Isobaric level pressure in hectoPascals (hPa) (2 octets) -101 PI Layer between two isobaric levels pressure of top (kPa) pressure of bottom (kPa) -102 MSL Mean sea level 0 0 -103 HMSL Fixed height level height above mean sea level (MSL) in meters -104 HMSLI Layer between two specfied altitudes above mean sea level - altitude of top, altitude of bottom (hm) -105 HG Fixed height above ground height in meters (2 octets) -106 HGI Layer between two height levels above ground - height of top, height of bottom (hm) -107 SIG Sigma level sigma value in 1/10000 (2 octets) -108 SIGI Layer between two sigma levels sigma value at top in 1/100 sigma value at bottom in 1/100 -109 H Hybrid level level number (2 octets) -110 HI Layer between two hybrid levels level number of top level number of bottom -111 B Depth below land surface centimeters (2 octets) -112 S Layer between two depths below land surface - depth of upper surface, depth of lower surface (cm) -113 pt Isentropic (theta) level Potential Temp. degrees K (2 octets) -114 114 Layer between two isentropic levels 475K minus theta of top in Deg. K 475K minus theta of bottom in Deg. K -115 115 Level at specified pressure difference from ground to level hPa (2 octets) -116 116 Layer between two levels at specified pressure differences from ground to levels pressure difference from ground to top level hPa pressure difference from ground to bottom level hPa -117 pv Potential vorticity surface 10-9 K m2 kg-1 s-1 -# 118 Reserved -119 119 ETA level: ETA value in 1/10000 (2 octets) -120 120 Layer between two ETA levels: ETA value at top of layer in 1/100, ETA value at bottom of layer in 1/100 -121 121 Layer between two isobaric surfaces (high precision) 1100 hPa minus pressure of top, in hPa 1100 hPa minus pressure of bottom, in hPa -# 122-124 Reserved -125 125 Height level above ground (high precision) centimeters (2 octets) -# 126-127 Reserved -128 128 Layer between two sigma levels (high precision) 1.1 minus sigma of top, in 1/1000 of sigma 1.1 minus sigma of bottom, in 1/1000 of sigma -# 129-140 Reserved -141 141 Layer between two isobaric surfaces (mixed precision) pressure of top, in kPa 1100hPa minus pressure of bottom, in hPa -# 142-159 Reserved -160 dp Depth below sea level meters (2 octets) -# 161-199Reserved -200 R Entire atmosphere considered as a single layer 0 (2 octets) -201 201 Entire ocean considered as a single layer 0 (2 octets) -210 pl Isobaric surface (Pa) (ECMWF extension) -211 wv Ocean wave level (ECMWF extension) -212 oml Ocean mixed layer (ECMWF extension) -222 SYN Synthetic Satellite Images (DWD extension) diff --git a/definitions/grib3/local/edzw/5.table b/definitions/grib3/local/edzw/5.table deleted file mode 100755 index 7f7c99d41..000000000 --- a/definitions/grib3/local/edzw/5.table +++ /dev/null @@ -1,24 +0,0 @@ -# CODE TABLE 5 Time Range Indicator -0 0 Forecast product valid at reference time + P1 (P1>0) -1 1 Initialized analysis product for reference time (P1=0). -2 2 Product with a valid time ranging between reference time + P1 and reference time + P2 -3 3 Average (reference time + P1 to reference time + P2) -4 4 Accumulation (reference time + P1 to reference time + P2) product considered valid at reference time + P2 -5 5 Difference (reference time + P2 minus reference time + P1) product considered valid at reference time + P2 -6 6 Average (reference time - P1 to reference time - P2) -7 7 Average (reference time - P1 to reference time + P2) -10 10 P1 occupies octets 19 and 20; product valid at reference time + P1 -11 11 local use: Initialized forecast (P1 > 0) for IDFI -13 13 local use: Fields from analyses valid at reference time for P1 = 0 -14 14 local use: IFS forecast interpolated to GME triangular grid -51 51 Climatological Mean Value: -113 113 Average of N forecasts (or initialized analyses); each product has forecast period of P1 (P1=0 for initialized analyses); products have reference times at intervals of P2, beginning at the given reference time. -114 114 Accumulation of N forecasts (or initialized analyses); each product has forecast period of P1 (P1=0 for initialized analyses); products have reference times at intervals of P2, beginning at the given reference time. -115 115 Average of N forecasts, all with the same reference time; the first has a forecast period of P1, the remaining forecasts follow at intervals of P2. -116 116 Accumulation of N forecasts, all with the same reference time; the first has a forecast period of P1, the remaining follow at intervals of P2. -117 117 Average of N forecasts, the first has a period of P1, the subsequent ones have forecast periods reduced from the previous one by an interval of P2; the reference time for the first is given in octets 13- 17, the subsequent ones have reference times increased from the previous one by an interval of P2. Thus all the forecasts have the same valid time, given by the initial reference time + P1. -118 118 Temporal variance, or covariance, of N initialized analyses; each product has forecast period P1=0; products have reference times at intervals of P2, beginning at the given reference time. -119 119 Standard deviation of N forecasts, all with the same reference time with respect to the time average of forecasts; the first forecast has a forecast period of P1, the remaining forecasts follow at intervals of P2 -123 123 Average of N uninitialized analyses, starting at the reference time, at intervals of P2. -124 124 Accumulation of N uninitialized analyses, starting at the reference time, at intervals of P2. -125 125 Standard deviation of N forecasts, all with the same reference time with respect to time average of the time tendency of forecasts; the first forecast has a forecast period of P1, the remaining forecasts follow at intervals of P2 diff --git a/definitions/grib3/local/edzw/generatingProcessIdentifier.table b/definitions/grib3/local/edzw/generatingProcessIdentifier.table deleted file mode 100755 index f2ecd9af0..000000000 --- a/definitions/grib3/local/edzw/generatingProcessIdentifier.table +++ /dev/null @@ -1,86 +0,0 @@ -025 AN2MO AN2MO -033 ANALY ANALY -034 WAMIT WAMIT -036 GPEPS GPEPS -037 KWGFS KWGFS -038 KWGF5 KWGF5 -044 B106V B106V -049 S106V S106V -053 AN1MO AN1MO -058 EM3AN EM3AN -059 EM3MO EM3MO -061 ECMFM ECMFM -064 KWBCM KWBCM -065 LFPWM LFPWM -068 KWB01 KWB01 -069 SGGLO SGGLO -074 B106A B106A -075 SGMED SGMED -079 S106A S106A -080 ECENS ECENS -081 NORMW NORMW -084 NORM3 NORM3 -085 SGNAT SGNAT -086 SGESH SGESH -087 SGBAL SGBAL -088 MOMI3 MOMI3 -094 P106A P106A -111 DM3AN DM3AN -112 DM3MO DM3MO -115 DM4AN DM4AN -116 DM4MO DM4MO -121 WAFTF WAFTF -122 WAFSZ WAFSZ -123 KWB02 KWB02 -124 KWB03 KWB03 -126 KWB04 KWB04 -127 NAEGR NAEGR -131 LM1AN LM1AN -132 LM1MO LM1MO -134 LM2AN LM2AN -135 LM2MO LM2MO -137 LM3AN LM3AN -138 LM3MO LM3MO -140 ecgm_diag_fc05 ecgm_diag_fc05 -141 I032A I032A -143 I048A I048A -145 I064A I064A -147 I096A I096A -148 I096F I096F -149 I128A I128A -150 I128F I128F -157 R096A R096A -159 R128A R128A -160 R128F R128F -173 I192A I192A -174 I192F I192F -175 I256A I256A -176 I256F I256F -185 R192A R192A -186 R192F R192F -187 R256A R256A -188 R256F R256F -194 E128A E128A -195 E192A E192A -196 E256A E256A -197 SGGM0 SGGM0 -198 SGGM1 SGGM1 -199 SGGM2 SGGM2 -201 SGLM0 SGLM0 -202 SGLM1 SGLM1 -205 SGBSH SGBSH -206 I384A I384A -207 I384F I384F -208 R384A R384A -209 R384F R384F -210 E384A E384A -211 EGMES EGMES -212 LFMES LFMES -213 LM4MO LM4MO -214 LM4AN LM4AN -215 LM5MO LM5MO -216 LM5AN LM5AN -217 LM6MO LM6MO -218 LM6AN LM6AN -219 LM7MO LM7MO -225 SGBS1 SGBS1 diff --git a/definitions/grib3/tables/local/ecmf/4/1.2.table b/definitions/grib3/tables/local/ecmf/4/1.2.table deleted file mode 100644 index a0f9c9739..000000000 --- a/definitions/grib3/tables/local/ecmf/4/1.2.table +++ /dev/null @@ -1,4 +0,0 @@ -# CODE TABLE 1.2, Significance of Reference Time -191 191 funny reference time -#4-191 Reserved -#192-254 Reserved for local use diff --git a/definitions/grib3/tables/local/ecmf/obstat.1.0.table b/definitions/grib3/tables/local/ecmf/obstat.1.0.table deleted file mode 100644 index 92a1b7824..000000000 --- a/definitions/grib3/tables/local/ecmf/obstat.1.0.table +++ /dev/null @@ -1,2 +0,0 @@ -#Code Table obstat.1.0: Monitoring Statistics Outputs types -1 obstat Monitoring statistics diff --git a/definitions/grib3/tables/local/ecmf/obstat.10.0.table b/definitions/grib3/tables/local/ecmf/obstat.10.0.table deleted file mode 100644 index 347e17f6a..000000000 --- a/definitions/grib3/tables/local/ecmf/obstat.10.0.table +++ /dev/null @@ -1,42 +0,0 @@ -#Code Table obstat.10.0: Data selection criteria -1 Active Active data -2 All All data -3 Non_Active Not Active data -4 Best_Active Best active wind -5 Used Used data -6 VarQC_Rej VarQC rejected data -7 Blacklisted Blacklisted data -8 Failed Failed data -9 Passed_FgCheck Data that passed FG check -10 Non_Rejected All non rejected data -11 VarBC_Passive VarBC passive channels -12 Failed_FG_Non_Black Data failed FG check but not blacklisted -13 Failed_FG_VarQC_Rej Data failed FG check and VARQC rejected -#14-19 Reserved for additional standard IFS flags -20 QI_LE_20 AMVs with QI <= 20 -21 QI_LE_66 AMVs with 20 < QI <=65 -22 QI_GE_65 AMVs with QI > 65 -23 QI_GE_80 AMVs with QI > 80 -24 QI_GE_90 AMVs with QI > 90 -#25-29 Reserved for additional AMVs flags -30 Clear_LE_70%WV_80%IR CSR data with clear fraction < 70 % (WV) and < 80 % (IR) -31 Clear_GE_70%WV_80%IR CSR data with clear fraction >= 70 % (WV) and >= 80 % (IR) -32 Clear_100% CSR data completely clear (according to IR window channel) -33 Clear_GE_40%WV CSR data with clear fraction >= 40 % (WV) -34 Clear_GE_70%WV CSR data with clear fraction >= 70 % (WV) -35 Clear_100%WV CSR data completely clear (according to WV channel) -#36-39 Reserved for additional CSR flags -40 Clear Clear -41 Used_Clear Used clear data -42 Used_Cloudy_Rainy Used cloudy and rainy data -43 All_Cloudy_Rainy All cloudy and rainy data -44 Used_ObsCld_FGClr Used Obs cloudy and FG clear -45 Used_ObsClr_FGCld Used Obs clear and FG cloudy -#44-49 Reserved for additional radiances flags -50 Good_ozone Good ozone data -51 Daytime Day time data -52 Nighttime Night time data -#53-69 Reserved for additional ozone, trace gases and Aerosol flags -#70-79 Reserved for GPSRO flags -#80-89 Reserved for scatterometer flags -#33-255 Reserved diff --git a/definitions/grib3/tables/local/ecmf/obstat.11.0.table b/definitions/grib3/tables/local/ecmf/obstat.11.0.table deleted file mode 100644 index 2d82ce7e7..000000000 --- a/definitions/grib3/tables/local/ecmf/obstat.11.0.table +++ /dev/null @@ -1,4 +0,0 @@ -#Code Table obstat.11.0: Scan position definition -0 0 Explicit scan position (table 11.1) -1 1 Scan position interval (table 11.2) -255 255 Missing diff --git a/definitions/grib3/tables/local/ecmf/obstat.2.0.table b/definitions/grib3/tables/local/ecmf/obstat.2.0.table deleted file mode 100644 index e3aea161d..000000000 --- a/definitions/grib3/tables/local/ecmf/obstat.2.0.table +++ /dev/null @@ -1,13 +0,0 @@ -#Code Table obstat.2.0: Observation types -1 Synop Synop -2 Airep Airep -3 Satob Satob -4 Dribu Dribu -5 Temp Temp -6 Pilot Pilot -7 Satem Satem -8 Paob Paob -9 Scatterometer Scatterometer -10 GPSRO Limb -13 Radar Radar -#14-255 Reserved diff --git a/definitions/grib3/tables/local/ecmf/obstat.3.0.table b/definitions/grib3/tables/local/ecmf/obstat.3.0.table deleted file mode 100644 index 60b907f57..000000000 --- a/definitions/grib3/tables/local/ecmf/obstat.3.0.table +++ /dev/null @@ -1,52 +0,0 @@ -#Code Table obstat.3.0: Observation code types -2 RADAR RADAR 1 -8 SCATTEROMETER1 SCATTEROMETER 1 -11 Manual_land Manual land station -14 Automatic_land Automatic land station -21 Ship Ship -22 Ship Ship abbreviated -23 Shred Shred -24 Automatic_ship Automatic Ship -32 Land LAND -33 Ship SHIP -34 Profilers WIND PROFILERS -35 Land LAND -36 Ship SHIP -37 Mobile MOBILE -39 Land_Racob LAND ROCOB -40 Ship_Racob SHIP ROCOB -41 Codar Codar -63 Bathy BATHY -64 Tesac TESAC -86 SATEM_GTS SATEM VIA GTS -88 Satob Satob -89 High-Res_VIS_wind High-resolution VIS wind -90 AMV AMV -122 SCATTEROMETER2 SCATTEROMETER 2 -139 SCATTEROMETER3 SCATTEROMETER 3 -141 Aircraft Aircraft -142 Simulated Simulated -144 Amdar Amdar -145 Acars Acars -160 ERS_AS_DRIBU ERS as DRIBU -165 DRIBU DRIBU -135 DROP DROP -137 SIMULATED SIMULATED -180 PAOB PAOB -184 High_Res_Sim_SATEM HIGH RESOLUTION SIMULATED SATEM -185 High_Res_Sim_DWLTOVS HIGH RESOLUTION SIMULATED DWL TOVS -186 High_Res_Sat HIGH RESOLUTION SATTELITE REPORT -188 SST SST -200 GTS_BUFR_SATEM GTS BUFR 250 KM SATEM -201 GTS_BUFR_CLR_Rad GTS BUFR SATEM CLEAR RADIANCE -202 GTS_BUFR_DATEM_RETR GTS BUFR SATEM RETRIEVED PROFILES AND CLEAR RADIANCES -206 OZONE RETRIEVED OZONE (TOTAL & PROFILES) -210 L1C_RADIANCES LEVEL 1C CALIBRATED RADIANCES -211 RTOVS_CLR_RAD RTOVS CLEAR RADIANCES AND RETRIEVED -212 TOVS_CLEAR_RAD TOVS CLEAR RADIANCES AND RETRIEVED -215 AllSky_MWRAD SSMI/AMSRE/SSMIS/TMI -241 COLBA Colba -250 GPSRO GPS RADIO OCCULTATION -251 LIMB LIMB RADIANCES -300 SCATTEROMETER4 SCATTEROMETER 4 -301 SCATTEROMETER5 SCATTEROMETER 5 diff --git a/definitions/grib3/tables/local/ecmf/obstat.4.0.table b/definitions/grib3/tables/local/ecmf/obstat.4.0.table deleted file mode 100644 index a342b56d2..000000000 --- a/definitions/grib3/tables/local/ecmf/obstat.4.0.table +++ /dev/null @@ -1,82 +0,0 @@ -#Code Table obstat.4.0: List of meteorological satellites -1 ERS-1 ERS 1 -2 ERS-2 ERS 2 -3 METOP-B METOP-B -4 METOP-A METOP-A -41 CHAMP CHAMP -42 TERRA-SAR-X TERRA-SAR-X -46 SMOS SMOS -54 METEOSAT-7 METEOSAT 7 -55 METEOSAT-8 METEOSAT 8 -56 METEOSAT-9 METEOSAT 9 -57 METEOSAT-10 METEOSAT 10 -58 METEOSAT-1 METEOSAT 1 -59 METEOSAT-2 METEOSAT 2 -60 ENVISAT ENVISAT -70 METEOSAT-11 METEOSAT-11 -122 GCOM-W1 GCOM-W1 -140 GOSAT GOSAT -171 MTSAT-1R MTSAT-1R -172 MTSAT-2 MTSAT-2 -200 NOAA-8 NOAA-8 -201 NOAA-9 NOAA-9 -202 NOAA-10 NOAA-10 -203 NOAA-11 NOAA-11 -204 NOAA-12 NOAA-12 -205 NOAA-14 NOAA 14 -206 NOAA-15 NOAA 15 -207 NOAA-16 NOAA 16 -208 NOAA-17 NOAA 17 -209 NOAA-18 NOAA 18 -222 AQUA AQUA -223 NOAA-19 NOAA 19 -224 NPP NPP -240 DMSP-7 DMSP-7 -241 DMSP-8 DMSP-8 -242 DMSP-9 DMSP-9 -243 DMSP-10 DMSP-10 -244 DMSP-11 DMSP-11 -246 DMSP-13 DMSP-13 -246 DMSP-13 DMSP 13 -247 DMSP-14 DMSP 14 -248 DMSP-15 DMSP 15 -249 DMSP-16 DMSP 16 -253 GOES-9 GOES 9 -254 GOES-10 GOES 10 -255 GEOS-11 GOES 11 -256 GEOS-12 GOES 12 -257 GEOS-13 GOES 13 -258 GEOS-14 GOES 14 -259 GEOS-15 GOES 15 -260 JASON-1 JASON-1 -261 JASON-2 JASON-2 -281 QUIKSCAT QUIKSCAT -282 TRMM TRMM -283 CORIOLIS CORIOLIS -285 DMSP17 DMSP 17 -286 DMSP18 DMSP 18 -421 OCEANSAT-2 OCEANSAT-2 -500 FY-1C FY-1C -501 FY-1D FY-1D -510 FY-2 FY-2 -512 FY-2B FY-2B -513 FY-2C FY-2C -514 FY-2D FY-2D -515 FY-2E FY-2E -520 FY-3A FY-3A -521 FY-3B FY-3B -722 GRACE-A GRACE-A -706 NOAA-6 NOAA-6 -707 NOAA-7 NOAA-7 -708 TIROS-N TIROS-N -740 COSMIC-1 COSMIC-1 -741 COSMIC-2 COSMIC-2 -742 COSMIC-3 COSMIC-3 -743 COSMIC-4 COSMIC-4 -744 COSMIC-5 COSMIC-5 -745 COSMIC-6 COSMIC-6 -783 TERRA TERRA -784 AQUA AQUA -785 AURA AURA -786 C-NOFS C-NOFS -820 SAC-C SAC-C diff --git a/definitions/grib3/tables/local/ecmf/obstat.5.0.table b/definitions/grib3/tables/local/ecmf/obstat.5.0.table deleted file mode 100644 index 71a9a0e8c..000000000 --- a/definitions/grib3/tables/local/ecmf/obstat.5.0.table +++ /dev/null @@ -1,53 +0,0 @@ -#Code Table obstat.5.0: List of satellite instruments -0 HIRS HIRS -1 MSU MSU -2 SSU SSU -3 AMSUA AMSUA -4 AMSUB AMSUB -6 SSM/I SSM/I -9 TMI TMI -10 SSMI/S SSMI/S -11 AIRS AIRS -15 MHS MHS -16 IASI IASI -17 AMSRE AMSR-E -19 ATMS ATMS -20 MVIRI MVIRI -21 SEVIRI SEVIRI -22 GOES GOES Imager -24 MTSAT-1R MTSAT-1R imager -27 CrIS CrIS -30 WINDSAT WINDSAT -40 MWTS MWTS -41 MWHS MWHS -63 AMSR2 AMSR2 -102 GPSRO GPSRO -172 GOMOS GOMOS -174 MERIS MERIS -175 SCIAMACHY SCIAMACHY -202 GRAS GRAS -207 SEVIRI_O3 SEVIRI O3 -220 GOME-2 GOME-2 -387 MLS MLS -394 OMI OMI -516 TANSO TANSO -624 SBUV-2 SBUV-2 -2000 AMV_WV_CLOUDY AMV WV cloudy -2001 AMV_IR AMV IR -2002 AMV_VIS AMV VIS -2003 AMV_WVMIX AMV WVMIX -2005 AMV_WV_Clear AMV Water Vapor clear -2100 AMV_WV_6.2_cloudy AMV WV 6.2 cloudy -2101 AMV_IR_ch1 AMV IR ch1 -2102 AMV_VIS_ch1 AMV VIS ch1 -2105 AMV_WV_6.2_clear AMV WV_6.2 clear -2200 AMV_WV_7.3_cloudy AMV WV 7.3 cloudy -2201 AMV_IR_ch2 AMV IR ch2 -2202 AMV_VIS-2 AMV VIS-2 -2205 AMV_WV_7.3_clear AMV WV 7.3 clear -2300 AMV_WV_cloudy_ch3 AMV WV cloudy ch 3 -2301 AMV_IR-10 AMV IR-10 -2305 AMV_WV_clear_Ch3 AMV WV clear Ch3 -2350 QUIKSCAT QUIKSCAT -2150 SCAT SCAT -2190 ASCAT ASCAT diff --git a/definitions/grib3/tables/local/ecmf/obstat.6.0.table b/definitions/grib3/tables/local/ecmf/obstat.6.0.table deleted file mode 100644 index 2bb1fa927..000000000 --- a/definitions/grib3/tables/local/ecmf/obstat.6.0.table +++ /dev/null @@ -1,6 +0,0 @@ -#Code Table obstat.6.0: List of data streams -0 Normal_delivery Normal delivery -1 EARS EARS -2 PAC-RARS PAC-RARS -3 DB_MODIS DB MODIS winds -#4-255 Reserved diff --git a/definitions/grib3/tables/local/ecmf/obstat.7.0.table b/definitions/grib3/tables/local/ecmf/obstat.7.0.table deleted file mode 100644 index fcd1c2e02..000000000 --- a/definitions/grib3/tables/local/ecmf/obstat.7.0.table +++ /dev/null @@ -1,6 +0,0 @@ -#Code Table obstat.7.0: Vertical coordinate types -1 1 Channel -2 2 Pressure level -3 3 Pressure layer -4 4 Surface -#5-255 Reserved diff --git a/definitions/grib3/tables/local/ecmf/obstat.8.0.table b/definitions/grib3/tables/local/ecmf/obstat.8.0.table deleted file mode 100644 index 42bba1488..000000000 --- a/definitions/grib3/tables/local/ecmf/obstat.8.0.table +++ /dev/null @@ -1,6 +0,0 @@ -#Code Table obstat.8.0: List Mask types -1 Land Land -2 Sea Sea -3 Sea-ice Sea-ice -4 All_surfaces All surface types combined -#5-255 Reserved diff --git a/definitions/grib3/tables/local/ecmf/obstat.9.0.table b/definitions/grib3/tables/local/ecmf/obstat.9.0.table deleted file mode 100644 index bed03c028..000000000 --- a/definitions/grib3/tables/local/ecmf/obstat.9.0.table +++ /dev/null @@ -1,52 +0,0 @@ -#Code Table obstat.9.0: Observation diagnostics -1 count data count -2 obs Average of observed values -3 obs_stdv Standard deviation of observed values -4 fgdep Average of first guess departure -5 fgdep_stdv Standard deviation of first guess departure -6 andep Average of analysis departure -7 andep_stdv Standard deviation of analysis departure -8 obs_error Average of observation standard error -9 obs_error_stdv Standard deviation of observation standard error -10 bkg_error Average of background standard error -11 bkg_error_stdv Standard deviation of background standard error -12 lr_andep1 Average of low resolution analysis departure update 1 -13 lr_andep1_stdv Standard deviation of low resolution analysis departure update 1 -14 hr_fgdep2 Average of high resolution background departure update 2 -15 hr_fgdep2_stdv Standard deviation of high resolution background departure update 2 -16 lr_andep2 Average of low resolution analysis departure update 2 -17 lr_andep2_stdv Standard deviation of low resolution analysis departure update 2 -18 bcor Average of Bias correction -19 bcor_stdv Standard deviation of bias correction -20 vbcor average of Variational bias correction -21 vbcor_stdv Standard deviation of variational bias correction -22 fgdep_nbcor Average of background departure without bias correction -23 fgdep_nbcor_stdv Standard deviation of background departure without bias correction -24 windspeed Average of wind speed -25 windspeed_stdv Standard deviation of wind speed -26 norm_andep Average of normalised analysis fit -27 norm_andep_stdv Standard deviation of normalised analysis fit -28 norm_fgdep Average of normalised background fit -29 norm_fgdep_stdv Standard deviation of normalised background fit -30 fso Average of forecast sensitivity to observations -31 fso_stdv stdv of forecast sensitivity to observations -32 norm_obs Average of normalised observation -33 norm_obs_stdv stdv of normalised observation -34 anso Average of analyse sensitivity to observations -35 anso_stdv stdv of analyse sensitivity to observations -40 fcst_dep1 Average of forecast departure for step 1 -41 fcst_dep1_stdv Standard deviation of forecast departure for step 1 -42 fcst_dep2 Average of forecast departure for step 2 -43 fcst_dep2_stdv Standard deviation of forecast departure for step 2 -44 norm_fcst_dep1 Average of normalised forecast departure for step 1 -45 norm_fcst_dep1_stdv Standard deviation of normalised forecast departure for step 1 -46 norm_fcst_dep2 Average of normalised forecast departure for step 2 -47 norm_fcst_dep2_stdv Standard deviation of normalised forecast departure for step 2 -60 far_rate False alarm rate -62 miss_rate Miss rate -64 hit_rate hit rate -66 corr_nul correct nuls -68 est_fg_err Estimated variance of the first guess error -70 edafgspr EDA first guess variance -72 edaanspr EDA Analysis variance -#36-255 Reserved diff --git a/definitions/grib3/tables/local/ecmf/obstat.reporttype.table b/definitions/grib3/tables/local/ecmf/obstat.reporttype.table deleted file mode 100644 index 75ccf2900..000000000 --- a/definitions/grib3/tables/local/ecmf/obstat.reporttype.table +++ /dev/null @@ -1,185 +0,0 @@ -#Code Table obstat.reporttype: List of Report types -1 TIROS-N TIROS-N -2 NOAA-6/HIRS NOAA-6/HIRS -3 NOAA-7/HIRS NOAA-7/HIRS -4 NOAA-8/HIRS NOAA-8/HIRS -5 NOAA-9/HIRS NOAA-9/HIRS -6 NOAA-10/HIRS NOAA-10/HIRS -7 NOAA-11/HIRS NOAA-11/HIRS -8 NOAA-12/HIRS NOAA-12/HIRS -9 NOAA-14/HIRS NOAA-14/HIRS -10 NOAA-15/HIRS NOAA-15/HIRS -11 NOAA-16/HIRS NOAA-16/HIRS -12 NOAA-17/HIRS NOAA-17/HIRS -13 NOAA-18/HIRS NOAA-18/HIRS -14 NOAA-19/HIRS NOAA-19/HIRS -15 METOP-A/HIRS METOP-A/HIRS -1001 NOAA-15/AMSUA NOAA-15/AMSUA -1002 NOAA-16/AMSUA NOAA-16/AMSUA -1003 NOAA-17/AMSUA NOAA-17/AMSUA -1004 NOAA-18/AMSUA NOAA-18/AMSUA -1005 NOAA-19/AMSUA NOAA-19/AMSUA -1006 NOAA-19/AMSUA NOAA-19/AMSUA -1007 METOP-A/AMSUA METOP-A/AMSUA -1008 AQUA/AMSUA AQUA/AMSUA -2001 NOAA-15/AMSUB NOAA-15/AMSUB -2002 NOAA-16/AMSUB NOAA-16/AMSUB -2003 NOAA-17/AMSUB NOAA-17/AMSUB -2004 NOAA-18/AMSUB NOAA-18/AMSUB -2005 NOAA-18/AMSUB NOAA-18/AMSUB -3001 NOAA-19/MHS NOAA-19/MHS -3002 METOP-A/MHS METOP-A/MHS -4001 GOES-5/IMAGER GOES-5/IMAGER -4002 GOES-8/IMAGER GOES-8/IMAGER -4003 GOES-9/IMAGER GOES-9/IMAGER -4004 GOES-10/IMAGER GOES-10/IMAGER -4005 GOES-11/IMAGER GOES-11/IMAGER -4006 GOES-12/IMAGER GOES-12/IMAGER -4007 METEOSAT-7/MVIRI METEOSAT-7/MVIRI -4008 METEOSAT-8/SEVIRI METEOSAT-8/SEVIRI -4009 METEOSAT-9/SEVIRI METEOSAT-9/SEVIRI -4010 MTSAT-1R/IMAGER MTSAT-1R/IMAGER -5001 ERS-2/GOME ERS-2/GOME -5002 METEOSAT-8/SEVIRI METEOSAT-8/SEVIRI -5003 METEOSAT-9/SEVIRI METEOSAT-9/SEVIRI -5004 AURA/MLS AURA/MLS -5005 AURA/OMI AURA/OMI -5006 NOAA-9/SBUV NOAA-9/SBUV -5007 NOAA-11/SBUV NOAA-11/SBUV -5008 NOAA-14/SBUV NOAA-14/SBUV -5009 NOAA-16/SBUV NOAA-16/SBUV -5010 NOAA-17/SBUV NOAA-17/SBUV -5011 NOAA-18/SBUV NOAA-18/SBUV -5012 NOAA-19/SBUV NOAA-19/SBUV -5013 METOP-A/GOME-2 METOP-A/GOME-2 -5014 ENVISAT/SCIAMACHY ENVISAT/SCIAMACHY -5015 ENVISAT/GOMOS ENVISAT/GOMOS -5016 ENVISAT/MIPAS ENVISAT/MIPAS -5017 Metror-3/TOMS Metror-3/TOMS -5018 Nimbus-7/TOMS Nimbus-7/TOMS -6001 ENVISAT/GOMOS ENVISAT/GOMOS -6002 ENVISAT/MERIS ENVISAT/MERIS -7001 METOP-A/GRAS METOP-A/GRAS -7002 CHAMP CHAMP -7003 GRACE-A GRACE-A -7004 COSMIC-1 COSMIC-1 -7005 COSMIC-2 COSMIC-2 -7006 COSMIC-3 COSMIC-3 -7007 COSMIC-4 COSMIC-4 -7008 COSMIC-5 COSMIC-5 -7009 COSMIC-6 COSMIC-6 -8001 METEOSAT-2/AMV METEOSAT-2/AMV -8002 METEOSAT-3/AMV METEOSAT-3/AMV -8003 METEOSAT-4/AMV METEOSAT-4/AMV -8014 METEOSAT-5/AMV METEOSAT-5/AMV -8005 METEOSAT-6/AMV METEOSAT-6/AMV -8006 METEOSAT-7/AMV METEOSAT-7/AMV -8007 METEOSAT-8/AMV METEOSAT-8/AMV -8008 METEOSAT-9/AMV METEOSAT-9/AMV -8009 GMS-5/AMV GMS-5/AMV -8010 MTSAT-1R/AMV MTSAT-1R/AMV -8011 GOES-9/WV GOES-9/WV -8012 GOES-10/AMV GOES-10/AMV -8013 GOES-11/AMV GOES-11/AMV -8014 GOES-12/AMV GOES-12/AMV -8015 NOAA-15/AVHRR NOAA-15/AVHRR -8016 NOAA-16/AVHRR NOAA-16/AVHRR -8017 NOAA-17/AVHRR NOAA-17/AVHRR -8018 NOAA-18/AVHRR NOAA-18/AVHRR -8019 NOAA-19/AVHRR NOAA-19/AVHRR -8020 TERRA/MODIS TERRA/MODIS -8021 AQUA/MODIS AQUA/MODIS -8022 FY-2C/IR FY-2C/IR -9001 ERS/SCATT ERS/SCATT -9002 ERS/SCATT ERS/SCATT -9003 ERS-2/SCATT ERS-2/SCATT -9004 QuickSCAT/SeaWind QuickSCAT/SeaWind -9005 METOP-A/ASCAT METOP-A/ASCAT -10001 DSMP-7/SSMI DSMP-7/SSMI -10002 DSMP-8/SSMI DSMP-8/SSMI -10003 DSMP-9/SSMI DSMP-9/SSMI -10004 DSMP-10/SSMI DSMP-10/SSMI -10005 DSMP-11/SSMI DSMP-11/SSMI -10006 DSMP-13/SSMI DSMP-13/SSMI -10007 DSMP-14/SSMI DSMP-14/SSMI -10008 DSMP-15/SSMI DSMP-15/SSMI -10009 DSMP-8/SSMI DSMP-8/SSMI -10010 DSMP-9/SSMI DSMP-9/SSMI -10011 DSMP-10/SSMI DSMP-10/SSMI -10012 DSMP-11/SSMI DSMP-11/SSMI -10013 DSMP-13/SSMI DSMP-13/SSMI -10014 DSMP-14/SSMI DSMP-14/SSMI -10015 DSMP-15/SSMI DSMP-15/SSMI -11001 METOP-A/IASI METOP-A/IASI -12001 AQUA/AIRS AQUA/AIRS -13001 DMSP-16/SSMIS DMSP-16/SSMIS -14001 TRMM/TMI TRMM/TMI -15001 AQUA/AMSRE AQUA/AMSRE -16001 Automatic-Land Automatic-Land -16002 Manual-Land Manual-Land -16003 Abbreviated-SYNOP Abbreviated-SYNOP -16004 METAR METAR -16005 DRIBU DRIBU -16006 Automatic-SHIP Automatic-SHIP -16007 Reduced-SHIP Reduced-SHIP -16008 SHIP SHIP -16009 Abbreviated-SHIP Abbreviated-SHIP -16010 DRIBU-BATHY DRIBU-BATHY -16011 DRIBU-TESAC DRIBU-TESAC -16012 Ground-Based-GPS Ground-Based-GPS -16013 Land-PILOT Land-PILOT -16014 PILOT-SHIP PILOT-SHIP -16015 American-WindProfilers American-WindProfilers -16016 American-WindProfilers American-WindProfilers -16017 European-WindProfilers European-WindProfilers -16018 Japanese-WindProfilers Japanese-WindProfilers -16019 TEMP-SHIP TEMP-SHIP -16020 DROP-Sonde DROP-Sonde -16021 Mobile-TEMP Mobile-TEMP -16022 Land-TEMP Land-TEMP -16023 ROCOB-TEMP ROCOB-TEMP -16024 SHIP-ROCOB SHIP-ROCOB -16025 European-WindProfilers European-WindProfilers -16026 AIREP AIREP -16027 CODAR CODAR -16028 COLBA COLBA -16029 AMDAR AMDAR -16030 ACARS ACARS -16031 PAOB PAOB -16032 PAOB PAOB -16033 SATOB_Temperature SATOB_Temperature -16034 SATOB_Wind SATOB_Wind -16035 SATOB_Temperature SATOB_Temperature -16036 SATOB_Temperature SATOB_Temperature -16037 SATEM_500km SATEM_500km -16038 SATEM_500km SATEM_500km -16039 SATEM_500km SATEM_500km -16040 SATEM_500km SATEM_500km -16041 SATEM_250km SATEM_250km -16042 SATEM_250km SATEM_250km -16043 SATEM_250km SATEM_250km -16044 SATEM_250km SATEM_250km -17001 Automatic_Land Automatic_Land -17002 Manual_Land Manual_Land -17003 Abbreviated_SYNOP Abbreviated_SYNOP -17004 METAR METAR -17005 DRIBU DRIBU -17006 Automatic_SHIP Automatic_SHIP -17007 Reduced_SHIP Reduced_SHIP -17008 SHIP SHIP -17009 Abbreviated-SHIP Abbreviated-SHIP -17010 DRIBU-BATHY DRIBU-BATHY -17011 DRIBU-TESAC DRIBU-TESAC -17012 Ground-Based_GPS Ground-Based_GPS -17013 Land-PILOT Land-PILOT -17014 PILOT-SHIP PILOT-SHIP -17015 American-Wind American-Wind -17016 American-Wind American-Wind -17017 European-Wind European-Wind -17018 Japanese-Wind Japanese-Wind -17019 TEMP-SHIP TEMP-SHIP -17020 DROP-Sonde DROP-Sonde -17021 Mobile-TEMP Mobile-TEMP -17022 Land-TEMP Land-TEMP -17023 ROCOB-TEMP ROCOB-TEMP -17024 SHIP-ROCOB SHIP-ROCOB diff --git a/definitions/grib3/tables/local/ecmf/obstat.varno.table b/definitions/grib3/tables/local/ecmf/obstat.varno.table deleted file mode 100644 index cb80dc4e1..000000000 --- a/definitions/grib3/tables/local/ecmf/obstat.varno.table +++ /dev/null @@ -1,31 +0,0 @@ -#Code Table obstat.4.0: List of variable number -110 P Pressure (Pa) - 1 Z Geopotential height (m) - 57 Z Geopotential height (m) - 3 U zonal component of wind (m/s) - 4 V meridional component of wind (m/s) - 41 10mU 10 m zonal component of wind (m/s) - 42 10mV 10 m meridional component of wind (m/s) -125 Amb_10mU 10 m zonal ambiguous component of wind (m/s) -124 Amb_10mV 10 m meridional ambiguous component of wind (m/s) -111 DD wind direction (DD) degree -112 FF wind speed (FF) m/s - 2 T Temperature (K) - 39 T2m 2m temperature (K) - 59 DewPT Dew point temperature (K) -119 BT Brightness temperature (K) - 7 SHU specific humidity (Kg/kg) - 9 PWC precipitable water content (Kg/m2) - 58 RH 2m relative humidity (%) -123 LWC liquid water content (Kg/m2) -206 Ozone integrated ozone density (O3) DU -128 Path_delay Atmospheric path delay -162 Bending_Angle Bending Angle (Alpha) Radians -174 Aerosol Aerosol -181 NO2 Nitrogen dioxide (NO2) -182 SO2 Sulphur dioxide (SO2) -183 CO Carbon monoxide (CO) -184 HCHO Formaldehyde (HCHO) -185 GO3 GEMS ozone (GO3) -186 CO2 Carbone dioxide (CO2) -188 CH4 Methane (CH4) diff --git a/definitions/grib3/template.3.shape_of_the_earth.def b/definitions/grib3/template.3.shape_of_the_earth.def old mode 100755 new mode 100644 diff --git a/definitions/grib3/template.4.horizontal.def b/definitions/grib3/template.4.horizontal.def old mode 100755 new mode 100644 diff --git a/definitions/grib3/template.8.missing_value.def b/definitions/grib3/template.8.missing_value.def old mode 100755 new mode 100644 diff --git a/definitions/grib3/template.8.packing.def b/definitions/grib3/template.8.packing.def old mode 100755 new mode 100644 diff --git a/definitions/mars/stream.table b/definitions/mars/stream.table index 0d9967d84..a5d90c167 100644 --- a/definitions/mars/stream.table +++ b/definitions/mars/stream.table @@ -112,6 +112,7 @@ 1252 gfas Global fire assimilation system 1253 ocda Ocean data assimilation 1254 olda Ocean Long window data assimilation +1255 gfra Global fire assimilation system reanalysis 2231 cnrm Meteo France climate centre 2232 mpic Max Plank Institute 2233 ukmo UKMO climate centre diff --git a/definitions/mars/type.table b/definitions/mars/type.table index ab4c0b887..94001b890 100644 --- a/definitions/mars/type.table +++ b/definitions/mars/type.table @@ -58,6 +58,8 @@ 71 fx Flux forcing 72 fu Fill-up 73 sfo Simulations with forcing +74 tpa Time processed analysis +75 if Interim forecast 80 fcmean Forecast mean 81 fcmax Forecast maximum 82 fcmin Forecast minimum diff --git a/doxygen/doxypy.py b/doxygen/doxypy.py index 649281b24..365ed2f2c 100755 --- a/doxygen/doxypy.py +++ b/doxygen/doxypy.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 __applicationName__ = "doxypy" __blurb__ = """ diff --git a/examples/C/bufr_copy_data.c b/examples/C/bufr_copy_data.c index 589a7de1b..3bc8c7a39 100644 --- a/examples/C/bufr_copy_data.c +++ b/examples/C/bufr_copy_data.c @@ -93,7 +93,7 @@ int main(int argc, char* argv[]) printf("Copied %s\n", keys[i]); free(keys[i]); } - printf("Total number of copied keys = %lu\n", (unsigned long)nkeys); + printf("Total number of copied keys = %zu\n", nkeys); free(keys); codes_handle_delete(h); diff --git a/examples/C/bufr_expanded.c b/examples/C/bufr_expanded.c index 838dd70a6..6d103f68f 100644 --- a/examples/C/bufr_expanded.c +++ b/examples/C/bufr_expanded.c @@ -57,7 +57,7 @@ int main(int argc, char* argv[]) /* get the size of the values array*/ CODES_CHECK(codes_get_size(h, "numericValues", &values_len), 0); - printf(" number of expanded values: %lu\n", (unsigned long)values_len); + printf(" number of expanded values: %zu\n", values_len); /* allocate array for data values */ values = (double*)malloc(values_len * sizeof(double)); diff --git a/examples/C/bufr_get_string_array.c b/examples/C/bufr_get_string_array.c index 43f499074..5568f924a 100644 --- a/examples/C/bufr_get_string_array.c +++ b/examples/C/bufr_get_string_array.c @@ -56,7 +56,7 @@ int main(int argc, char* argv[]) for (i = 0; i < size; ++i) { printf("%s\n", strArray[i]); } - printf("stationOrSiteName string array size = %lu\n", (unsigned long)size); + printf("stationOrSiteName string array size = %zu\n", size); /* free allocated arrays */ for (i = 0; i < size; ++i) diff --git a/examples/C/bufr_keys_iterator.c b/examples/C/bufr_keys_iterator.c index 1f739078d..47770e257 100644 --- a/examples/C/bufr_keys_iterator.c +++ b/examples/C/bufr_keys_iterator.c @@ -98,7 +98,7 @@ int main(int argc, char* argv[]) } else { /* for arrays */ - printf("(array of %lu)\n", (unsigned long)klen); + printf("(array of %zu)\n", klen); } } diff --git a/examples/C/bufr_read_scatterometer.c b/examples/C/bufr_read_scatterometer.c index 0709dfc43..42313ed52 100644 --- a/examples/C/bufr_read_scatterometer.c +++ b/examples/C/bufr_read_scatterometer.c @@ -71,7 +71,7 @@ int main(int argc, char* argv[]) printf("Number of values: %ld\n", numObs); /* Get latitude */ - sprintf(key_name, "latitude"); + snprintf(key_name, sizeof(key_name), "latitude"); /* Check the size (including all the subsets) */ CODES_CHECK(codes_get_size(h, key_name, &len), 0); @@ -88,7 +88,7 @@ int main(int argc, char* argv[]) CODES_CHECK(codes_get_double_array(h, key_name, lat, &len), 0); /* Get longitude */ - sprintf(key_name, "longitude"); + snprintf(key_name, sizeof(key_name), "longitude"); /* Check the size (including all the subsets) */ CODES_CHECK(codes_get_size(h, key_name, &len), 0); @@ -102,7 +102,7 @@ int main(int argc, char* argv[]) CODES_CHECK(codes_get_double_array(h, key_name, lon, &len), 0); /* Get backScatter for beam two. We use an access by condition for this key. */ - sprintf(key_name, "/beamIdentifier=2/backscatter"); + snprintf(key_name, sizeof(key_name), "/beamIdentifier=2/backscatter"); /* Check the size (including all the subsets) */ CODES_CHECK(codes_get_size(h, key_name, &len), 0); diff --git a/examples/C/bufr_read_temp.c b/examples/C/bufr_read_temp.c index 32eab7e39..baedebea9 100644 --- a/examples/C/bufr_read_temp.c +++ b/examples/C/bufr_read_temp.c @@ -81,10 +81,10 @@ int main(int argc, char* argv[]) /* we find out the number of temperature significant levels by * counting how many pressure values we have on these levels.*/ - sprintf(key_name, "/verticalSoundingSignificance=4/pressure"); + snprintf(key_name, sizeof(key_name), "/verticalSoundingSignificance=4/pressure"); CODES_CHECK(codes_get_size(h, key_name, &sigt_len), 0); - printf("Number of T significant levels: %lu\n", (unsigned long)sigt_len); + printf("Number of T significant levels: %zu\n", sigt_len); /* allocate memory for the values to be read. Each * parameter must have the same number of values. */ @@ -94,12 +94,12 @@ int main(int argc, char* argv[]) sigt_td = (double*)malloc(sigt_len * sizeof(double)); /* get pressure */ - sprintf(key_name, "/verticalSoundingSignificance=4/pressure"); + snprintf(key_name, sizeof(key_name), "/verticalSoundingSignificance=4/pressure"); len = sigt_len; CODES_CHECK(codes_get_double_array(h, key_name, sigt_pres, &len), 0); /* get geopotential */ - sprintf(key_name, "/verticalSoundingSignificance=4/nonCoordinateGeopotential"); + snprintf(key_name, sizeof(key_name), "/verticalSoundingSignificance=4/nonCoordinateGeopotential"); /* check the size */ CODES_CHECK(codes_get_size(h, key_name, &len), 0); @@ -120,7 +120,7 @@ int main(int argc, char* argv[]) } /* get the values */ - sprintf(key_name, "/verticalSoundingSignificance=4/airTemperature"); + snprintf(key_name, sizeof(key_name), "/verticalSoundingSignificance=4/airTemperature"); CODES_CHECK(codes_get_double_array(h, key_name, sigt_t, &len), 0); /* get dew point */ @@ -131,7 +131,7 @@ int main(int argc, char* argv[]) } /* get the values */ - sprintf(key_name, "/verticalSoundingSignificance=4/dewpointTemperature"); + snprintf(key_name, sizeof(key_name), "/verticalSoundingSignificance=4/dewpointTemperature"); CODES_CHECK(codes_get_double_array(h, key_name, sigt_td, &len), 0); /* print the values */ diff --git a/examples/C/bufr_read_tempf.c b/examples/C/bufr_read_tempf.c index 378ea0a8d..dd7a10466 100644 --- a/examples/C/bufr_read_tempf.c +++ b/examples/C/bufr_read_tempf.c @@ -14,7 +14,7 @@ * Description: read and print radiosonde data from TEMP BUFR messages. * If available this version also lists the position information from the WMO list * (now OSCAR/Surface) appended to the reports by ECMWF - * + * * Author: Bruce Ingleby */ @@ -112,7 +112,7 @@ int main(int argc, char* argv[]) CODES_CHECK(codes_get_long(h, "blockNumber", &blockNumber), 0); CODES_CHECK(codes_get_long(h, "stationNumber", &stationNumber), 0); if (blockNumber < 99 && stationNumber < 1000) - sprintf(statid, "%ld%ld", blockNumber, stationNumber); + snprintf(statid, sizeof(statid), "%ld%ld", blockNumber, stationNumber); CODES_CHECK(codes_get_long(h, "year", &year), 0); CODES_CHECK(codes_get_long(h, "month", &month), 0); CODES_CHECK(codes_get_long(h, "day", &day), 0); @@ -178,7 +178,7 @@ int main(int argc, char* argv[]) realloc_and_fill(&tdVal, sizews, -999999999.0); } /* Print the values */ - printf("Ob: %7d %s %ld %ld %7.3f %7.3f %7.1f %7.1f %4ld %5lu\n", + printf("Ob: %7d %s %ld %ld %7.3f %7.3f %7.1f %7.1f %4ld %5zu\n", count, statid, ymd, hms, lat[0], lon[0], htg, htp, sondeType, sizews); if (status_rsno == CODES_SUCCESS) { printf("RS number/software/balloonwt: %s %s %7.3f\n", rsnumber, rssoftware, balloonwt); @@ -190,7 +190,7 @@ int main(int argc, char* argv[]) for (i = 0; i < sizews; ++i) { long iflag = vssVal[i]; if (!llstdonly || BTEST(iflag, 16)) { - printf("%5lu %6ld %7.3f %7.3f %9.1f %8.1f %8.2f %8.2f %8.2f %8.2f %8ld\n", + printf("%5zu %6ld %7.3f %7.3f %9.1f %8.1f %8.2f %8.2f %8.2f %8.2f %8ld\n", i + 1, timeVal[i], dlatVal[i], dlonVal[i], presVal[i], zVal[i], tVal[i], tdVal[i], diff --git a/examples/C/bufr_subset.c b/examples/C/bufr_subset.c index 191dedc42..66bf695b4 100644 --- a/examples/C/bufr_subset.c +++ b/examples/C/bufr_subset.c @@ -60,28 +60,28 @@ int main(int argc, char* argv[]) /* loop over the subsets */ for (i = 1; i <= numberOfSubsets; i++) { - sprintf(key, "/subsetNumber=%d/blockNumber", i); + snprintf(key, sizeof(key), "/subsetNumber=%d/blockNumber", i); printf(" subsetNumber=%d", i); /* read and print some data values */ CODES_CHECK(codes_get_long(h, key, &longVal), 0); printf(" blockNumber=%ld", longVal); - sprintf(key, "/subsetNumber=%d/stationNumber", i); + snprintf(key, sizeof(key), "/subsetNumber=%d/stationNumber", i); CODES_CHECK(codes_get_long(h, key, &longVal), 0); printf(" stationNumber=%ld", longVal); - sprintf(key, "/subsetNumber=%d/stationOrSiteName->units", i); + snprintf(key, sizeof(key), "/subsetNumber=%d/stationOrSiteName->units", i); CODES_CHECK(codes_get_length(h, key, &stringLen), 0); assert(stringLen == 10); /* should be "CCITT IA5" */ - sprintf(key, "/subsetNumber=%d/stationOrSiteName", i); + snprintf(key, sizeof(key), "/subsetNumber=%d/stationOrSiteName", i); CODES_CHECK(codes_get_length(h, key, &stringLen), 0); CODES_CHECK(codes_get_string(h, key, stringVal, &stringLen), 0); assert(stringLen > 0 && stringLen < 17); printf(" stationOrSiteName=\"%s\"", stringVal); - sprintf(key, "/subsetNumber=%d/airTemperature", i); + snprintf(key, sizeof(key), "/subsetNumber=%d/airTemperature", i); CODES_CHECK(codes_get_double(h, key, &doubleVal), 0); printf(" airTemperature=%g\n", doubleVal); assert(doubleVal > 265 && doubleVal < 278); diff --git a/examples/C/grib_ensemble_index.c b/examples/C/grib_ensemble_index.c index aab96f64d..1e86aae0b 100644 --- a/examples/C/grib_ensemble_index.c +++ b/examples/C/grib_ensemble_index.c @@ -39,7 +39,7 @@ int main(int argc, char* argv[]) /* get size of "paramId" list */ CODES_CHECK(codes_index_get_size(index, "paramId", ¶mIdSize), 0); - printf("grib contains %lu different parameters\n", (unsigned long)paramIdSize); + printf("grib contains %zu different parameters\n", paramIdSize); /* allocate memory for "paramId" list */ paramId = (char**)malloc(paramIdSize * sizeof(char*)); /* get list of "paramId" */ @@ -47,7 +47,7 @@ int main(int argc, char* argv[]) /* get size of ensemble number list */ CODES_CHECK(codes_index_get_size(index, "number", &numberSize), 0); - printf("GRIB contains %lu different ensemble members\n", (unsigned long)numberSize); + printf("GRIB contains %zu different ensemble members\n", numberSize); /* allocate memory for ensemble number list */ number = (long*)malloc(numberSize * sizeof(long)); /* get list of ensemble numbers */ diff --git a/examples/C/grib_index.c b/examples/C/grib_index.c index 858757951..64a131dcd 100644 --- a/examples/C/grib_index.c +++ b/examples/C/grib_index.c @@ -34,7 +34,7 @@ int main(int argc, char* argv[]) size_t stepSize, levelSize, shortNameSize, numberSize; long ostep, olevel, onumber; char oshortName[200]; - size_t lenshortName = 200; + size_t lenshortName = sizeof(oshortName); int ret = 0, count = 0; if (argc != 2) usage(argv[0]); @@ -64,7 +64,7 @@ int main(int argc, char* argv[]) /* get the list of distinct steps from the index */ /* the list is in ascending order */ CODES_CHECK(codes_index_get_long(index, "step", steps, &stepSize), 0); - printf("stepSize=%ld\n", (long)stepSize); + printf("stepSize=%zu\n", stepSize); for (i = 0; i < stepSize; i++) printf("%ld ", steps[i]); printf("\n"); @@ -75,7 +75,7 @@ int main(int argc, char* argv[]) if (!levels) exit(1); /*same as for "step"*/ CODES_CHECK(codes_index_get_long(index, "level", levels, &levelSize), 0); - printf("levelSize=%ld\n", (long)levelSize); + printf("levelSize=%zu\n", levelSize); for (i = 0; i < levelSize; i++) printf("%ld ", levels[i]); printf("\n"); @@ -86,7 +86,7 @@ int main(int argc, char* argv[]) if (!numbers) exit(1); /*same as for "step"*/ CODES_CHECK(codes_index_get_long(index, "number", numbers, &numberSize), 0); - printf("numberSize=%ld\n", (long)numberSize); + printf("numberSize=%zu\n", numberSize); for (i = 0; i < numberSize; i++) printf("%ld ", numbers[i]); printf("\n"); @@ -97,7 +97,7 @@ int main(int argc, char* argv[]) if (!shortName) exit(1); /*same as for "step"*/ CODES_CHECK(codes_index_get_string(index, "shortName", shortName, &shortNameSize), 0); - printf("shortNameSize=%ld\n", (long)shortNameSize); + printf("shortNameSize=%zu\n", shortNameSize); for (i = 0; i < shortNameSize; i++) printf("%s ", shortName[i]); printf("\n"); @@ -131,7 +131,7 @@ int main(int argc, char* argv[]) fprintf(stderr, "Error: %s\n", codes_get_error_message(ret)); exit(ret); } - lenshortName = 200; + lenshortName = sizeof(oshortName); codes_get_string(h, "shortName", oshortName, &lenshortName); codes_get_long(h, "level", &olevel); codes_get_long(h, "number", &onumber); diff --git a/examples/C/grib_iterator_bitmap.c b/examples/C/grib_iterator_bitmap.c index 6cf21b1d1..5060dc43c 100644 --- a/examples/C/grib_iterator_bitmap.c +++ b/examples/C/grib_iterator_bitmap.c @@ -55,7 +55,7 @@ int main(int argc, char** argv) CODES_CHECK(codes_get_size(h, "bitmap", &bmp_len), 0); bitmap = (long*)malloc(bmp_len * sizeof(long)); CODES_CHECK(codes_get_long_array(h, "bitmap", bitmap, &bmp_len), 0); - printf("Bitmap is present. Num = %lu\n", (unsigned long)bmp_len); + printf("Bitmap is present. Num = %zu\n", bmp_len); } /* sanity check. Number of values must match number in bitmap */ CODES_CHECK(codes_get_size(h, "values", &values_len), 0); diff --git a/examples/C/grib_list.c b/examples/C/grib_list.c index 403d0ce42..c5e1e71f0 100644 --- a/examples/C/grib_list.c +++ b/examples/C/grib_list.c @@ -65,7 +65,7 @@ int main(int argc, char** argv) /* get as a long*/ CODES_CHECK(codes_get_size(h, "scaledValueOfCentralWaveNumber", &count), 0); - printf("count=%ld\n", (long)count); + printf("count=%zu\n", count); assert(count < sizeof(values) / sizeof(values[0])); @@ -74,7 +74,7 @@ int main(int argc, char** argv) assert(size == count); for (i = 0; i < count; i++) { - printf("scaledValueOfCentralWaveNumber %lu = %ld\n", (unsigned long)i, values[i]); + printf("scaledValueOfCentralWaveNumber %zu = %ld\n", i, values[i]); if (i == 0) assert(values[i] == 26870); if (i == 1) assert(values[i] == 9272); } @@ -91,7 +91,7 @@ int main(int argc, char** argv) CODES_CHECK(codes_get_long_array(h, "scaledValueOfCentralWaveNumber", new_values, &size), 0); assert(size == count); for (i = 0; i < count; i++) { - printf("Now scaledValueOfCentralWaveNumber %lu = %ld\n", (unsigned long)i, new_values[i]); + printf("Now scaledValueOfCentralWaveNumber %zu = %ld\n", i, new_values[i]); assert(new_values[i] == (i + 1000)); } diff --git a/examples/C/grib_multi.c b/examples/C/grib_multi.c index e5271f250..24479075d 100644 --- a/examples/C/grib_multi.c +++ b/examples/C/grib_multi.c @@ -14,7 +14,7 @@ * Description: How to decode GRIB2 multi-field messages. * Try to turn the 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. */ #include #include diff --git a/examples/C/grib_values_check.c b/examples/C/grib_values_check.c index 3c382bfcd..5582c6af6 100644 --- a/examples/C/grib_values_check.c +++ b/examples/C/grib_values_check.c @@ -48,7 +48,7 @@ int main(int argc, char* argv[]) for (i = 0; i < nvalues; i++) { if (values[i].error == err) name = (char*)values[i].name; } - printf("Error: \"%s\" %s\n", name, codes_get_error_message(err)); + fprintf(stderr, "Error: \"%s\" %s\n", name, codes_get_error_message(err)); } values[1].name = "levelll"; @@ -57,7 +57,7 @@ int main(int argc, char* argv[]) for (i = 0; i < nvalues; i++) { if (values[i].error == err) name = (char*)values[i].name; } - printf("Error: \"%s\" %s\n", name, codes_get_error_message(err)); + fprintf(stderr, "Error: \"%s\" %s\n", name, codes_get_error_message(err)); } codes_handle_delete(h); diff --git a/examples/C/grib_values_check.sh b/examples/C/grib_values_check.sh index 7ac41b52d..4a86131dc 100755 --- a/examples/C/grib_values_check.sh +++ b/examples/C/grib_values_check.sh @@ -10,9 +10,8 @@ . ./include.ctest.sh -#Define a common label for all the tmp files +# Define a common label for all the tmp files label="grib_values_check_c" -tempOut=${label}.tmp.out tempErr=${label}.tmp.err tempRef=${label}.tmp.ref @@ -22,11 +21,11 @@ Error: "levelll" Key/value not found EOF # Input GRIB file path is hard coded in the example -${examples_dir}/c_grib_values_check > $tempOut +${examples_dir}/c_grib_values_check 2> $tempErr -# Compare output with the reference -cat $tempOut -diff $tempRef $tempOut +# Compare stderr with the reference +cat $tempErr +diff $tempRef $tempErr # Clean up -rm -f $tempRef $tempErr $tempOut +rm -f $tempRef $tempErr diff --git a/examples/C/large_grib1.c b/examples/C/large_grib1.c index 0b4b21620..6f5b3dc7a 100644 --- a/examples/C/large_grib1.c +++ b/examples/C/large_grib1.c @@ -26,7 +26,7 @@ int main() numbytes = ni * nj * sizeof(double); values = (double*)malloc(numbytes); if (!values) { - printf("Malloc failed - requested %lu bytes\n", (unsigned long)numbytes); + fprintf(stderr, "Malloc failed - requested %zu bytes\n", numbytes); return 1; } diff --git a/examples/C/new_sample.c b/examples/C/new_sample.c index 0e483c472..529b52b29 100644 --- a/examples/C/new_sample.c +++ b/examples/C/new_sample.c @@ -233,7 +233,7 @@ int main(int argc, char** argv) size = 496; vdouble = (double*)calloc(size, sizeof(double)); if (!vdouble) { - fprintf(stderr, "failed to allocate %lu bytes\n", (unsigned long)(size * sizeof(double))); + fprintf(stderr, "failed to allocate %zu bytes\n", size * sizeof(double)); exit(1); } diff --git a/examples/F90/bufr_attributes.f90 b/examples/F90/bufr_attributes.f90 index 51b387ec7..13338f5fe 100644 --- a/examples/F90/bufr_attributes.f90 +++ b/examples/F90/bufr_attributes.f90 @@ -35,18 +35,18 @@ program bufr_attributes ! We need to instruct ecCodes to expand all the descriptors ! i.e. unpack the data values - call codes_set(ibufr, "unpack", 1); + call codes_set(ibufr, "unpack", 1); ! ---------------------------------------------------------------- ! We will read the value and all the attributes available for ! the 2m temperature. ! ---------------------------------------------------------------- ! Get the element's value as as real - call codes_get(ibufr, 'airTemperatureAt2M', t2m); + call codes_get(ibufr, 'airTemperatureAt2M', t2m); write (*, *) ' airTemperatureAt2M:', t2m ! Get the element's code (see BUFR code table B) - call codes_get(ibufr, 'airTemperatureAt2M->code', iVal); + call codes_get(ibufr, 'airTemperatureAt2M->code', iVal); write (*, *) ' airTemperatureAt2M->code:', iVal ! Get the element's units (see BUFR code table B) @@ -54,15 +54,15 @@ program bufr_attributes write (*, *) ' airTemperatureAt2M->units:', units ! Get the element's scale (see BUFR code table B) - call codes_get(ibufr, 'airTemperatureAt2M->scale', iVal); + call codes_get(ibufr, 'airTemperatureAt2M->scale', iVal); write (*, *) ' airTemperatureAt2M->code:', iVal ! Get the element's reference (see BUFR code table B) - call codes_get(ibufr, 'airTemperatureAt2M->reference', iVal); + call codes_get(ibufr, 'airTemperatureAt2M->reference', iVal); write (*, *) ' airTemperatureAt2M->reference:', iVal ! Get the element's width (see BUFR code table B) - call codes_get(ibufr, 'airTemperatureAt2M->width', iVal); + call codes_get(ibufr, 'airTemperatureAt2M->width', iVal); write (*, *) ' airTemperatureAt2M->width:', iVal ! ------------------------------------------------------------------- @@ -72,11 +72,11 @@ program bufr_attributes ! ------------------------------------------------------------------- ! Get the element's value as as real - call codes_get(ibufr, 'airTemperatureAt2M->percentConfidence', conf); + call codes_get(ibufr, 'airTemperatureAt2M->percentConfidence', conf); write (*, *) ' airTemperatureAt2M->percentConfidence:', conf ! Get the element's code (see BUFR code table B) - call codes_get(ibufr, 'airTemperatureAt2M->percentConfidence->code', iVal); + call codes_get(ibufr, 'airTemperatureAt2M->percentConfidence->code', iVal); write (*, *) ' airTemperatureAt2M->percentConfidence->code:', iVal ! Get the element's units (see BUFR code table B) @@ -84,15 +84,15 @@ program bufr_attributes write (*, *) ' airTemperatureAt2M->percentConfidence->units:', confUnits ! Get the element's scale (see BUFR code table B) - call codes_get(ibufr, 'airTemperatureAt2M->percentConfidence->scale', iVal); + call codes_get(ibufr, 'airTemperatureAt2M->percentConfidence->scale', iVal); write (*, *) ' airTemperatureAt2M->percentConfidence->code:', iVal ! Get the element's reference (see BUFR code table B) - call codes_get(ibufr, 'airTemperatureAt2M->percentConfidence->reference', iVal); + call codes_get(ibufr, 'airTemperatureAt2M->percentConfidence->reference', iVal); write (*, *) ' airTemperatureAt2M->percentConfidence->reference:', iVal ! Get the element's width (see BUFR code table B) - call codes_get(ibufr, 'airTemperatureAt2M->percentConfidence->width', iVal); + call codes_get(ibufr, 'airTemperatureAt2M->percentConfidence->width', iVal); write (*, *) ' airTemperatureAt2M->percentConfidence->width:', iVal ! Release the BUFR message diff --git a/examples/F90/bufr_attributes.sh b/examples/F90/bufr_attributes.sh index 12418e86a..c4d0b781b 100755 --- a/examples/F90/bufr_attributes.sh +++ b/examples/F90/bufr_attributes.sh @@ -11,24 +11,18 @@ . ./include.ctest.sh -#Define a common label for all the tmp files +# Define a common label for all the tmp files label="bufr_attributes_test_f" -#Define tmp file +# Define tmp file fTmp=${label}.tmp.txt rm -f ${fTmp} -#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 +${examples_dir}/eccodes_f_bufr_attributes > $fTmp -REDIRECT=/dev/null +# Check the results +grep -q 'airTemperatureAt2M->percentConfidence->code: *33007' $fTmp +grep -q 'airTemperatureAt2M->percentConfidence->width: *7' $fTmp -#Write the values into a file and compare with reference -${examples_dir}/eccodes_f_bufr_attributes #2> $REDIRECT > $fTmp - -#TODO: check the results - -#cat $fTmp - -#Clean up rm -f ${fTmp} diff --git a/examples/F90/bufr_clone.sh b/examples/F90/bufr_clone.sh index f22cd64d2..ab4902b81 100755 --- a/examples/F90/bufr_clone.sh +++ b/examples/F90/bufr_clone.sh @@ -9,31 +9,30 @@ . ./include.ctest.sh -#Define a common label for all the tmp files +# Define a common label for all the tmp files label="bufr_clone_test_f" -#Prepare tmp file fBufrTmp=${label}.clone.bufr rm -f $fBufrTmp -#We clone a bufr file with multiple messages. +# We clone a bufr file with multiple messages f=${data_dir}/bufr/syno_multi.bufr REDIRECT=/dev/null -#The input ($f) and output ($fBufrTmp) are hardcoded in the f90 example!!! +# The input ($f) and output ($fBufrTmp) are hardcoded in the f90 example ${examples_dir}/eccodes_f_bufr_clone >$REDIRECT 2> $REDIRECT -#Compare clone to the original +# Compare clone to the original. Should be different set +e ${tools_dir}/bufr_compare $f $fBufrTmp >$REDIRECT 2> $REDIRECT -#Check if clone is different +# Check if clone is different if [ $? -eq 0 ]; then - echo "cloning produced identical files " >&2 + echo "Error: cloning produced identical files " >&2 exit 1 fi set -e -#Clean up +# Clean up rm -f ${fBufrTmp} diff --git a/examples/F90/bufr_ecc-1019.f90 b/examples/F90/bufr_ecc-1019.f90 index 2ca499996..d595c624b 100644 --- a/examples/F90/bufr_ecc-1019.f90 +++ b/examples/F90/bufr_ecc-1019.f90 @@ -69,8 +69,8 @@ program operator_3_test ivalues = 0 call codes_set(ibufr,'#1#scaledIasiRadiance',ivalues) call codes_set(ibufr,'#2#scaledIasiRadiance',ivalues) - deallocate(ivalues) - + deallocate(ivalues) + call codes_set(ibufr,'pack',1) call codes_open_file(outfile, outfile_name, 'w') diff --git a/examples/F90/bufr_expanded.f90 b/examples/F90/bufr_expanded.f90 index 23b9c037e..d646eed5a 100644 --- a/examples/F90/bufr_expanded.f90 +++ b/examples/F90/bufr_expanded.f90 @@ -34,7 +34,7 @@ program bufr_expanded ! We need to instruct ecCodes to expand all the descriptors ! i.e. unpack the data values - call codes_set(ibufr, "unpack", 1); + call codes_set(ibufr, "unpack", 1); ! Get the expanded data values call codes_get(ibufr, 'numericValues', values) diff --git a/examples/F90/bufr_expanded.sh b/examples/F90/bufr_expanded.sh index 79d1f3018..9c3c37ace 100755 --- a/examples/F90/bufr_expanded.sh +++ b/examples/F90/bufr_expanded.sh @@ -9,33 +9,28 @@ . ./include.ctest.sh -#Define a common label for all the tmp files +# Define a common label for all the tmp files label="bufr_expanded_test_f" -#Prepare tmp file fTmp=${label}.tmp.txt rm -f $fTmp #----------------------------------------------------- # Test reading the expanded values #---------------------------------------------------- - #f=${data_dir}/bufr/syno_1.bufr REDIRECT=/dev/null -#We check "syno_1.bufr". The path is -#hardcoded in the example +# We check "syno_1.bufr". The path is hard coded in the example -#Write the values into a file +# Write the values into a file ${examples_dir}/eccodes_f_bufr_expanded > $fTmp 2> $REDIRECT -#TODO: add a better check. It could be compared against the bufrdc -# references. +#TODO: add a better check. It could be compared against the bufrdc references -#Check if there is any output +# Check if there is any output [ -s ${fTmp} ] -#cat $fTmp +# cat $fTmp -#Clean up rm -f ${fTmp} diff --git a/examples/F90/bufr_get_keys.f90 b/examples/F90/bufr_get_keys.f90 index 29a73b872..afa9c08b6 100644 --- a/examples/F90/bufr_get_keys.f90 +++ b/examples/F90/bufr_get_keys.f90 @@ -37,21 +37,21 @@ program bufr_get_keys ! We need to instruct ecCodes to expand all the descriptors ! i.e. unpack the data values - call codes_set(ibufr, "unpack", 1); + call codes_set(ibufr, "unpack", 1); ! Get as character call codes_get(ibufr, 'typicalDate', typicalDate) write (*, *) ' typicalDate:', typicalDate ! Get as integer - call codes_get(ibufr, 'blockNumber', blockNumber); + call codes_get(ibufr, 'blockNumber', blockNumber); write (*, *) ' blockNumber:', blockNumber ! Get as integer - call codes_get(ibufr, 'stationNumber', stationNumber); + call codes_get(ibufr, 'stationNumber', stationNumber); write (*, *) ' stationNumber:', stationNumber ! get as real - call codes_get(ibufr, 'airTemperatureAt2M', t2m); + call codes_get(ibufr, 'airTemperatureAt2M', t2m); write (*, *) ' airTemperatureAt2M:', t2m ! ---- array of integer ---------------- diff --git a/examples/F90/bufr_get_keys.sh b/examples/F90/bufr_get_keys.sh index 943ae1411..a36d205b3 100755 --- a/examples/F90/bufr_get_keys.sh +++ b/examples/F90/bufr_get_keys.sh @@ -28,7 +28,7 @@ ${examples_dir}/eccodes_f_bufr_get_keys 2> $REDIRECT > $fTmp #TODO: check the results -#cat $fTmp +#cat $fTmp #Clean up rm -f ${fTmp} diff --git a/examples/F90/bufr_keys_iterator.f90 b/examples/F90/bufr_keys_iterator.f90 index 0548a86bc..6e66a7c16 100644 --- a/examples/F90/bufr_keys_iterator.f90 +++ b/examples/F90/bufr_keys_iterator.f90 @@ -36,7 +36,7 @@ program bufr_keys_iterator ! We need to instruct ecCodes to expand all the descriptors ! i.e. unpack the data values - call codes_set(ibufr, "unpack", 1); + call codes_set(ibufr, "unpack", 1); ! Create BUFR keys iterator call codes_bufr_keys_iterator_new(ibufr, kiter, iret) diff --git a/examples/F90/bufr_keys_iterator.sh b/examples/F90/bufr_keys_iterator.sh index ee9d27ca0..6e3982b88 100755 --- a/examples/F90/bufr_keys_iterator.sh +++ b/examples/F90/bufr_keys_iterator.sh @@ -10,23 +10,19 @@ . ./include.ctest.sh -#Define a common label for all the tmp files +# Define a common label for all the tmp files label="bufr_keys_iterator_test_f" -#Define tmp file fTmp=${label}".tmp.txt" rm -f $fTmp -REDIRECT=/dev/null - f=${data_dir}/bufr/syno_1.bufr -#The input ($f) is hardcoded in the f90 example!!! -${examples_dir}/eccodes_f_bufr_keys_iterator #2> $REDIRECT > $fTmp +# The input ($f) is hard coded in the example +${examples_dir}/eccodes_f_bufr_keys_iterator > $fTmp -#TODO: check the output +# Check the output +grep -q '#49#dataPresentIndicator' $fTmp +grep -q '#1#generatingApplication' $fTmp -#cat $fTmp - -#Clean up rm -f $fTmp diff --git a/examples/F90/bufr_read_header.f90 b/examples/F90/bufr_read_header.f90 index 20acc2a0d..09a3c4c66 100644 --- a/examples/F90/bufr_read_header.f90 +++ b/examples/F90/bufr_read_header.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 the header of BUFR messages. ! ! @@ -34,16 +32,16 @@ program bufr_read_header ! Get and print some keys from the BUFR header write (*, *) 'message: ', count - call codes_get(ibufr, 'dataCategory', dataCategory); + call codes_get(ibufr, 'dataCategory', dataCategory); write (*, *) ' dataCategory:', dataCategory - call codes_get(ibufr, 'dataSubCategory', dataSubCategory); + call codes_get(ibufr, 'dataSubCategory', dataSubCategory); write (*, *) ' dataSubCategory:', dataSubCategory - call codes_get(ibufr, 'typicalDate', typicalDate); + call codes_get(ibufr, 'typicalDate', typicalDate); write (*, *) ' typicalDate:', typicalDate - call codes_get(ibufr, 'bufrHeaderCentre', centre); + call codes_get(ibufr, 'bufrHeaderCentre', centre); write (*, *) ' bufrHeaderCentre:', centre call codes_get(ibufr, 'bufrHeaderSubCentre', subcentre) diff --git a/examples/F90/bufr_read_scatterometer.f90 b/examples/F90/bufr_read_scatterometer.f90 index a332eb409..aec7555cf 100644 --- a/examples/F90/bufr_read_scatterometer.f90 +++ b/examples/F90/bufr_read_scatterometer.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 data for a given beam from scatterometer BUFR messages. ! ! Please note that scatterometer data can be encoded in various ways in BUFR. Therefore the code @@ -37,7 +35,7 @@ program bufr_read_scatterometer ! We need to instruct ecCodes to expand all the descriptors ! i.e. unpack the data values - call codes_set(ibufr, "unpack", 1); + call codes_set(ibufr, "unpack", 1); ! The BUFR file contains a single message with 2016 subsets in a compressed form. ! It means each subset has exactly the same structure: they store one location with ! several beams and one backscatter value in each beam. @@ -51,18 +49,18 @@ program bufr_read_scatterometer write (*, '(A,I5)') "Number of values:", numObs ! Get latitude (for all the subsets) - call codes_get(ibufr, 'latitude', latVal); + call codes_get(ibufr, 'latitude', latVal); ! Get longitude (for all the subsets) - call codes_get(ibufr, 'longitude', lonVal); + call codes_get(ibufr, 'longitude', lonVal); allocate (year(numObs)) - call codes_get(ibufr, 'year', year); + call codes_get(ibufr, 'year', year); do ii = 1, size(year) write (*, '(A,I4,A,F8.1)') 'year(', ii, ')=', year(ii) end do ! Get backScatter for beam two. We use an access by condition for this key. ! (for all the subsets) - call codes_get(ibufr, '/beamIdentifier=2/backscatter', bscatterVal); + call codes_get(ibufr, '/beamIdentifier=2/backscatter', bscatterVal); ! Check that all arrays are same size if (size(latVal) /= numObs .or. size(lonVal) /= numObs .or. size(bscatterVal) /= numObs) then print *, 'inconsistent array dimension' diff --git a/examples/F90/bufr_read_synop.f90 b/examples/F90/bufr_read_synop.f90 index 1c6440696..d2e288ad7 100644 --- a/examples/F90/bufr_read_synop.f90 +++ b/examples/F90/bufr_read_synop.f90 @@ -60,18 +60,18 @@ program bufr_read_synop write (*, *) ' longitude:', lat ! 2m temperature - call codes_get(ibufr, 'airTemperatureAt2M', t2m); + call codes_get(ibufr, 'airTemperatureAt2M', t2m); write (*, *) ' airTemperatureAt2M:', t2m ! 2m dewpoint temperature - call codes_get(ibufr, 'dewpointTemperatureAt2M', td2m); + call codes_get(ibufr, 'dewpointTemperatureAt2M', td2m); write (*, *) ' dewpointTemperatureAt2M:', td2m ! 10m wind - call codes_get(ibufr, 'windSpeedAt10M', ws); + call codes_get(ibufr, 'windSpeedAt10M', ws); write (*, *) ' windSpeedAt10M:', ws - call codes_get(ibufr, 'windDirectionAt10M', wdir); + call codes_get(ibufr, 'windDirectionAt10M', wdir); write (*, *) ' windDirectionAt10M:', wdir ! The cloud information is stored in several blocks in the diff --git a/examples/F90/bufr_read_synop.sh b/examples/F90/bufr_read_synop.sh index 26028306f..1a634df4f 100755 --- a/examples/F90/bufr_read_synop.sh +++ b/examples/F90/bufr_read_synop.sh @@ -11,24 +11,17 @@ . ./include.ctest.sh -#Define a common label for all the tmp files +# Define a common label for all the tmp files label="bufr_read_synop_test_f" -#Define tmp file fTmp=${label}".tmp.txt" rm -f $fTmp -#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 +${examples_dir}/eccodes_f_bufr_read_synop > $fTmp -REDIRECT=/dev/null +# Check the output +grep -q 'cloudType .low.:' $fTmp +grep -q 'cloudType .high.:' $fTmp -#Write the values into a file and compare with reference -${examples_dir}/eccodes_f_bufr_read_synop #2> $REDIRECT > $fTmp - -#TODO: check the output - -#cat $fTmp - -#Clean up rm -f $fTmp diff --git a/examples/F90/bufr_read_tempf.f90 b/examples/F90/bufr_read_tempf.f90 index e29a13250..3d37c546e 100644 --- a/examples/F90/bufr_read_tempf.f90 +++ b/examples/F90/bufr_read_tempf.f90 @@ -59,7 +59,7 @@ program bufr_read_tempf ! we need to instruct ecCodes to expand all the descriptors ! i.e. unpack the data values - call codes_set(ibufr, "unpack", 1); + call codes_set(ibufr, "unpack", 1); ! In our BUFR message verticalSoundingSignificance is always followed by ! geopotential, airTemperature, dewpointTemperature, ! windDirection, windSpeed and pressure. diff --git a/examples/F90/bufr_read_tropical_cyclone.f90 b/examples/F90/bufr_read_tropical_cyclone.f90 index 353b1f7fd..e1742de3f 100644 --- a/examples/F90/bufr_read_tropical_cyclone.f90 +++ b/examples/F90/bufr_read_tropical_cyclone.f90 @@ -50,12 +50,12 @@ program bufr_read_tropical_cyclone write (*, '(A,I3,A)') '**************** MESSAGE: ', count, ' *****************' ! We need to instruct ecCodes to unpack the data values - call codes_set(ibufr, "unpack", 1); - call codes_get(ibufr, 'year', year); - call codes_get(ibufr, 'month', month); - call codes_get(ibufr, 'day', day); - call codes_get(ibufr, 'hour', hour); - call codes_get(ibufr, 'minute', minute); + call codes_set(ibufr, "unpack", 1); + call codes_get(ibufr, 'year', year); + call codes_get(ibufr, 'month', month); + call codes_get(ibufr, 'day', day); + call codes_get(ibufr, 'hour', hour); + call codes_get(ibufr, 'minute', minute); write (*, '(A,I0,A,I0,A,I0,A,I0,A,I0,A,I0)') 'Date and time: ', day, '.', month, '.', year, ' ', hour, ':', minute call codes_get(ibufr, 'stormIdentifier', stormIdentifier) @@ -86,9 +86,9 @@ program bufr_read_tropical_cyclone period(1) = 0 ! Observed Storm Centre - call codes_get(ibufr, '#1#meteorologicalAttributeSignificance', significance); - call codes_get(ibufr, '#1#latitude', latitudeCentre); - call codes_get(ibufr, '#1#longitude', longitudeCentre); + call codes_get(ibufr, '#1#meteorologicalAttributeSignificance', significance); + call codes_get(ibufr, '#1#latitude', latitudeCentre); + call codes_get(ibufr, '#1#longitude', longitudeCentre); if (significance /= 1) then print *, 'ERROR: unexpected #1#meteorologicalAttributeSignificance' stop 1 @@ -100,10 +100,10 @@ program bufr_read_tropical_cyclone end if ! Location of storm in perturbed analysis - call codes_get(ibufr, '#2#meteorologicalAttributeSignificance', significance); - call codes_get(ibufr, '#2#latitude', latitudeAnalysis); - call codes_get(ibufr, '#2#longitude', longitudeAnalysis); - call codes_get(ibufr, '#1#pressureReducedToMeanSeaLevel', pressureAnalysis); + call codes_get(ibufr, '#2#meteorologicalAttributeSignificance', significance); + call codes_get(ibufr, '#2#latitude', latitudeAnalysis); + call codes_get(ibufr, '#2#longitude', longitudeAnalysis); + call codes_get(ibufr, '#1#pressureReducedToMeanSeaLevel', pressureAnalysis); if (significance /= 4) then print *, 'ERROR: unexpected #2#meteorologicalAttributeSignificance' stop 1 @@ -119,14 +119,14 @@ program bufr_read_tropical_cyclone end if ! Location of Maximum Wind - call codes_get(ibufr, '#3#meteorologicalAttributeSignificance', significance); - call codes_get(ibufr, '#3#latitude', latitudeMaxWind0); - call codes_get(ibufr, '#3#longitude', longitudeMaxWind0); + call codes_get(ibufr, '#3#meteorologicalAttributeSignificance', significance); + call codes_get(ibufr, '#3#latitude', latitudeMaxWind0); + call codes_get(ibufr, '#3#longitude', longitudeMaxWind0); if (significance /= 3) then print *, 'ERROR: unexpected #3#meteorologicalAttributeSignificance=', significance stop 1 end if - call codes_get(ibufr, '#1#windSpeedAt10M', windMaxWind0); + call codes_get(ibufr, '#1#windSpeedAt10M', windMaxWind0); if (size(latitudeMaxWind0) == size(memberNumber)) then latitudeWind(:, 1) = latitudeMaxWind0 longitudeWind(:, 1) = longitudeMaxWind0 @@ -148,7 +148,7 @@ program bufr_read_tropical_cyclone rankPeriod = rankPeriod + 1 write (rankPeriodStr, '(I0)') rankPeriod - call codes_get(ibufr, '#'//trim(rankPeriodStr)//'#timePeriod', ivalues); + call codes_get(ibufr, '#'//trim(rankPeriodStr)//'#timePeriod', ivalues); do k = 1, size(ivalues) if (ivalues(k) /= CODES_MISSING_LONG) then period(i) = ivalues(k) @@ -160,7 +160,7 @@ program bufr_read_tropical_cyclone ! Location of the storm rankSignificance = rankSignificance + 1 write (rankSignificanceStr, '(I0)') rankSignificance - call codes_get(ibufr, '#'//trim(rankSignificanceStr)//'#meteorologicalAttributeSignificance', ivalues); + call codes_get(ibufr, '#'//trim(rankSignificanceStr)//'#meteorologicalAttributeSignificance', ivalues); do k = 1, size(ivalues) if (ivalues(k) /= CODES_MISSING_LONG) then significance = ivalues(k) @@ -171,15 +171,15 @@ program bufr_read_tropical_cyclone rankPosition = rankPosition + 1 write (rankPositionStr, '(I0)') rankPosition - call codes_get(ibufr, '#'//trim(rankPositionStr)//'#latitude', values); + call codes_get(ibufr, '#'//trim(rankPositionStr)//'#latitude', values); latitude(:, i) = values - call codes_get(ibufr, '#'//trim(rankPositionStr)//'#longitude', values); + call codes_get(ibufr, '#'//trim(rankPositionStr)//'#longitude', values); longitude(:, i) = values if (significance == 1) then rankPressure = rankPressure + 1 write (rankPressureStr, '(I0)') rankPressure - call codes_get(ibufr, '#'//trim(rankPressureStr)//'#pressureReducedToMeanSeaLevel', values); + call codes_get(ibufr, '#'//trim(rankPressureStr)//'#pressureReducedToMeanSeaLevel', values); pressure(:, i) = values else print *, 'ERROR: unexpected meteorologicalAttributeSignificance=', significance @@ -189,7 +189,7 @@ program bufr_read_tropical_cyclone ! Location of maximum wind rankSignificance = rankSignificance + 1 write (rankSignificanceStr, '(I0)') rankSignificance - call codes_get(ibufr, '#'//trim(rankSignificanceStr)//'#meteorologicalAttributeSignificance', ivalues); + call codes_get(ibufr, '#'//trim(rankSignificanceStr)//'#meteorologicalAttributeSignificance', ivalues); do k = 1, size(ivalues) if (ivalues(k) /= CODES_MISSING_LONG) then significance = ivalues(k) @@ -200,15 +200,15 @@ program bufr_read_tropical_cyclone rankPosition = rankPosition + 1 write (rankPositionStr, '(I0)') rankPosition - call codes_get(ibufr, '#'//trim(rankPositionStr)//'#latitude', values); + call codes_get(ibufr, '#'//trim(rankPositionStr)//'#latitude', values); latitudeWind(:, i) = values - call codes_get(ibufr, '#'//trim(rankPositionStr)//'#longitude', values); + call codes_get(ibufr, '#'//trim(rankPositionStr)//'#longitude', values); longitudeWind(:, i) = values if (significance == 3) then rankWind = rankWind + 1 write (rankWindStr, '(I0)') rankWind - call codes_get(ibufr, '#'//trim(rankWindStr)//'#windSpeedAt10M', values); + call codes_get(ibufr, '#'//trim(rankWindStr)//'#windSpeedAt10M', values); wind(:, i) = values else print *, 'ERROR: unexpected meteorologicalAttributeSignificance=,', significance diff --git a/examples/F90/bufr_subset.f90 b/examples/F90/bufr_subset.f90 index a2327acd3..1d836ced5 100644 --- a/examples/F90/bufr_subset.f90 +++ b/examples/F90/bufr_subset.f90 @@ -35,7 +35,7 @@ program bufr_subset ! We need to instruct ecCodes to expand all the descriptors ! i.e. unpack the data values - call codes_set(ibufr, 'unpack', 1); + call codes_set(ibufr, 'unpack', 1); ! Find out the number of subsets call codes_get(ibufr, 'numberOfSubsets', numberOfSubsets) write (*, *) ' numberOfSubsets:', numberOfSubsets @@ -50,11 +50,11 @@ program bufr_subset write (*, *) ' subsetNumber:', i ! read and print some data values - call codes_get(ibufr, key, blockNumber); + call codes_get(ibufr, key, blockNumber); write (*, *) ' blockNumber:', blockNumber write (key, *) '/subsetNumber=', I, '/stationNumber' - call codes_get(ibufr, 'stationNumber', stationNumber); + call codes_get(ibufr, 'stationNumber', stationNumber); write (*, *) ' stationNumber:', stationNumber end do diff --git a/examples/F90/codes_ecc-1392.f90 b/examples/F90/codes_ecc-1392.f90 index 1b072376d..ab7dc77ee 100644 --- a/examples/F90/codes_ecc-1392.f90 +++ b/examples/F90/codes_ecc-1392.f90 @@ -13,7 +13,7 @@ program codes_ecc_1392 integer :: ifile character(len=60) :: inputfile - + call getarg(1, inputfile) call codes_open_file(ifile, inputfile, 'R') write (*, *) 'Opened file OK: |',inputfile,'|' diff --git a/examples/F90/get_fortran.f90 b/examples/F90/get_fortran.f90 index 4a1dd27e2..01ea18f7d 100644 --- a/examples/F90/get_fortran.f90 +++ b/examples/F90/get_fortran.f90 @@ -101,7 +101,7 @@ program get average = 0 do i = 1, numberOfValues - average = average + values(i); + average = average + values(i); end do average = average/numberOfValues diff --git a/examples/F90/grib_copy_namespace.f90 b/examples/F90/grib_copy_namespace.f90 index 043ba1d62..33a1e06f9 100644 --- a/examples/F90/grib_copy_namespace.f90 +++ b/examples/F90/grib_copy_namespace.f90 @@ -18,7 +18,7 @@ program copy_namespace call codes_open_file(file1, '../../data/reduced_latlon_surface.grib2', 'r') call codes_open_file(file2, '../../data/regular_latlon_surface.grib1', 'r') - call codes_open_file(file3, 'out.grib_copy_namespace.grib', 'w') + call codes_open_file(file3, 'temp.grib_copy_namespace_test_f.grib', 'w') call codes_grib_new_from_file(file1, igrib1) call codes_grib_new_from_file(file2, igrib2) diff --git a/examples/F90/grib_copy_namespace.sh b/examples/F90/grib_copy_namespace.sh index 715e34e34..3c7b1ec4d 100755 --- a/examples/F90/grib_copy_namespace.sh +++ b/examples/F90/grib_copy_namespace.sh @@ -16,8 +16,10 @@ INPUT=../../data/regular_latlon_surface.grib1 res=`${tools_dir}/grib_get -p Ni,Nj $INPUT` [ "$res" = "16 31" ] -#The input and output BUFR files are hardcoded in the f90 example!!! -OUTPUT=out.grib_copy_namespace.grib +# Note: The input and output GRIB files are hardcoded in the example! +# The output is a clone of the regular lat/lon but then +# we copy the reduced lat/lon geography namespace to the output +OUTPUT=temp.$label.grib ${examples_dir}/eccodes_f_grib_copy_namespace res=`${tools_dir}/grib_get -p Ni,Nj $OUTPUT` diff --git a/examples/F90/grib_get_keys.f90 b/examples/F90/grib_get_keys.f90 index 99d95ceb6..1f3ed2f2a 100644 --- a/examples/F90/grib_get_keys.f90 +++ b/examples/F90/grib_get_keys.f90 @@ -40,8 +40,8 @@ program grib_get_keys LOOP: DO WHILE (iret /= CODES_END_OF_FILE) ! 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/multi_fortran.f90 b/examples/F90/multi_fortran.f90 index 3714ee465..41515fec9 100644 --- a/examples/F90/multi_fortran.f90 +++ b/examples/F90/multi_fortran.f90 @@ -10,7 +10,7 @@ ! Description: How to decode GRIB messages containing multiple ! fields. Try to turn on and off multi support 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 diff --git a/experimental/show_compile.sh b/experimental/show_compile.sh index 8ded1f34e..6752ac66b 100755 --- a/experimental/show_compile.sh +++ b/experimental/show_compile.sh @@ -7,7 +7,7 @@ # # In applying this licence, ECMWF does not waive the privileges and immunities granted to it by # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. -# + if [ $# -ne 1 ]; then echo "Usage: `basename $0` /path/to/ecCodes/installation" diff --git a/fortran/grib_fortran.c b/fortran/grib_fortran.c index adf7e8d36..f8a3fc08a 100644 --- a/fortran/grib_fortran.c +++ b/fortran/grib_fortran.c @@ -958,7 +958,7 @@ int grib_f_read_any_headers_only_from_file(int* fid, char* buffer, size_t* nbyte } /*****************************************************************************/ -int grib_f_read_any_from_file_(int* fid, char* buffer, size_t* nbytes) { +int grib_f_read_any_from_file_(int* fid, void* buffer, size_t* nbytes) { grib_context* c; int err=0; FILE* f=get_file(*fid); @@ -971,15 +971,15 @@ int grib_f_read_any_from_file_(int* fid, char* buffer, size_t* nbytes) { return GRIB_INVALID_FILE; } } -int grib_f_read_any_from_file__(int* fid, char* buffer, size_t* nbytes) { +int grib_f_read_any_from_file__(int* fid, void* buffer, size_t* nbytes) { return grib_f_read_any_from_file_(fid,buffer,nbytes); } -int grib_f_read_any_from_file(int* fid, char* buffer, size_t* nbytes) { +int grib_f_read_any_from_file(int* fid, void* buffer, size_t* nbytes) { return grib_f_read_any_from_file_(fid,buffer,nbytes); } /*****************************************************************************/ -int grib_f_write_file_(int* fid, char* buffer, size_t* nbytes) { +int grib_f_write_file_(int* fid, void* buffer, size_t* nbytes) { grib_context* c; FILE* f=get_file(*fid); @@ -996,15 +996,15 @@ int grib_f_write_file_(int* fid, char* buffer, size_t* nbytes) { return GRIB_INVALID_FILE; } } -int grib_f_write_file__(int* fid, char* buffer, size_t* nbytes) { +int grib_f_write_file__(int* fid, void* buffer, size_t* nbytes) { return grib_f_write_file_(fid,buffer,nbytes); } -int grib_f_write_file(int* fid, char* buffer, size_t* nbytes) { +int grib_f_write_file(int* fid, void* buffer, size_t* nbytes) { return grib_f_write_file_(fid,buffer,nbytes); } /*****************************************************************************/ -int grib_f_read_file_(int* fid, char* buffer, size_t* nbytes) { +int grib_f_read_file_(int* fid, void* buffer, size_t* nbytes) { grib_context* c; FILE* f=get_file(*fid); @@ -1021,10 +1021,10 @@ int grib_f_read_file_(int* fid, char* buffer, size_t* nbytes) { return GRIB_INVALID_FILE; } } -int grib_f_read_file__(int* fid, char* buffer, size_t* nbytes) { +int grib_f_read_file__(int* fid, void* buffer, size_t* nbytes) { return grib_f_read_file_(fid,buffer,nbytes); } -int grib_f_read_file(int* fid, char* buffer, size_t* nbytes) { +int grib_f_read_file(int* fid, void* buffer, size_t* nbytes) { return grib_f_read_file_(fid,buffer,nbytes); } @@ -2170,10 +2170,10 @@ int grib_f_print_(int* gid, char* key, int len){ } } int grib_f_print__(int* gid, char* key, int len){ - return grib_f_print_( gid, key, len); + return grib_f_print_(gid, key, len); } int grib_f_print(int* gid, char* key, int len){ - return grib_f_print_( gid, key, len); + return grib_f_print_(gid, key, len); } /*****************************************************************************/ @@ -2181,14 +2181,14 @@ int grib_f_get_error_string_(int* err, char* buf, int len){ const char* err_msg = grib_get_error_message(*err); const size_t erlen = strlen(err_msg); if( len < erlen) return GRIB_ARRAY_TOO_SMALL; - strncpy(buf, err_msg,(size_t)len); + strncpy(buf, err_msg, (size_t)erlen); /* ECC-1488 */ return GRIB_SUCCESS; } -int grib_f_get_error_string__(int* err, char* buf, int len){ - return grib_f_get_error_string_(err,buf,len); +int grib_f_get_error_string__(int* err, char* buf, int len){ + return grib_f_get_error_string_(err, buf, len); } -int grib_f_get_error_string(int* err, char* buf, int len){ - return grib_f_get_error_string_(err,buf,len); +int grib_f_get_error_string(int* err, char* buf, int len){ + return grib_f_get_error_string_(err, buf, len); } /*****************************************************************************/ diff --git a/fortran/grib_fortran_prototypes.h b/fortran/grib_fortran_prototypes.h index 3b7b5b3c6..a6acd5b27 100644 --- a/fortran/grib_fortran_prototypes.h +++ b/fortran/grib_fortran_prototypes.h @@ -16,15 +16,15 @@ extern "C" { int grib_f_read_any_headers_only_from_file_(int *fid, char *buffer, size_t *nbytes); int grib_f_read_any_headers_only_from_file__(int *fid, char *buffer, size_t *nbytes); int grib_f_read_any_headers_only_from_file(int *fid, char *buffer, size_t *nbytes); -int grib_f_read_any_from_file_(int *fid, char *buffer, size_t *nbytes); -int grib_f_read_any_from_file__(int *fid, char *buffer, size_t *nbytes); -int grib_f_read_any_from_file(int *fid, char *buffer, size_t *nbytes); -int grib_f_write_file_(int *fid, char *buffer, size_t *nbytes); -int grib_f_write_file__(int *fid, char *buffer, size_t *nbytes); -int grib_f_write_file(int *fid, char *buffer, size_t *nbytes); -int grib_f_read_file_(int *fid, char *buffer, size_t *nbytes); -int grib_f_read_file__(int *fid, char *buffer, size_t *nbytes); -int grib_f_read_file(int *fid, char *buffer, size_t *nbytes); +int grib_f_read_any_from_file_(int *fid, void *buffer, size_t *nbytes); +int grib_f_read_any_from_file__(int *fid, void *buffer, size_t *nbytes); +int grib_f_read_any_from_file(int *fid, void *buffer, size_t *nbytes); +int grib_f_write_file_(int *fid, void *buffer, size_t *nbytes); +int grib_f_write_file__(int *fid, void *buffer, size_t *nbytes); +int grib_f_write_file(int *fid, void *buffer, size_t *nbytes); +int grib_f_read_file_(int *fid, void *buffer, size_t *nbytes); +int grib_f_read_file__(int *fid, void *buffer, size_t *nbytes); +int grib_f_read_file(int *fid, void *buffer, size_t *nbytes); int grib_f_open_file_(int *fid, char *name, char *op, int lname, int lop); int grib_f_open_file__(int *fid, char *name, char *op, int lname, int lop); int grib_f_open_file(int *fid, char *name, char *op, int lname, int lop); diff --git a/src/action.c b/src/action.c index db88c5dc5..afc002077 100644 --- a/src/action.c +++ b/src/action.c @@ -9,8 +9,7 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * * + * Jean Baptiste Filippi - 01.11.2005 * ***************************************************************************/ #include "grib_api_internal.h" @@ -155,6 +154,8 @@ int grib_action_notify_change(grib_action* a, grib_accessor* observer, grib_acce { grib_action_class* c = a->cclass; + /* See ECC-604 for why we removed the mutexes/locks in this function */ + /*GRIB_MUTEX_INIT_ONCE(&once,&init_mutex);*/ /*GRIB_MUTEX_LOCK(&mutex1);*/ diff --git a/src/action_class_alias.c b/src/action_class_alias.c index 5943a6956..68d8ffff4 100644 --- a/src/action_class_alias.c +++ b/src/action_class_alias.c @@ -9,9 +9,8 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * Enrico Fucile - * * + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -45,7 +44,7 @@ static int create_accessor(grib_section*,grib_action*,grib_loader*); typedef struct grib_action_alias { - grib_action act; + grib_action act; /* Members defined in alias */ char* target; } grib_action_alias; diff --git a/src/action_class_assert.c b/src/action_class_assert.c index 779ea7fde..804dedda0 100644 --- a/src/action_class_assert.c +++ b/src/action_class_assert.c @@ -9,7 +9,7 @@ */ /*************************************************************************** - * Enrico Fucile * + * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" @@ -45,7 +45,7 @@ static int execute(grib_action* a,grib_handle* h); typedef struct grib_action_assert { - grib_action act; + grib_action act; /* Members defined in assert */ grib_expression *expression; } grib_action_assert; diff --git a/src/action_class_close.c b/src/action_class_close.c index e3afcd060..5867d6af5 100644 --- a/src/action_class_close.c +++ b/src/action_class_close.c @@ -38,7 +38,7 @@ static int execute(grib_action* a,grib_handle* h); typedef struct grib_action_close { - grib_action act; + grib_action act; /* Members defined in close */ char *filename; } grib_action_close; @@ -73,7 +73,6 @@ static void init_class(grib_action_class* c) grib_action* grib_action_create_close(grib_context* context, char* filename) { char buf[1024]; - grib_action_close* a; grib_action_class* c = grib_action_class_close; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context, c->size); @@ -85,7 +84,7 @@ grib_action* grib_action_create_close(grib_context* context, char* filename) a->filename = grib_context_strdup_persistent(context, filename); - sprintf(buf, "close_%p", (void*)a->filename); + snprintf(buf, 1024, "close_%p", (void*)a->filename); act->name = grib_context_strdup_persistent(context, buf); diff --git a/src/action_class_concept.c b/src/action_class_concept.c index b28fee027..36fbefde1 100644 --- a/src/action_class_concept.c +++ b/src/action_class_concept.c @@ -11,7 +11,6 @@ /*************************************************************************** * Jean Baptiste Filippi - 01.11.2005 * * Enrico Fucile * - * * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -47,12 +46,12 @@ static void destroy (grib_context*,grib_action*); typedef struct grib_action_concept { - grib_action act; + grib_action act; /* Members defined in gen */ long len; grib_arguments* params; /* Members defined in concept */ - grib_concept_value* concept; + grib_concept_value* concept_value; char* basename; char* masterDir; char* localDir; @@ -135,7 +134,7 @@ int action_concept_get_nofail(grib_accessor* a) grib_action* grib_action_create_concept(grib_context* context, const char* name, - grib_concept_value* concept, + grib_concept_value* concept_value, const char* basename, const char* name_space, const char* defaultkey, const char* masterDir, const char* localDir, const char* ecmfDir, int flags, int nofail) { @@ -170,9 +169,9 @@ grib_action* grib_action_create_concept(grib_context* context, if (defaultkey) act->defaultkey = grib_context_strdup_persistent(context, defaultkey); - a->concept = concept; - if (concept) { - grib_concept_value* conc_val = concept; + a->concept_value = concept_value; + if (concept_value) { + grib_concept_value* conc_val = concept_value; grib_trie* index = grib_trie_new(context); while (conc_val) { conc_val->index = index; @@ -206,7 +205,7 @@ static void destroy(grib_context* context, grib_action* act) { grib_action_concept* self = (grib_action_concept*)act; - grib_concept_value* v = self->concept; + grib_concept_value* v = self->concept_value; if (v) { grib_trie_delete_container(v->index); } @@ -230,17 +229,19 @@ static grib_concept_value* get_concept_impl(grib_handle* h, grib_action_concept* char key[4096] = {0,}; char* full = 0; int id; + const size_t bufLen = sizeof(buf); + const size_t keyLen = sizeof(key); grib_context* context = ((grib_action*)self)->context; grib_concept_value* c = NULL; - if (self->concept != NULL) - return self->concept; + if (self->concept_value != NULL) + return self->concept_value; Assert(self->masterDir); grib_get_string(h, self->masterDir, masterDir, &lenMasterDir); - sprintf(buf, "%s/%s", masterDir, self->basename); + snprintf(buf, bufLen, "%s/%s", masterDir, self->basename); grib_recompose_name(h, NULL, buf, master, 1); @@ -248,11 +249,11 @@ static grib_concept_value* get_concept_impl(grib_handle* h, grib_action_concept* char localDir[1024] = {0,}; size_t lenLocalDir = 1024; grib_get_string(h, self->localDir, localDir, &lenLocalDir); - sprintf(buf, "%s/%s", localDir, self->basename); + snprintf(buf, bufLen, "%s/%s", localDir, self->basename); grib_recompose_name(h, NULL, buf, local, 1); } - sprintf(key, "%s%s", master, local); + snprintf(key, keyLen, "%s%s", master, local); id = grib_itrie_get_id(h->context->concepts_index, key); if ((c = h->context->concepts[id]) != NULL) @@ -328,7 +329,7 @@ static int concept_condition_expression_true(grib_handle* h, grib_concept_condit ok = (grib_get_long(h, c->name, &lval) == GRIB_SUCCESS) && (lval == lres); if (ok) - sprintf(exprVal, "%ld", lres); + snprintf(exprVal, 64, "%ld", lres); break; case GRIB_TYPE_DOUBLE: { @@ -338,22 +339,23 @@ static int concept_condition_expression_true(grib_handle* h, grib_concept_condit ok = (grib_get_double(h, c->name, &dval) == GRIB_SUCCESS) && (dval == dres); if (ok) - sprintf(exprVal, "%g", dres); + snprintf(exprVal, 64, "%g", dres); break; } case GRIB_TYPE_STRING: { const char* cval; - char buf[80]; - char tmp[80]; + char buf[256]; + char tmp[256]; size_t len = sizeof(buf); size_t size = sizeof(tmp); ok = (grib_get_string(h, c->name, buf, &len) == GRIB_SUCCESS) && ((cval = grib_expression_evaluate_string(h, c->expression, tmp, &size, &err)) != NULL) && (err == 0) && (strcmp(buf, cval) == 0); - if (ok) - sprintf(exprVal, "%s", cval); + if (ok) { + snprintf(exprVal, size, "%s", cval); + } break; } @@ -399,7 +401,7 @@ int get_concept_condition_string(grib_handle* h, const char* key, const char* va const char* condition_name = concept_condition->name; Assert(expression); if (concept_condition_expression_true(h, concept_condition, exprVal) && strcmp(condition_name, "one") != 0) { - length += sprintf(result + length, "%s%s=%s", + length += snprintf(result + length, 2048, "%s%s=%s", (length == 0 ? "" : ","), condition_name, exprVal); } concept_condition = concept_condition->next; diff --git a/src/action_class_gen.c b/src/action_class_gen.c index 905a280c3..30f2e0332 100644 --- a/src/action_class_gen.c +++ b/src/action_class_gen.c @@ -9,8 +9,7 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * * + * Jean Baptiste Filippi - 01.11.2005 * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -48,7 +47,7 @@ static int notify_change(grib_action* a, grib_accessor* observer,grib_accessor* typedef struct grib_action_gen { - grib_action act; + grib_action act; /* Members defined in gen */ long len; grib_arguments* params; @@ -109,10 +108,8 @@ grib_action* grib_action_create_gen(grib_context* context, const char* name, con } } #endif - a = (grib_action_gen*)act; - + a = (grib_action_gen*)act; a->len = len; - a->params = params; if (set) act->set = grib_context_strdup_persistent(context, set); diff --git a/src/action_class_hash_array.c b/src/action_class_hash_array.c index 60c05cf99..5ee938395 100644 --- a/src/action_class_hash_array.c +++ b/src/action_class_hash_array.c @@ -10,7 +10,6 @@ /*************************************************************************** * Enrico Fucile 2012 * - * * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -47,7 +46,7 @@ static void destroy (grib_context*,grib_action*); typedef struct grib_action_hash_array { - grib_action act; + grib_action act; /* Members defined in gen */ long len; grib_arguments* params; @@ -242,7 +241,7 @@ static grib_hash_array_value* get_hash_array_impl(grib_handle* h, grib_action* a Assert(self->masterDir); grib_get_string(h, self->masterDir, masterDir, &lenMasterDir); - sprintf(buf, "%s/%s", masterDir, self->basename); + snprintf(buf, 4096, "%s/%s", masterDir, self->basename); err = grib_recompose_name(h, NULL, buf, master, 1); if (err) { @@ -253,17 +252,17 @@ static grib_hash_array_value* get_hash_array_impl(grib_handle* h, grib_action* a if (self->localDir) { grib_get_string(h, self->localDir, localDir, &lenLocalDir); - sprintf(buf, "%s/%s", localDir, self->basename); + snprintf(buf, 4096, "%s/%s", localDir, self->basename); grib_recompose_name(h, NULL, buf, local, 1); } if (self->ecmfDir) { grib_get_string(h, self->ecmfDir, ecmfDir, &lenEcmfDir); - sprintf(buf, "%s/%s", ecmfDir, self->basename); + snprintf(buf, 4096, "%s/%s", ecmfDir, self->basename); grib_recompose_name(h, NULL, buf, ecmf, 1); } - sprintf(key, "%s%s%s", master, local, ecmf); + snprintf(key, 4096, "%s%s%s", master, local, ecmf); id = grib_itrie_get_id(h->context->hash_array_index, key); if ((c = h->context->hash_array[id]) != NULL) diff --git a/src/action_class_hierarchy.txt b/src/action_class_hierarchy.txt new file mode 100644 index 000000000..132ec468d --- /dev/null +++ b/src/action_class_hierarchy.txt @@ -0,0 +1,33 @@ + +Action Class Hierarchy + |action + |-action_class_alias + |-action_class_assert + |-action_class_close + |-action_class_gen + |---action_class_concept + |---action_class_hash_array + |---action_class_meta + |---action_class_transient_darray + |---action_class_variable + |-action_class_modify + |-action_class_noop + |-action_class_print + |-action_class_put + |-action_class_remove + |-action_class_rename + |-action_class_section + |---action_class_if + |---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 + |-action_class_set_missing + |-action_class_set_sarray + |-action_class_when + |-action_class_write + diff --git a/src/action_class_if.c b/src/action_class_if.c index af63e217b..a4da2f4be 100644 --- a/src/action_class_if.c +++ b/src/action_class_if.c @@ -9,9 +9,8 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * Enrico Fucile - * * + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -53,7 +52,7 @@ static int execute(grib_action* a,grib_handle* h); typedef struct grib_action_if { - grib_action act; + grib_action act; /* Members defined in section */ /* Members defined in if */ grib_expression *expression; @@ -97,6 +96,7 @@ grib_action* grib_action_create_if(grib_context* context, int lineno, char* file_being_parsed) { char name[1024]; + const size_t nameLen = sizeof(name); grib_action_if* a; grib_action_class* c = grib_action_class_if; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context, c->size); @@ -112,9 +112,9 @@ grib_action* grib_action_create_if(grib_context* context, a->transient = transient; if (transient) - sprintf(name, "__if%p", (void*)a); + snprintf(name, nameLen, "__if%p", (void*)a); else - sprintf(name, "_if%p", (void*)a); + snprintf(name, nameLen, "_if%p", (void*)a); act->name = grib_context_strdup_persistent(context, name); act->debug_info = NULL; @@ -122,7 +122,8 @@ grib_action* grib_action_create_if(grib_context* context, /* Construct debug information showing definition file and line */ /* number of IF statement */ char debug_info[1024]; - sprintf(debug_info, "File=%s line=%d", file_being_parsed, lineno); + const size_t infoLen = sizeof(debug_info); + snprintf(debug_info, infoLen, "File=%s line=%d", file_being_parsed, lineno); act->debug_info = grib_context_strdup_persistent(context, debug_info); } diff --git a/src/action_class_list.c b/src/action_class_list.c index ad044f3d8..0a4b8a630 100644 --- a/src/action_class_list.c +++ b/src/action_class_list.c @@ -9,9 +9,8 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * Enrico Fucile - * * + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -48,7 +47,7 @@ static grib_action* reparse(grib_action* a,grib_accessor* acc,int *doit); typedef struct grib_action_list { - grib_action act; + grib_action act; /* Members defined in section */ /* Members defined in list */ grib_expression *expression; diff --git a/src/action_class_meta.c b/src/action_class_meta.c index d7c70b547..3b5c375eb 100644 --- a/src/action_class_meta.c +++ b/src/action_class_meta.c @@ -9,8 +9,7 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * * + * Jean Baptiste Filippi - 01.11.2005 * ***************************************************************************/ #include "grib_api_internal.h" @@ -42,7 +41,7 @@ static int execute(grib_action* a,grib_handle* h); typedef struct grib_action_meta { - grib_action act; + grib_action act; /* Members defined in gen */ long len; grib_arguments* params; diff --git a/src/action_class_modify.c b/src/action_class_modify.c index 0f6cf846b..9a56fcf4b 100644 --- a/src/action_class_modify.c +++ b/src/action_class_modify.c @@ -9,8 +9,7 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * * + * Jean Baptiste Filippi - 01.11.2005 * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -45,7 +44,7 @@ static int create_accessor(grib_section*,grib_action*,grib_loader*); typedef struct grib_action_modify { - grib_action act; + grib_action act; /* Members defined in modify */ long flags; char *name; diff --git a/src/action_class_noop.c b/src/action_class_noop.c index 2ee753751..c2b3bc2f0 100644 --- a/src/action_class_noop.c +++ b/src/action_class_noop.c @@ -9,8 +9,7 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * * + * Jean Baptiste Filippi - 01.11.2005 * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -41,7 +40,7 @@ static int execute(grib_action* a,grib_handle* h); typedef struct grib_action_noop { - grib_action act; + grib_action act; /* Members defined in noop */ } grib_action_noop; @@ -85,7 +84,7 @@ grib_action* grib_action_create_noop(grib_context* context, const char* fname) a = (grib_action_noop*)act; act->context = context; - sprintf(buf, "_noop%p", (void*)a); + snprintf(buf, 1024, "_noop%p", (void*)a); act->name = grib_context_strdup_persistent(context, buf); diff --git a/src/action_class_print.c b/src/action_class_print.c index 14ce99907..f29300544 100644 --- a/src/action_class_print.c +++ b/src/action_class_print.c @@ -9,8 +9,7 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * * + * Jean Baptiste Filippi - 01.11.2005 * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -43,7 +42,7 @@ static int execute(grib_action* a,grib_handle* h); typedef struct grib_action_print { - grib_action act; + grib_action act; /* Members defined in print */ char *name; char *outname; @@ -79,7 +78,6 @@ static void init_class(grib_action_class* c) grib_action* grib_action_create_print(grib_context* context, const char* name, char* outname) { char buf[1024]; - grib_action_print* a; grib_action_class* c = grib_action_class_print; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context, c->size); @@ -105,7 +103,7 @@ grib_action* grib_action_create_print(grib_context* context, const char* name, c fclose(out); } - sprintf(buf, "print%p", (void*)a->name); + snprintf(buf, 1024, "print%p", (void*)a->name); act->name = grib_context_strdup_persistent(context, buf); diff --git a/src/action_class_put.c b/src/action_class_put.c index 8f441fab1..49ec4bf6e 100644 --- a/src/action_class_put.c +++ b/src/action_class_put.c @@ -9,8 +9,7 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * * + * Jean Baptiste Filippi - 01.11.2005 * ***************************************************************************/ #include "grib_api_internal.h" @@ -44,7 +43,7 @@ static int create_accessor(grib_section*,grib_action*,grib_loader*); typedef struct grib_action_put { - grib_action act; + grib_action act; /* Members defined in put */ grib_arguments* args; } grib_action_put; diff --git a/src/action_class_remove.c b/src/action_class_remove.c index 0a0427510..853a1a648 100644 --- a/src/action_class_remove.c +++ b/src/action_class_remove.c @@ -9,8 +9,7 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * * + * Jean Baptiste Filippi - 01.11.2005 * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -44,7 +43,7 @@ static int create_accessor(grib_section*,grib_action*,grib_loader*); typedef struct grib_action_remove { - grib_action act; + grib_action act; /* Members defined in remove */ grib_arguments* args; } grib_action_remove; @@ -128,7 +127,7 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) if (ga) { remove_accessor(ga); } else { - grib_context_log(act->context, GRIB_LOG_DEBUG, + grib_context_log(act->context, GRIB_LOG_DEBUG, "Action_class_remove: create_accessor: No accessor named %s to remove", grib_arguments_get_name(p->h, a->args, 0)); } return GRIB_SUCCESS; diff --git a/src/action_class_rename.c b/src/action_class_rename.c index 7d29b7b2f..2666c4f75 100644 --- a/src/action_class_rename.c +++ b/src/action_class_rename.c @@ -9,8 +9,7 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * * + * Jean Baptiste Filippi - 01.11.2005 * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -45,7 +44,7 @@ static int create_accessor(grib_section*,grib_action*,grib_loader*); typedef struct grib_action_rename { - grib_action act; + grib_action act; /* Members defined in rename */ char* the_old; char* the_new; diff --git a/src/action_class_section.c b/src/action_class_section.c index e16378ac3..6692175c8 100644 --- a/src/action_class_section.c +++ b/src/action_class_section.c @@ -9,9 +9,8 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * Enrico Fucile - * * + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" @@ -44,7 +43,7 @@ static grib_action* reparse(grib_action* a,grib_accessor* acc,int *doit); typedef struct grib_action_section { - grib_action act; + grib_action act; /* Members defined in section */ } grib_action_section; @@ -108,7 +107,7 @@ static int notify_change(grib_action* act, grib_accessor* notified, if (h->context->debug > 0) { char debug_str[1024] = {0,}; if (act->debug_info) { - sprintf(debug_str, " (%s)", act->debug_info); + snprintf(debug_str, 1024, " (%s)", act->debug_info); } grib_context_log(h->context, GRIB_LOG_DEBUG, "------------- SECTION action %s (%s) is triggered by [%s]%s", diff --git a/src/action_class_set.c b/src/action_class_set.c index f133c96ff..8febce99d 100644 --- a/src/action_class_set.c +++ b/src/action_class_set.c @@ -9,7 +9,7 @@ */ /*************************************************************************** - * Enrico Fucile * + * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -44,7 +44,7 @@ static int execute(grib_action* a,grib_handle* h); typedef struct grib_action_set { - grib_action act; + grib_action act; /* Members defined in set */ grib_expression *expression; char *name; @@ -82,7 +82,6 @@ grib_action* grib_action_create_set(grib_context* context, const char* name, grib_expression* expression, int nofail) { char buf[1024]; - grib_action_set* a; grib_action_class* c = grib_action_class_set; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context, c->size); @@ -96,8 +95,7 @@ grib_action* grib_action_create_set(grib_context* context, a->name = grib_context_strdup_persistent(context, name); a->nofail = nofail; - - sprintf(buf, "set%p", (void*)expression); + snprintf(buf, 1024, "set%p", (void*)expression); act->name = grib_context_strdup_persistent(context, buf); @@ -112,7 +110,7 @@ static int execute(grib_action* a, grib_handle* h) if (self->nofail) return 0; if (ret != GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Error while setting key %s (%s)", + grib_context_log(h->context, GRIB_LOG_ERROR, "Error while setting key '%s' (%s)", self->name, grib_get_error_message(ret)); } return ret; diff --git a/src/action_class_set_darray.c b/src/action_class_set_darray.c index b739c5f3f..4b87a719c 100644 --- a/src/action_class_set_darray.c +++ b/src/action_class_set_darray.c @@ -9,7 +9,7 @@ */ /*************************************************************************** - * Enrico Fucile * + * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -43,7 +43,7 @@ static int execute(grib_action* a,grib_handle* h); typedef struct grib_action_set_darray { - grib_action act; + grib_action act; /* Members defined in set_darray */ grib_darray *darray; char *name; @@ -81,7 +81,6 @@ grib_action* grib_action_create_set_darray(grib_context* context, grib_darray* darray) { char buf[1024]; - grib_action_set_darray* a; grib_action_class* c = grib_action_class_set_darray; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context, c->size); @@ -94,8 +93,7 @@ grib_action* grib_action_create_set_darray(grib_context* context, a->darray = darray; a->name = grib_context_strdup_persistent(context, name); - - sprintf(buf, "set_darray%p", (void*)darray); + snprintf(buf, 1024, "set_darray%p", (void*)darray); act->name = grib_context_strdup_persistent(context, buf); diff --git a/src/action_class_set_iarray.c b/src/action_class_set_iarray.c index 444aae488..0c90c74d6 100644 --- a/src/action_class_set_iarray.c +++ b/src/action_class_set_iarray.c @@ -9,7 +9,7 @@ */ /*************************************************************************** - * Enrico Fucile * + * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -43,7 +43,7 @@ static int execute(grib_action* a,grib_handle* h); typedef struct grib_action_set_iarray { - grib_action act; + grib_action act; /* Members defined in set_iarray */ grib_iarray *iarray; char *name; @@ -81,7 +81,6 @@ grib_action* grib_action_create_set_iarray(grib_context* context, grib_iarray* iarray) { char buf[1024]; - grib_action_set_iarray* a; grib_action_class* c = grib_action_class_set_iarray; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context, c->size); @@ -94,8 +93,7 @@ grib_action* grib_action_create_set_iarray(grib_context* context, a->iarray = iarray; a->name = grib_context_strdup_persistent(context, name); - - sprintf(buf, "set_iarray%p", (void*)iarray); + snprintf(buf, 1024, "set_iarray%p", (void*)iarray); act->name = grib_context_strdup_persistent(context, buf); diff --git a/src/action_class_set_missing.c b/src/action_class_set_missing.c index 1f33b24ed..84b5fe085 100644 --- a/src/action_class_set_missing.c +++ b/src/action_class_set_missing.c @@ -9,7 +9,7 @@ */ /*************************************************************************** - * Enrico Fucile * + * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -41,7 +41,7 @@ static int execute(grib_action* a,grib_handle* h); typedef struct grib_action_set_missing { - grib_action act; + grib_action act; /* Members defined in set_missing */ char *name; } grib_action_set_missing; @@ -89,7 +89,7 @@ grib_action* grib_action_create_set_missing(grib_context* context, a->name = grib_context_strdup_persistent(context, name); - sprintf(buf, "set_missing_%s", name); + snprintf(buf, sizeof(buf), "set_missing_%s", name); act->name = grib_context_strdup_persistent(context, buf); diff --git a/src/action_class_set_sarray.c b/src/action_class_set_sarray.c index 3ae50cea2..b12443f23 100644 --- a/src/action_class_set_sarray.c +++ b/src/action_class_set_sarray.c @@ -9,7 +9,7 @@ */ /*************************************************************************** - * Enrico Fucile * + * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -43,7 +43,7 @@ static int execute(grib_action* a,grib_handle* h); typedef struct grib_action_set_sarray { - grib_action act; + grib_action act; /* Members defined in set_sarray */ grib_sarray *sarray; char *name; @@ -94,8 +94,7 @@ grib_action* grib_action_create_set_sarray(grib_context* context, a->sarray = sarray; a->name = grib_context_strdup_persistent(context, name); - - sprintf(buf, "set_sarray%p", (void*)sarray); + snprintf(buf, 1024, "set_sarray%p", (void*)sarray); act->name = grib_context_strdup_persistent(context, buf); diff --git a/src/action_class_switch.c b/src/action_class_switch.c index d4bfece6a..57e47dc89 100644 --- a/src/action_class_switch.c +++ b/src/action_class_switch.c @@ -9,8 +9,7 @@ */ /*************************************************************************** - * Enrico Fucile - * * + * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -46,7 +45,7 @@ static int execute(grib_action* a,grib_handle* h); typedef struct grib_action_switch { - grib_action act; + grib_action act; /* Members defined in section */ /* Members defined in switch */ grib_arguments* args; @@ -92,6 +91,7 @@ grib_action* grib_action_create_switch(grib_context* context, grib_action* Default) { char name[1024]; + const size_t nameLen = sizeof(name); grib_action_switch* a; grib_action_class* c = grib_action_class_switch; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context, c->size); @@ -105,7 +105,7 @@ grib_action* grib_action_create_switch(grib_context* context, a->Case = Case; a->Default = Default; - sprintf(name, "_switch%p", (void*)a); + snprintf(name, nameLen, "_switch%p", (void*)a); act->name = grib_context_strdup_persistent(context, name); diff --git a/src/action_class_template.c b/src/action_class_template.c index 3a0ef8880..8f240ea27 100644 --- a/src/action_class_template.c +++ b/src/action_class_template.c @@ -9,9 +9,8 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * Enrico Fucile - * * + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" @@ -49,7 +48,7 @@ static grib_action* reparse(grib_action* a,grib_accessor* acc,int *doit); typedef struct grib_action_template { - grib_action act; + grib_action act; /* Members defined in section */ /* Members defined in template */ int nofail; diff --git a/src/action_class_transient_darray.c b/src/action_class_transient_darray.c index 029648162..ce4e514f9 100644 --- a/src/action_class_transient_darray.c +++ b/src/action_class_transient_darray.c @@ -9,7 +9,7 @@ */ /*************************************************************************** - * Enrico Fucile * + * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -44,7 +44,7 @@ static int execute(grib_action* a,grib_handle* h); typedef struct grib_action_transient_darray { - grib_action act; + grib_action act; /* Members defined in gen */ long len; grib_arguments* params; diff --git a/src/action_class_trigger.c b/src/action_class_trigger.c index 0e2bb20ad..ebee1007d 100644 --- a/src/action_class_trigger.c +++ b/src/action_class_trigger.c @@ -9,9 +9,8 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * Enrico Fucile - * * + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" @@ -49,7 +48,7 @@ static grib_action* reparse(grib_action* a,grib_accessor* acc,int *doit); typedef struct grib_action_trigger { - grib_action act; + grib_action act; /* Members defined in section */ /* Members defined in trigger */ grib_arguments* trigger_on; @@ -90,12 +89,13 @@ static void init_class(grib_action_class* c) grib_action* grib_action_create_trigger(grib_context* context, grib_arguments* args, grib_action* block) { 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); - sprintf(name, "_trigger%p", (void*)act); + snprintf(name, nameLen, "_trigger%p", (void*)act); act->name = grib_context_strdup_persistent(context, name); act->op = grib_context_strdup_persistent(context, "section"); diff --git a/src/action_class_variable.c b/src/action_class_variable.c index 4c1531cbd..5b7e636ac 100644 --- a/src/action_class_variable.c +++ b/src/action_class_variable.c @@ -9,8 +9,7 @@ */ /*************************************************************************** - * Jean Baptiste Filippi - 01.11.2005 * - * * + * Jean Baptiste Filippi - 01.11.2005 * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -39,7 +38,7 @@ static int execute(grib_action* a,grib_handle* h); typedef struct grib_action_variable { - grib_action act; + grib_action act; /* Members defined in gen */ long len; grib_arguments* params; diff --git a/src/action_class_when.c b/src/action_class_when.c index 9059bd9f1..a274a7c27 100644 --- a/src/action_class_when.c +++ b/src/action_class_when.c @@ -9,7 +9,7 @@ */ /*************************************************************************** - * Enrico Fucile * + * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -47,7 +47,7 @@ static int notify_change(grib_action* a, grib_accessor* observer,grib_accessor* typedef struct grib_action_when { - grib_action act; + grib_action act; /* Members defined in when */ grib_expression *expression; grib_action *block_true; @@ -92,6 +92,7 @@ grib_action* grib_action_create_when(grib_context* context, grib_action* block_true, grib_action* block_false) { char name[1024]; + const size_t nameLen = sizeof(name); grib_action_when* a; grib_action_class* c = grib_action_class_when; @@ -106,7 +107,7 @@ grib_action* grib_action_create_when(grib_context* context, a->block_true = block_true; a->block_false = block_false; - sprintf(name, "_when%p", (void*)expression); + snprintf(name, nameLen, "_when%p", (void*)expression); act->name = grib_context_strdup_persistent(context, name); diff --git a/src/action_class_while.c b/src/action_class_while.c index c479e1ee5..17243bf06 100644 --- a/src/action_class_while.c +++ b/src/action_class_while.c @@ -41,7 +41,7 @@ static int create_accessor(grib_section*,grib_action*,grib_loader*); typedef struct grib_action_while { - grib_action act; + grib_action act; /* Members defined in section */ /* Members defined in while */ grib_expression *expression; @@ -138,6 +138,7 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) grib_action* grib_action_create_while(grib_context* context, grib_expression* expression, grib_action* block) { 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); @@ -147,7 +148,7 @@ grib_action* grib_action_create_while(grib_context* context, grib_expression* ex act->next = NULL; - sprintf(name, "_while%p", (void*)a); + 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; diff --git a/src/action_class_write.c b/src/action_class_write.c index 39aba82d8..a8c010ed3 100644 --- a/src/action_class_write.c +++ b/src/action_class_write.c @@ -43,7 +43,7 @@ static int execute(grib_action* a,grib_handle* h); typedef struct grib_action_write { - grib_action act; + grib_action act; /* Members defined in write */ char *name; int append; @@ -82,7 +82,6 @@ static void init_class(grib_action_class* c) grib_action* grib_action_create_write(grib_context* context, const char* name, int append, int padtomultiple) { char buf[1024]; - grib_action_write* a = NULL; grib_action_class* c = grib_action_class_write; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context, c->size); @@ -94,7 +93,7 @@ grib_action* grib_action_create_write(grib_context* context, const char* name, i a->name = grib_context_strdup_persistent(context, name); - sprintf(buf, "write%p", (void*)a->name); + snprintf(buf, 1024, "write%p", (void*)a->name); act->name = grib_context_strdup_persistent(context, buf); a->append = append; @@ -161,11 +160,12 @@ static int execute(grib_action* act, grib_handle* h) } if (a->padtomultiple) { - char* zeros; + char* zeros = NULL; size_t padding = a->padtomultiple - size % a->padtomultiple; /* printf("XXX padding=%d size=%d padtomultiple=%d\n",padding,size,a->padtomultiple); */ zeros = (char*)calloc(padding, 1); - Assert(zeros); + if (!zeros) + return GRIB_OUT_OF_MEMORY; if (fwrite(zeros, 1, padding, of->handle) != padding) { grib_context_log(act->context, (GRIB_LOG_ERROR) | (GRIB_LOG_PERROR), "Error writing to %s", filename); diff --git a/src/bufr_keys_iterator.c b/src/bufr_keys_iterator.c index 2dd2d492a..ed4219820 100644 --- a/src/bufr_keys_iterator.c +++ b/src/bufr_keys_iterator.c @@ -128,9 +128,10 @@ static int next_attribute(bufr_keys_iterator* kiter) if (kiter->attributes[kiter->i_curr_attribute]) { if (!kiter->prefix) { - kiter->prefix = (char*)grib_context_malloc_clear(kiter->current->context, strlen(kiter->current->name) + 10); + const size_t prefixLenMax = strlen(kiter->current->name) + 10; + kiter->prefix = (char*)grib_context_malloc_clear(kiter->current->context, prefixLenMax); r = (int*)grib_trie_get(kiter->seen, kiter->current->name); - sprintf(kiter->prefix, "#%d#%s", *r, kiter->current->name); + snprintf(kiter->prefix, prefixLenMax, "#%d#%s", *r, kiter->current->name); } kiter->i_curr_attribute++; return 1; @@ -210,11 +211,12 @@ char* codes_bufr_keys_iterator_get_name(const bufr_keys_iterator* ckiter) strcat(ret, kiter->attributes[iattribute]->name); } else { - ret = (char*)grib_context_malloc_clear(c, strlen(kiter->current->name) + 10); + const size_t retMaxLen = strlen(kiter->current->name) + 10; + ret = (char*)grib_context_malloc_clear(c, retMaxLen); if (kiter->current->flags & GRIB_ACCESSOR_FLAG_BUFR_DATA) { r = (int*)grib_trie_get(kiter->seen, kiter->current->name); - sprintf(ret, "#%d#%s", *r, kiter->current->name); + snprintf(ret, retMaxLen, "#%d#%s", *r, kiter->current->name); } else { strcpy(ret, kiter->current->name); diff --git a/src/bufr_util.c b/src/bufr_util.c index 7bd7a8612..6c9dfa9f1 100644 --- a/src/bufr_util.c +++ b/src/bufr_util.c @@ -48,8 +48,9 @@ int compute_bufr_key_rank(grib_handle* h, grib_string_list* keys, const char* ke /* This is the first and only instance of the key */ /* So we check if there is a second one of this key, */ /* If not, then rank is zero i.e. this is the only instance */ - char* s = (char*)grib_context_malloc_clear(c, strlen(key) + 5); - sprintf(s, "#2#%s", key); + size_t slen = strlen(key) + 5; + char* s = (char*)grib_context_malloc_clear(c, slen); + snprintf(s, slen, "#2#%s", key); if (grib_get_size(h, s, &size) == GRIB_NOT_FOUND) theRank = 0; grib_context_free(c, s); @@ -353,7 +354,7 @@ static int bufr_decode_edition3(const void* message, codes_bufr_header* hdr) long nbits_numberOfSubsets = 2 * 8; long pos_numberOfSubsets = 0; /*depends on offset_section3*/ - long section3Flags; + unsigned long section3Flags; long nbits_section3Flags = 1 * 8; long pos_section3Flags = 0; /*depends on offset_section3*/ @@ -403,7 +404,7 @@ static int bufr_decode_edition3(const void* message, codes_bufr_header* hdr) hdr->numberOfSubsets = grib_decode_unsigned_long(pMessage, &pos_numberOfSubsets, nbits_numberOfSubsets); pos_section3Flags = (offset_section3 + 6) * 8; - section3Flags = (long)grib_decode_unsigned_long(pMessage, &pos_section3Flags, nbits_section3Flags); + section3Flags = grib_decode_unsigned_long(pMessage, &pos_section3Flags, nbits_section3Flags); hdr->observedData = (section3Flags & 1 << 7) ? 1 : 0; hdr->compressedData = (section3Flags & 1 << 6) ? 1 : 0; @@ -477,13 +478,13 @@ static int bufr_decode_edition4(const void* message, codes_bufr_header* hdr) long nbits_typicalSecond = 1 * 8; long pos_typicalSecond = 29 * 8; - long section2Length = 0; + unsigned long section2Length = 0; long offset_section2 = 0; long offset_section3 = 0; long nbits_numberOfSubsets = 2 * 8; long pos_numberOfSubsets = 0; /*depends on offset_section3*/ - long section3Flags; + unsigned long section3Flags; long nbits_section3Flags = 1 * 8; long pos_section3Flags = 0; /*depends on offset_section3*/ @@ -534,7 +535,7 @@ static int bufr_decode_edition4(const void* message, codes_bufr_header* hdr) hdr->numberOfSubsets = grib_decode_unsigned_long(pMessage, &pos_numberOfSubsets, nbits_numberOfSubsets); pos_section3Flags = (offset_section3 + 6) * 8; - section3Flags = (long)grib_decode_unsigned_long(pMessage, &pos_section3Flags, nbits_section3Flags); + section3Flags = grib_decode_unsigned_long(pMessage, &pos_section3Flags, nbits_section3Flags); hdr->observedData = (section3Flags & 1 << 7) ? 1 : 0; hdr->compressedData = (section3Flags & 1 << 6) ? 1 : 0; @@ -791,8 +792,8 @@ static char* codes_bufr_header_get_centre_name(long edition, long centre_code) FILE *f = NULL; const char* defs_path = grib_definition_path(NULL); - if (edition == 3) sprintf(full_path, "%s/common/c-1.table", defs_path); - else if (edition == 4) sprintf(full_path, "%s/common/c-11.table", defs_path); + if (edition == 3) snprintf(full_path, 2014, "%s/common/c-1.table", defs_path); + else if (edition == 4) snprintf(full_path, 2014, "%s/common/c-11.table", defs_path); else return NULL; f = codes_fopen(full_path, "r"); @@ -853,73 +854,73 @@ int codes_bufr_header_get_string(codes_bufr_header* bh, const char* key, char* v Assert(!(bh->ecmwfLocalSectionPresent && !bh->localSectionPresent)); if (strcmp(key, "message_offset") == 0) - *len = sprintf(val, "%lu", bh->message_offset); + *len = snprintf(val, 32, "%lu", bh->message_offset); else if (strcmp(key, "offset") == 0) - *len = sprintf(val, "%lu", bh->message_offset); + *len = snprintf(val, 32, "%lu", bh->message_offset); else if (strcmp(key, "message_size") == 0) - *len = sprintf(val, "%lu", bh->message_size); + *len = snprintf(val, 32, "%lu", bh->message_size); else if (strcmp(key, "totalLength") == 0) - *len = sprintf(val, "%lu", bh->message_size); + *len = snprintf(val, 32, "%lu", bh->message_size); else if (strcmp(key, "edition") == 0) - *len = sprintf(val, "%ld", bh->edition); + *len = snprintf(val, 32, "%ld", bh->edition); else if (strcmp(key, "masterTableNumber") == 0) - *len = sprintf(val, "%ld", bh->masterTableNumber); + *len = snprintf(val, 32, "%ld", bh->masterTableNumber); else if (strcmp(key, "bufrHeaderSubCentre") == 0) - *len = sprintf(val, "%ld", bh->bufrHeaderSubCentre); + *len = snprintf(val, 32, "%ld", bh->bufrHeaderSubCentre); else if (strcmp(key, "bufrHeaderCentre") == 0) - *len = sprintf(val, "%ld", bh->bufrHeaderCentre); + *len = snprintf(val, 32, "%ld", bh->bufrHeaderCentre); else if (strcmp(key, "centre") == 0) { const char* centre_str = codes_bufr_header_get_centre_name(bh->edition, bh->bufrHeaderCentre); if (centre_str) - *len = sprintf(val, "%s", centre_str); + *len = snprintf(val, 32, "%s", centre_str); else - *len = sprintf(val, "%ld", bh->bufrHeaderCentre); + *len = snprintf(val, 32, "%ld", bh->bufrHeaderCentre); } else if (strcmp(key, "updateSequenceNumber") == 0) - *len = sprintf(val, "%ld", bh->updateSequenceNumber); + *len = snprintf(val, 32, "%ld", bh->updateSequenceNumber); else if (strcmp(key, "dataCategory") == 0) - *len = sprintf(val, "%ld", bh->dataCategory); + *len = snprintf(val, 32, "%ld", bh->dataCategory); else if (strcmp(key, "dataSubCategory") == 0) - *len = sprintf(val, "%ld", bh->dataSubCategory); + *len = snprintf(val, 32, "%ld", bh->dataSubCategory); else if (strcmp(key, "masterTablesVersionNumber") == 0) - *len = sprintf(val, "%ld", bh->masterTablesVersionNumber); + *len = snprintf(val, 32, "%ld", bh->masterTablesVersionNumber); else if (strcmp(key, "localTablesVersionNumber") == 0) - *len = sprintf(val, "%ld", bh->localTablesVersionNumber); + *len = snprintf(val, 32, "%ld", bh->localTablesVersionNumber); else if (strcmp(key, "typicalYear") == 0) - *len = sprintf(val, "%ld", bh->typicalYear); + *len = snprintf(val, 32, "%ld", bh->typicalYear); else if (strcmp(key, "typicalMonth") == 0) - *len = sprintf(val, "%ld", bh->typicalMonth); + *len = snprintf(val, 32, "%ld", bh->typicalMonth); else if (strcmp(key, "typicalDay") == 0) - *len = sprintf(val, "%ld", bh->typicalDay); + *len = snprintf(val, 32, "%ld", bh->typicalDay); else if (strcmp(key, "typicalHour") == 0) - *len = sprintf(val, "%ld", bh->typicalHour); + *len = snprintf(val, 32, "%ld", bh->typicalHour); else if (strcmp(key, "typicalMinute") == 0) - *len = sprintf(val, "%ld", bh->typicalMinute); + *len = snprintf(val, 32, "%ld", bh->typicalMinute); else if (strcmp(key, "typicalSecond") == 0) - *len = sprintf(val, "%ld", bh->typicalSecond); + *len = snprintf(val, 32, "%ld", bh->typicalSecond); else if (strcmp(key, "typicalDate") == 0) - *len = sprintf(val, "%06ld", bh->typicalDate); + *len = snprintf(val, 32, "%06ld", bh->typicalDate); else if (strcmp(key, "typicalTime") == 0) - *len = sprintf(val, "%06ld", bh->typicalTime); + *len = snprintf(val, 32, "%06ld", bh->typicalTime); else if (strcmp(key, "internationalDataSubCategory") == 0) - *len = sprintf(val, "%ld", bh->internationalDataSubCategory); + *len = snprintf(val, 32, "%ld", bh->internationalDataSubCategory); else if (strcmp(key, "localSectionPresent") == 0) - *len = sprintf(val, "%ld", bh->localSectionPresent); + *len = snprintf(val, 32, "%ld", bh->localSectionPresent); else if (strcmp(key, "ecmwfLocalSectionPresent") == 0) - *len = sprintf(val, "%ld", bh->ecmwfLocalSectionPresent); + *len = snprintf(val, 32, "%ld", bh->ecmwfLocalSectionPresent); /* Local ECMWF keys. Can be absent so must return NOT_FOUND */ else if (strcmp(key, "rdbType") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->rdbType); + *len = snprintf(val, 32, "%ld", bh->rdbType); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "oldSubtype") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->oldSubtype); + *len = snprintf(val, 32, "%ld", bh->oldSubtype); else strcpy(val, NOT_FOUND); } @@ -927,183 +928,183 @@ int codes_bufr_header_get_string(codes_bufr_header* bh, const char* key, char* v if (!isEcmwfLocal || strlen(bh->ident) == 0) strcpy(val, NOT_FOUND); else - *len = sprintf(val, "%s", bh->ident); + *len = snprintf(val, 32, "%s", bh->ident); } else if (strcmp(key, "localYear") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->localYear); + *len = snprintf(val, 32, "%ld", bh->localYear); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "localMonth") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->localMonth); + *len = snprintf(val, 32, "%ld", bh->localMonth); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "localDay") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->localDay); + *len = snprintf(val, 32, "%ld", bh->localDay); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "localHour") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->localHour); + *len = snprintf(val, 32, "%ld", bh->localHour); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "localMinute") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->localMinute); + *len = snprintf(val, 32, "%ld", bh->localMinute); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "localSecond") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->localSecond); + *len = snprintf(val, 32, "%ld", bh->localSecond); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "rdbtimeDay") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->rdbtimeDay); + *len = snprintf(val, 32, "%ld", bh->rdbtimeDay); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "rdbtimeHour") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->rdbtimeHour); + *len = snprintf(val, 32, "%ld", bh->rdbtimeHour); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "rdbtimeMinute") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->rdbtimeMinute); + *len = snprintf(val, 32, "%ld", bh->rdbtimeMinute); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "rdbtimeSecond") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->rdbtimeSecond); + *len = snprintf(val, 32, "%ld", bh->rdbtimeSecond); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "rectimeDay") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->rectimeDay); + *len = snprintf(val, 32, "%ld", bh->rectimeDay); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "rectimeHour") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->rectimeHour); + *len = snprintf(val, 32, "%ld", bh->rectimeHour); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "rectimeMinute") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->rectimeMinute); + *len = snprintf(val, 32, "%ld", bh->rectimeMinute); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "rectimeSecond") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->rectimeSecond); + *len = snprintf(val, 32, "%ld", bh->rectimeSecond); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "restricted") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->restricted); + *len = snprintf(val, 32, "%ld", bh->restricted); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "isSatellite") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->isSatellite); + *len = snprintf(val, 32, "%ld", bh->isSatellite); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "localLongitude1") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%g", bh->localLongitude1); + *len = snprintf(val, 32, "%g", bh->localLongitude1); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "localLatitude1") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%g", bh->localLatitude1); + *len = snprintf(val, 32, "%g", bh->localLatitude1); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "localLongitude2") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%g", bh->localLongitude2); + *len = snprintf(val, 32, "%g", bh->localLongitude2); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "localLatitude2") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%g", bh->localLatitude2); + *len = snprintf(val, 32, "%g", bh->localLatitude2); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "localLatitude") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%g", bh->localLatitude); + *len = snprintf(val, 32, "%g", bh->localLatitude); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "localLongitude") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%g", bh->localLongitude); + *len = snprintf(val, 32, "%g", bh->localLongitude); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "qualityControl") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->qualityControl); + *len = snprintf(val, 32, "%ld", bh->qualityControl); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "newSubtype") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->newSubtype); + *len = snprintf(val, 32, "%ld", bh->newSubtype); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "rdbSubtype") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->rdbSubtype); + *len = snprintf(val, 32, "%ld", bh->rdbSubtype); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "daLoop") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->daLoop); + *len = snprintf(val, 32, "%ld", bh->daLoop); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "localNumberOfObservations") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->localNumberOfObservations); + *len = snprintf(val, 32, "%ld", bh->localNumberOfObservations); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "satelliteID") == 0) { if (isEcmwfLocal) - *len = sprintf(val, "%ld", bh->satelliteID); + *len = snprintf(val, 32, "%ld", bh->satelliteID); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "numberOfSubsets") == 0) - *len = sprintf(val, "%lu", bh->numberOfSubsets); + *len = snprintf(val, 32, "%lu", bh->numberOfSubsets); else if (strcmp(key, "observedData") == 0) - *len = sprintf(val, "%ld", bh->observedData); + *len = snprintf(val, 32, "%ld", bh->observedData); else if (strcmp(key, "compressedData") == 0) - *len = sprintf(val, "%ld", bh->compressedData); + *len = snprintf(val, 32, "%ld", bh->compressedData); else return GRIB_NOT_FOUND; diff --git a/src/codes_memfs.c b/src/codes_memfs.c index a51f4a012..737a9b76a 100644 --- a/src/codes_memfs.c +++ b/src/codes_memfs.c @@ -32,6 +32,7 @@ FILE* codes_fopen(const char* name, const char* mode) return fopen(name, mode); } +/* Returns 0 upon success */ int codes_access(const char* name, int mode) { /* F_OK tests for the existence of the file */ @@ -53,6 +54,7 @@ FILE* codes_fopen(const char* name, const char* mode) return fopen(name, mode); } +/* Returns 0 upon success */ int codes_access(const char* name, int mode) { return access(name, mode); diff --git a/src/deprecated/grib_accessor_class_bufr_data.c b/src/deprecated/grib_accessor_class_bufr_data.c index 093ad5fdb..2f13922a7 100644 --- a/src/deprecated/grib_accessor_class_bufr_data.c +++ b/src/deprecated/grib_accessor_class_bufr_data.c @@ -395,7 +395,7 @@ static int get_descriptors(grib_accessor* a) } if (self->numberOfDescriptors) self_clear(c,self); - err=_grib_get_size(grib_handle_of_accessor(a),expandedDescriptors,&(self->numberOfDescriptors)); + err=ecc__grib_get_size(grib_handle_of_accessor(a),expandedDescriptors,&(self->numberOfDescriptors)); if (err) return err; self->expandedDescriptors=(long*)grib_context_malloc_clear(a->context,sizeof(long)*self->numberOfDescriptors); diff --git a/src/deprecated/grib_util.GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING.c b/src/deprecated/grib_util.GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING.c new file mode 100644 index 000000000..074464504 --- /dev/null +++ b/src/deprecated/grib_util.GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING.c @@ -0,0 +1,150 @@ +/* ECC-1269 */ +/* Old logic moved from src/grib_util.c function:grib_util_set_spec2 */ + + if (flags & GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING) { + if (packing_spec->packing == GRIB_UTIL_PACKING_USE_PROVIDED && + strcmp(input_packing_type, "grid_simple_matrix")) { + switch (packing_spec->packing_type) { + case GRIB_UTIL_PACKING_TYPE_SPECTRAL_COMPLEX: + if (strcmp(input_packing_type, "spectral_complex") && !strcmp(input_packing_type, "spectral_simple")) + SET_STRING_VALUE("packingType", "spectral_complex"); + break; + case GRIB_UTIL_PACKING_TYPE_SPECTRAL_SIMPLE: + if (strcmp(input_packing_type, "spectral_simple") && !strcmp(input_packing_type, "spectral_complex")) + SET_STRING_VALUE("packingType", "spectral_simple"); + break; + case GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE: + if (strcmp(input_packing_type, "grid_simple") && !strcmp(input_packing_type, "grid_complex")) + SET_STRING_VALUE("packingType", "grid_simple"); + break; + case GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE_MATRIX: + SET_STRING_VALUE("packingType", "grid_simple_matrix"); + break; + case GRIB_UTIL_PACKING_TYPE_GRID_COMPLEX: + if (strcmp(input_packing_type, "grid_complex") && !strcmp(input_packing_type, "grid_simple")) + SET_STRING_VALUE("packingType", "grid_complex"); + break; + case GRIB_UTIL_PACKING_TYPE_JPEG: + if (strcmp(input_packing_type, "grid_jpeg") && !strcmp(input_packing_type, "grid_simple")) + SET_STRING_VALUE("packingType", "grid_jpeg"); + break; + case GRIB_UTIL_PACKING_TYPE_CCSDS: + if (strcmp(input_packing_type, "grid_ccsds") && !strcmp(input_packing_type, "grid_simple")) + SET_STRING_VALUE("packingType", "grid_ccsds"); + break; + case GRIB_UTIL_PACKING_TYPE_IEEE: + if (strcmp(input_packing_type, "grid_ieee") && !strcmp(input_packing_type, "grid_simple")) + SET_STRING_VALUE("packingType", "grid_ieee"); + break; + case GRIB_UTIL_PACKING_TYPE_GRID_SECOND_ORDER: + /* we delay the set of grid_second_order because we don't want + to do it on a field with bitsPerValue=0 */ + setSecondOrder = 1; + break; + default: + fprintf(stderr, "GRIB_UTIL_SET_SPEC: invalid packing_spec->packing_type (%ld)\n", + (long)packing_spec->packing_type); + *err = GRIB_INTERNAL_ERROR; + goto cleanup; + break; + } + } + switch (packing_spec->accuracy) { + case GRIB_UTIL_ACCURACY_SAME_BITS_PER_VALUES_AS_INPUT: + break; + + case GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES: + if (input_bits_per_value != packing_spec->bitsPerValue) + SET_LONG_VALUE("bitsPerValue", packing_spec->bitsPerValue); + break; + + case GRIB_UTIL_ACCURACY_SAME_DECIMAL_SCALE_FACTOR_AS_INPUT: + break; + + case GRIB_UTIL_ACCURACY_USE_PROVIDED_DECIMAL_SCALE_FACTOR: + if (input_decimal_scale_factor != packing_spec->decimalScaleFactor) + SET_LONG_VALUE("decimalScaleFactor", packing_spec->decimalScaleFactor); + break; + + default: + fprintf(stderr, "GRIB_UTIL_SET_SPEC: invalid packing_spec->accuracy (%ld)\n", (long)packing_spec->accuracy); + *err = GRIB_INTERNAL_ERROR; + goto cleanup; + break; + } + + /*nothing to be changed*/ + if (count == 0) { + *err = -1; + return h; + } + + if (h->context->debug == -1) { + print_values(h->context, spec, packing_spec, data_values, data_values_count, values, count); + } + + if ((*err = grib_set_values(h, values, count)) != 0) { + fprintf(stderr, "GRIB_UTIL_SET_SPEC: Cannot set values: %s\n", 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; + } + if (h->context->debug == -1) { + int j = 0; + fprintf(stderr, "ECCODES DEBUG grib_util: grib_set_double_array\n"); + for (j = 0; j < 20; j++) + fprintf(stderr, "ECCODES DEBUG grib_util %g\n", data_values[j]); + fprintf(stderr, "ECCODES DEBUG grib_util: data_values_count=%d \n", (int)data_values_count); + } + + if ((*err = grib_set_double_array(h, "values", data_values, data_values_count)) != 0) { + goto cleanup; + } + if (h->context->debug == -1) + fprintf(stderr, "ECCODES DEBUG grib_util: done grib_set_double_array \n"); + + /* convert to second_order if not constant field */ + if (setSecondOrder) { + int constant = 0; + double missingValue = 0; + grib_get_double(h, "missingValue", &missingValue); + constant = is_constant_field(missingValue, data_values, data_values_count); + + if (!constant) { + size_t packTypeLen; + if (editionNumber == 1) { + long numberOfGroups; + grib_handle* htmp = grib_handle_clone(h); + + packTypeLen = 17; + grib_set_string(htmp, "packingType", "grid_second_order", &packTypeLen); + grib_get_long(htmp, "numberOfGroups", &numberOfGroups); + /* GRIBEX is not able to decode overflown numberOfGroups with SPD */ + if (numberOfGroups > 65534 && h->context->no_spd) { + packTypeLen = 24; + grib_set_string(h, "packingType", "grid_second_order_no_SPD", &packTypeLen); + grib_handle_delete(htmp); + } + else { + grib_handle_delete(h); + h = htmp; + } + } + else { + packTypeLen = 17; + grib_set_string(h, "packingType", "grid_second_order", &packTypeLen); + grib_set_double_array(h, "values", data_values, data_values_count); + } + } + else { + if (h->context->gribex_mode_on) { + h->context->gribex_mode_on = 0; + grib_set_double_array(h, "values", data_values, data_values_count); + h->context->gribex_mode_on = 1; + } + } + } + + return h; + } /* flags & GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING */ + diff --git a/src/eccodes.c b/src/eccodes.c index 91018e390..feffc5b04 100644 --- a/src/eccodes.c +++ b/src/eccodes.c @@ -532,3 +532,24 @@ void codes_context_set_samples_path(grib_context* c, const char* path) { grib_context_set_samples_path(c, path); } + +void codes_context_set_memory_proc(grib_context* c, grib_malloc_proc p_malloc, grib_free_proc p_free, grib_realloc_proc p_realloc) +{ + grib_context_set_memory_proc(c, p_malloc, p_free, p_realloc); +} +void codes_context_set_persistent_memory_proc(grib_context* c, grib_malloc_proc p_malloc, grib_free_proc p_free) +{ + grib_context_set_persistent_memory_proc(c, p_malloc, p_free); +} +void codes_context_set_buffer_memory_proc(grib_context* c, grib_malloc_proc p_malloc, grib_free_proc p_free, grib_realloc_proc p_realloc) +{ + grib_context_set_buffer_memory_proc(c, p_malloc, p_free, p_realloc); +} +void codes_context_set_print_proc(grib_context* c, grib_print_proc p_print) +{ + grib_context_set_print_proc(c, p_print); +} +void codes_context_set_logging_proc(grib_context* c, grib_log_proc p_log) +{ + grib_context_set_logging_proc(c, p_log); +} diff --git a/src/eccodes.h b/src/eccodes.h index 3cfb60912..68f97b58b 100644 --- a/src/eccodes.h +++ b/src/eccodes.h @@ -56,9 +56,6 @@ Log mode for information for processing information #define CODES_MISSING_LONG GRIB_MISSING_LONG #define CODES_MISSING_DOUBLE GRIB_MISSING_DOUBLE -/*set spec flags*/ -#define CODES_UTIL_SET_SPEC_FLAGS_ONLY_PACKING GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING - /* Dump option flags*/ #define CODES_DUMP_FLAG_READ_ONLY GRIB_DUMP_FLAG_READ_ONLY #define CODES_DUMP_FLAG_DUMP_OK GRIB_DUMP_FLAG_DUMP_OK @@ -244,7 +241,7 @@ codes_index* codes_index_read(codes_context* c, const char* filename, int* err); * Get the number of distinct values of the key in argument contained in the index. The key must belong to the index. * * @param index : an index created from a file. - * The index must have been created with the key in argument. + * The index must have been created with the key in argument. * @param key : key for which the number of values is computed * @param size : number of distinct values of the key in the index * @return 0 if OK, integer value on error @@ -255,7 +252,7 @@ int codes_index_get_size(const codes_index* index, const char* key, size_t* size * Get the distinct values of the key in argument contained in the index. The key must belong to the index. This function is used when the type of the key was explicitly defined as long or when the native type of the key is long. * * @param index : an index created from a file. - * The index must have been created with the key in argument. + * The index must have been created with the key in argument. * @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 size : size of the values array @@ -267,7 +264,7 @@ int codes_index_get_long(const codes_index* index, const char* key, long* values * Get the distinct values of the key in argument contained in the index. The key must belong to the index. This function is used when the type of the key was explicitly defined as double or when the native type of the key is double. * * @param index : an index created from a file. - * The index must have been created with the key in argument. + * The index must have been created with the key in argument. * @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 size : size of the values array @@ -279,7 +276,7 @@ int codes_index_get_double(const codes_index* index, const char* key, double* va * Get the distinct values of the key in argument contained in the index. The key must belong to the index. This function is used when the type of the key was explicitly defined as string or when the native type of the key is string. * * @param index : an index created from a file. - * The index must have been created with the key in argument. + * The index must have been created with the key in argument. * @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 size : size of the values array @@ -292,7 +289,7 @@ int codes_index_get_string(const codes_index* index, const char* key, char** val * Select the message subset with key==value. The value is a long. The key must have been created with long type or have long as native type if the type was not explicitly defined in the index creation. * * @param index : an index created from a file. - * The index must have been created with the key in argument. + * The index must have been created with the key in argument. * @param key : key to be selected * @param value : value of the key to select * @return 0 if OK, integer value on error @@ -314,7 +311,7 @@ int codes_index_select_double(codes_index* index, const char* key, double value) * Select the message subset with key==value. The value is a string. The key must have been created with string type or have string as native type if the type was not explicitly defined in the index creation. * * @param index : an index created from a file. - * The index must have been created with the key in argument. + * The index must have been created with the key in argument. * @param key : key to be selected * @param value : value of the key to select * @return 0 if OK, integer value on error @@ -328,7 +325,7 @@ int codes_index_select_string(codes_index* index, const char* key, const char* v * * @param index : an index created from a file. * @param err : 0 if OK, integer value on error. CODES_END_OF_INDEX when no more handles are contained in the index. - * @return GRIB handle. + * @return message handle. */ codes_handle* codes_handle_new_from_index(codes_index* index, int* err); @@ -434,7 +431,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 multi-field messages. +* This function works also 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 @@ -508,7 +505,7 @@ int codes_handle_delete(codes_handle* h); /** * Create an empty multi-field GRIB handle. * This is only applicable to GRIB edition 2. - * Remember always to delete the multi-handle when it is not needed any more to avoid + * Remember always to delete the multi-handle when it is not needed anymore to avoid * memory leaks. * * @param c : the context from which the handle will be created (NULL for default context) @@ -519,7 +516,7 @@ codes_multi_handle* codes_grib_multi_handle_new(codes_context* c); * Append the sections starting with start_section of the message pointed by h at * the end of the multi-field GRIB handle mh. * This is only applicable to GRIB edition 2. - * Remember always to delete the multi-handle when it is not needed any more to avoid + * Remember always to delete the multi-handle when it is not needed anymore to avoid * memory leaks. * * @param h : The handle from which the sections are copied. @@ -541,7 +538,7 @@ int codes_grib_multi_handle_delete(codes_multi_handle* mh); /** * Write a multi-field GRIB handle in a file. * This is only applicable to GRIB edition 2. - * Remember always to delete the multi-handle when it is not needed any more to avoid + * Remember always to delete the multi-handle when it is not needed anymore to avoid * memory leaks. * * @param mh : The multi-field GRIB handle to be written. @@ -591,8 +588,8 @@ int codes_get_message_copy(const codes_handle* h, void* message, size_t* message codes_iterator* codes_grib_iterator_new(const codes_handle* h, unsigned long flags, int* error); /** -* Get latitude/longitude and data values. -* The Latitudes, longitudes and values arrays must be properly allocated by the caller. +* Get latitude/longitude and data values for a GRIB message. +* 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 @@ -684,7 +681,7 @@ int codes_grib_nearest_find(codes_nearest* nearest, const codes_handle* h, doubl double* values, double* distances, int* indexes, size_t* len); /** -* Frees an nearest from memory +* Frees a nearest object from memory * * @param nearest : the nearest * @return 0 if OK, integer value on error @@ -861,7 +858,7 @@ int codes_get_double_array(const codes_handle* h, const char* key, double* vals, int codes_get_long_array(const codes_handle* h, const char* key, long* vals, size_t* length); -/* setting data */ +/* setting data */ /** * Copy the keys belonging to a given namespace from a source handle to a destination handle * @@ -990,22 +987,107 @@ void codes_dump_action_tree(codes_context* c, FILE* f); */ /*! @{ */ -/* TODO: function pointers - grib_malloc_proc - grib_realloc_proc - grib_log_proc - grib_print_proc - grib_data_read_proc - grib_data_write_proc - grib_data_tell_proc - grib_data_seek_proc - grib_data_eof_proc +/** +* ecCodes free procedure, format of a procedure referenced in the context that is used to free memory +* +* @param c : the context where the memory freeing will apply +* @param data : pointer to the data to be freed +* must match @see codes_malloc_proc */ +typedef void (*codes_free_proc)(const codes_context* c, void* data); + +/** +* ecCodes malloc procedure, format of a procedure referenced in the context that is used to allocate memory +* @param c : the context where the memory allocation will apply +* @param length : length to be allocated in number of bytes +* @return a pointer to the allocated memory, NULL if no memory can be allocated +* must match @see codes_free_proc +*/ +typedef void* (*codes_malloc_proc)(const codes_context* c, size_t length); + +/** +* ecCodes realloc procedure, format of a procedure referenced in the context that is used to reallocate memory +* @param c : the context where the memory allocation will apply +* @param data : pointer to the data to be reallocated +* @param length : length to be allocated in number of bytes +* @return a pointer to the allocated memory +*/ +typedef void* (*codes_realloc_proc)(const codes_context* c, void* data, size_t length); + +/** +* ecCodes log procedure, format of a procedure referenced in the context that is used to log internal messages +* +* @param c : the context where the logging will apply +* @param level : the log level, as defined in log modes +* @param mesg : the message to be logged +*/ +typedef void (*codes_log_proc)(const codes_context* c, int level, const char* mesg); + +/** +* ecCodes print procedure, format of a procedure referenced in the context that is used to print external messages +* +* @param c : the context where the logging will apply +* @param descriptor : the structure to be printed on, must match the implementation +* @param mesg : the message to be printed +*/ +typedef void (*codes_print_proc)(const codes_context* c, void* descriptor, const char* mesg); + +/** +* ecCodes data read procedure, format of a procedure referenced in the context that is used to read from a stream in a resource +* +* @param c : the context where the read will apply +* @param ptr : the resource +* @param size : size to read +* @param stream : the stream +* @return size read +*/ +typedef size_t (*codes_data_read_proc)(const codes_context* c, void* ptr, size_t size, void* stream); + +/** +* ecCodes data write procedure, format of a procedure referenced in the context that is used to write to a stream from a resource +* +* @param c : the context where the write will apply +* @param ptr : the resource +* @param size : size to read +* @param stream : the stream +* @return size written +*/ +typedef size_t (*codes_data_write_proc)(const codes_context* c, const void* ptr, size_t size, void* stream); + +/** +* ecCodes data tell procedure, format of a procedure referenced in the context that is used to tell the current position in a stream +* +* @param c : the context where the tell will apply +* @param stream : the stream +* @return the position in the stream +*/ +typedef off_t (*codes_data_tell_proc)(const codes_context* c, void* stream); + +/** +* ecCodes data seek procedure, format of a procedure referenced in the context that is used to seek the current position in a stream +* +* @param c : the context where the tell will apply +* @param offset : the offset to seek to +* @param whence : If whence is set to SEEK_SET, SEEK_CUR, or SEEK_END, + the offset is relative to the start of the file, the current position indicator, or end-of-file, respectively. +* @param stream : the stream +* @return 0 if OK, integer value on error +*/ +typedef off_t (*codes_data_seek_proc)(const codes_context* c, off_t offset, int whence, void* stream); + +/** +* ecCodes data eof procedure, format of a procedure referenced in the context that is used to test end of file +* +* @param c : the context where the tell will apply +* @param stream : the stream +* @return the position in the stream +*/ +typedef int (*codes_data_eof_proc)(const codes_context* c, void* stream); /** * Get the static default context * -* @return the default context, NULL it the context is not available +* @return the default context, NULL it the context is not available */ codes_context* codes_context_get_default(void); @@ -1076,6 +1158,54 @@ void codes_context_set_definitions_path(codes_context* c, const char* path); */ void codes_context_set_samples_path(codes_context* c, const char* path); +/** +* Sets memory procedures of the context +* +* @param c : the context to be modified +* @param p_malloc : the memory allocation procedure to be set @see codes_malloc_proc +* @param p_free : the memory freeing procedure to be set @see codes_free_proc +* @param p_realloc : the memory reallocation procedure to be set @see codes_realloc_proc +*/ +void codes_context_set_memory_proc(codes_context* c, codes_malloc_proc p_malloc, + codes_free_proc p_free, codes_realloc_proc p_realloc); + +/** +* Sets memory procedures of the context for persistent data +* +* @param c : the context to be modified +* @param griballoc : the memory allocation procedure to be set @see codes_malloc_proc +* @param gribfree : the memory freeing procedure to be set @see codes_free_proc +*/ +void codes_context_set_persistent_memory_proc(codes_context* c, codes_malloc_proc p_malloc, + codes_free_proc p_free); + +/** +* Sets memory procedures of the context for large buffers +* +* @param c : the context to be modified +* @param p_malloc : the memory allocation procedure to be set @see codes_malloc_proc +* @param p_free : the memory freeing procedure to be set @see codes_free_proc +* @param p_free : the memory reallocation procedure to be set @see codes_realloc_proc +*/ +void codes_context_set_buffer_memory_proc(codes_context* c, codes_malloc_proc p_malloc, + codes_free_proc p_free, codes_realloc_proc p_realloc); + +/** +* Sets the context printing procedure used for user interaction +* +* @param c : the context to be modified +* @param p_print : the printing procedure to be set @see codes_print_proc +*/ +void codes_context_set_print_proc(codes_context* c, codes_print_proc p_print); + +/** +* Sets the context logging procedure used for system (warning, errors, infos ...) messages +* +* @param c : the context to be modified +* @param p_log : the logging procedure to be set @see codes_log_proc +*/ +void codes_context_set_logging_proc(codes_context* c, codes_log_proc p_log); + /** * Turn on support for multi-fields in single GRIB messages * @@ -1303,7 +1433,7 @@ int codes_bufr_header_get_string(codes_bufr_header* bh, const char* key, char* v * strict_mode = If 1 means fail if any message is invalid. * returns 0 if OK, integer value on error. */ -int codes_extract_offsets_malloc(grib_context* c, const char* filename, ProductKind product, off_t** offsets, int* num_messages, int strict_mode); +int codes_extract_offsets_malloc(codes_context* c, const char* filename, ProductKind product, off_t** offsets, int* num_messages, int strict_mode); /* --------------------------------------- */ #ifdef __cplusplus diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 61f0a4acd..d4ff22ea9 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -69,7 +69,7 @@ grib_action* grib_action_create_when(grib_context* context, grib_expression* exp /* action_class_concept.c */ grib_concept_value* action_concept_get_concept(grib_accessor* a); int action_concept_get_nofail(grib_accessor* a); -grib_action* grib_action_create_concept(grib_context* context, const char* name, grib_concept_value* concept, const char* basename, const char* name_space, const char* defaultkey, const char* masterDir, const char* localDir, const char* ecmfDir, int flags, int nofail); +grib_action* grib_action_create_concept(grib_context* context, const char* name, grib_concept_value* concept_value, const char* basename, const char* name_space, const char* defaultkey, const char* masterDir, const char* localDir, const char* ecmfDir, int flags, int nofail); int get_concept_condition_string(grib_handle* h, const char* key, const char* value, char* result); /* action_class_hash_array.c */ @@ -153,7 +153,7 @@ int grib_accessor_replace_attribute(grib_accessor* a, grib_accessor* attr); int grib_accessor_delete_attribute(grib_accessor* a, const char* name); grib_accessor* grib_accessor_get_attribute_by_index(grib_accessor* a, int index); const char* grib_accessor_get_name(grib_accessor* a); -grib_accessor* _grib_accessor_get_attribute(grib_accessor* a, const char* name, int* index); +grib_accessor* ecc__grib_accessor_get_attribute(grib_accessor* a, const char* name, int* index); int grib_accessor_has_attributes(grib_accessor* a); grib_accessor* grib_accessor_get_attribute(grib_accessor* a, const char* name); grib_accessors_list* grib_accessors_list_create(grib_context* c); @@ -207,6 +207,7 @@ int grib_darray_is_constant(grib_darray* v, double epsilon); size_t grib_darray_used_size(grib_darray* v); /* grib_sarray.c */ +void grib_sarray_print(const char* title, const grib_sarray* sarray); grib_sarray* grib_sarray_new(grib_context* c, size_t size, size_t incsize); grib_sarray* grib_sarray_push(grib_context* c, grib_sarray* v, char* val); void grib_sarray_delete(grib_context* c, grib_sarray* v); @@ -245,6 +246,7 @@ grib_darray** grib_vdarray_get_array(grib_context* c, grib_vdarray* v); size_t grib_vdarray_used_size(grib_vdarray* v); /* grib_vsarray.c */ +void grib_vsarray_print(const char* title, const grib_vsarray* vdarray); 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); @@ -502,9 +504,6 @@ grib_iterator* grib_iterator_new(const grib_handle* h, unsigned long flags, int* /* grib_accessor_class_nearest.c */ grib_nearest* grib_nearest_new(const grib_handle* h, int* error); -/* grib_accessor_class_box.c */ -grib_box* grib_box_new(grib_handle* h, int* error); - /* grib_accessor_class_ksec1expver.c */ /* grib_accessor_class_laplacian.c */ @@ -710,7 +709,7 @@ int grib_index_write(grib_index* index, const char* filename); grib_index* grib_index_read(grib_context* c, const char* filename, int* err); int grib_index_search_same(grib_index* index, grib_handle* h); int grib_index_add_file(grib_index* index, const char* filename); -int _codes_index_add_file(grib_index* index, const char* filename, int message_type); +int ecc__codes_index_add_file(grib_index* index, const char* filename, int message_type); grib_index* grib_index_new_from_file(grib_context* c, const char* filename, const char* keys, int* err); int grib_index_get_size(const grib_index* index, const char* key, size_t* size); int grib_index_get_string(const grib_index* index, const char* key, char** values, size_t* size); @@ -1076,7 +1075,7 @@ void grib_math_delete(grib_context* c, grib_math* m); grib_math* grib_math_new(grib_context* c, const char* formula, int* err); /* grib_hash_keys.c */ -const struct grib_keys_hash* grib_keys_hash_get(register const char *str, register size_t len); +const struct grib_keys_hash* grib_keys_hash_get(const char *str, size_t len); grib_itrie* grib_hash_keys_new(grib_context* c, int* count); void grib_hash_keys_delete(grib_itrie* t); int grib_hash_keys_get_id(grib_itrie* t, const char* key); @@ -1195,7 +1194,7 @@ char* get_external_template_path(grib_context* c, const char* name); grib_handle* grib_handle_of_accessor(const grib_accessor* a); void grib_dependency_add(grib_accessor* observer, grib_accessor* observed); void grib_dependency_remove_observed(grib_accessor* observed); -int _grib_dependency_notify_change(grib_handle* h, grib_accessor* observed); +int ecc__grib_dependency_notify_change(grib_handle* h, grib_accessor* observed); int grib_dependency_notify_change(grib_accessor* observed); void grib_dependency_remove_observer(grib_accessor* observer); void grib_dependency_observe_expression(grib_accessor* observer, grib_expression* e); @@ -1247,19 +1246,19 @@ int grib_get_bytes_internal(const grib_handle* h, const char* name, unsigned cha 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 _grib_get_double_array_internal(const grib_handle* h, grib_accessor* a, double* val, size_t buffer_len, size_t* decoded_length); +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); int grib_get_double_array(const grib_handle* h, const char* name, double* val, size_t* length); -int _grib_get_string_length(grib_accessor* a, size_t* size); +int ecc__grib_get_string_length(grib_accessor* a, size_t* size); int grib_get_string_length(const grib_handle* h, const char* name, size_t* size); -int _grib_get_size(const grib_handle* h, grib_accessor* a, 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 _grib_get_string_array_internal(const grib_handle* h, grib_accessor* a, char** val, size_t buffer_len, size_t* decoded_length); +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); -int _grib_get_long_array_internal(const grib_handle* h, grib_accessor* a, long* val, size_t buffer_len, size_t* decoded_length); +int ecc__grib_get_long_array_internal(const grib_handle* h, grib_accessor* a, long* val, size_t buffer_len, size_t* decoded_length); int grib_get_long_array_internal(grib_handle* h, const char* name, long* val, size_t* length); int grib_get_long_array(const grib_handle* h, const char* name, long* val, size_t* length); grib_key_value_list* grib_key_value_list_clone(grib_context* c, grib_key_value_list* list); diff --git a/src/grib_accessor.c b/src/grib_accessor.c index 4b1783b77..148005780 100644 --- a/src/grib_accessor.c +++ b/src/grib_accessor.c @@ -635,7 +635,7 @@ int grib_accessor_add_attribute(grib_accessor* a, grib_accessor* attr, int nest_ grib_accessor* aloc = a; if (grib_accessor_has_attributes(a)) { - same = _grib_accessor_get_attribute(a, attr->name, &id); + same = ecc__grib_accessor_get_attribute(a, attr->name, &id); } if (same) { @@ -650,7 +650,7 @@ int grib_accessor_add_attribute(grib_accessor* a, grib_accessor* attr, int nest_ aloc->attributes[id] = attr; attr->parent_as_attribute = aloc; if (aloc->same) - attr->same = _grib_accessor_get_attribute(aloc->same, attr->name, &idx); + attr->same = ecc__grib_accessor_get_attribute(aloc->same, attr->name, &idx); grib_context_log(a->context, GRIB_LOG_DEBUG, "added attribute %s->%s", a->name, attr->name); return GRIB_SUCCESS; @@ -663,12 +663,12 @@ int grib_accessor_replace_attribute(grib_accessor* a, grib_accessor* attr) { int id = 0; int idx = 0; - if (_grib_accessor_get_attribute(a, attr->name, &id) != NULL) { + if (ecc__grib_accessor_get_attribute(a, attr->name, &id) != NULL) { grib_accessor_delete(a->context, a->attributes[id]); a->attributes[id] = attr; attr->parent_as_attribute = a; if (a->same) - attr->same = _grib_accessor_get_attribute(a->same, attr->name, &idx); + attr->same = ecc__grib_accessor_get_attribute(a->same, attr->name, &idx); } else { grib_accessor_add_attribute(a, attr, 0); @@ -679,7 +679,7 @@ int grib_accessor_replace_attribute(grib_accessor* a, grib_accessor* attr) int grib_accessor_delete_attribute(grib_accessor* a, const char* name) { int id = 0; - if (_grib_accessor_get_attribute(a, name, &id) != NULL) { + if (ecc__grib_accessor_get_attribute(a, name, &id) != NULL) { grib_accessor_delete(a->context, a->attributes[id]); a->attributes[id] = NULL; return GRIB_SUCCESS; @@ -702,7 +702,7 @@ const char* grib_accessor_get_name(grib_accessor* a) return a->name; } -grib_accessor* _grib_accessor_get_attribute(grib_accessor* a, const char* name, int* index) +grib_accessor* ecc__grib_accessor_get_attribute(grib_accessor* a, const char* name, int* index) { int i = 0; while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { @@ -731,14 +731,14 @@ grib_accessor* grib_accessor_get_attribute(grib_accessor* a, const char* name) while (*(p + 1) != '\0' && (*p != '-' || *(p + 1) != '>')) p++; if (*(p + 1) == '\0') { - return _grib_accessor_get_attribute(a, name, &index); + return ecc__grib_accessor_get_attribute(a, name, &index); } else { size_t size = p - name; attribute_name = p + 2; basename = (char*)grib_context_malloc_clear(a->context, size + 1); basename = (char*)memcpy(basename, name, size); - acc = _grib_accessor_get_attribute(a, basename, &index); + acc = ecc__grib_accessor_get_attribute(a, basename, &index); grib_context_free(a->context, basename); if (acc) return grib_accessor_get_attribute(acc, attribute_name); diff --git a/src/grib_accessor_class.c b/src/grib_accessor_class.c index b72feb037..48bd4b4bc 100644 --- a/src/grib_accessor_class.c +++ b/src/grib_accessor_class.c @@ -228,7 +228,7 @@ static void link_same_attributes(grib_accessor* a, grib_accessor* b) if (!grib_accessor_has_attributes(b)) return; while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { - bAttribute = _grib_accessor_get_attribute(b, a->attributes[i]->name, &idx); + bAttribute = ecc__grib_accessor_get_attribute(b, a->attributes[i]->name, &idx); if (bAttribute) a->attributes[i]->same = bAttribute; i++; @@ -289,7 +289,7 @@ int grib_section_adjust_sizes(grib_section* s, int update, int depth) int force_update = update > 1; while (a) { - register long l; + long l; /* grib_section_adjust_sizes(grib_get_sub_section(a),update,depth+1); */ err = grib_section_adjust_sizes(a->sub_section, update, depth + 1); if (err) @@ -300,7 +300,9 @@ int grib_section_adjust_sizes(grib_section* s, int update, int depth) if (offset != a->offset) { grib_context_log(a->context, GRIB_LOG_ERROR, - "Offset mismatch %s A->offset %ld offset %ld\n", a->name, (long)a->offset, (long)offset); + "Offset mismatch accessor=%s: accessor's offset=%ld, but actual offset=%ld", + a->name, (long)a->offset, (long)offset); + grib_context_log(a->context, GRIB_LOG_ERROR, "Hint: Check section lengths are in sync with their contents"); a->offset = offset; return GRIB_DECODING_ERROR; } diff --git a/src/grib_accessor_class_apply_operators.c b/src/grib_accessor_class_apply_operators.c index 16ad4161d..2f7c9a5d3 100644 --- a/src/grib_accessor_class_apply_operators.c +++ b/src/grib_accessor_class_apply_operators.c @@ -304,7 +304,7 @@ static void set_bitmap_number(long* descriptors, int* useDefinedBitmap, size_t* static void computeDelayedReplication( grib_accessor_apply_operators* self, long* delayedReplication, - const long* delayedReplicationIndex, long delayedReplicationCount, long index) + const long* delayedReplicationIndex, long delayedReplicationCount) { long i = 0; for (i = 0; i < delayedReplicationCount; i++) { @@ -424,21 +424,21 @@ static int apply_operators(grib_accessor* a) switch (X) { case 1: extraWidth = Y ? Y - 128 : 0; - computeDelayedReplication(self, delayedReplication, delayedReplicationIndex, delayedReplicationCount, i); + computeDelayedReplication(self, delayedReplication, delayedReplicationIndex, delayedReplicationCount); break; case 2: extraScale = Y ? Y - 128 : 0; - computeDelayedReplication(self, delayedReplication, delayedReplicationIndex, delayedReplicationCount, i); + computeDelayedReplication(self, delayedReplication, delayedReplicationIndex, delayedReplicationCount); break; case 4: /* associated field*/ associatedFieldWidth = Y; - computeDelayedReplication(self, delayedReplication, delayedReplicationIndex, delayedReplicationCount, i); + computeDelayedReplication(self, delayedReplication, delayedReplicationIndex, delayedReplicationCount); break; case 6: /*signify data width*/ localDescriptorWidth = Y; - computeDelayedReplication(self, delayedReplication, delayedReplicationIndex, delayedReplicationCount, i); + computeDelayedReplication(self, delayedReplication, delayedReplicationIndex, delayedReplicationCount); break; case 7: if (Y) { @@ -451,14 +451,14 @@ static int apply_operators(grib_accessor* a) extraScale = 0; referenceValueFactor = 1; } - computeDelayedReplication(self, delayedReplication, delayedReplicationIndex, delayedReplicationCount, i); + computeDelayedReplication(self, delayedReplication, delayedReplicationIndex, delayedReplicationCount); break; case 22: /*quality information follows*/ iq = 1; set_bitmap_number(descriptors, &useDefinedBitmap, &i, &bitmapNumber); iassociatedInfoNumber = bitmapNumber; - computeDelayedReplication(self, delayedReplication, delayedReplicationIndex, delayedReplicationCount, i); + computeDelayedReplication(self, delayedReplication, delayedReplicationIndex, delayedReplicationCount); break; case 23: /*substituted values*/ @@ -503,7 +503,7 @@ static int apply_operators(grib_accessor* a) j++; break; default: - grib_context_log(c, GRIB_LOG_FATAL, "operator %d not implemented", (int)descriptors[i]); + grib_context_log(c, GRIB_LOG_FATAL, "BUFR operator %ld not implemented", descriptors[i]); } break; case 25: @@ -634,7 +634,7 @@ static void long_to_string(grib_context* c, long* v, size_t len, char** val) size_t i; char tmp[1024] = {0,}; for (i = 0; i < len; i++) { - sprintf(tmp, "%ld", v[i]); + snprintf(tmp, sizeof(tmp), "%ld", v[i]); val[i] = grib_context_strdup(c, tmp); } } @@ -644,7 +644,7 @@ static void double_to_string(grib_context* c, double* v, size_t len, char** val) size_t i; char tmp[1024] = {0,}; for (i = 0; i < len; i++) { - sprintf(tmp, "%g", v[i]); + snprintf(tmp, sizeof(tmp), "%g", v[i]); val[i] = grib_context_strdup(c, tmp); } } diff --git a/src/grib_accessor_class_array.c b/src/grib_accessor_class_array.c index ef263a40a..97e7077f9 100644 --- a/src/grib_accessor_class_array.c +++ b/src/grib_accessor_class_array.c @@ -12,7 +12,7 @@ * Enrico Fucile **************************************************************/ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF diff --git a/src/grib_accessor_class_bit.c b/src/grib_accessor_class_bit.c index 53279ba00..79fa43abe 100644 --- a/src/grib_accessor_class_bit.c +++ b/src/grib_accessor_class_bit.c @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF diff --git a/src/grib_accessor_class_bitmap.c b/src/grib_accessor_class_bitmap.c index 4eb8d568d..922634318 100644 --- a/src/grib_accessor_class_bitmap.c +++ b/src/grib_accessor_class_bitmap.c @@ -209,7 +209,7 @@ static void dump(grib_accessor* a, grib_dumper* dumper) grib_value_count(a, &len); - sprintf(label, "Bitmap of %ld values", len); + snprintf(label, 1024, "Bitmap of %ld values", len); grib_dump_bytes(dumper, a, label); } diff --git a/src/grib_accessor_class_bits.c b/src/grib_accessor_class_bits.c index 1b2b28ce8..0257f5792 100644 --- a/src/grib_accessor_class_bits.c +++ b/src/grib_accessor_class_bits.c @@ -344,13 +344,13 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) switch (get_native_type(a)) { case GRIB_TYPE_LONG: ret = unpack_long(a, &lval, &llen); - sprintf(v, "%ld", lval); + snprintf(v, 64, "%ld", lval); *len = strlen(v); break; case GRIB_TYPE_DOUBLE: ret = unpack_double(a, &dval, &llen); - sprintf(v, "%g", dval); + snprintf(v, 64, "%g", dval); *len = strlen(v); break; diff --git a/src/grib_accessor_class_bufr_data_array.c b/src/grib_accessor_class_bufr_data_array.c index 4365d784d..222e9194e 100644 --- a/src/grib_accessor_class_bufr_data_array.c +++ b/src/grib_accessor_class_bufr_data_array.c @@ -64,6 +64,7 @@ MEMBERS = grib_iarray* iss_list MEMBERS = grib_trie_with_rank* dataAccessorsTrie MEMBERS = grib_sarray* tempStrings + MEMBERS = grib_vdarray* tempDoubleValues MEMBERS = int change_ref_value_operand MEMBERS = size_t refValListSize MEMBERS = long* refValList @@ -144,6 +145,7 @@ typedef struct grib_accessor_bufr_data_array grib_iarray* iss_list; grib_trie_with_rank* dataAccessorsTrie; grib_sarray* tempStrings; + grib_vdarray* tempDoubleValues; int change_ref_value_operand; size_t refValListSize; long* refValList; @@ -399,6 +401,7 @@ static void init(grib_accessor* a, const long v, grib_arguments* params) self->do_decode = 1; self->elementsDescriptorsIndex = 0; self->numericValues = 0; + self->tempDoubleValues = 0; self->stringValues = 0; cancel_bitmap(self); self->expanded = 0; @@ -450,6 +453,7 @@ static void self_clear(grib_context* c, grib_accessor_bufr_data_array* self) grib_context_free(c, self->canBeMissing); grib_vdarray_delete_content(c, self->numericValues); grib_vdarray_delete(c, self->numericValues); + if (self->stringValues) { /*printf("dbg self_clear: clear %p\n", (void*)(self->stringValues));*/ grib_vsarray_delete_content(c, self->stringValues); @@ -2032,7 +2036,7 @@ static grib_accessor* create_accessor_from_descriptor(const grib_accessor* a, gr return NULL; grib_accessor_add_attribute(elementAccessor, attribute, 0); - sprintf(code, "%06ld", self->expanded->v[idx]->code); + snprintf(code, sizeof(code), "%06ld", self->expanded->v[idx]->code); temp_str = grib_context_strdup(a->context, code); attribute = create_attribute_variable("code", section, GRIB_TYPE_STRING, temp_str, 0, 0, flags); if (!attribute) @@ -2092,7 +2096,7 @@ static grib_accessor* create_accessor_from_descriptor(const grib_accessor* a, gr return NULL; grib_accessor_add_attribute(elementAccessor, attribute, 0); - sprintf(code, "%06ld", self->expanded->v[idx]->code); + snprintf(code, sizeof(code), "%06ld", self->expanded->v[idx]->code); attribute = create_attribute_variable("code", section, GRIB_TYPE_STRING, code, 0, 0, flags); if (!attribute) return NULL; @@ -2118,7 +2122,7 @@ static grib_accessor* create_accessor_from_descriptor(const grib_accessor* a, gr return NULL; grib_accessor_add_attribute(elementAccessor, attribute, 0); - sprintf(code, "%06ld", self->expanded->v[idx]->code); + snprintf(code, sizeof(code), "%06ld", self->expanded->v[idx]->code); attribute = create_attribute_variable("code", section, GRIB_TYPE_STRING, code, 0, 0, flags); if (!attribute) return NULL; @@ -2221,13 +2225,22 @@ static void grib_convert_to_attribute(grib_accessor* a) } } +/* subsetList can be NULL in which case subsetListSize will be 0 */ static grib_iarray* set_subset_list( grib_context* c, grib_accessor_bufr_data_array* self, long onlySubset, long startSubset, long endSubset, const long* subsetList, size_t subsetListSize) { grib_iarray* list = grib_iarray_new(c, self->numberOfSubsets, 10); - long s; + long s = 0; +#ifdef DEBUG + if (subsetList == NULL) { + Assert(subsetListSize == 0); + } + if (subsetListSize == 0) { + Assert(subsetList == NULL); + } +#endif if (startSubset > 0) { s = startSubset; while (s <= endSubset) { @@ -2736,7 +2749,7 @@ static int create_keys(const grib_accessor* a, long onlySubset, long startSubset } } } - + (void)extraElement; return err; } @@ -2899,11 +2912,11 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st return err; if (subsetList) grib_context_free(c, subsetList); - subsetList = (long*)grib_context_malloc_clear(c, subsetListSize * sizeof(long)); - err = grib_get_long_array(grib_handle_of_accessor(a), "extractSubsetList", subsetList, &subsetListSize); - if (err) - return err; - + if (subsetListSize) { + subsetList = (long*)grib_context_malloc_clear(c, subsetListSize * sizeof(long)); + err = grib_get_long_array(grib_handle_of_accessor(a), "extractSubsetList", subsetList, &subsetListSize); + if (err) return err; + } codec_replication = &encode_replication; break; default: @@ -2933,10 +2946,15 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st self->numericValues = grib_vdarray_new(c, 1000, 1000); self->stringValues = grib_vsarray_new(c, 10, 10); - if (self->elementsDescriptorsIndex) + if (self->elementsDescriptorsIndex) { + grib_viarray_delete_content(c, self->elementsDescriptorsIndex); grib_viarray_delete(c, self->elementsDescriptorsIndex); + } self->elementsDescriptorsIndex = grib_viarray_new(c, 100, 100); } + if (flag == PROCESS_NEW_DATA) { + self->tempDoubleValues = grib_vdarray_new(c, 1000, 1000); + } if (flag != PROCESS_DECODE) { /* Operator 203YYY: key OVERRIDDEN_REFERENCE_VALUES_KEY */ err = grib_get_size(h, OVERRIDDEN_REFERENCE_VALUES_KEY, &self->refValListSize); @@ -3342,6 +3360,9 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st grib_vdarray_push(c, self->numericValues, dval); /*grib_darray_print("DBG process_elements::dval", dval);*/ } + if (flag == PROCESS_NEW_DATA && !self->compressedData) { + grib_vdarray_push(c, self->tempDoubleValues, dval); /* ECC-1172 */ + } } /* for all subsets */ /*grib_vdarray_print("DBG process_elements: self->numericValues", self->numericValues);*/ @@ -3360,6 +3381,9 @@ static int process_elements(grib_accessor* a, int flag, long onlySubset, long st } } + if (subsetList) + grib_context_free(c, subsetList);/* ECC-1498 */ + return err; } @@ -3464,5 +3488,12 @@ static void destroy(grib_context* c, grib_accessor* a) grib_sarray_delete_content(c, self->tempStrings); grib_sarray_delete(c, self->tempStrings); } + if (self->tempDoubleValues) { + /* ECC-1172: Clean up to avoid memory leaks */ + grib_vdarray_delete_content(c, self->tempDoubleValues); + grib_vdarray_delete(c, self->tempDoubleValues); + self->tempDoubleValues = NULL; + } + grib_iarray_delete(self->iss_list); } diff --git a/src/grib_accessor_class_bufr_data_element.c b/src/grib_accessor_class_bufr_data_element.c index 86c61f398..75efd13e6 100644 --- a/src/grib_accessor_class_bufr_data_element.c +++ b/src/grib_accessor_class_bufr_data_element.c @@ -321,8 +321,9 @@ static int pack_string_array(grib_accessor* a, const char** v, size_t* len) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - int ret = 0, i, idx; - char* s = NULL; + int ret = GRIB_SUCCESS, idx = 0; + size_t i = 0; + char* s = NULL; grib_context* c = a->context; if (self->compressedData) { @@ -332,6 +333,7 @@ static int pack_string_array(grib_accessor* a, const char** v, size_t* len) self->descriptors->v[self->elementsDescriptorsIndex->v[0]->v[idx]]->shortName, *len, self->numberOfSubsets); return GRIB_ARRAY_TOO_SMALL; } + grib_sarray_delete_content(c, self->stringValues->v[idx]); /* ECC-1172 */ grib_sarray_delete(c, self->stringValues->v[idx]); self->stringValues->v[idx] = grib_sarray_new(c, *len, 1); for (i = 0; i < *len; i++) { @@ -354,14 +356,14 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) size_t slen = 0; double dval = 0; size_t dlen = 1; - - int ret = 0, idx; + int idx = 0, err = 0; grib_context* c = a->context; if (self->type != BUFR_DESCRIPTOR_TYPE_STRING) { char sval[32] = {0,}; - unpack_double(a, &dval, &dlen); - sprintf(sval, "%g", dval); + err = unpack_double(a, &dval, &dlen); + if (err) return err; + snprintf(sval, sizeof(sval), "%g", dval); slen = strlen(sval); if (*len < slen) return GRIB_ARRAY_TOO_SMALL; @@ -389,9 +391,10 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) grib_context_free(c, str); *len = 0; *val = 0; - return ret; + return GRIB_SUCCESS; } + /* Start from the end of the string and remove spaces */ p = str; while (*p != 0) p++; @@ -411,14 +414,14 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) grib_context_free(c, str); *len = slen; - return ret; + return GRIB_SUCCESS; } static int pack_string(grib_accessor* a, const char* val, size_t* len) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - int ret = 0, idx; + int ret = GRIB_SUCCESS, idx = 0; char* s = NULL; grib_context* c = a->context; @@ -428,6 +431,7 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) else { idx = (int)self->numericValues->v[self->subsetNumber]->v[self->index] / 1000 - 1; } + grib_sarray_delete_content(c, self->stringValues->v[idx]); /* ECC-1172 */ grib_sarray_delete(c, self->stringValues->v[idx]); self->stringValues->v[idx] = grib_sarray_new(c, 1, 1); s = grib_context_strdup(c, val); @@ -439,8 +443,8 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) static int unpack_long(grib_accessor* a, long* val, size_t* len) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - int ret = 0, i; - long count = 0; + int ret = GRIB_SUCCESS; + long count = 0, i = 0; value_count(a, &count); @@ -468,8 +472,8 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) static int unpack_double(grib_accessor* a, double* val, size_t* len) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - int ret = 0, i; - long count = 0; + int ret = GRIB_SUCCESS; + long count = 0, i = 0; value_count(a, &count); @@ -497,9 +501,9 @@ 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_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - int ret = 0, i; - long count = 1; - grib_context* c = a->context; + int ret = GRIB_SUCCESS; + long count = 1, i = 0; + grib_context* c = a->context; if (self->compressedData) { count = *len; @@ -556,7 +560,8 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) static int value_count(grib_accessor* a, long* count) { - int ret = 0, size, type, idx; + int ret = 0, type = 0, idx = 0; + size_t size = 0; grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; if (!self->compressedData) { @@ -678,7 +683,7 @@ static int is_missing(grib_accessor* a) } else { result = grib_is_missing_long(a, value); } - } + } else if (ktype == GRIB_TYPE_DOUBLE) { double value = 0; double* values = NULL; diff --git a/src/grib_accessor_class_bufr_elements_table.c b/src/grib_accessor_class_bufr_elements_table.c index d1df8bdd1..41dc8f4ec 100644 --- a/src/grib_accessor_class_bufr_elements_table.c +++ b/src/grib_accessor_class_bufr_elements_table.c @@ -216,7 +216,7 @@ static grib_trie* load_bufr_elements_table(grib_accessor* a, int* err) if (*masterDir != 0) { char name[4096] = {0,}; - sprintf(name, "%s/%s", masterDir, self->dictionary); + snprintf(name, 4096, "%s/%s", masterDir, self->dictionary); grib_recompose_name(h, NULL, name, masterRecomposed, 0); filename = grib_context_full_defs_path(c, masterRecomposed); } @@ -226,13 +226,13 @@ static grib_trie* load_bufr_elements_table(grib_accessor* a, int* err) if (*localDir != 0) { char localName[2048] = {0,}; - sprintf(localName, "%s/%s", localDir, self->dictionary); + snprintf(localName, 2048, "%s/%s", localDir, self->dictionary); grib_recompose_name(h, NULL, localName, localRecomposed, 0); localFilename = grib_context_full_defs_path(c, localRecomposed); - sprintf(dictName, "%s:%s", localFilename, filename); + snprintf(dictName, 1024, "%s:%s", localFilename, filename); } else { - sprintf(dictName, "%s", filename); + snprintf(dictName, 1024, "%s", filename); } if (!filename) { @@ -344,12 +344,13 @@ static int bufr_get_from_table(grib_accessor* a, bufr_descriptor* v) int ret = 0; char** list = 0; char code[7] = { 0 }; + const size_t codeLen = sizeof(code); grib_trie* table = load_bufr_elements_table(a, &ret); if (ret) return ret; - sprintf(code, "%06ld", v->code); + snprintf(code, codeLen, "%06ld", v->code); list = (char**)grib_trie_get(table, code); if (!list) diff --git a/src/grib_accessor_class_bufr_extract_area_subsets.c b/src/grib_accessor_class_bufr_extract_area_subsets.c index 46bdf2b18..b7ef42e7b 100644 --- a/src/grib_accessor_class_bufr_extract_area_subsets.c +++ b/src/grib_accessor_class_bufr_extract_area_subsets.c @@ -182,6 +182,7 @@ static void fill_in(double a[], long length) for (i = 1; i < length; ++i) a[i] = a[0]; } + static int select_area(grib_accessor* a) { int ret = 0; @@ -190,40 +191,34 @@ static int select_area(grib_accessor* a) grib_handle* h = grib_handle_of_accessor(a); grib_context* c = h->context; - double* lat = 0; - double* lon = 0; + double* lat = NULL; + double* lon = NULL; size_t n; double lonWest, lonEast, latNorth, latSouth; long numberOfSubsets, i, latRank, lonRank; - grib_iarray* subsets; - long* subsets_ar = 0; + grib_iarray* subsets = NULL; size_t nsubsets = 0; char latstr[32] = {0,}; char lonstr[32] = {0,}; ret = grib_get_long(h, "compressedData", &compressed); - if (ret) - return ret; + if (ret) return ret; ret = grib_get_long(h, self->numberOfSubsets, &numberOfSubsets); - if (ret) - return ret; + if (ret) return ret; subsets = grib_iarray_new(c, numberOfSubsets, 10); ret = grib_set_long(h, "unpack", 1); - if (ret) - return ret; + if (ret) return ret; if (compressed) { ret = grib_get_long(h, self->extractAreaLongitudeRank, &lonRank); - if (ret) - return ret; - sprintf(lonstr, "#%ld#longitude", lonRank); + if (ret) return ret; + snprintf(lonstr, sizeof(lonstr), "#%ld#longitude", lonRank); ret = grib_get_long(h, self->extractAreaLatitudeRank, &latRank); - if (ret) - return ret; - sprintf(latstr, "#%ld#latitude", latRank); + if (ret) return ret; + snprintf(latstr, sizeof(latstr), "#%ld#latitude", latRank); } /* Latitudes */ @@ -231,8 +226,7 @@ static int select_area(grib_accessor* a) lat = (double*)grib_context_malloc_clear(c, sizeof(double) * numberOfSubsets); if (compressed) { ret = grib_get_double_array(h, latstr, lat, &n); - if (ret) - return ret; + if (ret) return ret; if (!(n == 1 || n == numberOfSubsets)) { /* n can be 1 if all latitudes are the same */ return GRIB_INTERNAL_ERROR; @@ -244,15 +238,12 @@ static int select_area(grib_accessor* a) else { size_t values_len = 0; for (i = 0; i < numberOfSubsets; ++i) { - sprintf(latstr, "#%ld#latitude", i + 1); + snprintf(latstr, sizeof(latstr), "#%ld#latitude", i + 1); ret = grib_get_size(h, latstr, &values_len); - if (ret) - return ret; - if (values_len > 1) - return GRIB_NOT_IMPLEMENTED; + if (ret) return ret; + if (values_len > 1) return GRIB_NOT_IMPLEMENTED; ret = grib_get_double(h, latstr, &(lat[i])); - if (ret) - return ret; + if (ret) return ret; } } @@ -261,8 +252,7 @@ static int select_area(grib_accessor* a) lon = (double*)grib_context_malloc_clear(c, sizeof(double) * numberOfSubsets); if (compressed) { ret = grib_get_double_array(h, lonstr, lon, &n); - if (ret) - return ret; + if (ret) return ret; if (!(n == 1 || n == numberOfSubsets)) { /* n can be 1 if all longitudes are the same */ return GRIB_INTERNAL_ERROR; @@ -274,30 +264,23 @@ static int select_area(grib_accessor* a) else { size_t values_len = 0; for (i = 0; i < numberOfSubsets; ++i) { - sprintf(lonstr, "#%ld#longitude", i + 1); + snprintf(lonstr, sizeof(lonstr), "#%ld#longitude", i + 1); ret = grib_get_size(h, lonstr, &values_len); - if (ret) - return ret; - if (values_len > 1) - return GRIB_NOT_IMPLEMENTED; + if (ret) return ret; + if (values_len > 1) return GRIB_NOT_IMPLEMENTED; ret = grib_get_double(h, lonstr, &(lon[i])); - if (ret) - return ret; + if (ret) return ret; } } ret = grib_get_double(h, self->extractAreaWestLongitude, &lonWest); - if (ret) - return ret; + if (ret) return ret; ret = grib_get_double(h, self->extractAreaEastLongitude, &lonEast); - if (ret) - return ret; + if (ret) return ret; ret = grib_get_double(h, self->extractAreaNorthLatitude, &latNorth); - if (ret) - return ret; + if (ret) return ret; ret = grib_get_double(h, self->extractAreaSouthLatitude, &latSouth); - if (ret) - return ret; + if (ret) return ret; for (i = 0; i < numberOfSubsets; i++) { /* printf("++++++ lat: %g <= %g <= %g lon: %g <= %g <= %g \n",latSouth,lat[i],latNorth,lonWest,lon[i],lonEast); */ @@ -309,25 +292,22 @@ static int select_area(grib_accessor* a) nsubsets = grib_iarray_used_size(subsets); ret = grib_set_long(h, self->extractedAreaNumberOfSubsets, nsubsets); - if (ret) - return ret; + if (ret) return ret; if (nsubsets != 0) { - subsets_ar = grib_iarray_get_array(subsets); + long* subsets_ar = grib_iarray_get_array(subsets); ret = grib_set_long_array(h, self->extractSubsetList, subsets_ar, nsubsets); grib_context_free(c, subsets_ar); - if (ret) - return ret; + if (ret) return ret; ret = grib_set_long(h, self->doExtractSubsets, 1); - if (ret) - return ret; + if (ret) return ret; } grib_context_free(c, lat); grib_context_free(c, lon); grib_iarray_delete(subsets); - subsets = 0; + subsets = NULL; return ret; } diff --git a/src/grib_accessor_class_bufr_extract_datetime_subsets.c b/src/grib_accessor_class_bufr_extract_datetime_subsets.c index 2658fce54..297030ac3 100644 --- a/src/grib_accessor_class_bufr_extract_datetime_subsets.c +++ b/src/grib_accessor_class_bufr_extract_datetime_subsets.c @@ -212,7 +212,7 @@ static int build_long_array(grib_context* c, grib_handle* h, int compressed, size_t values_len = 0; for (i = 0; i < numberOfSubsets; ++i) { long lVal = 0; - sprintf(keystr, "#%ld#%s", i + 1, key); + snprintf(keystr, sizeof(keystr), "#%ld#%s", i + 1, key); err = grib_get_size(h, keystr, &values_len); if (err) return err; @@ -240,11 +240,10 @@ static int select_datetime(grib_accessor* a) long yearRank, monthRank, dayRank, hourRank, minuteRank, secondRank; long yearStart, monthStart, dayStart, hourStart, minuteStart, secondStart; long yearEnd, monthEnd, dayEnd, hourEnd, minuteEnd, secondEnd; - long *year, *month, *day, *hour, *minute; - double* second; + long *year = NULL, *month = NULL, *day = NULL, *hour = NULL, *minute = NULL; + double* second = NULL; long numberOfSubsets, i; - grib_iarray* subsets; - long* subsets_ar = 0; + grib_iarray* subsets = NULL; size_t nsubsets = 0; char yearstr[32] = "year"; char monthstr[32] = "month"; @@ -254,75 +253,61 @@ static int select_datetime(grib_accessor* a) char secondstr[32] = "second"; ret = grib_get_long(h, "compressedData", &compressed); - if (ret) - return ret; + if (ret) return ret; ret = grib_get_long(h, self->numberOfSubsets, &numberOfSubsets); - if (ret) - return ret; + if (ret) return ret; subsets = grib_iarray_new(c, numberOfSubsets, 10); ret = grib_set_long(h, "unpack", 1); - if (ret) - return ret; + if (ret) return ret; if (compressed) { ret = grib_get_long(h, "extractDateTimeYearRank", &yearRank); - if (ret) - return ret; - sprintf(yearstr, "#%ld#year", yearRank); + if (ret) return ret; + snprintf(yearstr, sizeof(yearstr), "#%ld#year", yearRank); ret = grib_get_long(h, "extractDateTimeMonthRank", &monthRank); - if (ret) - return ret; - sprintf(monthstr, "#%ld#month", monthRank); + if (ret) return ret; + snprintf(monthstr, sizeof(monthstr), "#%ld#month", monthRank); ret = grib_get_long(h, "extractDateTimeDayRank", &dayRank); - if (ret) - return ret; - sprintf(daystr, "#%ld#day", dayRank); + if (ret) return ret; + snprintf(daystr, sizeof(daystr), "#%ld#day", dayRank); ret = grib_get_long(h, "extractDateTimeHourRank", &hourRank); - if (ret) - return ret; - sprintf(hourstr, "#%ld#hour", hourRank); + if (ret) return ret; + snprintf(hourstr, sizeof(hourstr), "#%ld#hour", hourRank); ret = grib_get_long(h, "extractDateTimeMinuteRank", &minuteRank); - if (ret) - return ret; - sprintf(minutestr, "#%ld#minute", minuteRank); + if (ret) return ret; + snprintf(minutestr, sizeof(minutestr), "#%ld#minute", minuteRank); ret = grib_get_long(h, "extractDateTimeSecondRank", &secondRank); - if (ret) - return ret; - sprintf(secondstr, "#%ld#second", secondRank); + if (ret) return ret; + snprintf(secondstr, sizeof(secondstr), "#%ld#second", secondRank); } /* YEAR */ ret = build_long_array(c, h, compressed, &year, yearstr, numberOfSubsets, 0); - if (ret) - return ret; + if (ret) return ret; /* MONTH */ ret = build_long_array(c, h, compressed, &month, monthstr, numberOfSubsets, 0); - if (ret) - return ret; + if (ret) return ret; /* DAY */ ret = build_long_array(c, h, compressed, &day, daystr, numberOfSubsets, 0); - if (ret) - return ret; + if (ret) return ret; /* HOUR */ ret = build_long_array(c, h, compressed, &hour, hourstr, numberOfSubsets, 0); - if (ret) - return ret; + if (ret) return ret; /* MINUTE: Special treatment if error => set all entries to zero */ ret = build_long_array(c, h, compressed, &minute, minutestr, numberOfSubsets, 1); - if (ret) - return ret; + if (ret) return ret; /* SECOND: Double array */ n = numberOfSubsets; @@ -348,7 +333,7 @@ static int select_datetime(grib_accessor* a) /* uncompressed */ size_t values_len = 0; for (i = 0; i < numberOfSubsets; ++i) { - sprintf(secondstr, "#%ld#second", i + 1); + snprintf(secondstr, sizeof(secondstr), "#%ld#second", i + 1); ret = grib_get_size(h, secondstr, &values_len); if (ret) { /* no 'second' key */ @@ -366,60 +351,57 @@ static int select_datetime(grib_accessor* a) } ret = grib_get_long(h, "extractDateTimeYearStart", &yearStart); - if (ret) - return ret; + if (ret) return ret; ret = grib_get_long(h, "extractDateTimeMonthStart", &monthStart); - if (ret) - return ret; + if (ret) return ret; ret = grib_get_long(h, "extractDateTimeDayStart", &dayStart); - if (ret) - return ret; + if (ret) return ret; ret = grib_get_long(h, "extractDateTimeHourStart", &hourStart); - if (ret) - return ret; + if (ret) return ret; ret = grib_get_long(h, "extractDateTimeMinuteStart", &minuteStart); if (ret) minuteStart = 0; ret = grib_get_long(h, "extractDateTimeSecondStart", &secondStart); if (ret) secondStart = 0; - sprintf(start_str, "%04ld/%02ld/%02ld %02ld:%02ld:%02ld", yearStart, monthStart, dayStart, hourStart, minuteStart, secondStart); + snprintf(start_str, sizeof(start_str), "%04ld/%02ld/%02ld %02ld:%02ld:%02ld", + yearStart, monthStart, dayStart, hourStart, minuteStart, secondStart); if (c->debug) fprintf(stderr, "ECCODES DEBUG bufr_extract_datetime_subsets: start =%s\n", start_str); julianStart = date_to_julian(yearStart, monthStart, dayStart, hourStart, minuteStart, secondStart); if (julianStart == -1) { grib_context_log(c, GRIB_LOG_ERROR, "Invalid start date/time: %s", start_str); - return GRIB_INTERNAL_ERROR; + ret = GRIB_INTERNAL_ERROR; + goto cleanup; } ret = grib_get_long(h, "extractDateTimeYearEnd", &yearEnd); - if (ret) - return ret; + if (ret) return ret; ret = grib_get_long(h, "extractDateTimeMonthEnd", &monthEnd); - if (ret) - return ret; + if (ret) return ret; ret = grib_get_long(h, "extractDateTimeDayEnd", &dayEnd); - if (ret) - return ret; + if (ret) return ret; ret = grib_get_long(h, "extractDateTimeHourEnd", &hourEnd); - if (ret) - return ret; + if (ret) return ret; ret = grib_get_long(h, "extractDateTimeMinuteEnd", &minuteEnd); if (ret) minuteEnd = 0; ret = grib_get_long(h, "extractDateTimeSecondEnd", &secondEnd); if (ret) secondEnd = 0; - sprintf(end_str, "%04ld/%02ld/%02ld %02ld:%02ld:%02ld", yearEnd, monthEnd, dayEnd, hourEnd, minuteEnd, secondEnd); + snprintf(end_str, sizeof(end_str), "%04ld/%02ld/%02ld %02ld:%02ld:%02ld", + yearEnd, monthEnd, dayEnd, hourEnd, minuteEnd, secondEnd); if (c->debug) fprintf(stderr, "ECCODES DEBUG bufr_extract_datetime_subsets: end =%s\n", end_str); julianEnd = date_to_julian(yearEnd, monthEnd, dayEnd, hourEnd, minuteEnd, secondEnd); if (julianEnd == -1) { grib_context_log(c, GRIB_LOG_ERROR, "Invalid end date/time: %s", end_str); - return GRIB_INTERNAL_ERROR; + ret = GRIB_INTERNAL_ERROR; + goto cleanup; } if (julianEnd <= julianStart) { grib_context_log(c, GRIB_LOG_ERROR, "Wrong definition of time interval: end (%s) is not after start (%s)", end_str, start_str); - return GRIB_INTERNAL_ERROR; + ret = GRIB_INTERNAL_ERROR; + goto cleanup; } for (i = 0; i < numberOfSubsets; i++) { @@ -427,12 +409,14 @@ static int select_datetime(grib_accessor* a) fprintf(stderr, "ECCODES WARNING: bufr_extract_datetime_subsets: Key '%s' is missing! Using zero instead\n", secondstr); second[i] = 0; } - sprintf(datetime_str, "%04ld/%02ld/%02ld %02ld:%02ld:%.3f", year[i], month[i], day[i], hour[i], minute[i], second[i]); + snprintf(datetime_str, sizeof(datetime_str), "%04ld/%02ld/%02ld %02ld:%02ld:%.3f", + year[i], month[i], day[i], hour[i], minute[i], second[i]); if (c->debug) fprintf(stderr, "ECCODES DEBUG bufr_extract_datetime_subsets: datetime=%s\n", datetime_str); julianDT = date_to_julian(year[i], month[i], day[i], hour[i], minute[i], second[i]); if (julianDT == -1) { grib_context_log(c, GRIB_LOG_ERROR, "Invalid date/time: %s", datetime_str); - return GRIB_INTERNAL_ERROR; + ret = GRIB_INTERNAL_ERROR; + goto cleanup; } /*printf("SN: datetime_str=%s j=%.15f\t", datetime_str, julianDT);*/ @@ -447,21 +431,19 @@ static int select_datetime(grib_accessor* a) nsubsets = grib_iarray_used_size(subsets); ret = grib_set_long(h, "extractedDateTimeNumberOfSubsets", nsubsets); - if (ret) - return ret; + if (ret) return ret; if (nsubsets != 0) { - subsets_ar = grib_iarray_get_array(subsets); - ret = grib_set_long_array(h, self->extractSubsetList, subsets_ar, nsubsets); + long* subsets_ar = grib_iarray_get_array(subsets); + ret = grib_set_long_array(h, self->extractSubsetList, subsets_ar, nsubsets); grib_context_free(c, subsets_ar); - if (ret) - return ret; + if (ret) return ret; ret = grib_set_long(h, self->doExtractSubsets, 1); - if (ret) - return ret; + if (ret) return ret; } +cleanup: grib_context_free(c, year); grib_context_free(c, month); grib_context_free(c, day); @@ -469,7 +451,7 @@ static int select_datetime(grib_accessor* a) grib_context_free(c, minute); grib_context_free(c, second); grib_iarray_delete(subsets); - subsets = 0; + subsets = NULL; return ret; } diff --git a/src/grib_accessor_class_bufr_string_values.c b/src/grib_accessor_class_bufr_string_values.c index 88522299f..93c827e16 100644 --- a/src/grib_accessor_class_bufr_string_values.c +++ b/src/grib_accessor_class_bufr_string_values.c @@ -175,8 +175,8 @@ static int unpack_string_array(grib_accessor* a, char** buffer, size_t* len) grib_accessor* data = 0; grib_context* c = a->context; grib_vsarray* stringValues = NULL; - long l = 0, n = 0, tl; - size_t i, j; + size_t l = 0, tl; + size_t i, j, n = 0; /*char buf[25]={0,};*/ char** b = buffer; diff --git a/src/grib_accessor_class_bufrdc_expanded_descriptors.c b/src/grib_accessor_class_bufrdc_expanded_descriptors.c index 9b8acd7a4..b284da343 100644 --- a/src/grib_accessor_class_bufrdc_expanded_descriptors.c +++ b/src/grib_accessor_class_bufrdc_expanded_descriptors.c @@ -221,7 +221,7 @@ static int unpack_string_array(grib_accessor* a, char** buffer, size_t* len) unpack_long(a, v, &size); for (i = 0; i < size; i++) { - sprintf(buf, "%06ld", v[i]); + snprintf(buf, sizeof(buf), "%06ld", v[i]); buffer[i] = grib_context_strdup(c, buf); } *len = l; diff --git a/src/grib_accessor_class_bytes.c b/src/grib_accessor_class_bytes.c index 3f26acef3..5ecf84ad0 100644 --- a/src/grib_accessor_class_bytes.c +++ b/src/grib_accessor_class_bytes.c @@ -171,7 +171,7 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) p = grib_handle_of_accessor(a)->buffer->data + grib_byte_offset(a); for (i = 0; i < length; i++) { - sprintf(s, "%02x", *(p++)); + snprintf(s, INT_MAX, "%02x", *(p++)); s += 2; } diff --git a/src/grib_accessor_class_check_internal_version.c b/src/grib_accessor_class_check_internal_version.c index 3cb2137c2..a9ed47c26 100644 --- a/src/grib_accessor_class_check_internal_version.c +++ b/src/grib_accessor_class_check_internal_version.c @@ -9,7 +9,7 @@ */ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF diff --git a/src/grib_accessor_class_codetable.c b/src/grib_accessor_class_codetable.c index ef3b716c2..356758a23 100644 --- a/src/grib_accessor_class_codetable.c +++ b/src/grib_accessor_class_codetable.c @@ -322,7 +322,7 @@ static grib_codetable* load_table(grib_accessor_codetable* self) if (*masterDir != 0) { char name[2048] = {0,}; - sprintf(name, "%s/%s", masterDir, self->tablename); + snprintf(name, sizeof(name), "%s/%s", masterDir, self->tablename); grib_recompose_name(h, NULL, name, recomposed, 0); filename = grib_context_full_defs_path(c, recomposed); } @@ -333,7 +333,7 @@ static grib_codetable* load_table(grib_accessor_codetable* self) if (*localDir != 0) { char localName[2048] = {0,}; - sprintf(localName, "%s/%s", localDir, self->tablename); + snprintf(localName, sizeof(localName), "%s/%s", localDir, self->tablename); grib_recompose_name(h, NULL, localName, localRecomposed, 0); localFilename = grib_context_full_defs_path(c, localRecomposed); } @@ -581,7 +581,7 @@ static void dump(grib_accessor* a, grib_dumper* dumper) if (b == value) strcpy(comment, table->entries[value].title); else - sprintf(comment, "%s", table->entries[value].title); + snprintf(comment, sizeof(comment), "%s", table->entries[value].title); if (table->entries[value].units != NULL && grib_inline_strcmp(table->entries[value].units, "unknown")) { strcat(comment, " ("); @@ -635,7 +635,7 @@ static int unpack_string(grib_accessor* a, char* buffer, size_t* len) } else { #if 1 - sprintf(tmp, "%d", (int)value); + snprintf(tmp, sizeof(tmp), "%d", (int)value); #else return GRIB_DECODING_ERROR; #endif diff --git a/src/grib_accessor_class_codetable_title.c b/src/grib_accessor_class_codetable_title.c index 175e4f904..648c5db7e 100644 --- a/src/grib_accessor_class_codetable_title.c +++ b/src/grib_accessor_class_codetable_title.c @@ -184,7 +184,7 @@ static int unpack_string(grib_accessor* a, char* buffer, size_t* len) } else { #if 1 - sprintf(tmp, "%d", (int)value); + snprintf(tmp, sizeof(tmp), "%d", (int)value); #else return GRIB_DECODING_ERROR; #endif diff --git a/src/grib_accessor_class_codetable_units.c b/src/grib_accessor_class_codetable_units.c index a6abb8d33..1f40b46ad 100644 --- a/src/grib_accessor_class_codetable_units.c +++ b/src/grib_accessor_class_codetable_units.c @@ -182,7 +182,7 @@ static int unpack_string(grib_accessor* a, char* buffer, size_t* len) strcpy(tmp, table->entries[value].units); } else { - sprintf(tmp, "%d", (int)value); + snprintf(tmp, sizeof(tmp), "%d", (int)value); } l = strlen(tmp) + 1; diff --git a/src/grib_accessor_class_concept.c b/src/grib_accessor_class_concept.c index dbafe00b4..9fb598f3b 100644 --- a/src/grib_accessor_class_concept.c +++ b/src/grib_accessor_class_concept.c @@ -435,7 +435,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) { char buf[80]; size_t s; - sprintf(buf, "%ld", *val); + snprintf(buf, sizeof(buf), "%ld", *val); #if 0 if(*len > 1) return GRIB_NOT_IMPLEMENTED; diff --git a/src/grib_accessor_class_constant.c b/src/grib_accessor_class_constant.c index 66ae37139..dd9fc9c5a 100644 --- a/src/grib_accessor_class_constant.c +++ b/src/grib_accessor_class_constant.c @@ -14,7 +14,7 @@ **************************************/ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF diff --git a/src/grib_accessor_class_count_missing.c b/src/grib_accessor_class_count_missing.c index 3c9ec36fd..99b7d0943 100644 --- a/src/grib_accessor_class_count_missing.c +++ b/src/grib_accessor_class_count_missing.c @@ -21,6 +21,7 @@ MEMBERS = const char* bitmap MEMBERS = const char* unusedBitsInBitmap MEMBERS = const char* numberOfDataPoints + MEMBERS = const char* missingValueManagementUsed END_CLASS_DEF */ @@ -49,6 +50,7 @@ typedef struct grib_accessor_count_missing const char* bitmap; const char* unusedBitsInBitmap; const char* numberOfDataPoints; + const char* missingValueManagementUsed; } grib_accessor_count_missing; extern grib_accessor_class* grib_accessor_class_long; @@ -181,15 +183,41 @@ static void init(grib_accessor* a, const long len, grib_arguments* arg) { int n = 0; grib_accessor_count_missing* self = (grib_accessor_count_missing*)a; + grib_handle* h = grib_handle_of_accessor(a); a->length = 0; a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - self->bitmap = grib_arguments_get_name(grib_handle_of_accessor(a), arg, n++); - self->unusedBitsInBitmap = grib_arguments_get_name(grib_handle_of_accessor(a), arg, n++); - self->numberOfDataPoints = grib_arguments_get_name(grib_handle_of_accessor(a), arg, n++); + self->bitmap = grib_arguments_get_name(h, arg, n++); + self->unusedBitsInBitmap = grib_arguments_get_name(h, arg, n++); + self->numberOfDataPoints = grib_arguments_get_name(h, arg, n++); + self->missingValueManagementUsed = grib_arguments_get_name(h, arg, n++); /* Can be NULL */ } static const int used[] = { 0, 1, 3, 7, 15, 31, 63, 127, 255 }; +static int get_count_of_missing_values(grib_handle* h, long* p_count_of_missing) +{ + int err = 0; + long count_of_missing = 0; + size_t vsize = 0, ii = 0; + double* values = NULL; + double mv = 0; + if ((err = grib_get_double(h, "missingValue", &mv)) != GRIB_SUCCESS) + return err; + if ((err = grib_get_size(h, "values", &vsize)) != GRIB_SUCCESS) + return err; + values = (double*)grib_context_malloc(h->context, vsize * sizeof(double)); + if (!values) + return GRIB_OUT_OF_MEMORY; + if ((err = grib_get_double_array(h, "values", values, &vsize)) != GRIB_SUCCESS) + return err; + for (ii = 0; ii < vsize; ii++) { + if (values[ii] == mv) ++count_of_missing; + } + grib_context_free(h->context, values); + *p_count_of_missing = count_of_missing; + + return GRIB_SUCCESS; +} static int unpack_long(grib_accessor* a, long* val, size_t* len) { grib_accessor_count_missing* self = (grib_accessor_count_missing*)a; @@ -202,10 +230,23 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) grib_handle* h = grib_handle_of_accessor(a); grib_accessor* bitmap = grib_find_accessor(h, self->bitmap); - *val = 0; + *val = 0; /* By default assume none are missing */ *len = 1; - if (!bitmap) + if (!bitmap) { + long mvmu = 0; + if (self->missingValueManagementUsed && + grib_get_long(h, self->missingValueManagementUsed, &mvmu) == GRIB_SUCCESS && mvmu != 0) + { + /* ECC-523: No bitmap. Missing values are encoded in the Data Section. + * So we must decode all the data values and count how many are missing + */ + long count_of_missing = 0; + if (get_count_of_missing_values(h, &count_of_missing) == GRIB_SUCCESS) { + *val = count_of_missing; + } + } return GRIB_SUCCESS; + } size = grib_byte_count(bitmap); offset = grib_byte_offset(bitmap); diff --git a/src/grib_accessor_class_data_apply_bitmap.c b/src/grib_accessor_class_data_apply_bitmap.c index 6dbb53d34..c41b74eb6 100644 --- a/src/grib_accessor_class_data_apply_bitmap.c +++ b/src/grib_accessor_class_data_apply_bitmap.c @@ -356,7 +356,7 @@ static int unpack_double_element_set(grib_accessor* a, const size_t* index_array cidx_array = (size_t*)grib_context_malloc(a->context, count_1s * sizeof(size_t)); cval_array = (double*)grib_context_malloc(a->context, count_1s * sizeof(double)); - + ci = 0; for (i = 0; i < len; i++) { if (val_array[i] == 1) { diff --git a/src/grib_accessor_class_data_apply_boustrophedonic.c b/src/grib_accessor_class_data_apply_boustrophedonic.c index ffac0bdbc..5d5486e95 100644 --- a/src/grib_accessor_class_data_apply_boustrophedonic.c +++ b/src/grib_accessor_class_data_apply_boustrophedonic.c @@ -22,7 +22,7 @@ IMPLEMENTS = value_count IMPLEMENTS = dump;get_native_type MEMBERS=const char* values - MEMBERS=const char* numberOfRows + MEMBERS=const char* numberOfRows MEMBERS=const char* numberOfColumns MEMBERS=const char* numberOfPoints MEMBERS=const char* pl diff --git a/src/grib_accessor_class_data_apply_boustrophedonic_bitmap.c b/src/grib_accessor_class_data_apply_boustrophedonic_bitmap.c index e152156ab..84c6163ae 100644 --- a/src/grib_accessor_class_data_apply_boustrophedonic_bitmap.c +++ b/src/grib_accessor_class_data_apply_boustrophedonic_bitmap.c @@ -392,7 +392,7 @@ static int unpack_double_element_set(grib_accessor* a, const size_t* index_array cidx_array = (size_t*)grib_context_malloc(a->context, count_1s * sizeof(size_t)); cval_array = (double*)grib_context_malloc(a->context, count_1s * sizeof(double)); - + ci = 0; for (i = 0; i < len; i++) { if (val_array[i] == 1) { diff --git a/src/grib_accessor_class_data_ccsds_packing.c b/src/grib_accessor_class_data_ccsds_packing.c index 7bdad0c52..370053fed 100644 --- a/src/grib_accessor_class_data_ccsds_packing.c +++ b/src/grib_accessor_class_data_ccsds_packing.c @@ -558,8 +558,8 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) } /* - printf("n_vals = %ld, bits8 = %ld\n", (long)n_vals, (long)bits8); - printf("in %ld out => %ld\n", (long)bits8/8*n_vals,(long) buflen); + printf("n_vals = %ld, bits8 = %ld\n", n_vals, bits8); + printf("in %ld out => %zu\n", bits8/8*n_vals, buflen); */ buflen = strm.total_out; grib_buffer_replace(a, buf, buflen, 1, 1); diff --git a/src/grib_accessor_class_data_dummy_field.c b/src/grib_accessor_class_data_dummy_field.c index 4a81c89fe..072d64dae 100644 --- a/src/grib_accessor_class_data_dummy_field.c +++ b/src/grib_accessor_class_data_dummy_field.c @@ -17,8 +17,8 @@ CLASS = accessor SUPER = grib_accessor_class_data_g1simple_packing IMPLEMENTS = init - IMPLEMENTS = unpack_double - IMPLEMENTS = value_count + IMPLEMENTS = unpack_double + IMPLEMENTS = value_count IMPLEMENTS = pack_double MEMBERS=const char* missing_value MEMBERS=const char* numberOfPoints diff --git a/src/grib_accessor_class_data_g1second_order_constant_width_packing.c b/src/grib_accessor_class_data_g1second_order_constant_width_packing.c index d6e23112f..c369429a1 100644 --- a/src/grib_accessor_class_data_g1second_order_constant_width_packing.c +++ b/src/grib_accessor_class_data_g1second_order_constant_width_packing.c @@ -19,6 +19,7 @@ IMPLEMENTS = init IMPLEMENTS = pack_double IMPLEMENTS = unpack_double + IMPLEMENTS = unpack_double_element;unpack_double_element_set IMPLEMENTS = value_count MEMBERS=const char* half_byte MEMBERS=const char* packingType @@ -56,6 +57,8 @@ static int unpack_double(grib_accessor*, double* val, size_t* len); static int value_count(grib_accessor*, long*); static void init(grib_accessor*, const long, grib_arguments*); static void init_class(grib_accessor_class*); +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); typedef struct grib_accessor_data_g1second_order_constant_width_packing { @@ -136,8 +139,8 @@ static grib_accessor_class _grib_accessor_class_data_g1second_order_constant_wid 0, /* nearest_smaller_value */ 0, /* next accessor */ 0, /* compare vs. another accessor */ - 0, /* unpack only ith value */ - 0, /* unpack a given set of elements */ + &unpack_double_element, /* unpack only ith value */ + &unpack_double_element_set, /* unpack a given set of elements */ 0, /* unpack a subarray */ 0, /* clear */ 0, /* clone accessor */ @@ -174,8 +177,6 @@ static void init_class(grib_accessor_class* c) c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; c->next = (*(c->super))->next; c->compare = (*(c->super))->compare; - c->unpack_double_element = (*(c->super))->unpack_double_element; - c->unpack_double_element_set = (*(c->super))->unpack_double_element_set; c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; c->clear = (*(c->super))->clear; c->make_clone = (*(c->super))->make_clone; @@ -186,23 +187,24 @@ static void init_class(grib_accessor_class* c) static void init(grib_accessor* a, const long v, grib_arguments* args) { grib_accessor_data_g1second_order_constant_width_packing* self = (grib_accessor_data_g1second_order_constant_width_packing*)a; + grib_handle* hand = grib_handle_of_accessor(a); - self->half_byte = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->packingType = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->ieee_packing = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->precision = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->widthOfFirstOrderValues = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->N1 = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->N2 = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->numberOfGroups = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->numberOfSecondOrderPackedValues = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->extraValues = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->Ni = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->Nj = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->pl = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->jPointsAreConsecutive = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->bitmap = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); - self->groupWidth = grib_arguments_get_name(grib_handle_of_accessor(a), args, self->carg++); + self->half_byte = grib_arguments_get_name(hand, args, self->carg++); + self->packingType = grib_arguments_get_name(hand, args, self->carg++); + self->ieee_packing = grib_arguments_get_name(hand, args, self->carg++); + self->precision = grib_arguments_get_name(hand, args, self->carg++); + self->widthOfFirstOrderValues = grib_arguments_get_name(hand, args, self->carg++); + self->N1 = grib_arguments_get_name(hand, args, self->carg++); + self->N2 = grib_arguments_get_name(hand, args, self->carg++); + self->numberOfGroups = grib_arguments_get_name(hand, args, self->carg++); + self->numberOfSecondOrderPackedValues = grib_arguments_get_name(hand, args, self->carg++); + self->extraValues = grib_arguments_get_name(hand, args, self->carg++); + self->Ni = grib_arguments_get_name(hand, args, self->carg++); + self->Nj = grib_arguments_get_name(hand, args, self->carg++); + self->pl = grib_arguments_get_name(hand, args, self->carg++); + self->jPointsAreConsecutive = grib_arguments_get_name(hand, args, self->carg++); + self->bitmap = grib_arguments_get_name(hand, args, self->carg++); + self->groupWidth = grib_arguments_get_name(hand, args, self->carg++); self->edition = 1; a->flags |= GRIB_ACCESSOR_FLAG_DATA; } @@ -237,41 +239,45 @@ static int unpack_double(grib_accessor* a, double* values, size_t* len) long decimal_scale_factor; double s, d; long* secondaryBitmap; + grib_handle* hand = grib_handle_of_accessor(a); buf += grib_byte_offset(a); - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfGroups, &numberOfGroups)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->numberOfGroups, &numberOfGroups)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->jPointsAreConsecutive, &jPointsAreConsecutive)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->jPointsAreConsecutive, &jPointsAreConsecutive)) != GRIB_SUCCESS) return ret; if (jPointsAreConsecutive) { - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->Ni, &numberPerRow)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->Ni, &numberPerRow)) != GRIB_SUCCESS) return ret; } else { - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->Nj, &numberPerRow)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->Nj, &numberPerRow)) != GRIB_SUCCESS) return ret; } - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->widthOfFirstOrderValues, &widthOfFirstOrderValues)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->widthOfFirstOrderValues, &widthOfFirstOrderValues)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->reference_value, &reference_value)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(hand, self->reference_value, &reference_value)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfSecondOrderPackedValues, + if ((ret = grib_get_long_internal(hand, self->numberOfSecondOrderPackedValues, &numberOfSecondOrderPackedValues)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->groupWidth, &groupWidth)) != GRIB_SUCCESS) + if (*len < numberOfSecondOrderPackedValues) + return GRIB_ARRAY_TOO_SMALL; + + if ((ret = grib_get_long_internal(hand, self->groupWidth, &groupWidth)) != GRIB_SUCCESS) return ret; secondaryBitmap = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfSecondOrderPackedValues); @@ -328,3 +334,58 @@ 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"); return GRIB_NOT_IMPLEMENTED; } + +static int unpack_double_element(grib_accessor* a, size_t idx, double* val) +{ + grib_handle* hand = grib_handle_of_accessor(a); + size_t size = 0; + double* values = NULL; + int err = 0; + + /* TODO: This should be 'codedValues' not 'values' + but GRIB1 version of this packing does not have that key!! */ + err = grib_get_size(hand, "values", &size); + if (err) + return err; + if (idx > size) + return GRIB_INVALID_ARGUMENT; + + values = (double*)grib_context_malloc_clear(a->context, size * sizeof(double)); + err = grib_get_double_array(hand, "values", values, &size); + if (err) { + grib_context_free(a->context, values); + return err; + } + *val = values[idx]; + grib_context_free(a->context, values); + return GRIB_SUCCESS; +} + +static int unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) +{ + grib_handle* hand = grib_handle_of_accessor(a); + size_t size = 0, i = 0; + double* values = NULL; + int err = 0; + + /* TODO: This should be 'codedValues' not 'values' + but GRIB1 version of this packing does not have that key!! */ + err = grib_get_size(hand, "values", &size); + if (err) return err; + + for (i = 0; i < len; i++) { + if (index_array[i] > size) return GRIB_INVALID_ARGUMENT; + } + + values = (double*)grib_context_malloc_clear(a->context, size * sizeof(double)); + err = grib_get_double_array(hand, "values", values, &size); + if (err) { + grib_context_free(a->context, values); + return err; + } + for (i = 0; i < len; i++) { + val_array[i] = values[index_array[i]]; + } + grib_context_free(a->context, values); + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_data_g1second_order_general_extended_packing.c b/src/grib_accessor_class_data_g1second_order_general_extended_packing.c index 5c7f3a1bc..b39a32ac2 100644 --- a/src/grib_accessor_class_data_g1second_order_general_extended_packing.c +++ b/src/grib_accessor_class_data_g1second_order_general_extended_packing.c @@ -409,6 +409,9 @@ static int unpack_double(grib_accessor* a, double* values, size_t* len) if (ret) return ret; + if (*len < (size_t)numberOfValues) + return GRIB_ARRAY_TOO_SMALL; + if ((ret = grib_get_long_internal(handle, self->numberOfGroups, &numberOfGroups)) != GRIB_SUCCESS) return ret; diff --git a/src/grib_accessor_class_data_g1second_order_general_packing.c b/src/grib_accessor_class_data_g1second_order_general_packing.c index eaeefa925..7f8d7892e 100644 --- a/src/grib_accessor_class_data_g1second_order_general_packing.c +++ b/src/grib_accessor_class_data_g1second_order_general_packing.c @@ -260,6 +260,9 @@ static int unpack_double(grib_accessor* a, double* values, size_t* len) &numberOfSecondOrderPackedValues)) != GRIB_SUCCESS) return ret; + if (*len < (size_t)numberOfSecondOrderPackedValues) + return GRIB_ARRAY_TOO_SMALL; + groupWidths = (long*)grib_context_malloc_clear(a->context, sizeof(long) * numberOfGroups); groupWidthsSize = numberOfGroups; if ((ret = grib_get_long_array_internal(grib_handle_of_accessor(a), self->groupWidths, groupWidths, &groupWidthsSize)) != GRIB_SUCCESS) diff --git a/src/grib_accessor_class_data_g1second_order_row_by_row_packing.c b/src/grib_accessor_class_data_g1second_order_row_by_row_packing.c index 99e4b0514..9f4401b32 100644 --- a/src/grib_accessor_class_data_g1second_order_row_by_row_packing.c +++ b/src/grib_accessor_class_data_g1second_order_row_by_row_packing.c @@ -411,6 +411,9 @@ static int unpack_double(grib_accessor* a, double* values, size_t* len) for (i = 0; i < numberOfGroups; i++) n += numbersPerRow[i]; + if (*len < (size_t)n) + return GRIB_ARRAY_TOO_SMALL; + X = (long*)grib_context_malloc_clear(a->context, sizeof(long) * n); n = 0; k = 0; diff --git a/src/grib_accessor_class_data_g22order_packing.c b/src/grib_accessor_class_data_g22order_packing.c index b92ebcba4..7220f42a6 100644 --- a/src/grib_accessor_class_data_g22order_packing.c +++ b/src/grib_accessor_class_data_g22order_packing.c @@ -501,6 +501,9 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) if (err) return err; + if (*len < (size_t)n_vals) + return GRIB_ARRAY_TOO_SMALL; + if ((err = grib_get_long_internal(gh, self->bits_per_value, &bits_per_value)) != GRIB_SUCCESS) return err; if ((err = grib_get_double_internal(gh, self->reference_value, &reference_value)) != GRIB_SUCCESS) diff --git a/src/grib_accessor_class_data_g2simple_packing.c b/src/grib_accessor_class_data_g2simple_packing.c index 7f469dff3..5880821e7 100644 --- a/src/grib_accessor_class_data_g2simple_packing.c +++ b/src/grib_accessor_class_data_g2simple_packing.c @@ -18,7 +18,7 @@ SUPER = grib_accessor_class_data_simple_packing IMPLEMENTS = init IMPLEMENTS = pack_double - IMPLEMENTS = pack_bytes + IMPLEMENTS = pack_bytes IMPLEMENTS = value_count END_CLASS_DEF diff --git a/src/grib_accessor_class_data_jpeg2000_packing.c b/src/grib_accessor_class_data_jpeg2000_packing.c index 156470d7f..866a80bfe 100644 --- a/src/grib_accessor_class_data_jpeg2000_packing.c +++ b/src/grib_accessor_class_data_jpeg2000_packing.c @@ -479,7 +479,13 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) "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); - return GRIB_INTERNAL_ERROR; + /* 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. + */ + /*return GRIB_INTERNAL_ERROR;*/ + grib_context_free(a->context, buf); + return GRIB_SUCCESS; } switch (type_of_compression_used) { diff --git a/src/grib_accessor_class_data_png_packing.c b/src/grib_accessor_class_data_png_packing.c index 9347ec843..f7c86b13c 100644 --- a/src/grib_accessor_class_data_png_packing.c +++ b/src/grib_accessor_class_data_png_packing.c @@ -503,8 +503,15 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) } if (width * height != *len) { - fprintf(stderr, "width=%ld height=%ld len=%ld\n", (long)width, (long)height, (long)(*len)); - Assert(width * height == *len); + grib_context_log(a->context, GRIB_LOG_ERROR, + "grib_accessor_class_data_png_packing pack_double: width=%ld height=%ld len=%ld." + " width*height should equal len!", + (long)width, (long)height, (long)*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. + */ + return GRIB_SUCCESS; } d = grib_power(decimal_scale_factor, 10); diff --git a/src/grib_accessor_class_dictionary.c b/src/grib_accessor_class_dictionary.c index 4651ed321..93da5e4de 100644 --- a/src/grib_accessor_class_dictionary.c +++ b/src/grib_accessor_class_dictionary.c @@ -186,7 +186,7 @@ static grib_trie* load_dictionary(grib_context* c, grib_accessor* a, int* err) if (*masterDir != 0) { char name[2048] = {0,}; char recomposed[2048] = {0,}; - sprintf(name, "%s/%s", masterDir, self->dictionary); + snprintf(name, sizeof(name), "%s/%s", masterDir, self->dictionary); grib_recompose_name(h, NULL, name, recomposed, 0); filename = grib_context_full_defs_path(c, recomposed); } @@ -197,13 +197,13 @@ static grib_trie* load_dictionary(grib_context* c, grib_accessor* a, int* err) if (*localDir != 0) { char localName[2048] = {0,}; char localRecomposed[1024] = {0,}; - sprintf(localName, "%s/%s", localDir, self->dictionary); + snprintf(localName, sizeof(localName), "%s/%s", localDir, self->dictionary); grib_recompose_name(h, NULL, localName, localRecomposed, 0); localFilename = grib_context_full_defs_path(c, localRecomposed); - sprintf(dictName, "%s:%s", localFilename, filename); + snprintf(dictName, sizeof(dictName), "%s:%s", localFilename, filename); } else { - sprintf(dictName, "%s", filename); + snprintf(dictName, sizeof(dictName), "%s", filename); } if (!filename) { diff --git a/src/grib_accessor_class_divdouble.c b/src/grib_accessor_class_divdouble.c index f3a4095c9..1349259c8 100644 --- a/src/grib_accessor_class_divdouble.c +++ b/src/grib_accessor_class_divdouble.c @@ -13,7 +13,7 @@ ****************************************/ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF diff --git a/src/grib_accessor_class_double.c b/src/grib_accessor_class_double.c index d451be5b1..e9a3430b2 100644 --- a/src/grib_accessor_class_double.c +++ b/src/grib_accessor_class_double.c @@ -149,9 +149,9 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) grib_unpack_double(a, &val, &l); if ((val == GRIB_MISSING_DOUBLE) && ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0)) - sprintf(repres, "MISSING"); + snprintf(repres, sizeof(repres), "MISSING"); else - sprintf(repres, "%g", val); + snprintf(repres, sizeof(repres), "%g", val); l = strlen(repres) + 1; diff --git a/src/grib_accessor_class_element.c b/src/grib_accessor_class_element.c index e57359d47..355cdf477 100644 --- a/src/grib_accessor_class_element.c +++ b/src/grib_accessor_class_element.c @@ -167,7 +167,7 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) ar = (long*)grib_context_malloc_clear(c, size * sizeof(long)); if (!ar) { - grib_context_log(c, GRIB_LOG_ERROR, "unable to allocate %ld bytes", size * sizeof(long)); + grib_context_log(c, GRIB_LOG_ERROR, "unable to allocate %zu bytes", size * sizeof(long)); return GRIB_OUT_OF_MEMORY; } @@ -206,7 +206,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) ar = (long*)grib_context_malloc_clear(c, size * sizeof(long)); if (!ar) { - grib_context_log(c, GRIB_LOG_ERROR, "unable to allocate %ld bytes", size * sizeof(long)); + grib_context_log(c, GRIB_LOG_ERROR, "unable to allocate %zu bytes", size * sizeof(long)); return GRIB_OUT_OF_MEMORY; } diff --git a/src/grib_accessor_class_expanded_descriptors.c b/src/grib_accessor_class_expanded_descriptors.c index 4410a43d7..7eb3ff68f 100644 --- a/src/grib_accessor_class_expanded_descriptors.c +++ b/src/grib_accessor_class_expanded_descriptors.c @@ -649,7 +649,7 @@ static int expand(grib_accessor* a) grib_context_log(c, GRIB_LOG_ERROR, "%s: Unexpanded size is zero!", a->name); return GRIB_DECODING_ERROR; } - + u = (long*)grib_context_malloc_clear(c, sizeof(long) * unexpandedSize); if (!u) { err = GRIB_OUT_OF_MEMORY; @@ -672,7 +672,7 @@ static int expand(grib_accessor* a) if (err) return err; - sprintf(key, "%ld_%ld_%ld_%ld_%ld", centre, masterTablesVersionNumber, localTablesVersionNumber, masterTablesNumber, u[0]); + snprintf(key, sizeof(key), "%ld_%ld_%ld_%ld_%ld", centre, masterTablesVersionNumber, localTablesVersionNumber, masterTablesNumber, u[0]); expanded = grib_context_expanded_descriptors_list_get(c, key, u, unexpandedSize); if (expanded) { self->expanded = expanded; diff --git a/src/grib_accessor_class_forward.c b/src/grib_accessor_class_forward.c index 379035e90..dd07dd037 100644 --- a/src/grib_accessor_class_forward.c +++ b/src/grib_accessor_class_forward.c @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF diff --git a/src/grib_accessor_class_g1_section4_length.c b/src/grib_accessor_class_g1_section4_length.c index ba516d9a5..cbbbaf2fd 100644 --- a/src/grib_accessor_class_g1_section4_length.c +++ b/src/grib_accessor_class_g1_section4_length.c @@ -148,9 +148,9 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) #if 0 grib_accessor_class* super = *(a->cclass->super); - /* Here we assume that the totalLength will be coded AFTER the section4 length, and + /* Here we assume that the totalLength will be coded AFTER the section4 length, and the section4 length will be overwritten by the totalLength accessor for large GRIBs */ - + /*printf("UPDATING sec4len %ld\n",*val);*/ return super->pack_long(a,val,len); diff --git a/src/grib_accessor_class_g1area.c b/src/grib_accessor_class_g1area.c index 22abf5657..f329098ce 100644 --- a/src/grib_accessor_class_g1area.c +++ b/src/grib_accessor_class_g1area.c @@ -9,7 +9,7 @@ */ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -240,7 +240,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) return GRIB_BUFFER_TOO_SMALL; } - sprintf(val, "N:%3.5f W:%3.5f S:%3.5f E:%3.5f", ((float)laf), ((float)lof), ((float)lal), ((float)lol)); + snprintf(val, 1024, "N:%3.5f W:%3.5f S:%3.5f E:%3.5f", ((float)laf), ((float)lof), ((float)lal), ((float)lol)); len[0] = strlen(val); return GRIB_SUCCESS; diff --git a/src/grib_accessor_class_g1date.c b/src/grib_accessor_class_g1date.c index 2acb6491e..8da7889f0 100644 --- a/src/grib_accessor_class_g1date.c +++ b/src/grib_accessor_class_g1date.c @@ -14,7 +14,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -288,12 +288,12 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) strcpy(tmp, months[month - 1]); } else if (year == 255 && month >= 1 && month <= 12) { - sprintf(tmp, "%s-%02ld", months[month - 1], day); - /* sprintf(tmp,"%02ld-%02ld",month,day); */ + snprintf(tmp, sizeof(tmp), "%s-%02ld", months[month - 1], day); + /* snprintf(tmp,sizeof(tmp),"%02ld-%02ld",month,day); */ } else { long x = ((century - 1) * 100 + year) * 10000 + month * 100 + day; - sprintf(tmp, "%ld", x); + snprintf(tmp, sizeof(tmp), "%ld", x); } l = strlen(tmp) + 1; diff --git a/src/grib_accessor_class_g1day_of_the_year_date.c b/src/grib_accessor_class_g1day_of_the_year_date.c index 795133b80..ea420ec73 100644 --- a/src/grib_accessor_class_g1day_of_the_year_date.c +++ b/src/grib_accessor_class_g1day_of_the_year_date.c @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -176,7 +176,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) fullyear = ((century - 1) * 100 + year); fake_day_of_year = ((month - 1) * 30) + day; - sprintf(tmp, "%04ld-%03ld", fullyear, fake_day_of_year); + snprintf(tmp, sizeof(tmp), "%04ld-%03ld", fullyear, fake_day_of_year); l = strlen(tmp) + 1; if (*len < l) { diff --git a/src/grib_accessor_class_g1end_of_interval_monthly.c b/src/grib_accessor_class_g1end_of_interval_monthly.c index ebd3b7260..30cc178d0 100644 --- a/src/grib_accessor_class_g1end_of_interval_monthly.c +++ b/src/grib_accessor_class_g1end_of_interval_monthly.c @@ -169,7 +169,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) if (!a->dirty) return GRIB_SUCCESS; - if (*len != self->number_of_elements) + if (*len != (size_t)self->number_of_elements) return GRIB_ARRAY_TOO_SMALL; if ((ret = grib_get_string(grib_handle_of_accessor(a), self->verifyingMonth, verifyingMonth, &slen)) != GRIB_SUCCESS) diff --git a/src/grib_accessor_class_g1fcperiod.c b/src/grib_accessor_class_g1fcperiod.c index 8a58208a4..85ccc337f 100644 --- a/src/grib_accessor_class_g1fcperiod.c +++ b/src/grib_accessor_class_g1fcperiod.c @@ -145,13 +145,14 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) { long start = 0, theEnd = 0; char tmp[1024]; + const size_t tmpLen = sizeof(tmp); int err = grib_g1_step_get_steps(a, &start, &theEnd); size_t l = 0; if (err) return err; - sprintf(tmp, "%ld-%ld", start / 24, theEnd / 24); + snprintf(tmp, tmpLen, "%ld-%ld", start / 24, theEnd / 24); /*printf("---- FCPERIOD %s [start:%g, end:%g]",tmp,start,end);*/ l = strlen(tmp) + 1; diff --git a/src/grib_accessor_class_g1forecastmonth.c b/src/grib_accessor_class_g1forecastmonth.c index 06c799fdd..780dd899c 100644 --- a/src/grib_accessor_class_g1forecastmonth.c +++ b/src/grib_accessor_class_g1forecastmonth.c @@ -165,7 +165,7 @@ static void dump(grib_accessor* a, grib_dumper* dumper) grib_dump_long(dumper, a, NULL); } -static int calculate_fcmonth(grib_accessor* a, +static int calculate_fcmonth(grib_accessor* a, long verification_yearmonth, long base_date, long day, long hour, long* result) { long base_yearmonth = 0; diff --git a/src/grib_accessor_class_g1monthlydate.c b/src/grib_accessor_class_g1monthlydate.c index 0155e92e1..cbfcf755c 100644 --- a/src/grib_accessor_class_g1monthlydate.c +++ b/src/grib_accessor_class_g1monthlydate.c @@ -15,7 +15,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF diff --git a/src/grib_accessor_class_g1step_range.c b/src/grib_accessor_class_g1step_range.c index 0d4911914..b015e6c64 100644 --- a/src/grib_accessor_class_g1step_range.c +++ b/src/grib_accessor_class_g1step_range.c @@ -279,7 +279,7 @@ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd) return err; } else - sprintf(stepType, "unknown"); + snprintf(stepType, sizeof(stepType), "unknown"); *start = p1; *theEnd = p2; @@ -345,7 +345,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) if (self->step_unit != NULL) grib_get_string(hand, self->step_unit, step_unit_string, &step_unit_string_len); else - sprintf(step_unit_string, "h"); + snprintf(step_unit_string, sizeof(step_unit_string), "h"); if (self->error_on_units) { grib_get_long_internal(hand, self->unit, &unit); @@ -370,7 +370,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) return err; } else - sprintf(stepType, "unknown"); + snprintf(stepType, sizeof(stepType), "unknown"); /* Patch for old forecast probabilities */ if (self->patch_fp_precip) { @@ -378,13 +378,13 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) } if (strcmp(stepType, "instant") == 0) { - sprintf(buf, "%ld", start); + snprintf(buf, sizeof(buf), "%ld", start); } else if ((strcmp(stepType, "avgfc") == 0) || (strcmp(stepType, "avgua") == 0) || (strcmp(stepType, "avgia") == 0) || (strcmp(stepType, "varins") == 0)) { - sprintf(buf, "%ld", start); + snprintf(buf, sizeof(buf), "%ld", start); } else if ( (strcmp(stepType, "accum") == 0) || @@ -399,10 +399,10 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) (strcmp(stepType, "varas") == 0) || (strcmp(stepType, "varad") == 0)) { if (start == theEnd) { - sprintf(buf, "%ld", theEnd); + snprintf(buf, sizeof(buf), "%ld", theEnd); } else { - sprintf(buf, "%ld-%ld", start, theEnd); + snprintf(buf, sizeof(buf), "%ld-%ld", start, theEnd); } } else { @@ -496,7 +496,7 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) return ret; } else - sprintf(stepType, "unknown"); + snprintf(stepType, sizeof(stepType), "unknown"); if ((ret = grib_set_long_internal(h, "timeRangeIndicatorFromStepRange", -1))) return ret; @@ -673,7 +673,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) return err; } else - sprintf(stepType, "unknown"); + snprintf(stepType, sizeof(stepType), "unknown"); if (self->step_unit != NULL && (err = grib_get_long_internal(grib_handle_of_accessor(a), self->step_unit, &step_unit))) return err; @@ -681,7 +681,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) switch (self->pack_index) { case -1: self->pack_index = -1; - sprintf(buff, "%ld", *val); + snprintf(buff, sizeof(buff), "%ld", *val); return pack_string(a, buff, &bufflen); case 0: self->pack_index = -1; @@ -691,14 +691,14 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) while (*p != '-' && *p != '\0') p++; if (*p == '-') { - sprintf(buff, "%ld-%s", *val, ++p); + snprintf(buff, sizeof(buff), "%ld-%s", *val, ++p); } else { if (strcmp(stepType, "instant") && strcmp(stepType, "avgd")) { - sprintf(buff, "%ld-%s", *val, sval); + snprintf(buff, sizeof(buff), "%ld-%s", *val, sval); } else { - sprintf(buff, "%ld", *val); + snprintf(buff, sizeof(buff), "%ld", *val); } } return pack_string(a, buff, &bufflen); @@ -711,14 +711,14 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) p++; if (*p == '-') { *p = '\0'; - sprintf(buff, "%s-%ld", sval, *val); + snprintf(buff, sizeof(buff), "%s-%ld", sval, *val); } else { if (strcmp(stepType, "instant") && strcmp(stepType, "avgd")) { - sprintf(buff, "%s-%ld", sval, *val); + snprintf(buff, sizeof(buff), "%s-%ld", sval, *val); } else { - sprintf(buff, "%ld", *val); + snprintf(buff, sizeof(buff), "%ld", *val); } } return pack_string(a, buff, &bufflen); diff --git a/src/grib_accessor_class_g1verificationdate.c b/src/grib_accessor_class_g1verificationdate.c index 5eefd3604..f8969233c 100644 --- a/src/grib_accessor_class_g1verificationdate.c +++ b/src/grib_accessor_class_g1verificationdate.c @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF diff --git a/src/grib_accessor_class_g2bitmap.c b/src/grib_accessor_class_g2bitmap.c index ecbbbd533..a024ea268 100644 --- a/src/grib_accessor_class_g2bitmap.c +++ b/src/grib_accessor_class_g2bitmap.c @@ -9,7 +9,7 @@ */ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF diff --git a/src/grib_accessor_class_g2date.c b/src/grib_accessor_class_g2date.c index 746d44036..01f7a56c8 100644 --- a/src/grib_accessor_class_g2date.c +++ b/src/grib_accessor_class_g2date.c @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF diff --git a/src/grib_accessor_class_g2lon.c b/src/grib_accessor_class_g2lon.c index e32cae18e..8b45e6935 100644 --- a/src/grib_accessor_class_g2lon.c +++ b/src/grib_accessor_class_g2lon.c @@ -21,7 +21,7 @@ SUPER = grib_accessor_class_double IMPLEMENTS = unpack_double;pack_double IMPLEMENTS = init - MEMBERS=const char* longitude + MEMBERS=const char* longitude END_CLASS_DEF */ diff --git a/src/grib_accessor_class_g2step_range.c b/src/grib_accessor_class_g2step_range.c index d16fb5e46..70f26fc2e 100644 --- a/src/grib_accessor_class_g2step_range.c +++ b/src/grib_accessor_class_g2step_range.c @@ -171,7 +171,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) return ret; if (self->endStep == NULL) { - sprintf(buf, "%ld", start); + snprintf(buf, sizeof(buf), "%ld", start); } else { ret = grib_get_long_internal(h, self->endStep, &theEnd); @@ -179,10 +179,10 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) return ret; if (start == theEnd) { - sprintf(buf, "%ld", theEnd); + snprintf(buf, sizeof(buf), "%ld", theEnd); } else { - sprintf(buf, "%ld-%ld", start, theEnd); + snprintf(buf, sizeof(buf), "%ld-%ld", start, theEnd); } } @@ -241,7 +241,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) char buff[100]; size_t bufflen = 100; - sprintf(buff, "%ld", *val); + snprintf(buff, sizeof(buff), "%ld", *val); return pack_string(a, buff, &bufflen); } diff --git a/src/grib_accessor_class_gaussian_grid_name.c b/src/grib_accessor_class_gaussian_grid_name.c index d4298fe61..c7f323999 100644 --- a/src/grib_accessor_class_gaussian_grid_name.c +++ b/src/grib_accessor_class_gaussian_grid_name.c @@ -176,15 +176,15 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) if ((ret = grib_get_long_internal(a->parent->h, self->isOctahedral, &isOctahedral)) != GRIB_SUCCESS) return ret; if (isOctahedral == 1) { - sprintf(tmp, "O%ld", N); + snprintf(tmp, sizeof(tmp), "O%ld", N); } else { - sprintf(tmp, "N%ld", N); /* Classic */ + snprintf(tmp, sizeof(tmp), "N%ld", N); /* Classic */ } } else { /* Regular gaussian grid */ - sprintf(tmp, "F%ld", N); + snprintf(tmp, sizeof(tmp), "F%ld", N); } length = strlen(tmp) + 1; diff --git a/src/grib_accessor_class_gen.c b/src/grib_accessor_class_gen.c index 0506e6f0a..627dcddd3 100644 --- a/src/grib_accessor_class_gen.c +++ b/src/grib_accessor_class_gen.c @@ -24,7 +24,7 @@ IMPLEMENTS = unpack_string;pack_string IMPLEMENTS = unpack_string_array;pack_string_array IMPLEMENTS = unpack_bytes;pack_bytes - IMPLEMENTS = unpack_double_subarray + IMPLEMENTS = unpack_double_subarray IMPLEMENTS = init;dump;destroy;string_length IMPLEMENTS = get_native_type;sub_section IMPLEMENTS = next_offset;value_count;byte_offset;byte_count @@ -343,7 +343,7 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) double val = 0.0; size_t l = 1; grib_unpack_double(a, &val, &l); - sprintf(v, "%g", val); + snprintf(v, 64, "%g", val); *len = strlen(v); grib_context_log(a->context, GRIB_LOG_DEBUG, "Casting double %s to string", a->name); return GRIB_SUCCESS; @@ -353,7 +353,7 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) long val = 0; size_t l = 1; grib_unpack_long(a, &val, &l); - sprintf(v, "%ld", val); + snprintf(v, 64, "%ld", val); *len = strlen(v); grib_context_log(a->context, GRIB_LOG_DEBUG, "Casting long %s to string \n", a->name); return GRIB_SUCCESS; @@ -367,7 +367,7 @@ static int unpack_string_array(grib_accessor* a, char** v, size_t* len) int err = 0; size_t length = 0; - err = _grib_get_string_length(a, &length); + err = ecc__grib_get_string_length(a, &length); if (err) return err; v[0] = (char*)grib_context_malloc_clear(a->context, length); diff --git a/src/grib_accessor_class_getenv.c b/src/grib_accessor_class_getenv.c index 7353914e9..a62258b72 100644 --- a/src/grib_accessor_class_getenv.c +++ b/src/grib_accessor_class_getenv.c @@ -170,7 +170,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) l = strlen(self->value); if (*len < l) return GRIB_ARRAY_TOO_SMALL; - sprintf(val, "%s", self->value); + snprintf(val, 1024, "%s", self->value); *len = strlen(self->value); return GRIB_SUCCESS; diff --git a/src/grib_accessor_class_gts_header.c b/src/grib_accessor_class_gts_header.c index 21f337f07..7c9638935 100644 --- a/src/grib_accessor_class_gts_header.c +++ b/src/grib_accessor_class_gts_header.c @@ -9,7 +9,7 @@ */ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -155,12 +155,12 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) grib_accessor_gts_header* self = (grib_accessor_gts_header*)a; grib_handle* h = grib_handle_of_accessor(a); int offset = 0; - int length = 0; + size_t length = 0; if (h->gts_header == NULL || h->gts_header_len < 8) { if (*len < 8) return GRIB_ARRAY_TOO_SMALL; - sprintf(val, "missing"); + snprintf(val, 1024, "missing"); return GRIB_SUCCESS; } if (*len < h->gts_header_len) diff --git a/src/grib_accessor_class_hash_array.c b/src/grib_accessor_class_hash_array.c index 528c9ba7f..8e330c7b1 100644 --- a/src/grib_accessor_class_hash_array.c +++ b/src/grib_accessor_class_hash_array.c @@ -163,7 +163,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) { grib_accessor_hash_array* self = (grib_accessor_hash_array*)a; char s[200] = {0,}; - sprintf(s, "%g", *val); + snprintf(s, sizeof(s), "%g", *val); self->key = grib_context_strdup(a->context, s); self->ha = 0; return GRIB_SUCCESS; @@ -173,7 +173,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) { grib_accessor_hash_array* self = (grib_accessor_hash_array*)a; char s[200] = {0,}; - sprintf(s, "%ld", *val); + snprintf(s, sizeof(s), "%ld", *val); if (self->key) grib_context_free(a->context, self->key); self->key = grib_context_strdup(a->context, s); diff --git a/src/grib_accessor_class_ieeefloat.c b/src/grib_accessor_class_ieeefloat.c index 78ec2e17a..8e8b023e5 100644 --- a/src/grib_accessor_class_ieeefloat.c +++ b/src/grib_accessor_class_ieeefloat.c @@ -206,16 +206,16 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) static int unpack_double(grib_accessor* a, double* val, size_t* len) { - long rlen = 0; - int err = 0; - unsigned long i = 0; - long bitp = a->offset * 8; + long rlen = 0; + int err = 0; + long i = 0; + long bitp = a->offset * 8; err = grib_value_count(a, &rlen); if (err) return err; - if (*len < rlen) { + if (*len < (size_t)rlen) { grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size (%lu) for %s, it contains %ld values", *len, a->name, rlen); *len = 0; return GRIB_ARRAY_TOO_SMALL; diff --git a/src/grib_accessor_class_iterator.c b/src/grib_accessor_class_iterator.c index 19dfc4250..8ba156099 100644 --- a/src/grib_accessor_class_iterator.c +++ b/src/grib_accessor_class_iterator.c @@ -13,7 +13,7 @@ *************************/ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF diff --git a/src/grib_accessor_class_julian_date.c b/src/grib_accessor_class_julian_date.c index 46b36671c..54f0b436f 100644 --- a/src/grib_accessor_class_julian_date.c +++ b/src/grib_accessor_class_julian_date.c @@ -353,13 +353,13 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) } if (sep[1] != 0 && sep[2] != 0 && sep[3] != 0 && sep[4] != 0) { - sprintf(val, "%04ld%c%02ld%c%02ld%c%02ld%c%02ld%c%02ld", year, sep[0], month, sep[1], day, sep[2], hour, sep[3], minute, sep[4], second); + snprintf(val, 1024, "%04ld%c%02ld%c%02ld%c%02ld%c%02ld%c%02ld", year, sep[0], month, sep[1], day, sep[2], hour, sep[3], minute, sep[4], second); } else if (sep[0] != 0) { - sprintf(val, "%04ld%02ld%02ld%c%02ld%02ld%02ld", year, month, day, sep[0], hour, minute, second); + snprintf(val, 1024, "%04ld%02ld%02ld%c%02ld%02ld%02ld", year, month, day, sep[0], hour, minute, second); } else { - sprintf(val, "%04ld%02ld%02ld%02ld%02ld%02ld", year, month, day, hour, minute, second); + snprintf(val, 1024, "%04ld%02ld%02ld%02ld%02ld%02ld", year, month, day, hour, minute, second); } return ret; } diff --git a/src/grib_accessor_class_ksec1expver.c b/src/grib_accessor_class_ksec1expver.c index f0ecdee9c..06d54f836 100644 --- a/src/grib_accessor_class_ksec1expver.c +++ b/src/grib_accessor_class_ksec1expver.c @@ -212,6 +212,6 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) { char sval[5] = {0,}; size_t slen = 4; - sprintf(sval, "%04d", (int)(*val)); + snprintf(sval, sizeof(sval), "%04d", (int)(*val)); return pack_string(a, sval, &slen); } diff --git a/src/grib_accessor_class_latitudes.c b/src/grib_accessor_class_latitudes.c index 765050776..90f6601bf 100644 --- a/src/grib_accessor_class_latitudes.c +++ b/src/grib_accessor_class_latitudes.c @@ -196,9 +196,8 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) grib_iterator* iter = NULL; self->save = 1; - ret = value_count(a, &count); - if (ret) - return ret; + ret = value_count(a, &count); + if (ret) return ret; size = count; if (*len < size) { /* self->lats are computed in value_count so must free */ @@ -226,7 +225,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) if (ret != GRIB_SUCCESS) { if (iter) grib_iterator_delete(iter); - grib_context_log(c, GRIB_LOG_ERROR, "Unable to create iterator"); + grib_context_log(c, GRIB_LOG_ERROR, "latitudes: Unable to create iterator"); return ret; } @@ -249,7 +248,7 @@ static int value_count(grib_accessor* a, long* len) *len = 0; if ((ret = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Unable to get size of %s", self->values); + grib_context_log(h->context, GRIB_LOG_ERROR, "latitudes: Unable to get size of %s", self->values); return ret; } *len = size; @@ -279,20 +278,19 @@ static int get_distinct(grib_accessor* a, double** val, long* len) double dummyLon = 0, dummyVal = 0; int ret = 0; int i; - long jScansPositively = 0; /*default: north to south*/ + long jScansPositively = 0; /* default: north to south */ size_t size = *len; grib_context* c = a->context; grib_iterator* iter = grib_iterator_new(grib_handle_of_accessor(a), 0, &ret); if (ret != GRIB_SUCCESS) { if (iter) grib_iterator_delete(iter); - grib_context_log(c, GRIB_LOG_ERROR, "Unable to create iterator"); + grib_context_log(c, GRIB_LOG_ERROR, "latitudes: Unable to create iterator"); return ret; } v = (double*)grib_context_malloc_clear(c, size * sizeof(double)); if (!v) { - grib_context_log(c, GRIB_LOG_ERROR, - "Error allocating %ld bytes", (long)size * sizeof(double)); + grib_context_log(c, GRIB_LOG_ERROR, "latitudes: Error allocating %zu bytes", size * sizeof(double)); return GRIB_OUT_OF_MEMORY; } *val = v; @@ -313,18 +311,18 @@ static int get_distinct(grib_accessor* a, double** val, long* len) v1 = (double*)grib_context_malloc_clear(c, size * sizeof(double)); if (!v1) { - grib_context_log(c, GRIB_LOG_ERROR, "Error allocating %ld bytes", (long)size * sizeof(double)); + grib_context_log(c, GRIB_LOG_ERROR, "latitudes: Error allocating %zu bytes", size * sizeof(double)); return GRIB_OUT_OF_MEMORY; } - /*Construct a unique set of lats by filtering out duplicates*/ + /* Construct a unique set of lats by filtering out duplicates */ prev = v[0]; v1[0] = prev; count = 1; for (i = 1; i < *len; i++) { if (v[i] != prev) { prev = v[i]; - v1[count] = prev; /*Value different from previous so store it*/ + v1[count] = prev; /* Value different from previous so store it */ count++; } } diff --git a/src/grib_accessor_class_latlon_increment.c b/src/grib_accessor_class_latlon_increment.c index 177dbfeba..5fe4f3e0e 100644 --- a/src/grib_accessor_class_latlon_increment.c +++ b/src/grib_accessor_class_latlon_increment.c @@ -153,22 +153,24 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) { grib_accessor_latlon_increment* self = (grib_accessor_latlon_increment*)a; int n = 0; + grib_handle* hand = grib_handle_of_accessor(a); - self->directionIncrementGiven = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->directionIncrement = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->scansPositively = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->first = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->last = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->numberOfPoints = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->angleMultiplier = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->angleDivisor = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); - self->isLongitude = grib_arguments_get_long(grib_handle_of_accessor(a), c, n++); + self->directionIncrementGiven = grib_arguments_get_name(hand, c, n++); + self->directionIncrement = grib_arguments_get_name(hand, c, n++); + self->scansPositively = grib_arguments_get_name(hand, c, n++); + self->first = grib_arguments_get_name(hand, c, n++); + self->last = grib_arguments_get_name(hand, c, n++); + self->numberOfPoints = grib_arguments_get_name(hand, c, n++); + self->angleMultiplier = grib_arguments_get_name(hand, c, n++); + self->angleDivisor = grib_arguments_get_name(hand, c, n++); + self->isLongitude = grib_arguments_get_long(hand, c, n++); } static int unpack_double(grib_accessor* a, double* val, size_t* len) { grib_accessor_latlon_increment* self = (grib_accessor_latlon_increment*)a; int ret = 0; + grib_handle* hand = grib_handle_of_accessor(a); long directionIncrementGiven = 0; long directionIncrement = 0; @@ -182,28 +184,28 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) if (*len < 1) return GRIB_ARRAY_TOO_SMALL; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->directionIncrementGiven, &directionIncrementGiven)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->directionIncrementGiven, &directionIncrementGiven)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->scansPositively, &scansPositively)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->scansPositively, &scansPositively)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->directionIncrement, &directionIncrement)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->directionIncrement, &directionIncrement)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->first, &first)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(hand, self->first, &first)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->last, &last)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(hand, self->last, &last)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints, &numberOfPoints)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->numberOfPoints, &numberOfPoints)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->angleMultiplier, &angleMultiplier)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->angleMultiplier, &angleMultiplier)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->angleDivisor, &angleDivisor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->angleDivisor, &angleDivisor)) != GRIB_SUCCESS) return ret; if (self->isLongitude) { @@ -265,6 +267,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) grib_accessor_latlon_increment* self = (grib_accessor_latlon_increment*)a; int ret = 0; long codedNumberOfPoints = 0; + grib_handle* hand = grib_handle_of_accessor(a); long directionIncrementGiven = 0; long directionIncrement = 0; @@ -277,27 +280,27 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) long scansPositively = 0; double directionIncrementDouble = 0; - ret = grib_get_double_internal(grib_handle_of_accessor(a), self->first, &first); + ret = grib_get_double_internal(hand, self->first, &first); if (ret != GRIB_SUCCESS) return ret; - ret = grib_get_double_internal(grib_handle_of_accessor(a), self->last, &last); + ret = grib_get_double_internal(hand, self->last, &last); if (ret != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->directionIncrementGiven, &directionIncrementGiven)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->directionIncrementGiven, &directionIncrementGiven)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints, &numberOfPoints)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->numberOfPoints, &numberOfPoints)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->scansPositively, &scansPositively)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->scansPositively, &scansPositively)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->angleMultiplier, &angleMultiplier)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->angleMultiplier, &angleMultiplier)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->angleDivisor, &angleDivisor)) != GRIB_SUCCESS) + if ((ret = grib_get_long_internal(hand, self->angleDivisor, &angleDivisor)) != GRIB_SUCCESS) return ret; if (self->isLongitude) { @@ -324,18 +327,18 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) } } - /*ret = grib_set_long_internal(grib_handle_of_accessor(a), self->numberOfPoints,numberOfPoints); + /*ret = grib_set_long_internal(hand, self->numberOfPoints,numberOfPoints); if(ret) grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannot pack value for %s error %d \n", a->name, self->numberOfPoints, ret); */ - grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints, &codedNumberOfPoints); + grib_get_long_internal(hand, self->numberOfPoints, &codedNumberOfPoints); - ret = grib_set_long_internal(grib_handle_of_accessor(a), self->directionIncrement, directionIncrement); + ret = grib_set_long_internal(hand, self->directionIncrement, directionIncrement); if (ret) return ret; - ret = grib_set_long_internal(grib_handle_of_accessor(a), self->directionIncrementGiven, directionIncrementGiven); + ret = grib_set_long_internal(hand, self->directionIncrementGiven, directionIncrementGiven); if (ret) return ret; diff --git a/src/grib_accessor_class_latlonvalues.c b/src/grib_accessor_class_latlonvalues.c index 021bddba9..5e2cfd9ac 100644 --- a/src/grib_accessor_class_latlonvalues.c +++ b/src/grib_accessor_class_latlonvalues.c @@ -8,11 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/************************************** - * Enrico Fucile - **************************************/ - - #include "grib_api_internal.h" /* This is used by make_class.pl @@ -152,27 +147,24 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) static int unpack_double(grib_accessor* a, double* val, size_t* len) { grib_context* c = a->context; - int ret = 0; + int err = 0; double* v = val; double lat, lon, value; size_t size = 0; long count = 0; - grib_iterator* iter = grib_iterator_new(grib_handle_of_accessor(a), 0, &ret); - if (ret != GRIB_SUCCESS) { - if (iter) - grib_iterator_delete(iter); - grib_context_log(c, GRIB_LOG_ERROR, "unable to create iterator"); - return ret; + grib_iterator* iter = grib_iterator_new(grib_handle_of_accessor(a), 0, &err); + if (err) { + if (iter) grib_iterator_delete(iter); + grib_context_log(c, GRIB_LOG_ERROR, "latlonvalues: Unable to create iterator"); + return err; } - ret = value_count(a, &count); - if (ret) - return ret; + err = value_count(a, &count); + if (err) return err; size = count; if (*len < size) { - if (iter) - grib_iterator_delete(iter); + if (iter) grib_iterator_delete(iter); return GRIB_ARRAY_TOO_SMALL; } @@ -196,7 +188,7 @@ static int value_count(grib_accessor* a, long* count) int ret = GRIB_SUCCESS; size_t size; if ((ret = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "unable to get size of %s", self->values); + grib_context_log(h->context, GRIB_LOG_ERROR, "latlonvalues: Unable to get size of %s", self->values); return ret; } diff --git a/src/grib_accessor_class_library_version.c b/src/grib_accessor_class_library_version.c index 181a2cb20..8872c8a1c 100644 --- a/src/grib_accessor_class_library_version.c +++ b/src/grib_accessor_class_library_version.c @@ -9,7 +9,7 @@ */ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -138,7 +138,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) int minor = ECCODES_MINOR_VERSION; int revision = ECCODES_REVISION_VERSION; - sprintf(result, "%d.%d.%d", major, minor, revision); + snprintf(result, sizeof(result), "%d.%d.%d", major, minor, revision); size = sizeof(result); if (*len < size) diff --git a/src/grib_accessor_class_long.c b/src/grib_accessor_class_long.c index 058c12b46..c3f562be3 100644 --- a/src/grib_accessor_class_long.c +++ b/src/grib_accessor_class_long.c @@ -156,9 +156,9 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) (void)err; if ((val == GRIB_MISSING_LONG) && ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0)) - sprintf(repres, "MISSING"); + snprintf(repres, sizeof(repres), "MISSING"); else - sprintf(repres, "%ld", val); + snprintf(repres, sizeof(repres), "%ld", val); l = strlen(repres) + 1; diff --git a/src/grib_accessor_class_longitudes.c b/src/grib_accessor_class_longitudes.c index 9b52c36ee..03f08f6be 100644 --- a/src/grib_accessor_class_longitudes.c +++ b/src/grib_accessor_class_longitudes.c @@ -8,11 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/************************************** - * Enrico Fucile - **************************************/ - - #include "grib_api_internal.h" /* This is used by make_class.pl @@ -154,7 +149,7 @@ static int compare_doubles(const void* a, const void* b); static void init(grib_accessor* a, const long l, grib_arguments* c) { grib_accessor_longitudes* self = (grib_accessor_longitudes*)a; - int n = 0; + int n = 0; self->values = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); self->distinct = grib_arguments_get_long(grib_handle_of_accessor(a), c, n++); @@ -176,9 +171,8 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) grib_iterator* iter = NULL; self->save = 1; - ret = value_count(a, &count); - if (ret) - return ret; + ret = value_count(a, &count); + if (ret) return ret; size = count; if (*len < size) { @@ -207,7 +201,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) if (ret != GRIB_SUCCESS) { if (iter) grib_iterator_delete(iter); - grib_context_log(c, GRIB_LOG_ERROR, "Unable to create iterator"); + grib_context_log(c, GRIB_LOG_ERROR, "longitudes: Unable to create iterator"); return ret; } @@ -229,7 +223,7 @@ static int value_count(grib_accessor* a, long* len) size_t size; *len = 0; if ((ret = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Unable to get size of %s", self->values); + grib_context_log(h->context, GRIB_LOG_ERROR, "longitudes: Unable to get size of %s", self->values); return ret; } *len = size; @@ -265,13 +259,12 @@ static int get_distinct(grib_accessor* a, double** val, long* len) if (ret != GRIB_SUCCESS) { if (iter) grib_iterator_delete(iter); - grib_context_log(c, GRIB_LOG_ERROR, "Unable to create iterator"); + grib_context_log(c, GRIB_LOG_ERROR, "longitudes: Unable to create iterator"); return ret; } v = (double*)grib_context_malloc_clear(c, size * sizeof(double)); if (!v) { - grib_context_log(c, GRIB_LOG_ERROR, - "Error allocating %ld bytes", (long)size * sizeof(double)); + grib_context_log(c, GRIB_LOG_ERROR, "longitudes: Error allocating %zu bytes", size * sizeof(double)); return GRIB_OUT_OF_MEMORY; } *val = v; @@ -284,8 +277,7 @@ static int get_distinct(grib_accessor* a, double** val, long* len) v1 = (double*)grib_context_malloc_clear(c, size * sizeof(double)); if (!v1) { - grib_context_log(c, GRIB_LOG_ERROR, - "Error allocating %ld bytes", (long)size * sizeof(double)); + grib_context_log(c, GRIB_LOG_ERROR, "longitudes: Error allocating %zu bytes", size * sizeof(double)); return GRIB_OUT_OF_MEMORY; } diff --git a/src/grib_accessor_class_lookup.c b/src/grib_accessor_class_lookup.c index 76d4f1b61..8389872cb 100644 --- a/src/grib_accessor_class_lookup.c +++ b/src/grib_accessor_class_lookup.c @@ -181,7 +181,7 @@ static void dump(grib_accessor* a, grib_dumper* dumper) msg[llen] = 0; - sprintf(buf, "%s %lu %ld-%ld", msg, v, (long)a->offset + self->loffset, (long)self->llength); + snprintf(buf, sizeof(buf), "%s %lu %ld-%ld", msg, v, (long)a->offset + self->loffset, (long)self->llength); grib_dump_long(dumper, a, buf); } @@ -209,7 +209,7 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) int err = unpack_long(a, &lval, &length); if (!err) { char str[5]; - int conv = sprintf(str, "%ld", lval); + int conv = snprintf(str, sizeof(str), "%ld", lval); if (conv == 1) { v[0] = str[0]; } diff --git a/src/grib_accessor_class_mars_param.c b/src/grib_accessor_class_mars_param.c index d863e072f..ba26e4600 100644 --- a/src/grib_accessor_class_mars_param.c +++ b/src/grib_accessor_class_mars_param.c @@ -9,7 +9,7 @@ */ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -205,7 +205,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) #endif /*if (table==200) table=128;*/ - sprintf(val, "%ld.%ld", param, table); + snprintf(val, 32, "%ld.%ld", param, table); *len = strlen(val) + 1; return GRIB_SUCCESS; diff --git a/src/grib_accessor_class_mars_step.c b/src/grib_accessor_class_mars_step.c index 2f11db3b9..7c351591f 100644 --- a/src/grib_accessor_class_mars_step.c +++ b/src/grib_accessor_class_mars_step.c @@ -9,7 +9,7 @@ */ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -163,9 +163,9 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) return ret; if (!strcmp(stepType, "instant")) - sprintf(buf, "%s", val); + snprintf(buf, sizeof(buf), "%s", val); else - sprintf(buf, "0-%s", val); + snprintf(buf, sizeof(buf), "0-%s", val); return grib_pack_string(stepRangeAcc, buf, len); } @@ -212,7 +212,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) char buff[100] = {0,}; size_t bufflen = 100; - sprintf(buff, "%ld", *val); + snprintf(buff, sizeof(buff), "%ld", *val); return pack_string(a, buff, &bufflen); } diff --git a/src/grib_accessor_class_missing.c b/src/grib_accessor_class_missing.c index adec426fc..d9f1d9214 100644 --- a/src/grib_accessor_class_missing.c +++ b/src/grib_accessor_class_missing.c @@ -14,7 +14,7 @@ * * ***************************************************************************/ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF diff --git a/src/grib_accessor_class_offset_file.c b/src/grib_accessor_class_offset_file.c index b2c88b039..44c9af50b 100644 --- a/src/grib_accessor_class_offset_file.c +++ b/src/grib_accessor_class_offset_file.c @@ -159,7 +159,7 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) if (err) return err; - sprintf(repres, "%.0f", val); + snprintf(repres, sizeof(repres), "%.0f", val); l = strlen(repres) + 1; if (l > *len) { diff --git a/src/grib_accessor_class_proj_string.c b/src/grib_accessor_class_proj_string.c index adcbbe6b1..37317eebc 100644 --- a/src/grib_accessor_class_proj_string.c +++ b/src/grib_accessor_class_proj_string.c @@ -185,9 +185,9 @@ static int get_earth_shape(grib_handle* h, char* result) if ((err = get_major_minor_axes(h, &major, &minor)) != GRIB_SUCCESS) return err; if (major == minor) - sprintf(result, "+R=%lf", major); /* spherical */ + snprintf(result, 128, "+R=%lf", major); /* spherical */ else - sprintf(result, "+a=%lf +b=%lf", major, minor); /*oblate*/ + snprintf(result, 128, "+a=%lf +b=%lf", major, minor); /*oblate*/ return err; } #if 0 @@ -197,7 +197,7 @@ static int proj_regular_latlon(grib_handle* h, char* result) char shape[64] = {0,}; if ((err = get_earth_shape(h, shape)) != GRIB_SUCCESS) return err; - sprintf(result, "+proj=latlong %s", shape); + snprintf(result, 128, "+proj=latlong %s", shape); return err; } #endif @@ -216,11 +216,11 @@ static int proj_space_view(grib_handle* h, char* result) if ((err = grib_get_double_internal(h, "longitudeOfSubSatellitePointInDegrees", &lonOfSubSatellitePointInDegrees)) != GRIB_SUCCESS) return err; - sprintf(result, "+proj=geos +lon_0=%lf +h=35785831 +x_0=0 +y_0=0 %s", lonOfSubSatellitePointInDegrees, shape); + snprintf(result, 526, "+proj=geos +lon_0=%lf +h=35785831 +x_0=0 +y_0=0 %s", lonOfSubSatellitePointInDegrees, shape); return err; /* Experimental: For now do the same as gdalsrsinfo - hard coded values! */ - sprintf(result, "+proj=geos +lon_0=0 +h=35785831 +x_0=0 +y_0=0 %s", shape); + snprintf(result, 526, "+proj=geos +lon_0=0 +h=35785831 +x_0=0 +y_0=0 %s", shape); return err; #endif } @@ -253,7 +253,7 @@ static int proj_lambert_conformal(grib_handle* h, char* result) return err; if ((err = grib_get_double_internal(h, "LaDInDegrees", &LaDInDegrees)) != GRIB_SUCCESS) return err; - sprintf(result, "+proj=lcc +lon_0=%lf +lat_0=%lf +lat_1=%lf +lat_2=%lf %s", + snprintf(result, 1024, "+proj=lcc +lon_0=%lf +lat_0=%lf +lat_1=%lf +lat_2=%lf %s", LoVInDegrees, LaDInDegrees, Latin1InDegrees, Latin2InDegrees, shape); return err; } @@ -270,7 +270,7 @@ static int proj_lambert_azimuthal_equal_area(grib_handle* h, char* result) return err; if ((err = grib_get_double_internal(h, "centralLongitudeInDegrees", ¢ralLongitude)) != GRIB_SUCCESS) return err; - sprintf(result, "+proj=laea +lon_0=%lf +lat_0=%lf %s", + snprintf(result, 1024, "+proj=laea +lon_0=%lf +lat_0=%lf %s", centralLongitude, standardParallel, shape); return err; } @@ -292,7 +292,7 @@ static int proj_polar_stereographic(grib_handle* h, char* result) if ((err = grib_get_long_internal(h, "projectionCentreFlag", &projectionCentreFlag)) != GRIB_SUCCESS) return err; has_northPole = ((projectionCentreFlag & 128) == 0); - sprintf(result, "+proj=stere +lat_ts=%lf +lat_0=%s +lon_0=%lf +k_0=1 +x_0=0 +y_0=0 %s", + snprintf(result, 1024, "+proj=stere +lat_ts=%lf +lat_0=%s +lon_0=%lf +k_0=1 +x_0=0 +y_0=0 %s", centralLatitude, has_northPole ? "90" : "-90", centralLongitude, shape); return err; } @@ -307,7 +307,7 @@ static int proj_mercator(grib_handle* h, char* result) return err; if ((err = get_earth_shape(h, shape)) != GRIB_SUCCESS) return err; - sprintf(result, "+proj=merc +lat_ts=%lf +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 %s", + snprintf(result, 1024, "+proj=merc +lat_ts=%lf +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 %s", LaDInDegrees, shape); return err; } @@ -347,7 +347,7 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) if (strcmp(grid_type, pm.gridType) == 0) { found = 1; if (self->endpoint == ENDPOINT_SOURCE) { - sprintf(v, "EPSG:4326"); + snprintf(v, 64, "EPSG:4326"); } else { /* Invoke the appropriate function to get the target proj string */ diff --git a/src/grib_accessor_class_round.c b/src/grib_accessor_class_round.c index cfd729c49..bfc59442a 100644 --- a/src/grib_accessor_class_round.c +++ b/src/grib_accessor_class_round.c @@ -170,7 +170,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) ret = unpack_double(a, &value, &replen); - sprintf(result, "%.3f", value); + snprintf(result, sizeof(result), "%.3f", value); replen = strlen(result) + 1; @@ -181,7 +181,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) *len = replen; - sprintf(val, "%s", result); + snprintf(val, 1024, "%s", result); return ret; } diff --git a/src/grib_accessor_class_second_order_bits_per_value.c b/src/grib_accessor_class_second_order_bits_per_value.c index a46e80d0f..eb0a5811d 100644 --- a/src/grib_accessor_class_second_order_bits_per_value.c +++ b/src/grib_accessor_class_second_order_bits_per_value.c @@ -236,8 +236,7 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) values = (double*)grib_context_malloc_clear(a->context, sizeof(double) * size); if (!values) { - grib_context_log(a->context, GRIB_LOG_FATAL, "%s unable to allocate %ld bytes", - a->name, (long)size); + grib_context_log(a->context, GRIB_LOG_FATAL, "%s: Memory allocation error: %zu bytes", a->name, size); return GRIB_OUT_OF_MEMORY; } if ((ret = grib_get_double_array_internal(grib_handle_of_accessor(a), self->values, values, &size)) != GRIB_SUCCESS) diff --git a/src/grib_accessor_class_section_pointer.c b/src/grib_accessor_class_section_pointer.c index 9622a5953..7a6369263 100644 --- a/src/grib_accessor_class_section_pointer.c +++ b/src/grib_accessor_class_section_pointer.c @@ -181,12 +181,12 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) p = grib_handle_of_accessor(a)->buffer->data + grib_byte_offset(a); for (i = 0; i < length; i++) { - sprintf (s,"%02x", *(p++)); + snprintf (s,64,"%02x", *(p++)); s+=2; } *len=length; */ - sprintf(v, "%ld_%ld", grib_byte_offset(a), grib_byte_count(a)); + snprintf(v, 64, "%ld_%ld", grib_byte_offset(a), grib_byte_count(a)); return GRIB_SUCCESS; } diff --git a/src/grib_accessor_class_sexagesimal2decimal.c b/src/grib_accessor_class_sexagesimal2decimal.c index 3e50e6ec5..5279bdefd 100644 --- a/src/grib_accessor_class_sexagesimal2decimal.c +++ b/src/grib_accessor_class_sexagesimal2decimal.c @@ -256,7 +256,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) } dd *= dd_sign; - sprintf(buff, "%.2f", dd); + snprintf(buff, sizeof(buff), "%.2f", dd); length = strlen(buff); if (len[0] < length + 1) { diff --git a/src/grib_accessor_class_smart_table.c b/src/grib_accessor_class_smart_table.c index eae37a3be..d2d21e04e 100644 --- a/src/grib_accessor_class_smart_table.c +++ b/src/grib_accessor_class_smart_table.c @@ -249,7 +249,7 @@ static grib_smart_table* load_table(grib_accessor_smart_table* self) if (*masterDir != 0) { char name[2048] = {0,}; - sprintf(name, "%s/%s", masterDir, self->tablename); + snprintf(name, sizeof(name), "%s/%s", masterDir, self->tablename); grib_recompose_name(h, NULL, name, recomposed, 0); filename = grib_context_full_defs_path(c, recomposed); } @@ -260,14 +260,14 @@ static grib_smart_table* load_table(grib_accessor_smart_table* self) if (*localDir != 0) { char localName[2048] = {0,}; - sprintf(localName, "%s/%s", localDir, self->tablename); + snprintf(localName, sizeof(localName), "%s/%s", localDir, self->tablename); grib_recompose_name(h, NULL, localName, localRecomposed, 0); localFilename = grib_context_full_defs_path(c, localRecomposed); } if (*extraDir != 0) { char extraTable[2048] = {0,}; - sprintf(extraTable, "%s/%s", extraDir, self->extraTable); + snprintf(extraTable, sizeof(extraTable), "%s/%s", extraDir, self->extraTable); grib_recompose_name(h, NULL, extraTable, extraRecomposed, 0); extraFilename = grib_context_full_defs_path(c, extraRecomposed); } @@ -453,7 +453,7 @@ static int unpack_string(grib_accessor* a, char* buffer, size_t* len) strcpy(tmp, table->entries[value].abbreviation); } else { - sprintf(tmp, "%d", (int)value); + snprintf(tmp, sizeof(tmp), "%d", (int)value); } l = strlen(tmp) + 1; diff --git a/src/grib_accessor_class_smart_table_column.c b/src/grib_accessor_class_smart_table_column.c index b2edfbef1..249038448 100644 --- a/src/grib_accessor_class_smart_table_column.c +++ b/src/grib_accessor_class_smart_table_column.c @@ -203,7 +203,7 @@ static int unpack_string_array(grib_accessor* a, char** buffer, size_t* len) return GRIB_NOT_FOUND; } - err = _grib_get_size(grib_handle_of_accessor(a), (grib_accessor*)tableAccessor, &size); + err = ecc__grib_get_size(grib_handle_of_accessor(a), (grib_accessor*)tableAccessor, &size); if (err) return err; if (*len < size) { @@ -212,8 +212,7 @@ static int unpack_string_array(grib_accessor* a, char** buffer, size_t* len) code = (long*)grib_context_malloc_clear(a->context, sizeof(long) * size); if (!code) { - grib_context_log(a->context, GRIB_LOG_FATAL, - "unable to allocate %ld bytes", (long)size); + grib_context_log(a->context, GRIB_LOG_FATAL, "%s: Memory allocation error: %zu bytes", a->name, size); return GRIB_OUT_OF_MEMORY; } @@ -229,7 +228,7 @@ static int unpack_string_array(grib_accessor* a, char** buffer, size_t* len) strcpy(tmp, table->entries[code[i]].column[self->index]); } else { - sprintf(tmp, "%d", (int)code[i]); + snprintf(tmp, sizeof(tmp), "%d", (int)code[i]); } buffer[i] = grib_context_strdup(a->context, tmp); @@ -261,7 +260,7 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) return GRIB_NOT_FOUND; } - err = _grib_get_size(grib_handle_of_accessor(a), (grib_accessor*)tableAccessor, &size); + err = ecc__grib_get_size(grib_handle_of_accessor(a), (grib_accessor*)tableAccessor, &size); if (err) return err; if (*len < size) { diff --git a/src/grib_accessor_class_sprintf.c b/src/grib_accessor_class_sprintf.c index a66010b0c..d2794d7c3 100644 --- a/src/grib_accessor_class_sprintf.c +++ b/src/grib_accessor_class_sprintf.c @@ -163,7 +163,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) size_t uname_len = 0; uname = grib_arguments_get_string(grib_handle_of_accessor(a), self->args, carg++); - sprintf(result, "%s", ""); + snprintf(result, sizeof(result), "%s", ""); uname_len = strlen(uname); for (i = 0; i < uname_len; i++) { @@ -189,17 +189,17 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) if (ret != GRIB_SUCCESS) return ret; if (is_missing) { - sprintf(tempBuffer, "%sMISSING", result); + snprintf(tempBuffer, sizeof(tempBuffer), "%sMISSING", result); strcpy(result, tempBuffer); } else { /* Not missing so print it */ if (precision != 999) { - sprintf(tempBuffer, "%s%.*ld", result, precision, ires); + snprintf(tempBuffer, sizeof(tempBuffer), "%s%.*ld", result, precision, ires); strcpy(result, tempBuffer); } else { - sprintf(tempBuffer, "%s%ld", result, ires); + snprintf(tempBuffer, sizeof(tempBuffer), "%s%ld", result, ires); strcpy(result, tempBuffer); } } @@ -209,7 +209,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) tempname = grib_arguments_get_name(grib_handle_of_accessor(a), self->args, carg++); if ((ret = grib_get_double_internal(grib_handle_of_accessor(a), tempname, &dres)) != GRIB_SUCCESS) return ret; - sprintf(tempBuffer, "%s%g", result, dres); + snprintf(tempBuffer, sizeof(tempBuffer), "%s%g", result, dres); strcpy(result, tempBuffer); break; @@ -218,13 +218,13 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) tempname = grib_arguments_get_name(grib_handle_of_accessor(a), self->args, carg++); if ((ret = grib_get_string_internal(grib_handle_of_accessor(a), tempname, sres, &replen)) != GRIB_SUCCESS) return ret; - sprintf(tempBuffer, "%s%s", result, sres); + snprintf(tempBuffer, sizeof(tempBuffer), "%s%s", result, sres); strcpy(result, tempBuffer); replen = 1024; } } else { - sprintf(tempBuffer, "%s%c", result, uname[i]); + snprintf(tempBuffer, sizeof(tempBuffer), "%s%c", result, uname[i]); strcpy(result, tempBuffer); } } @@ -237,7 +237,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) } *len = replen; - sprintf(val, "%s", result); + snprintf(val, 1024, "%s", result); return GRIB_SUCCESS; } diff --git a/src/grib_accessor_class_statistics.c b/src/grib_accessor_class_statistics.c index 839efe5ce..6a509c9f4 100644 --- a/src/grib_accessor_class_statistics.c +++ b/src/grib_accessor_class_statistics.c @@ -168,9 +168,9 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) static int unpack_double(grib_accessor* a, double* val, size_t* len) { grib_accessor_statistics* self = (grib_accessor_statistics*)a; - int ret = 0, i = 0; - double* values; - size_t size = 0, real_size = 0; + int ret = 0; + double* values = NULL; + size_t i = 0, size = 0, real_size = 0; double max, min, avg, sd, value, skew, kurt, m2 = 0, m3 = 0, m4 = 0; double missing = 0; long missingValuesPresent = 0; diff --git a/src/grib_accessor_class_step_human_readable.c b/src/grib_accessor_class_step_human_readable.c index 68136e4e4..d536941de 100644 --- a/src/grib_accessor_class_step_human_readable.c +++ b/src/grib_accessor_class_step_human_readable.c @@ -171,10 +171,10 @@ static int get_step_human_readable(grib_handle* h, char* result, size_t* length) /* sprintf(result, "%ld:%ld:%ld", hour, minute, second); */ if (second) { - sprintf(result, "%ldh %ldm %lds", hour, minute, second); + snprintf(result, 1024, "%ldh %ldm %lds", hour, minute, second); } else { - if (minute) sprintf(result, "%ldh %ldm", hour, minute); - else sprintf(result, "%ldh", hour); + if (minute) snprintf(result, 1024, "%ldh %ldm", hour, minute); + else snprintf(result, 1024, "%ldh", hour); } *length = strlen(result); diff --git a/src/grib_accessor_class_time.c b/src/grib_accessor_class_time.c index f97a1fb5a..f52d23083 100644 --- a/src/grib_accessor_class_time.c +++ b/src/grib_accessor_class_time.c @@ -228,13 +228,13 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) unpack_long(a, &v, &lsize); if (*len < 5) { - grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_time : unpack_string : Buffer too small for %s ", a->name); + grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_time : unpack_string : Buffer too small for %s", a->name); *len = 5; return GRIB_BUFFER_TOO_SMALL; } - sprintf(val, "%04ld", v); + snprintf(val, 64, "%04ld", v); len[0] = 5; return GRIB_SUCCESS; diff --git a/src/grib_accessor_class_to_double.c b/src/grib_accessor_class_to_double.c index 2b4c75946..5f2df9b00 100644 --- a/src/grib_accessor_class_to_double.c +++ b/src/grib_accessor_class_to_double.c @@ -187,7 +187,7 @@ static size_t string_length(grib_accessor* a) if (self->length) return self->length; - _grib_get_string_length(a, &size); + ecc__grib_get_string_length(a, &size); return size; } diff --git a/src/grib_accessor_class_transient.c b/src/grib_accessor_class_transient.c index be5e9827c..3c4199842 100644 --- a/src/grib_accessor_class_transient.c +++ b/src/grib_accessor_class_transient.c @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF diff --git a/src/grib_accessor_class_trim.c b/src/grib_accessor_class_trim.c index 3671841e3..a974d1077 100644 --- a/src/grib_accessor_class_trim.c +++ b/src/grib_accessor_class_trim.c @@ -9,7 +9,7 @@ */ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -164,7 +164,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) if (err) return err; string_lrtrim(&pInput, self->trim_left, self->trim_right); - sprintf(val, "%s", pInput); + snprintf(val, 1024, "%s", pInput); size = strlen(val); *len = size + 1; return GRIB_SUCCESS; @@ -189,7 +189,7 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) if ((err = grib_get_string(h, self->input, input, &inputLen)) != GRIB_SUCCESS) return err; - sprintf(buf, "%s", val); + snprintf(buf, sizeof(buf), "%s", val); pBuf = buf; string_lrtrim(&pBuf, self->trim_left, self->trim_right); diff --git a/src/grib_accessor_class_unpack_bufr_values.c b/src/grib_accessor_class_unpack_bufr_values.c index 90d13a4fe..eb6afff57 100644 --- a/src/grib_accessor_class_unpack_bufr_values.c +++ b/src/grib_accessor_class_unpack_bufr_values.c @@ -198,6 +198,16 @@ static int get_native_type(grib_accessor* a) return GRIB_TYPE_LONG; } +#if 0 +static const char* mode_to_str(int p) +{ + if (p==CODES_BUFR_UNPACK_STRUCTURE) return "CODES_BUFR_UNPACK_STRUCTURE"; + if (p==CODES_BUFR_UNPACK_FLAT) return "CODES_BUFR_UNPACK_FLAT"; + if (p==CODES_BUFR_NEW_DATA) return "CODES_BUFR_NEW_DATA"; + return "unknown proc flag"; +} +#endif + static int pack_long(grib_accessor* a, const long* val, size_t* len) { int unpackMode = CODES_BUFR_UNPACK_STRUCTURE; diff --git a/src/grib_accessor_class_unsigned_bits.c b/src/grib_accessor_class_unsigned_bits.c index 30478f287..23a16cc09 100644 --- a/src/grib_accessor_class_unsigned_bits.c +++ b/src/grib_accessor_class_unsigned_bits.c @@ -233,7 +233,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) /* if(*len < rlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, + grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name , rlen ); return GRIB_ARRAY_TOO_SMALL; } diff --git a/src/grib_accessor_class_variable.c b/src/grib_accessor_class_variable.c index 9a49a6b09..1183c5f4c 100644 --- a/src/grib_accessor_class_variable.c +++ b/src/grib_accessor_class_variable.c @@ -311,7 +311,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) p = self->cval; } else { - sprintf(p, "%g", self->dval); + snprintf(p, 64, "%g", self->dval); } slen = strlen(p) + 1; @@ -369,7 +369,7 @@ static long byte_count(grib_accessor* a) { if(self->type == GRIB_TYPE_STRING) { return strlen(self->cval) +1; } else { - sprintf(buf,"%g",self->dval); + snprintf(buf,64,"%g",self->dval); printf("========> \"%s\"\n",buf); return strlen(buf)+1; } diff --git a/src/grib_accessor_class_when.c b/src/grib_accessor_class_when.c index 125e07304..8adaae235 100644 --- a/src/grib_accessor_class_when.c +++ b/src/grib_accessor_class_when.c @@ -14,7 +14,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF diff --git a/src/grib_accessor_classes_hash.c b/src/grib_accessor_classes_hash.c index df4988ef4..483323987 100644 --- a/src/grib_accessor_classes_hash.c +++ b/src/grib_accessor_classes_hash.c @@ -52,7 +52,7 @@ struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; #endif #endif static unsigned int -grib_accessor_classes_get_id (register const char *str, register size_t len) +grib_accessor_classes_get_id (const char *str, size_t len) { static const unsigned short asso_values[] = { @@ -83,7 +83,7 @@ grib_accessor_classes_get_id (register const char *str, register size_t len) 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832 }; - register unsigned int hval = len; + unsigned int hval = len; switch (hval) { @@ -705,13 +705,13 @@ static const struct accessor_class_hash classes[] = }; static const struct accessor_class_hash * -grib_accessor_classes_hash (register const char *str, register size_t len) +grib_accessor_classes_hash (const char *str, size_t len) { - register unsigned int key = grib_accessor_classes_get_id (str, len); + unsigned int key = grib_accessor_classes_get_id (str, len); #ifdef DEBUG { - register const char *s; + const char *s; Assert( len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH ); Assert( key <= MAX_HASH_VALUE ); s = classes[key].name; diff --git a/src/grib_api.h b/src/grib_api.h index 0dc80251f..471754ee1 100644 --- a/src/grib_api.h +++ b/src/grib_api.h @@ -91,30 +91,27 @@ Log mode for information for processing information #define GRIB_TYPE_MISSING 7 /* Missing values */ -/* #define GRIB_MISSING_LONG 0x80000001*/ +/* #define GRIB_MISSING_LONG 0x80000001 */ /* #define GRIB_MISSING_LONG 0xffffffff */ #define GRIB_MISSING_LONG 2147483647 #define GRIB_MISSING_DOUBLE -1e+100 -/*set spec flags*/ -#define GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING (1 << 0) - /* Dump option flags*/ -#define GRIB_DUMP_FLAG_READ_ONLY (1 << 0) -#define GRIB_DUMP_FLAG_DUMP_OK (1 << 1) -#define GRIB_DUMP_FLAG_VALUES (1 << 2) -#define GRIB_DUMP_FLAG_CODED (1 << 3) -#define GRIB_DUMP_FLAG_OCTET (1 << 4) -#define GRIB_DUMP_FLAG_ALIASES (1 << 5) -#define GRIB_DUMP_FLAG_TYPE (1 << 6) -#define GRIB_DUMP_FLAG_HEXADECIMAL (1 << 7) -#define GRIB_DUMP_FLAG_NO_DATA (1 << 8) -#define GRIB_DUMP_FLAG_ALL_DATA (1 << 9) +#define GRIB_DUMP_FLAG_READ_ONLY (1 << 0) +#define GRIB_DUMP_FLAG_DUMP_OK (1 << 1) +#define GRIB_DUMP_FLAG_VALUES (1 << 2) +#define GRIB_DUMP_FLAG_CODED (1 << 3) +#define GRIB_DUMP_FLAG_OCTET (1 << 4) +#define GRIB_DUMP_FLAG_ALIASES (1 << 5) +#define GRIB_DUMP_FLAG_TYPE (1 << 6) +#define GRIB_DUMP_FLAG_HEXADECIMAL (1 << 7) +#define GRIB_DUMP_FLAG_NO_DATA (1 << 8) +#define GRIB_DUMP_FLAG_ALL_DATA (1 << 9) #define GRIB_DUMP_FLAG_ALL_ATTRIBUTES (1 << 10) /* grib_nearest flags */ -#define GRIB_NEAREST_SAME_GRID (1 << 0) -#define GRIB_NEAREST_SAME_DATA (1 << 1) +#define GRIB_NEAREST_SAME_GRID (1 << 0) +#define GRIB_NEAREST_SAME_DATA (1 << 1) #define GRIB_NEAREST_SAME_POINT (1 << 2) /*! Iteration is carried out on all the keys available in the message @@ -1005,7 +1002,7 @@ void grib_dump_action_tree(grib_context* c, FILE* f); */ /*! @{ */ /** -* Grib free procedure, format of a procedure referenced in the context that is used to free memory +* free procedure, format of a procedure referenced in the context that is used to free memory * * @param c : the context where the memory freeing will apply * @param data : pointer to the data to be freed @@ -1014,7 +1011,7 @@ void grib_dump_action_tree(grib_context* c, FILE* f); typedef void (*grib_free_proc)(const grib_context* c, void* data); /** -* Grib malloc procedure, format of a procedure referenced in the context that is used to allocate memory +* malloc procedure, format of a procedure referenced in the context that is used to allocate memory * @param c : the context where the memory allocation will apply * @param length : length to be allocated in number of bytes * @return a pointer to the allocated memory, NULL if no memory can be allocated @@ -1023,7 +1020,7 @@ typedef void (*grib_free_proc)(const grib_context* c, void* data); typedef void* (*grib_malloc_proc)(const grib_context* c, size_t length); /** -* Grib realloc procedure, format of a procedure referenced in the context that is used to reallocate memory +* realloc procedure, format of a procedure referenced in the context that is used to reallocate memory * @param c : the context where the memory allocation will apply * @param data : pointer to the data to be reallocated * @param length : length to be allocated in number of bytes @@ -1032,7 +1029,7 @@ typedef void* (*grib_malloc_proc)(const grib_context* c, size_t length); typedef void* (*grib_realloc_proc)(const grib_context* c, void* data, size_t length); /** -* Grib loc proc, format of a procedure referenced in the context that is used to log internal messages +* log procedure, format of a procedure referenced in the context that is used to log internal messages * * @param c : the context where the logging will apply * @param level : the log level, as defined in log modes @@ -1041,7 +1038,7 @@ typedef void* (*grib_realloc_proc)(const grib_context* c, void* data, size_t len typedef void (*grib_log_proc)(const grib_context* c, int level, const char* mesg); /** -* Grib print proc, format of a procedure referenced in the context that is used to print external messages +* print procedure, format of a procedure referenced in the context that is used to print external messages * * @param c : the context where the logging will apply * @param descriptor : the structure to be printed on, must match the implementation @@ -1051,29 +1048,29 @@ typedef void (*grib_print_proc)(const grib_context* c, void* descriptor, const c /** -* Grib data read proc, format of a procedure referenced in the context that is used to read from a stream in a resource +* data read procedure, format of a procedure referenced in the context that is used to read from a stream in a resource * -* @param c : the context where the read will apply +* @param c : the context where the read will apply * @param ptr : the resource -* @param size : size to read +* @param size : size to read * @param stream : the stream * @return size read */ typedef size_t (*grib_data_read_proc)(const grib_context* c, void* ptr, size_t size, void* stream); /** -* Grib data read write, format of a procedure referenced in the context that is used to write to a stream from a resource +* data write procedure, format of a procedure referenced in the context that is used to write to a stream from a resource * -* @param c : the context where the write will apply +* @param c : the context where the write will apply * @param ptr : the resource -* @param size : size to read +* @param size : size to read * @param stream : the stream * @return size written */ typedef size_t (*grib_data_write_proc)(const grib_context* c, const void* ptr, size_t size, void* stream); /** -* Grib data tell, format of a procedure referenced in the context that is used to tell the current position in a stream +* data tell procedure, format of a procedure referenced in the context that is used to tell the current position in a stream * * @param c : the context where the tell will apply * @param stream : the stream @@ -1082,20 +1079,19 @@ typedef size_t (*grib_data_write_proc)(const grib_context* c, const void* ptr, s typedef off_t (*grib_data_tell_proc)(const grib_context* c, void* stream); /** -* Grib data seek, format of a procedure referenced in the context that is used to seek the current position in a stream +* data seek procedure, format of a procedure referenced in the context that is used to seek the current position in a stream * -* @param c : the context where the tell will apply -* @param offset : the offset to seek to -* @param whence : If whence is set to SEEK_SET, SEEK_CUR, or SEEK_END, - the offset is relative to the start of the file, - the current position indicator, or end-of-file, respectively. -* @param stream : the stream -* @return 0 if OK, integer value on error +* @param c : the context where the tell will apply +* @param offset : the offset to seek to +* @param whence : If whence is set to SEEK_SET, SEEK_CUR, or SEEK_END, + the offset is relative to the start of the file, the current position indicator, or end-of-file, respectively. +* @param stream : the stream +* @return 0 if OK, integer value on error */ typedef off_t (*grib_data_seek_proc)(const grib_context* c, off_t offset, int whence, void* stream); /** -* Grib data eof, format of a procedure referenced in the context that is used to test end of file +* data eof procedure, format of a procedure referenced in the context that is used to test end of file * * @param c : the context where the tell will apply * @param stream : the stream diff --git a/src/grib_api_internal.h b/src/grib_api_internal.h index cf8bc3be2..20751f4f9 100644 --- a/src/grib_api_internal.h +++ b/src/grib_api_internal.h @@ -23,36 +23,41 @@ extern "C" { /* cmake config header */ #ifdef HAVE_ECCODES_CONFIG_H -#include "eccodes_config.h" + #include "eccodes_config.h" #endif /* autoconf config header */ #ifdef HAVE_CONFIG_H -#include "config.h" -#ifdef _LARGE_FILES -#undef _LARGE_FILE_API -#endif + #include "config.h" + #ifdef _LARGE_FILES + #undef _LARGE_FILE_API + #endif #endif #ifndef GRIB_INLINE -#define GRIB_INLINE + #define GRIB_INLINE #endif /* See ECC-670 */ #if IS_BIG_ENDIAN -#if GRIB_MEM_ALIGN -#define FAST_BIG_ENDIAN 1 -#else -#define FAST_BIG_ENDIAN 0 -#endif + #if GRIB_MEM_ALIGN + #define FAST_BIG_ENDIAN 1 + #else + #define FAST_BIG_ENDIAN 0 + #endif #endif #if IEEE_BE -#define IEEE + #define IEEE #else -#if IEEE_LE -#define IEEE + #if IEEE_LE + #define IEEE + #endif #endif + +#if defined(_WIN32) && defined(_MSC_VER) + #define _CRT_SECURE_NO_WARNINGS + #define _CRT_NONSTDC_NO_DEPRECATE #endif #include @@ -62,48 +67,46 @@ extern "C" { #include "eccodes_windef.h" #ifndef ECCODES_ON_WINDOWS -#include -#include -#include -#define ecc_snprintf snprintf + #include + #include + #include #else -#include -#include + #define strtok_r strtok_s + #include + #include -/* Replace C99/Unix rint() for Windows Visual C++ (only before VC++ 2013 versions) */ -#if defined _MSC_VER && _MSC_VER < 1800 -double rint(double x); -#endif + /* Replace C99/Unix rint() for Windows Visual C++ (only before VC++ 2013 versions) */ + #if defined _MSC_VER && _MSC_VER < 1800 + double rint(double x); + #endif -#ifndef S_ISREG -#define S_ISREG(mode) (mode & S_IFREG) -#endif + #ifndef S_ISREG + #define S_ISREG(mode) (mode & S_IFREG) + #endif -#ifndef S_ISDIR -#define S_ISDIR(mode) (mode & S_IFDIR) -#endif + #ifndef S_ISDIR + #define S_ISDIR(mode) (mode & S_IFDIR) + #endif -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif + #ifndef M_PI + #define M_PI 3.14159265358979323846 + #endif -#define R_OK 04 /* Needed for Windows */ + #define R_OK 04 /* Needed for Windows */ -#ifndef F_OK -#define F_OK 0 -#endif + #ifndef F_OK + #define F_OK 0 + #endif -#define mkdir(dirname, mode) _mkdir(dirname) + #define mkdir(dirname, mode) _mkdir(dirname) -#ifdef _MSC_VER -#define access(path, mode) _access(path, mode) -#define chmod(path, mode) _chmod(path, mode) -#define strdup(str) _strdup(str) -#endif + #ifdef _MSC_VER + #define access(path, mode) _access(path, mode) + #define chmod(path, mode) _chmod(path, mode) + #define strdup(str) _strdup(str) + #endif -#define ecc_snprintf _snprintf - -#endif +#endif /* ifndef ECCODES_ON_WINDOWS */ #include @@ -113,9 +116,9 @@ double rint(double x); #ifdef HAVE_STRING_H -#include + #include #else -#include + #include #endif /* diff --git a/src/grib_api_version.c b/src/grib_api_version.c index a8adfce85..5d2293c10 100644 --- a/src/grib_api_version.c +++ b/src/grib_api_version.c @@ -1,3 +1,12 @@ +/* + * (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. + */ const char* grib_get_git_sha1() { return ""; diff --git a/src/grib_api_version.c.in b/src/grib_api_version.c.in index 93d96e623..8fb7ea836 100644 --- a/src/grib_api_version.c.in +++ b/src/grib_api_version.c.in @@ -1,3 +1,12 @@ +/* + * (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" const char* grib_get_git_sha1(void) diff --git a/src/grib_bufr_descriptors_array.c b/src/grib_bufr_descriptors_array.c index bf51c5e3e..b524caf26 100644 --- a/src/grib_bufr_descriptors_array.c +++ b/src/grib_bufr_descriptors_array.c @@ -137,7 +137,7 @@ bufr_descriptors_array* grib_bufr_descriptors_array_append(bufr_descriptors_arra bufr_descriptors_array* grib_bufr_descriptors_array_push_front(bufr_descriptors_array* v, bufr_descriptor* val) { - int i; + size_t i = 0; if (!v) { size_t start_size = DYN_ARRAY_SIZE_INIT; size_t start_incsize = DYN_ARRAY_SIZE_INCR; @@ -185,8 +185,8 @@ void grib_bufr_descriptors_array_delete(bufr_descriptors_array* v) void grib_bufr_descriptors_array_delete_array(bufr_descriptors_array* v) { - grib_context* c; - int i; + grib_context* c = NULL; + size_t i = 0; bufr_descriptor** vv = NULL; if (!v) diff --git a/src/grib_concept_index.c b/src/grib_concept_index.c index 27fc62eb5..9cb8f0d1d 100644 --- a/src/grib_concept_index.c +++ b/src/grib_concept_index.c @@ -112,12 +112,12 @@ static void index_add_conditions(grib_concept_index* index, grib_concept_conditi switch (type) { case GRIB_TYPE_LONG: grib_expression_evaluate_long(0, c->expression, &lres); - sprintf(s, "%ld", lres); + snprintf(s, sizeof(s), "%ld", lres); break; case GRIB_TYPE_DOUBLE: grib_expression_evaluate_double(0, c->expression, &dres); - sprintf(s, "%g", dres); + snprintf(s, sizeof(s), "%g", dres); break; case GRIB_TYPE_STRING: diff --git a/src/grib_context.c b/src/grib_context.c index 8ba2b8c5c..c2c49aa92 100644 --- a/src/grib_context.c +++ b/src/grib_context.c @@ -13,15 +13,15 @@ #include #include #ifndef ECCODES_ON_WINDOWS -#include + #include #else -#include /* Windows: for _O_BINARY */ + #include /* Windows: for _O_BINARY */ #endif #ifdef ENABLE_FLOATING_POINT_EXCEPTIONS -#define _GNU_SOURCE -#include -int feenableexcept(int excepts); + #define _GNU_SOURCE + #include + int feenableexcept(int excepts); #endif grib_string_list grib_file_not_found; @@ -29,11 +29,11 @@ grib_string_list grib_file_not_found; /* Windows always has a colon in pathnames e.g. C:\temp\file. So instead we use semi-colons as delimiter */ /* in order to have multiple definitions/samples directories */ #ifdef ECCODES_ON_WINDOWS -#define ECC_PATH_DELIMITER_CHAR ';' -#define ECC_PATH_DELIMITER_STR ";" + #define ECC_PATH_DELIMITER_CHAR ';' + #define ECC_PATH_DELIMITER_STR ";" #else -#define ECC_PATH_DELIMITER_CHAR ':' -#define ECC_PATH_DELIMITER_STR ":" + #define ECC_PATH_DELIMITER_CHAR ':' + #define ECC_PATH_DELIMITER_STR ":" #endif #if GRIB_PTHREADS @@ -84,7 +84,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 %lu bytes", (unsigned long)size); + grib_context_log(c, GRIB_LOG_FATAL, "default_long_lasting_malloc: error allocating %zu bytes", size); Assert(0); } return ret; @@ -100,7 +100,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 %lu bytes", (unsigned long)size); + grib_context_log(c, GRIB_LOG_FATAL, "default_buffer_malloc: error allocating %zu bytes", size); Assert(0); } return ret; @@ -111,7 +111,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 %lu bytes", (unsigned long)size); + grib_context_log(c, GRIB_LOG_FATAL, "default_buffer_realloc: error allocating %zu bytes", size); Assert(0); } return ret; @@ -127,7 +127,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 %lu bytes", (unsigned long)size); + grib_context_log(c, GRIB_LOG_FATAL, "default_malloc: error allocating %zu bytes", size); Assert(0); } return ret; @@ -138,7 +138,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 %lu bytes", (unsigned long)size); + grib_context_log(c, GRIB_LOG_FATAL, "default_realloc: error allocating %zu bytes", size); Assert(0); } return ret; @@ -242,20 +242,22 @@ static void default_print(const grib_context* c, void* descriptor, const char* m void grib_context_set_print_proc(grib_context* c, grib_print_proc p) { - c = c ? c : grib_context_get_default(); - c->print = p; + c = c ? c : grib_context_get_default(); + /* Set logging back to the default if p is NULL */ + c->print = (p ? p : &default_print); } void grib_context_set_debug(grib_context* c, int mode) { - c = c ? c : grib_context_get_default(); + c = c ? c : grib_context_get_default(); c->debug = mode; } void grib_context_set_logging_proc(grib_context* c, grib_log_proc p) { - c = c ? c : grib_context_get_default(); - c->output_log = p; + c = c ? c : grib_context_get_default(); + /* Set logging back to the default if p is NULL */ + c->output_log = (p ? p : &default_log); } long grib_get_api_version() @@ -494,7 +496,7 @@ grib_context* grib_context_get_default() const char* defs_extra = getenv("ECCODES_EXTRA_DEFINITION_PATH"); if (defs_extra) { char buffer[ECC_PATH_MAXLEN]= {0,}; - ecc_snprintf(buffer, ECC_PATH_MAXLEN, "%s%c%s", defs_extra, ECC_PATH_DELIMITER_CHAR, default_grib_context.grib_definition_files_path); + snprintf(buffer, ECC_PATH_MAXLEN, "%s%c%s", defs_extra, ECC_PATH_DELIMITER_CHAR, default_grib_context.grib_definition_files_path); free(default_grib_context.grib_definition_files_path); default_grib_context.grib_definition_files_path = strdup(buffer); } @@ -504,7 +506,7 @@ grib_context* grib_context_get_default() /* ECC-1088 */ if (strstr(default_grib_context.grib_definition_files_path, ECCODES_DEFINITION_PATH) == NULL) { char buffer[ECC_PATH_MAXLEN]= {0,}; - ecc_snprintf(buffer, ECC_PATH_MAXLEN, "%s%c%s", default_grib_context.grib_definition_files_path, + snprintf(buffer, ECC_PATH_MAXLEN, "%s%c%s", default_grib_context.grib_definition_files_path, ECC_PATH_DELIMITER_CHAR, ECCODES_DEFINITION_PATH); free(default_grib_context.grib_definition_files_path); default_grib_context.grib_definition_files_path = strdup(buffer); @@ -517,7 +519,7 @@ grib_context* grib_context_get_default() const char* samples_extra = getenv("ECCODES_EXTRA_SAMPLES_PATH"); if (samples_extra) { char buffer[ECC_PATH_MAXLEN]; - ecc_snprintf(buffer, ECC_PATH_MAXLEN, "%s%c%s", samples_extra, ECC_PATH_DELIMITER_CHAR, default_grib_context.grib_samples_path); + snprintf(buffer, ECC_PATH_MAXLEN, "%s%c%s", samples_extra, ECC_PATH_DELIMITER_CHAR, default_grib_context.grib_samples_path); default_grib_context.grib_samples_path = strdup(buffer); } } @@ -525,7 +527,7 @@ grib_context* grib_context_get_default() { if (strstr(default_grib_context.grib_samples_path, ECCODES_SAMPLES_PATH) == NULL) { char buffer[ECC_PATH_MAXLEN]; - ecc_snprintf(buffer, ECC_PATH_MAXLEN, "%s%c%s", default_grib_context.grib_samples_path, + snprintf(buffer, ECC_PATH_MAXLEN, "%s%c%s", default_grib_context.grib_samples_path, ECC_PATH_DELIMITER_CHAR, ECCODES_SAMPLES_PATH); default_grib_context.grib_samples_path = strdup(buffer); } @@ -628,6 +630,7 @@ static int init_definition_files_dir(grib_context* c) int err = 0; char path[ECC_PATH_MAXLEN]; char* p = NULL; + char* lasts = NULL; grib_string_list* next = NULL; if (!c) @@ -638,7 +641,7 @@ static int init_definition_files_dir(grib_context* c) if (!c->grib_definition_files_path) return GRIB_NO_DEFINITIONS; - /* Note: strtok modifies its first argument so we copy */ + /* Note: strtok_r modifies its first argument so we copy */ strncpy(path, c->grib_definition_files_path, ECC_PATH_MAXLEN-1); GRIB_MUTEX_INIT_ONCE(&once, &init); @@ -657,7 +660,7 @@ static int init_definition_files_dir(grib_context* c) else { /* Definitions path contains multiple directories */ char* dir = NULL; - dir = strtok(path, ECC_PATH_DELIMITER_STR); + dir = strtok_r(path, ECC_PATH_DELIMITER_STR, &lasts); while (dir != NULL) { if (next) { @@ -669,7 +672,7 @@ static int init_definition_files_dir(grib_context* c) next = c->grib_definition_files_dir; } next->value = codes_resolve_path(c, dir); - dir = strtok(NULL, ECC_PATH_DELIMITER_STR); + dir = strtok_r(NULL, ECC_PATH_DELIMITER_STR, &lasts); } } @@ -712,8 +715,8 @@ char* grib_context_full_defs_path(grib_context* c, const char* basename) dir = c->grib_definition_files_dir; while (dir) { - sprintf(full, "%s/%s", dir->value, basename); - if (!codes_access(full, F_OK)) { + snprintf(full, sizeof(full), "%s/%s", dir->value, basename); + if (codes_access(full, F_OK) == 0) { /* 0 means file exists */ fullpath = (grib_string_list*)grib_context_malloc_clear_persistent(c, sizeof(grib_string_list)); Assert(fullpath); fullpath->value = grib_context_strdup(c, full); @@ -722,6 +725,8 @@ char* grib_context_full_defs_path(grib_context* c, const char* basename) grib_context_log(c, GRIB_LOG_DEBUG, "Found def file %s", full); GRIB_MUTEX_UNLOCK(&mutex_c); return fullpath->value; + } else { + grib_context_log(c, GRIB_LOG_DEBUG, "Nonexistent def file %s", full); } dir = dir->next; } @@ -900,7 +905,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 %lu bytes", (unsigned long)size); + "grib_context_malloc_persistent: error allocating %zu bytes", size); Assert(0); } return p; @@ -932,7 +937,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 %lu bytes", (unsigned long)size); + grib_context_log(c, GRIB_LOG_FATAL, "grib_context_malloc: error allocating %zu bytes", size); Assert(0); } return p; @@ -945,7 +950,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 %lu bytes", (unsigned long)size); + grib_context_log(c, GRIB_LOG_FATAL, "grib_context_realloc: error allocating %zu bytes", size); return NULL; } return q; @@ -980,7 +985,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 %lu bytes", (unsigned long)size); + grib_context_log(c, GRIB_LOG_FATAL, "grib_context_buffer_malloc: error allocating %zu bytes", size); return NULL; } return p; @@ -998,7 +1003,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 %lu bytes", (unsigned long)size); + grib_context_log(c, GRIB_LOG_FATAL, "grib_context_buffer_realloc: error allocating %zu bytes", size); return NULL; } return q; @@ -1053,7 +1058,7 @@ void grib_context_log(const grib_context* c, int level, const char* fmt, ...) const int errsv = errno; va_start(list, fmt); - vsprintf(msg, fmt, list); + vsnprintf(msg, sizeof(msg), fmt, list); va_end(list); if (level & GRIB_LOG_PERROR) { @@ -1084,7 +1089,7 @@ void grib_context_print(const grib_context* c, void* descriptor, const char* fmt char msg[1024]; va_list list; va_start(list, fmt); - vsprintf(msg, fmt, list); + vsnprintf(msg, sizeof(msg), fmt, list); va_end(list); c->print(c, descriptor, msg); } @@ -1240,7 +1245,7 @@ void codes_assertion_failed(const char* message, const char* file, int line) } else { char buffer[10240]; - sprintf(buffer, "ecCodes assertion failed: `%s' in %s:%d", message, file, line); + snprintf(buffer, sizeof(buffer), "ecCodes assertion failed: `%s' in %s:%d", message, file, line); assertion(buffer); } } diff --git a/src/grib_darray.c b/src/grib_darray.c index bcf72898b..e37ba710f 100644 --- a/src/grib_darray.c +++ b/src/grib_darray.c @@ -15,9 +15,9 @@ void grib_darray_print(const char* title, const grib_darray* darray) { size_t i; Assert(darray); - printf("%s: darray.n=%lu \t", title, (unsigned long)darray->n); + printf("%s: darray.n=%zu \t", title, darray->n); for (i = 0; i < darray->n; i++) { - printf("darray[%lu]=%g\t", (unsigned long)i, darray->v[i]); + printf("darray[%zu]=%g\t", i, darray->v[i]); } printf("\n"); } @@ -48,7 +48,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 %ld bytes\n", sizeof(grib_darray)); + "grib_darray_new unable to allocate %lu bytes\n", sizeof(grib_darray)); return NULL; } v->size = size; @@ -58,7 +58,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 %ld bytes\n", sizeof(double) * size); + "grib_darray_new unable to allocate %lu bytes\n", sizeof(double) * size); return NULL; } return v; @@ -75,7 +75,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 %ld bytes\n", sizeof(double) * newsize); + "grib_darray_resize unable to allocate %lu bytes\n", sizeof(double) * newsize); return NULL; } return v; @@ -108,8 +108,8 @@ void grib_darray_delete(grib_context* c, grib_darray* v) double* grib_darray_get_array(grib_context* c, grib_darray* v) { - double* ret; - int i; + double* ret = NULL; + size_t i = 0; if (!v) return NULL; ret = (double*)grib_context_malloc_clear(c, sizeof(double) * v->n); @@ -120,8 +120,8 @@ double* grib_darray_get_array(grib_context* c, grib_darray* v) int grib_darray_is_constant(grib_darray* v, double epsilon) { - int i; - double val; + size_t i = 0; + double val = 0; if (v->n == 1) return 1; diff --git a/src/grib_date.c b/src/grib_date.c index acb7ca76e..cd2fc32cf 100644 --- a/src/grib_date.c +++ b/src/grib_date.c @@ -9,7 +9,7 @@ */ /*************************************************************************** - * + * * The Julian date of any instant is the Julian day number plus the fraction of a day * since the preceding noon in Universal Time. * Julian dates are expressed as a Julian day number with a decimal fraction added. diff --git a/src/grib_db.c b/src/grib_db.c index 6ecf1f2f8..c55be2f3c 100644 --- a/src/grib_db.c +++ b/src/grib_db.c @@ -607,6 +607,7 @@ static grib_order_by* grib_db_new_order_by(grib_context* c, char* obstr) char *t1 = 0, *t2 = 0, *p = 0; int id = 0; char *z = 0, *zs = 0; + char* lasts = NULL; int mode, mode_default = GRIB_ORDER_BY_ASC; grib_order_by *ob, *sob; @@ -628,7 +629,7 @@ static grib_order_by* grib_db_new_order_by(grib_context* c, char* obstr) ob->mode = 0; ob->next = 0; - t1 = strtok(z, ","); + t1 = strtok_r(z, ",", &lasts); while (t1) { grib_trim(&t1); @@ -651,7 +652,7 @@ static grib_order_by* grib_db_new_order_by(grib_context* c, char* obstr) } grib_trim(&t2); id = -1; - t1 = strtok(NULL, ","); + t1 = strtok_r(NULL, ",", &lasts); if (ob->key) { ob->next = (grib_order_by*)grib_context_malloc(c, sizeof(grib_order_by)); diff --git a/src/grib_dependency.c b/src/grib_dependency.c index 5f25460d6..9d6bab0f7 100644 --- a/src/grib_dependency.c +++ b/src/grib_dependency.c @@ -141,7 +141,7 @@ int grib_dependency_notify_change(grib_accessor* observed) /* This version takes in the handle so does not need to work it out from the 'observed' */ /* See ECC-778 */ -int _grib_dependency_notify_change(grib_handle* h, grib_accessor* observed) +int ecc__grib_dependency_notify_change(grib_handle* h, grib_accessor* observed) { grib_dependency* d = h->dependencies; int ret = GRIB_SUCCESS; diff --git a/src/grib_dumper_class_bufr_decode_C.c b/src/grib_dumper_class_bufr_decode_C.c index d15329839..f02070d8e 100644 --- a/src/grib_dumper_class_bufr_decode_C.c +++ b/src/grib_dumper_class_bufr_decode_C.c @@ -58,7 +58,7 @@ static void header (grib_dumper*,grib_handle*); static void footer (grib_dumper*,grib_handle*); typedef struct grib_dumper_bufr_decode_C { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in bufr_decode_C */ long section_offset; long empty; @@ -95,19 +95,6 @@ grib_dumper_class* grib_dumper_class_bufr_decode_C = &_grib_dumper_class_bufr_de /* END_CLASS_IMP */ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix); -/* 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) -{ - if (*a != *b) - return 1; - while ((*a != 0 && *b != 0) && *(a) == *(b)) { - a++; - b++; - } - return (*a == 0 && *b == 0) ? 0 : 1; -} - static int depth = 0; static void init_class(grib_dumper_class* c) {} @@ -144,7 +131,7 @@ static int destroy(grib_dumper* d) static char* dval_to_string(grib_context* c, double v) { char* sval = (char*)grib_context_malloc_clear(c, sizeof(char) * 40); - sprintf(sval, "%.18e", v); + snprintf(sval, 1024, "%.18e", v); return sval; } @@ -206,7 +193,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -267,7 +254,7 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* char* prefix1; prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -304,7 +291,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -354,7 +341,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -410,7 +397,7 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr char* prefix1; prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -458,7 +445,7 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -522,7 +509,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -583,7 +570,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -622,9 +609,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key) static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_decode_C* self = (grib_dumper_bufr_decode_C*)d; - if (!grib_inline_strcmp(a->name, "BUFR") || - !grib_inline_strcmp(a->name, "GRIB") || - !grib_inline_strcmp(a->name, "META")) { + if (strcmp(a->name, "BUFR")==0 || + strcmp(a->name, "GRIB")==0 || + strcmp(a->name, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->empty = 1; @@ -638,7 +625,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (!grib_inline_strcmp(a->name, "groupNumber")) { + else if (strcmp(a->name, "groupNumber")==0) { if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->empty = 1; diff --git a/src/grib_dumper_class_bufr_decode_filter.c b/src/grib_dumper_class_bufr_decode_filter.c index 555ab5037..1c7434cdb 100644 --- a/src/grib_dumper_class_bufr_decode_filter.c +++ b/src/grib_dumper_class_bufr_decode_filter.c @@ -56,7 +56,7 @@ static void dump_label (grib_dumper* d, grib_accessor* a,const char* commen static void dump_section (grib_dumper* d, grib_accessor* a,grib_block_of_accessors* block); typedef struct grib_dumper_bufr_decode_filter { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in bufr_decode_filter */ long section_offset; long begin; @@ -94,19 +94,6 @@ grib_dumper_class* grib_dumper_class_bufr_decode_filter = &_grib_dumper_class_bu /* END_CLASS_IMP */ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix); -/* 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) -{ - if (*a != *b) - return 1; - while ((*a != 0 && *b != 0) && *(a) == *(b)) { - a++; - b++; - } - return (*a == 0 && *b == 0) ? 0 : 1; -} - static int depth = 0; static void init_class(grib_dumper_class* c) {} @@ -186,7 +173,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -232,7 +219,7 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* if (self->isLeaf == 0) { char* prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -269,7 +256,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -312,7 +299,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -339,7 +326,7 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr if (self->isLeaf == 0) { char* prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -384,7 +371,7 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -437,7 +424,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -497,7 +484,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -533,9 +520,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key) static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_decode_filter* self = (grib_dumper_bufr_decode_filter*)d; - if (!grib_inline_strcmp(a->name, "BUFR") || - !grib_inline_strcmp(a->name, "GRIB") || - !grib_inline_strcmp(a->name, "META")) { + if (strcmp(a->name, "BUFR")==0 || + strcmp(a->name, "GRIB")==0 || + strcmp(a->name, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->begin = 1; @@ -550,7 +537,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (!grib_inline_strcmp(a->name, "groupNumber")) { + else if (strcmp(a->name, "groupNumber")==0) { if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->begin = 1; diff --git a/src/grib_dumper_class_bufr_decode_fortran.c b/src/grib_dumper_class_bufr_decode_fortran.c index 9695f3388..9a3871c40 100644 --- a/src/grib_dumper_class_bufr_decode_fortran.c +++ b/src/grib_dumper_class_bufr_decode_fortran.c @@ -58,7 +58,7 @@ static void header (grib_dumper*,grib_handle*); static void footer (grib_dumper*,grib_handle*); typedef struct grib_dumper_bufr_decode_fortran { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in bufr_decode_fortran */ long section_offset; long empty; @@ -95,19 +95,6 @@ grib_dumper_class* grib_dumper_class_bufr_decode_fortran = &_grib_dumper_class_b /* END_CLASS_IMP */ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix); -/* 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) -{ - if (*a != *b) - return 1; - while ((*a != 0 && *b != 0) && *(a) == *(b)) { - a++; - b++; - } - return (*a == 0 && *b == 0) ? 0 : 1; -} - static int depth = 0; static void init_class(grib_dumper_class* c) {} @@ -189,7 +176,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -237,7 +224,7 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* char* prefix1; prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -274,7 +261,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -319,7 +306,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024,"#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -369,7 +356,7 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr char* prefix1; prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + snprintf(prefix1, 1024,"%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -413,7 +400,7 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -466,7 +453,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -526,7 +513,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -563,9 +550,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key) static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_decode_fortran* self = (grib_dumper_bufr_decode_fortran*)d; - if (!grib_inline_strcmp(a->name, "BUFR") || - !grib_inline_strcmp(a->name, "GRIB") || - !grib_inline_strcmp(a->name, "META")) { + if (strcmp(a->name, "BUFR")==0 || + strcmp(a->name, "GRIB")==0 || + strcmp(a->name, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->empty = 1; @@ -579,7 +566,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (!grib_inline_strcmp(a->name, "groupNumber")) { + else if (strcmp(a->name, "groupNumber")==0) { if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->empty = 1; diff --git a/src/grib_dumper_class_bufr_decode_python.c b/src/grib_dumper_class_bufr_decode_python.c index 9ea5987f8..3b6cffba0 100644 --- a/src/grib_dumper_class_bufr_decode_python.c +++ b/src/grib_dumper_class_bufr_decode_python.c @@ -58,7 +58,7 @@ static void header (grib_dumper*,grib_handle*); static void footer (grib_dumper*,grib_handle*); typedef struct grib_dumper_bufr_decode_python { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in bufr_decode_python */ long section_offset; long empty; @@ -95,19 +95,6 @@ grib_dumper_class* grib_dumper_class_bufr_decode_python = &_grib_dumper_class_bu /* END_CLASS_IMP */ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix); -/* 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) -{ - if (*a != *b) - return 1; - while ((*a != 0 && *b != 0) && *(a) == *(b)) { - a++; - b++; - } - return (*a == 0 && *b == 0) ? 0 : 1; -} - static int depth = 0; static void init_class(grib_dumper_class* c) {} @@ -144,7 +131,7 @@ static int destroy(grib_dumper* d) static char* dval_to_string(const grib_context* c, double v) { char* sval = (char*)grib_context_malloc_clear(c, sizeof(char) * 40); - sprintf(sval, "%.18e", v); + snprintf(sval, 1024, "%.18e", v); return sval; } @@ -199,7 +186,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -253,7 +240,7 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* char* prefix1; prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -290,7 +277,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -333,7 +320,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -381,7 +368,7 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr char* prefix1; prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -429,7 +416,7 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -479,7 +466,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -537,7 +524,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -573,9 +560,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key) static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_decode_python* self = (grib_dumper_bufr_decode_python*)d; - if (!grib_inline_strcmp(a->name, "BUFR") || - !grib_inline_strcmp(a->name, "GRIB") || - !grib_inline_strcmp(a->name, "META")) { + if (strcmp(a->name, "BUFR")==0 || + strcmp(a->name, "GRIB")==0 || + strcmp(a->name, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->empty = 1; @@ -589,7 +576,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (!grib_inline_strcmp(a->name, "groupNumber")) { + else if (strcmp(a->name, "groupNumber")==0) { if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->empty = 1; @@ -643,7 +630,6 @@ static void header(grib_dumper* d, grib_handle* h) fprintf(self->dumper.out, "# Using ecCodes version: "); grib_print_api_version(self->dumper.out); fprintf(self->dumper.out, "\n\n"); - fprintf(self->dumper.out, "from __future__ import print_function\n"); fprintf(self->dumper.out, "import traceback\n"); fprintf(self->dumper.out, "import sys\n"); fprintf(self->dumper.out, "from eccodes import *\n\n\n"); diff --git a/src/grib_dumper_class_bufr_encode_C.c b/src/grib_dumper_class_bufr_encode_C.c index f88fd0cb7..5c915049f 100644 --- a/src/grib_dumper_class_bufr_encode_C.c +++ b/src/grib_dumper_class_bufr_encode_C.c @@ -58,7 +58,7 @@ static void header (grib_dumper*,grib_handle*); static void footer (grib_dumper*,grib_handle*); typedef struct grib_dumper_bufr_encode_C { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in bufr_encode_C */ long section_offset; long empty; @@ -95,19 +95,6 @@ grib_dumper_class* grib_dumper_class_bufr_encode_C = &_grib_dumper_class_bufr_en /* END_CLASS_IMP */ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix); -/* 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) -{ - if (*a != *b) - return 1; - while ((*a != 0 && *b != 0) && *(a) == *(b)) { - a++; - b++; - } - return (*a == 0 && *b == 0) ? 0 : 1; -} - static int depth = 0; static void init_class(grib_dumper_class* c) {} @@ -143,20 +130,22 @@ static int destroy(grib_dumper* d) static char* lval_to_string(grib_context* c, long v) { - char* sval = (char*)grib_context_malloc_clear(c, sizeof(char) * 40); + const size_t svalMaxLen = 40; + char* sval = (char*)grib_context_malloc_clear(c, sizeof(char) * svalMaxLen); if (v == GRIB_MISSING_LONG) - sprintf(sval, "CODES_MISSING_LONG"); + snprintf(sval, svalMaxLen, "CODES_MISSING_LONG"); else - sprintf(sval, "%ld", v); + snprintf(sval, svalMaxLen, "%ld", v); return sval; } static char* dval_to_string(grib_context* c, double v) { - char* sval = (char*)grib_context_malloc_clear(c, sizeof(char) * 40); + const size_t svalMaxLen = 40; + char* sval = (char*)grib_context_malloc_clear(c, sizeof(char) * svalMaxLen); if (v == GRIB_MISSING_DOUBLE) - sprintf(sval, "CODES_MISSING_DOUBLE"); + snprintf(sval, svalMaxLen, "CODES_MISSING_DOUBLE"); else - sprintf(sval, "%.18e", v); + snprintf(sval, svalMaxLen, "%.18e", v); return sval; } @@ -239,9 +228,10 @@ static void dump_values(grib_dumper* d, grib_accessor* a) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + const size_t prefixMaxLen = strlen(a->name) + 10; + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * prefixMaxLen); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, prefixMaxLen, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -322,10 +312,9 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* } if (self->isLeaf == 0) { - char* prefix1; - - prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + const size_t prefix1MaxLen = strlen(a->name) + strlen(prefix) + 5; + char* prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * prefix1MaxLen); + snprintf(prefix1, prefix1MaxLen, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -374,9 +363,10 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) r = compute_bufr_key_rank(h, self->keys, a->name); if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + const size_t prefixMaxLen = strlen(a->name) + 10; + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * prefixMaxLen); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, prefixMaxLen, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -462,9 +452,10 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + const size_t prefixMaxLen = strlen(a->name) + 10; + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * prefixMaxLen); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, prefixMaxLen, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -540,10 +531,9 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr } if (self->isLeaf == 0) { - char* prefix1; - - prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + const size_t prefix1MaxLen = strlen(a->name) + strlen(prefix) + 5; + char* prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * prefix1MaxLen); + snprintf(prefix1, prefix1MaxLen, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -587,9 +577,10 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + const size_t prefixMaxLen = strlen(a->name) + 10; + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * prefixMaxLen); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, prefixMaxLen, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -630,7 +621,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm self->empty = 0; values = (char**)grib_context_malloc_clear(c, size * sizeof(char*)); if (!values) { - grib_context_log(c, GRIB_LOG_FATAL, "unable to allocate %d bytes", (int)size); + grib_context_log(c, GRIB_LOG_FATAL, "Memory allocation error: %zu bytes", size); return; } @@ -652,9 +643,10 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); + const size_t prefixMaxLen = strlen(a->name) + 10; + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * prefixMaxLen); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, prefixMaxLen, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -681,7 +673,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) grib_handle* h = grib_handle_of_accessor(a); const char* acc_name = a->name; - _grib_get_string_length(a, &size); + ecc__grib_get_string_length(a, &size); if (size == 0) return; @@ -690,7 +682,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) value = (char*)grib_context_malloc_clear(c, size); if (!value) { - grib_context_log(c, GRIB_LOG_FATAL, "unable to allocate %d bytes", (int)size); + grib_context_log(c, GRIB_LOG_FATAL, "Memory allocation error: %zu bytes", size); return; } @@ -726,9 +718,10 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) int dofree = 0; if (r != 0) { - prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(acc_name) + 10)); + const size_t prefixMaxLen = strlen(acc_name) + 10; + prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * prefixMaxLen); dofree = 1; - sprintf(prefix, "#%d#%s", r, acc_name); + snprintf(prefix, prefixMaxLen, "#%d#%s", r, acc_name); } else prefix = (char*)acc_name; @@ -789,9 +782,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key, const cha static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_encode_C* self = (grib_dumper_bufr_encode_C*)d; - if (!grib_inline_strcmp(a->name, "BUFR") || - !grib_inline_strcmp(a->name, "GRIB") || - !grib_inline_strcmp(a->name, "META")) { + if (strcmp(a->name, "BUFR")==0 || + strcmp(a->name, "GRIB")==0 || + strcmp(a->name, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->empty = 1; @@ -804,7 +797,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (!grib_inline_strcmp(a->name, "groupNumber")) { + else if (strcmp(a->name, "groupNumber")==0) { if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->empty = 1; @@ -863,12 +856,12 @@ static void header(grib_dumper* d, grib_handle* h) if (localSectionPresent && bufrHeaderCentre == 98) { grib_get_long(h, "isSatellite", &isSatellite); if (isSatellite) - sprintf(sampleName, "BUFR%ld_local_satellite", edition); + snprintf(sampleName, sizeof(sampleName), "BUFR%ld_local_satellite", edition); else - sprintf(sampleName, "BUFR%ld_local", edition); + snprintf(sampleName, sizeof(sampleName), "BUFR%ld_local", edition); } else { - sprintf(sampleName, "BUFR%ld", edition); + snprintf(sampleName, sizeof(sampleName), "BUFR%ld", edition); } if (d->count < 2) { diff --git a/src/grib_dumper_class_bufr_encode_filter.c b/src/grib_dumper_class_bufr_encode_filter.c index e56e1043e..de3db03ca 100644 --- a/src/grib_dumper_class_bufr_encode_filter.c +++ b/src/grib_dumper_class_bufr_encode_filter.c @@ -58,7 +58,7 @@ static void dump_section (grib_dumper* d, grib_accessor* a,grib_block_of_acce static void header (grib_dumper*,grib_handle*); typedef struct grib_dumper_bufr_encode_filter { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in bufr_encode_filter */ long section_offset; long begin; @@ -96,19 +96,6 @@ grib_dumper_class* grib_dumper_class_bufr_encode_filter = &_grib_dumper_class_bu /* END_CLASS_IMP */ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix); -/* 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) -{ - if (*a != *b) - return 1; - while ((*a != 0 && *b != 0) && *(a) == *(b)) { - a++; - b++; - } - return (*a == 0 && *b == 0) ? 0 : 1; -} - static int depth = 0; static void init_class(grib_dumper_class* c) {} @@ -218,7 +205,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -292,7 +279,7 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* char* prefix1; prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -331,7 +318,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -401,7 +388,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -474,7 +461,7 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr char* prefix1; prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -521,7 +508,7 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -594,7 +581,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -622,7 +609,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; - _grib_get_string_length(a, &size); + ecc__grib_get_string_length(a, &size); if (size == 0) return; @@ -667,7 +654,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -723,9 +710,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key, const cha static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_encode_filter* self = (grib_dumper_bufr_encode_filter*)d; - if (!grib_inline_strcmp(a->name, "BUFR") || - !grib_inline_strcmp(a->name, "GRIB") || - !grib_inline_strcmp(a->name, "META")) { + if (strcmp(a->name, "BUFR")==0 || + strcmp(a->name, "GRIB")==0 || + strcmp(a->name, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->begin = 1; @@ -739,7 +726,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (!grib_inline_strcmp(a->name, "groupNumber")) { + else if (strcmp(a->name, "groupNumber")==0) { if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->begin = 1; @@ -802,12 +789,12 @@ static void header(grib_dumper* d, grib_handle* h) if (localSectionPresent && bufrHeaderCentre == 98) { grib_get_long(h, "isSatellite", &isSatellite); if (isSatellite) - sprintf(sampleName, "BUFR%ld_local_satellite", edition); + snprintf(sampleName, sizeof(sampleName), "BUFR%ld_local_satellite", edition); else - sprintf(sampleName, "BUFR%ld_local", edition); + snprintf(sampleName, sizeof(sampleName), "BUFR%ld_local", edition); } else { - sprintf(sampleName, "BUFR%ld", edition); + snprintf(sampleName, sizeof(sampleName), "BUFR%ld", edition); } fprintf(self->dumper.out, "# BUFR sample file: %s.tmpl\n", sampleName); diff --git a/src/grib_dumper_class_bufr_encode_fortran.c b/src/grib_dumper_class_bufr_encode_fortran.c index f7063009c..2c722a50c 100644 --- a/src/grib_dumper_class_bufr_encode_fortran.c +++ b/src/grib_dumper_class_bufr_encode_fortran.c @@ -10,6 +10,7 @@ #include "grib_api_internal.h" #include + /* This is used by make_class.pl @@ -58,7 +59,7 @@ static void header (grib_dumper*,grib_handle*); static void footer (grib_dumper*,grib_handle*); typedef struct grib_dumper_bufr_encode_fortran { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in bufr_encode_fortran */ long section_offset; long empty; @@ -95,19 +96,6 @@ grib_dumper_class* grib_dumper_class_bufr_encode_fortran = &_grib_dumper_class_b /* END_CLASS_IMP */ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix); -/* 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) -{ - if (*a != *b) - return 1; - while ((*a != 0 && *b != 0) && *(a) == *(b)) { - a++; - b++; - } - return (*a == 0 && *b == 0) ? 0 : 1; -} - static int depth = 0; static void init_class(grib_dumper_class* c) {} @@ -145,20 +133,20 @@ static char* lval_to_string(grib_context* c, long v) { char* sval = (char*)grib_context_malloc_clear(c, sizeof(char) * 40); if (v == GRIB_MISSING_LONG) - sprintf(sval, "CODES_MISSING_LONG"); + snprintf(sval, 1024, "CODES_MISSING_LONG"); else - sprintf(sval, "%ld", v); + snprintf(sval, 1024, "%ld", v); return sval; } static char* dval_to_string(grib_context* c, double v) { char* sval = (char*)grib_context_malloc_clear(c, sizeof(char) * 40); if (v == GRIB_MISSING_DOUBLE) { - sprintf(sval, "CODES_MISSING_DOUBLE"); + snprintf(sval, 1024, "CODES_MISSING_DOUBLE"); } else { char* p; - sprintf(sval, "%.18e", v); + snprintf(sval, 1024, "%.18e", v); p = sval; while (*p != 0) { if (*p == 'e') @@ -176,6 +164,7 @@ static char* break_line(grib_context* c, const char* input) { /* Break a long line using Fortran continuation characters */ char* a_token = NULL; + char* lasts = NULL; int first = 1; const size_t len = strlen(input); /* Add a bit more for inserted newlines and continuation characters */ @@ -191,7 +180,7 @@ static char* break_line(grib_context* c, const char* input) /* 'hello & * &world' is the same as 'hello world' */ - a_token = strtok((char*)input, "->"); + a_token = strtok_r((char*)input, "->", &lasts); while (a_token) { if (first) { first = 0; @@ -199,10 +188,10 @@ static char* break_line(grib_context* c, const char* input) } else { char tmp[256] = {0,}; - sprintf(tmp, "->&\n &%s", a_token); + snprintf(tmp, sizeof(tmp), "->&\n &%s", a_token); strcat(result, tmp); } - a_token = strtok(NULL, "->"); + a_token = strtok_r(NULL, "->", &lasts); } return result; @@ -289,7 +278,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -373,7 +362,7 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* char* prefix1; prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -424,7 +413,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -511,7 +500,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -594,7 +583,7 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr char* prefix1; prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(pref) + 5)); - sprintf(prefix1, "%s->%s", pref, a->name); + snprintf(prefix1, 1024, "%s->%s", pref, a->name); dump_attributes(d, a, prefix1); @@ -641,7 +630,7 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -706,7 +695,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -733,7 +722,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) grib_handle* h = grib_handle_of_accessor(a); const char* acc_name = a->name; - _grib_get_string_length(a, &size); + ecc__grib_get_string_length(a, &size); if (size == 0) return; @@ -778,7 +767,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(acc_name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, acc_name); + snprintf(prefix, 1024, "#%d#%s", r, acc_name); } else prefix = (char*)acc_name; @@ -839,9 +828,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key, const cha static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_encode_fortran* self = (grib_dumper_bufr_encode_fortran*)d; - if (!grib_inline_strcmp(a->name, "BUFR") || - !grib_inline_strcmp(a->name, "GRIB") || - !grib_inline_strcmp(a->name, "META")) { + if (strcmp(a->name, "BUFR")==0 || + strcmp(a->name, "GRIB")==0 || + strcmp(a->name, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->empty = 1; @@ -854,7 +843,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (!grib_inline_strcmp(a->name, "groupNumber")) { + else if (strcmp(a->name, "groupNumber")==0) { if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->empty = 1; @@ -911,12 +900,12 @@ static void header(grib_dumper* d, grib_handle* h) if (localSectionPresent && bufrHeaderCentre == 98) { grib_get_long(h, "isSatellite", &isSatellite); if (isSatellite) - sprintf(sampleName, "BUFR%ld_local_satellite", edition); + snprintf(sampleName, sizeof(sampleName), "BUFR%ld_local_satellite", edition); else - sprintf(sampleName, "BUFR%ld_local", edition); + snprintf(sampleName, sizeof(sampleName), "BUFR%ld_local", edition); } else { - sprintf(sampleName, "BUFR%ld", edition); + snprintf(sampleName, sizeof(sampleName), "BUFR%ld", edition); } if (d->count < 2) { diff --git a/src/grib_dumper_class_bufr_encode_python.c b/src/grib_dumper_class_bufr_encode_python.c index 5624e1294..f7344acdb 100644 --- a/src/grib_dumper_class_bufr_encode_python.c +++ b/src/grib_dumper_class_bufr_encode_python.c @@ -58,7 +58,7 @@ static void header (grib_dumper*,grib_handle*); static void footer (grib_dumper*,grib_handle*); typedef struct grib_dumper_bufr_encode_python { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in bufr_encode_python */ long section_offset; long empty; @@ -95,19 +95,6 @@ grib_dumper_class* grib_dumper_class_bufr_encode_python = &_grib_dumper_class_bu /* END_CLASS_IMP */ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix); -/* 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) -{ - if (*a != *b) - return 1; - while ((*a != 0 && *b != 0) && *(a) == *(b)) { - a++; - b++; - } - return (*a == 0 && *b == 0) ? 0 : 1; -} - static int depth = 0; static void init_class(grib_dumper_class* c) {} @@ -145,18 +132,18 @@ static char* lval_to_string(grib_context* c, long v) { char* sval = (char*)grib_context_malloc_clear(c, sizeof(char) * 40); if (v == GRIB_MISSING_LONG) - sprintf(sval, "CODES_MISSING_LONG"); + snprintf(sval, 1024, "CODES_MISSING_LONG"); else - sprintf(sval, "%ld", v); + snprintf(sval, 1024, "%ld", v); return sval; } static char* dval_to_string(const grib_context* c, double v) { char* sval = (char*)grib_context_malloc_clear(c, sizeof(char) * 40); if (v == GRIB_MISSING_DOUBLE) - sprintf(sval, "CODES_MISSING_DOUBLE"); + snprintf(sval, 1024, "CODES_MISSING_DOUBLE"); else - sprintf(sval, "%.18e", v); + snprintf(sval, 1024, "%.18e", v); return sval; } @@ -242,7 +229,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -326,7 +313,7 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* char* prefix1; prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -376,7 +363,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -464,7 +451,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -542,7 +529,7 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr char* prefix1; prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -588,7 +575,7 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -627,7 +614,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm values = (char**)grib_context_malloc_clear(c, size * sizeof(char*)); if (!values) { - grib_context_log(c, GRIB_LOG_FATAL, "unable to allocate %d bytes", (int)size); + grib_context_log(c, GRIB_LOG_FATAL, "Memory allocation error: %zu bytes", size); return; } @@ -650,7 +637,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -676,7 +663,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) grib_handle* h = grib_handle_of_accessor(a); const char* acc_name = a->name; - _grib_get_string_length(a, &size); + ecc__grib_get_string_length(a, &size); if (size == 0) return; @@ -685,7 +672,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) value = (char*)grib_context_malloc_clear(c, size); if (!value) { - grib_context_log(c, GRIB_LOG_FATAL, "unable to allocate %d bytes", (int)size); + grib_context_log(c, GRIB_LOG_FATAL, "Memory allocation error: %zu bytes", size); return; } @@ -721,7 +708,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(acc_name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, acc_name); + snprintf(prefix, 1024, "#%d#%s", r, acc_name); } else prefix = (char*)acc_name; @@ -783,9 +770,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key, const cha static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_encode_python* self = (grib_dumper_bufr_encode_python*)d; - if (!grib_inline_strcmp(a->name, "BUFR") || - !grib_inline_strcmp(a->name, "GRIB") || - !grib_inline_strcmp(a->name, "META")) { + if (strcmp(a->name, "BUFR")==0 || + strcmp(a->name, "GRIB")==0 || + strcmp(a->name, "META")==0) { grib_handle* h = grib_handle_of_accessor(a); depth = 2; self->empty = 1; @@ -798,7 +785,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso grib_dump_accessors_block(d, block); depth -= 2; } - else if (!grib_inline_strcmp(a->name, "groupNumber")) { + else if (strcmp(a->name, "groupNumber")==0) { if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->empty = 1; @@ -855,12 +842,12 @@ static void header(grib_dumper* d, grib_handle* h) if (localSectionPresent && bufrHeaderCentre == 98) { grib_get_long(h, "isSatellite", &isSatellite); if (isSatellite) - sprintf(sampleName, "BUFR%ld_local_satellite", edition); + snprintf(sampleName, sizeof(sampleName), "BUFR%ld_local_satellite", edition); else - sprintf(sampleName, "BUFR%ld_local", edition); + snprintf(sampleName, sizeof(sampleName), "BUFR%ld_local", edition); } else { - sprintf(sampleName, "BUFR%ld", edition); + snprintf(sampleName, sizeof(sampleName), "BUFR%ld", edition); } if (d->count < 2) { @@ -869,9 +856,8 @@ static void header(grib_dumper* d, grib_handle* h) fprintf(self->dumper.out, "# Using ecCodes version: "); grib_print_api_version(self->dumper.out); fprintf(self->dumper.out, "\n\n"); - fprintf(self->dumper.out, "from __future__ import print_function\n"); - fprintf(self->dumper.out, "import traceback\n"); fprintf(self->dumper.out, "import sys\n"); + fprintf(self->dumper.out, "import traceback\n\n"); fprintf(self->dumper.out, "from eccodes import *\n\n\n"); fprintf(self->dumper.out, "def bufr_encode():\n"); } diff --git a/src/grib_dumper_class_bufr_simple.c b/src/grib_dumper_class_bufr_simple.c index eb661e151..2759c20f5 100644 --- a/src/grib_dumper_class_bufr_simple.c +++ b/src/grib_dumper_class_bufr_simple.c @@ -56,7 +56,7 @@ static void dump_label (grib_dumper* d, grib_accessor* a,const char* commen static void dump_section (grib_dumper* d, grib_accessor* a,grib_block_of_accessors* block); typedef struct grib_dumper_bufr_simple { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in bufr_simple */ long section_offset; long empty; @@ -94,19 +94,6 @@ grib_dumper_class* grib_dumper_class_bufr_simple = &_grib_dumper_class_bufr_simp /* END_CLASS_IMP */ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix); -/* 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) -{ - if (*a != *b) - return 1; - while ((*a != 0 && *b != 0) && *(a) == *(b)) { - a++; - b++; - } - return (*a == 0 && *b == 0) ? 0 : 1; -} - static void init_class(grib_dumper_class* c) {} static int init(grib_dumper* d) @@ -216,7 +203,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -291,7 +278,7 @@ static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* char* prefix1; prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -339,7 +326,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -418,7 +405,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -492,7 +479,7 @@ static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* pr char* prefix1; prefix1 = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(prefix1, "%s->%s", prefix, a->name); + snprintf(prefix1, 1024, "%s->%s", prefix, a->name); dump_attributes(d, a, prefix1); @@ -541,7 +528,7 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -585,7 +572,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm values = (char**)grib_context_malloc_clear(c, size * sizeof(char*)); if (!values) { - grib_context_log(c, GRIB_LOG_FATAL, "unable to allocate %d bytes", (int)size); + grib_context_log(c, GRIB_LOG_FATAL, "Memory allocation error: %zu bytes", size); return; } @@ -610,7 +597,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, a->name); + snprintf(prefix, 1024, "#%d#%s", r, a->name); } else prefix = (char*)a->name; @@ -682,7 +669,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (r != 0) { prefix = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(acc_name) + 10)); dofree = 1; - sprintf(prefix, "#%d#%s", r, acc_name); + snprintf(prefix, 1024, "#%d#%s", r, acc_name); } else prefix = (char*)acc_name; @@ -736,9 +723,9 @@ static void _dump_long_array(grib_handle* h, FILE* f, const char* key) static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_bufr_simple* self = (grib_dumper_bufr_simple*)d; - if (!grib_inline_strcmp(a->name, "BUFR") || - !grib_inline_strcmp(a->name, "GRIB") || - !grib_inline_strcmp(a->name, "META")) { + if (strcmp(a->name, "BUFR")==0 || + strcmp(a->name, "GRIB")==0 || + strcmp(a->name, "META")==0) { int err = 0; grib_handle* h = grib_handle_of_accessor(a); self->empty = 1; @@ -753,7 +740,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso /*_dump_long_array(h,self->dumper.out,"inputOverriddenReferenceValues","inputOverriddenReferenceValues");*/ grib_dump_accessors_block(d, block); } - else if (!grib_inline_strcmp(a->name, "groupNumber")) { + else if (strcmp(a->name, "groupNumber")==0) { if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; self->empty = 1; diff --git a/src/grib_dumper_class_debug.c b/src/grib_dumper_class_debug.c index a750e907f..123a99601 100644 --- a/src/grib_dumper_class_debug.c +++ b/src/grib_dumper_class_debug.c @@ -51,7 +51,7 @@ static void dump_label (grib_dumper* d, grib_accessor* a,const char* commen static void dump_section (grib_dumper* d, grib_accessor* a,grib_block_of_accessors* block); typedef struct grib_dumper_debug { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in debug */ long section_offset; long begin; @@ -127,9 +127,10 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) grib_dumper_debug* self = (grib_dumper_debug*)d; long value = 0; size_t size = 0; + size_t more = 0; long* values = NULL; /* array of long */ long count = 0; - int err = 0, i = 0, more = 0; + int err = 0, i = 0; if (a->length == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) return; @@ -175,7 +176,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) if (more) { for (i = 0; i < d->depth + 3; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "... %d more values\n", more); + fprintf(self->dumper.out, "... %lu more values\n", (unsigned long)more); } for (i = 0; i < d->depth; i++) fprintf(self->dumper.out, " "); @@ -284,7 +285,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (a->length == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) return; - _grib_get_string_length(a, &size); + ecc__grib_get_string_length(a, &size); if ((size < 2) && grib_is_missing_internal(a)) { /* GRIB-302: transients and missing keys. Need to re-adjust the size */ size = 10; /* big enough to hold the string "missing" */ @@ -326,7 +327,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) { grib_dumper_debug* self = (grib_dumper_debug*)d; int i, k, err = 0; - int more = 0; + size_t more = 0; size_t size = a->length; unsigned char* buf = (unsigned char*)grib_context_malloc(d->context, size); @@ -346,7 +347,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) if (size == 0) fprintf(self->dumper.out, "}\n"); else - fprintf(self->dumper.out, " *** ERR cannot malloc(%ld) }\n", (long)size); + fprintf(self->dumper.out, " *** ERR cannot malloc(%zu) }\n", size); return; } @@ -381,7 +382,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) if (more) { for (i = 0; i < d->depth + 3; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "... %d more values\n", more); + fprintf(self->dumper.out, "... %lu more values\n", (unsigned long)more); } for (i = 0; i < d->depth; i++) @@ -394,7 +395,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) { grib_dumper_debug* self = (grib_dumper_debug*)d; int i, k, err = 0; - int more = 0; + size_t more = 0; double* buf = NULL; size_t size = 0; long count = 0; @@ -423,7 +424,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (size == 0) fprintf(self->dumper.out, "}\n"); else - fprintf(self->dumper.out, " *** ERR cannot malloc(%ld) }\n", (long)size); + fprintf(self->dumper.out, " *** ERR cannot malloc(%zu) }\n", size); return; } @@ -462,7 +463,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (more) { for (i = 0; i < d->depth + 3; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "... %d more values\n", more); + fprintf(self->dumper.out, "... %lu more values\n", (unsigned long)more); } for (i = 0; i < d->depth; i++) diff --git a/src/grib_dumper_class_default.c b/src/grib_dumper_class_default.c index 4ef2ff281..53652da8c 100644 --- a/src/grib_dumper_class_default.c +++ b/src/grib_dumper_class_default.c @@ -57,7 +57,7 @@ static void dump_label (grib_dumper* d, grib_accessor* a,const char* commen static void dump_section (grib_dumper* d, grib_accessor* a,grib_block_of_accessors* block); typedef struct grib_dumper_default { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in default */ long section_offset; long begin; @@ -336,13 +336,11 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm grib_dumper_default* self = (grib_dumper_default*)d; char** values; size_t size = 0, i = 0; - grib_context* c = NULL; + grib_context* c = a->context; int err = 0; int tab = 0; long count = 0; - c = a->context; - grib_value_count(a, &count); size = count; if (size == 1) { @@ -352,7 +350,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm values = (char**)grib_context_malloc_clear(c, size * sizeof(char*)); if (!values) { - grib_context_log(c, GRIB_LOG_FATAL, "unable to allocate %d bytes", (int)size); + grib_context_log(c, GRIB_LOG_FATAL, "Memory allocation error: %zu bytes", size); return; } @@ -379,8 +377,9 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm fprintf(self->dumper.out, "#-READ ONLY- "); tab = 13; } - else + else { fprintf(self->dumper.out, " "); + } tab++; fprintf(self->dumper.out, "%s = {\n", a->name); @@ -411,13 +410,13 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) return; } - _grib_get_string_length(a, &size); + ecc__grib_get_string_length(a, &size); if (size == 0) return; value = (char*)grib_context_malloc_clear(c, size); if (!value) { - grib_context_log(c, GRIB_LOG_FATAL, "unable to allocate %d bytes", (int)size); + grib_context_log(c, GRIB_LOG_FATAL, "Memory allocation error: %zu bytes", size); return; } @@ -470,7 +469,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) #if 0 grib_dumper_default *self = (grib_dumper_default*)d; int i,k,err =0; - int more = 0; + size_t more = 0; size_t size = a->length; unsigned char* buf = grib_context_malloc(d->context,size); @@ -531,7 +530,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) if(more) { for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); - fprintf(self->dumper.out,"... %d more values\n",more); + fprintf(self->dumper.out,"... %lu more values\n", (unsigned long)more); } for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); @@ -544,7 +543,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) { grib_dumper_default* self = (grib_dumper_default*)d; int k, err = 0; - int more = 0; + size_t more = 0; double* buf = NULL; size_t size = 0; long count = 0; @@ -585,7 +584,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) else fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "%s(%ld) = ", a->name, (long)size); + fprintf(self->dumper.out, "%s(%zu) = ", a->name, size); aliases(d, a); fprintf(self->dumper.out, " {"); @@ -593,7 +592,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (size == 0) fprintf(self->dumper.out, "}\n"); else - fprintf(self->dumper.out, " *** ERR cannot malloc(%ld) }\n", (long)size); + fprintf(self->dumper.out, " *** ERR cannot malloc(%zu) }\n", size); return; } @@ -631,7 +630,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) } if (more) { fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "... %d more values\n", more); + fprintf(self->dumper.out, "... %lu more values\n", (unsigned long)more); } fprintf(self->dumper.out, " "); @@ -650,10 +649,9 @@ static void dump_label(grib_dumper* d, grib_accessor* a, const char* comment) static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_default* self = (grib_dumper_default*)d; - grib_section* s = a->sub_section; + int is_default_section = 0; char* upper = NULL; - char tmp[512]; char *p = NULL, *q = NULL; if (!strncmp(a->name, "section", 7)) is_default_section = 1; @@ -663,6 +661,8 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ if (is_default_section) { + /* char tmp[512]; */ + /* grib_section* s = a->sub_section; */ upper = (char*)malloc(strlen(a->name) + 1); Assert(upper); p = (char*)a->name; @@ -674,7 +674,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso } *q = '\0'; - sprintf(tmp, "%s ( length=%ld, padding=%ld )", upper, (long)s->length, (long)s->padding); + /* snprintf(tmp, sizeof(tmp), "%s ( length=%ld, padding=%ld )", upper, (long)s->length, (long)s->padding); */ /* fprintf(self->dumper.out,"#============== %-38s ==============\n",tmp); */ free(upper); self->section_offset = a->offset; @@ -684,7 +684,6 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso 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);*/ } @@ -731,7 +730,7 @@ static void print_offset(FILE* out, grib_dumper* d, grib_accessor* a) fprintf(self->dumper.out, "\n #"); } if (more) { - fprintf(self->dumper.out, "\n #... %d more values\n", (int)more); + fprintf(self->dumper.out, "\n #... %lu more values\n", (unsigned long)more); } fprintf(self->dumper.out, "\n"); } diff --git a/src/grib_dumper_class_grib_encode_C.c b/src/grib_dumper_class_grib_encode_C.c index 29632551c..b9c06653a 100644 --- a/src/grib_dumper_class_grib_encode_C.c +++ b/src/grib_dumper_class_grib_encode_C.c @@ -52,7 +52,7 @@ static void header (grib_dumper*,grib_handle*); static void footer (grib_dumper*,grib_handle*); typedef struct grib_dumper_grib_encode_C { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in grib_encode_C */ int cr; } grib_dumper_grib_encode_C; @@ -253,7 +253,6 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) size_t size = a->length; unsigned char* buf; - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) return; @@ -263,11 +262,10 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) buf = (unsigned char*)grib_context_malloc(d->context, size); if (!buf) { - fprintf(self->dumper.out, "/* %s: cannot malloc(%ld) */\n", a->name, (long)size); + fprintf(self->dumper.out, "/* %s: cannot malloc(%zu) */\n", a->name, size); return; } - err = grib_unpack_bytes(a, buf, &size); if (err) { grib_context_free(d->context, buf); @@ -325,10 +323,10 @@ static void dump_values(grib_dumper* d, grib_accessor* a) type = grib_accessor_get_native_type(a); switch (type) { case GRIB_TYPE_LONG: - sprintf(stype, "%s", "long"); + snprintf(stype, sizeof(stype), "%s", "long"); break; case GRIB_TYPE_DOUBLE: - sprintf(stype, "%s", "double"); + snprintf(stype, sizeof(stype), "%s", "double"); break; default: return; @@ -336,7 +334,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) buf = (double*)grib_context_malloc(d->context, size * sizeof(double)); if (!buf) { - fprintf(self->dumper.out, "/* %s: cannot malloc(%ld) */\n", a->name, (long)size); + fprintf(self->dumper.out, "/* %s: cannot malloc(%zu) */\n", a->name, size); return; } @@ -348,7 +346,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) return; } - fprintf(self->dumper.out, " size = %ld;\n", (long)size); + 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); diff --git a/src/grib_dumper_class_json.c b/src/grib_dumper_class_json.c index 40bd47e1e..b0f43bd10 100644 --- a/src/grib_dumper_class_json.c +++ b/src/grib_dumper_class_json.c @@ -55,7 +55,7 @@ static void dump_label (grib_dumper* d, grib_accessor* a,const char* commen static void dump_section (grib_dumper* d, grib_accessor* a,grib_block_of_accessors* block); typedef struct grib_dumper_json { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in json */ long section_offset; long begin; @@ -92,19 +92,6 @@ grib_dumper_class* grib_dumper_class_json = &_grib_dumper_class_json; /* END_CLASS_IMP */ static void dump_attributes(grib_dumper* d, grib_accessor* a); -/* 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) -{ - if (*a != *b) - return 1; - while ((*a != 0 && *b != 0) && *(a) == *(b)) { - a++; - b++; - } - return (*a == 0 && *b == 0) ? 0 : 1; -} - static int depth = 0; static void init_class(grib_dumper_class* c) {} @@ -410,7 +397,7 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm values = (char**)grib_context_malloc_clear(c, size * sizeof(char*)); if (!values) { - grib_context_log(c, GRIB_LOG_FATAL, "unable to allocate %d bytes", (int)size); + grib_context_log(c, GRIB_LOG_FATAL, "Memory allocation error: %zu bytes", size); return; } @@ -467,13 +454,14 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) /* ECC-710: It is MUCH slower determining the string length here * than using a maximum size (and no need for malloc). * Specially for BUFR elements */ - /*err = _grib_get_string_length(a,&size); - if (size==0) return; - value=(char*)grib_context_malloc_clear(a->context,size); - if (!value) { - grib_context_log(a->context,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size); - return; - }*/ + /* err = ecc__grib_get_string_length(a,&size); + * if (size==0) return; + * value=(char*)grib_context_malloc_clear(a->context,size); + * if (!value) { + * grib_context_log(a->context,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size); + * return; + * } + */ if (self->begin == 0 && self->empty == 0 && self->isAttribute == 0) fprintf(self->dumper.out, ","); @@ -484,7 +472,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) err = grib_unpack_string(a, value, &size); if (err) { - sprintf(value, " *** ERR=%d (%s) [dump_string on '%s']", + snprintf(value, sizeof(value), " *** ERR=%d (%s) [dump_string on '%s']", err, grib_get_error_message(err), a->name); } else { Assert(size < MAX_STRING_SIZE); @@ -523,7 +511,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) fprintf(self->dumper.out, "\n%-*s}", depth, " "); } - /*grib_context_free(a->context,value);*/ + /* grib_context_free(a->context,value); */ (void)err; /* TODO */ } @@ -538,9 +526,9 @@ static void dump_label(grib_dumper* d, grib_accessor* a, const char* comment) static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { grib_dumper_json* self = (grib_dumper_json*)d; - if (!grib_inline_strcmp(a->name, "BUFR") || - !grib_inline_strcmp(a->name, "GRIB") || - !grib_inline_strcmp(a->name, "META")) { + if (strcmp(a->name, "BUFR")==0 || + strcmp(a->name, "GRIB")==0 || + strcmp(a->name, "META")==0) { depth = 2; fprintf(self->dumper.out, "%-*s", depth, " "); fprintf(self->dumper.out, "[\n"); @@ -551,7 +539,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso depth -= 2; fprintf(self->dumper.out, "\n]\n"); } - else if (!grib_inline_strcmp(a->name, "groupNumber")) { + else if (strcmp(a->name, "groupNumber")==0) { if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) return; if (!self->empty) diff --git a/src/grib_dumper_class_keys.c b/src/grib_dumper_class_keys.c index a9ffb930e..ed979677b 100644 --- a/src/grib_dumper_class_keys.c +++ b/src/grib_dumper_class_keys.c @@ -56,7 +56,7 @@ static void dump_label (grib_dumper* d, grib_accessor* a,const char* commen static void dump_section (grib_dumper* d, grib_accessor* a,grib_block_of_accessors* block); typedef struct grib_dumper_keys { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in keys */ long section_offset; long begin; @@ -189,7 +189,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) #if 0 grib_dumper_keys *self = (grib_dumper_keys*)d; int i,k,err =0; - int more = 0; + size_t more = 0; size_t size = a->length; unsigned char* buf = grib_context_malloc(d->handle->context,size); @@ -250,7 +250,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) if(more) { for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); - fprintf(self->dumper.out,"... %d more values\n",more); + fprintf(self->dumper.out,"... %lu more values\n", (unsigned long)more); } for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); @@ -297,7 +297,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso } *q = '\0'; - /*sprintf(tmp,"%s ",upper,(long)s->length,(long)s->padding);*/ + /*snprintf(tmp,1024,"%s ",upper,(long)s->length,(long)s->padding);*/ fprintf(self->dumper.out, "====> %s <==== \n", upper); diff --git a/src/grib_dumper_class_serialize.c b/src/grib_dumper_class_serialize.c index 7271982cb..bc7424fc9 100644 --- a/src/grib_dumper_class_serialize.c +++ b/src/grib_dumper_class_serialize.c @@ -53,7 +53,7 @@ static void dump_label (grib_dumper* d, grib_accessor* a,const char* commen static void dump_section (grib_dumper* d, grib_accessor* a,grib_block_of_accessors* block); typedef struct grib_dumper_serialize { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in serialize */ char* format; } grib_dumper_serialize; @@ -243,7 +243,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) { grib_dumper_serialize* self = (grib_dumper_serialize*)d; int i, k, err = 0; - int more = 0; + size_t more = 0; size_t size = a->length; unsigned char* buf = (unsigned char*)grib_context_malloc(d->context, size); @@ -262,7 +262,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) if (size == 0) fprintf(self->dumper.out, "}\n"); else - fprintf(self->dumper.out, " *** ERR cannot malloc(%ld) }\n", (long)size); + fprintf(self->dumper.out, " *** ERR cannot malloc(%zu) }\n", size); return; } @@ -297,7 +297,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) if (more) { for (i = 0; i < d->depth + 3; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "... %d more values\n", more); + fprintf(self->dumper.out, "... %lu more values\n", (unsigned long)more); } for (i = 0; i < d->depth; i++) @@ -311,7 +311,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) grib_dumper_serialize* self = (grib_dumper_serialize*)d; int k, err = 0; double* buf = NULL; - int last = 0; + size_t last = 0; int columns = 4; char* values_format = NULL; char* default_format = (char*)"%.16e"; @@ -371,13 +371,13 @@ static void dump_values(grib_dumper* d, grib_accessor* a) buf = (double*)grib_context_malloc(d->context, size * sizeof(double)); - fprintf(self->dumper.out, "%s (%ld) {", a->name, (long)size); + fprintf(self->dumper.out, "%s (%zu) {", a->name, size); if (!buf) { if (size == 0) fprintf(self->dumper.out, "}\n"); else - fprintf(self->dumper.out, " *** ERR cannot malloc(%ld) }\n", (long)size); + fprintf(self->dumper.out, " *** ERR cannot malloc(%zu) }\n", size); return; } diff --git a/src/grib_dumper_class_wmo.c b/src/grib_dumper_class_wmo.c index 89c5d91df..f896d04aa 100644 --- a/src/grib_dumper_class_wmo.c +++ b/src/grib_dumper_class_wmo.c @@ -57,7 +57,7 @@ static void dump_label (grib_dumper* d, grib_accessor* a,const char* commen static void dump_section (grib_dumper* d, grib_accessor* a,grib_block_of_accessors* block); typedef struct grib_dumper_wmo { - grib_dumper dumper; + grib_dumper dumper; /* Members defined in wmo */ long section_offset; long begin; @@ -305,7 +305,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) return; } - _grib_get_string_length(a, &size); + ecc__grib_get_string_length(a, &size); value = (char*)grib_context_malloc_clear(a->context, size); if (!value) { grib_context_log(a->context, GRIB_LOG_FATAL, "unable to allocate %d bytes", (int)size); @@ -344,7 +344,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) { grib_dumper_wmo* self = (grib_dumper_wmo*)d; int i, k, err = 0; - int more = 0; + size_t more = 0; size_t size = a->length; unsigned char* buf = (unsigned char*)grib_context_malloc(d->context, size); @@ -367,7 +367,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) if (size == 0) fprintf(self->dumper.out, "}\n"); else - fprintf(self->dumper.out, " *** ERR cannot malloc(%ld) }\n", (long)size); + fprintf(self->dumper.out, " *** ERR cannot malloc(%zu) }\n", size); return; } @@ -404,7 +404,7 @@ static void dump_bytes(grib_dumper* d, grib_accessor* a, const char* comment) if (more) { for (i = 0; i < d->depth + 3; i++) fprintf(self->dumper.out, " "); - fprintf(self->dumper.out, "... %d more values\n", more); + fprintf(self->dumper.out, "... %lu more values\n", (unsigned long)more); } for (i = 0; i < d->depth; i++) @@ -417,7 +417,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) { grib_dumper_wmo* self = (grib_dumper_wmo*)d; int k, err = 0; - int more = 0; + size_t more = 0; double* buf = NULL; size_t size = 0; long count = 0; @@ -465,7 +465,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) if (size == 0) fprintf(self->dumper.out, "}\n"); else - fprintf(self->dumper.out, " *** ERR cannot malloc(%ld) }\n", (long)size); + fprintf(self->dumper.out, " *** ERR cannot malloc(%zu) }\n", size); return; } @@ -509,7 +509,7 @@ static void dump_values(grib_dumper* d, grib_accessor* a) } if (more) { /*for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," ");*/ - fprintf(self->dumper.out, "... %d more values\n", more); + fprintf(self->dumper.out, "... %lu more values\n", (unsigned long)more); } /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ @@ -548,7 +548,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso p++; } *q = '\0'; - sprintf(tmp, "%s ( length=%ld, padding=%ld )", upper, (long)s->length, (long)s->padding); + snprintf(tmp, sizeof(tmp), "%s ( length=%ld, padding=%ld )", upper, (long)s->length, (long)s->padding); fprintf(self->dumper.out, "====================== %-35s ======================\n", tmp); free(upper); self->section_offset = a->offset; @@ -584,7 +584,7 @@ static void print_offset(FILE* out, long begin, long theEnd) if (begin == theEnd) fprintf(out, "%-10ld", begin); else { - sprintf(tmp, "%ld-%ld", begin, theEnd); + snprintf(tmp, sizeof(tmp), "%ld-%ld", begin, theEnd); fprintf(out, "%-10s", tmp); } } diff --git a/src/grib_errors.c b/src/grib_errors.c index 62dfbc8e8..a057694a7 100644 --- a/src/grib_errors.c +++ b/src/grib_errors.c @@ -1,5 +1,14 @@ /* This file is automatically generated by ./errors.pl, do not edit */ +/* + * (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" static const char *errors[] = { @@ -93,7 +102,7 @@ const char* grib_get_error_message(int code) code = -code; if (code < 0 || code >= NUMBER(errors)) { static char mess[64]; - sprintf(mess,"Unknown error %d",code); + snprintf(mess, sizeof(mess), "Unknown error %d", code); return mess; } return errors[code]; diff --git a/src/grib_errors.c.in b/src/grib_errors.c.in index 0fdd6ac97..4e826bb8b 100644 --- a/src/grib_errors.c.in +++ b/src/grib_errors.c.in @@ -1,5 +1,14 @@ /* This file is automatically generated by ./errors.pl, do not edit */ +/* + * (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" static const char *errors[] = { @@ -13,7 +22,7 @@ const char* grib_get_error_message(int code) code = -code; if (code < 0 || code >= NUMBER(errors)) { static char mess[64]; - sprintf(mess,"Unknown error %d",code); + snprintf(mess, sizeof(mess), "Unknown error %d", code); return mess; } return errors[code]; diff --git a/src/grib_expression_class_accessor.c b/src/grib_expression_class_accessor.c index 8e8934df2..f6ea5f1a4 100644 --- a/src/grib_expression_class_accessor.c +++ b/src/grib_expression_class_accessor.c @@ -73,8 +73,8 @@ static grib_expression_class _grib_expression_class_accessor = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, &get_name, diff --git a/src/grib_expression_class_binop.c b/src/grib_expression_class_binop.c index 965c48b9a..b87947017 100644 --- a/src/grib_expression_class_binop.c +++ b/src/grib_expression_class_binop.c @@ -73,8 +73,8 @@ static grib_expression_class _grib_expression_class_binop = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, 0, diff --git a/src/grib_expression_class_column.c b/src/grib_expression_class_column.c index 421518d67..6f92b8b25 100644 --- a/src/grib_expression_class_column.c +++ b/src/grib_expression_class_column.c @@ -70,8 +70,8 @@ static grib_expression_class _grib_expression_class_column = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - 0, - 0, + 0, + 0, &native_type, &get_name, diff --git a/src/grib_expression_class_constant.c b/src/grib_expression_class_constant.c index 542d30e94..24fa871a4 100644 --- a/src/grib_expression_class_constant.c +++ b/src/grib_expression_class_constant.c @@ -15,7 +15,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -66,8 +66,8 @@ static grib_expression_class _grib_expression_class_constant = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, 0, diff --git a/src/grib_expression_class_double.c b/src/grib_expression_class_double.c index 921339ed8..b123dc1c3 100644 --- a/src/grib_expression_class_double.c +++ b/src/grib_expression_class_double.c @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -65,8 +65,8 @@ static grib_expression_class _grib_expression_class_double = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, 0, diff --git a/src/grib_expression_class_functor.c b/src/grib_expression_class_functor.c index 572e33b3f..8a36b68c9 100644 --- a/src/grib_expression_class_functor.c +++ b/src/grib_expression_class_functor.c @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -65,8 +65,8 @@ static grib_expression_class _grib_expression_class_functor = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, 0, diff --git a/src/grib_expression_class_is_in_dict.c b/src/grib_expression_class_is_in_dict.c index 0faf4ead9..d28759d95 100644 --- a/src/grib_expression_class_is_in_dict.c +++ b/src/grib_expression_class_is_in_dict.c @@ -69,8 +69,8 @@ static grib_expression_class _grib_expression_class_is_in_dict = { &init_class, /* init_class */ 0, /* constructor */ 0, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, &get_name, @@ -211,7 +211,7 @@ static string evaluate_string(grib_expression* g, grib_handle* h, char* buf, siz else result = 0; - sprintf(buf, "%ld", result); + snprintf(buf, 32, "%ld", result); *size = strlen(buf); return buf; } diff --git a/src/grib_expression_class_is_in_list.c b/src/grib_expression_class_is_in_list.c index a469b4cf5..24ebb57f8 100644 --- a/src/grib_expression_class_is_in_list.c +++ b/src/grib_expression_class_is_in_list.c @@ -71,8 +71,8 @@ static grib_expression_class _grib_expression_class_is_in_list = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, &get_name, @@ -210,7 +210,7 @@ static string evaluate_string(grib_expression* g, grib_handle* h, char* buf, siz else result = 0; - sprintf(buf, "%ld", result); + snprintf(buf, 32, "%ld", result); *size = strlen(buf); return buf; } diff --git a/src/grib_expression_class_is_integer.c b/src/grib_expression_class_is_integer.c index 6c97a96b2..f170f6d44 100644 --- a/src/grib_expression_class_is_integer.c +++ b/src/grib_expression_class_is_integer.c @@ -73,8 +73,8 @@ static grib_expression_class _grib_expression_class_is_integer = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, &get_name, @@ -145,11 +145,11 @@ static string evaluate_string(grib_expression* g, grib_handle* h, char* buf, siz switch (grib_expression_native_type(h, g)) { case GRIB_TYPE_LONG: *err = evaluate_long(g, h, &lresult); - sprintf(buf, "%ld", lresult); + snprintf(buf, 32, "%ld", lresult); break; case GRIB_TYPE_DOUBLE: *err = evaluate_double(g, h, &dresult); - sprintf(buf, "%g", dresult); + snprintf(buf, 32, "%g", dresult); break; } return buf; diff --git a/src/grib_expression_class_length.c b/src/grib_expression_class_length.c index a50daa2f6..e64d3c0eb 100644 --- a/src/grib_expression_class_length.c +++ b/src/grib_expression_class_length.c @@ -73,8 +73,8 @@ static grib_expression_class _grib_expression_class_length = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, &get_name, @@ -132,7 +132,7 @@ static string evaluate_string(grib_expression* g, grib_handle* h, char* buf, siz if ((*err = grib_get_string_internal(h, e->name, mybuf, size)) != GRIB_SUCCESS) return NULL; - sprintf(buf, "%ld", (long)strlen(mybuf)); + snprintf(buf, 32, "%ld", (long)strlen(mybuf)); return buf; } diff --git a/src/grib_expression_class_logical_and.c b/src/grib_expression_class_logical_and.c index bb20705dc..ee03656d2 100644 --- a/src/grib_expression_class_logical_and.c +++ b/src/grib_expression_class_logical_and.c @@ -68,8 +68,8 @@ static grib_expression_class _grib_expression_class_logical_and = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, 0, diff --git a/src/grib_expression_class_logical_or.c b/src/grib_expression_class_logical_or.c index 9d67e5d18..e83100d3b 100644 --- a/src/grib_expression_class_logical_or.c +++ b/src/grib_expression_class_logical_or.c @@ -68,8 +68,8 @@ static grib_expression_class _grib_expression_class_logical_or = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, 0, diff --git a/src/grib_expression_class_long.c b/src/grib_expression_class_long.c index dc59c8e17..9e5fd585a 100644 --- a/src/grib_expression_class_long.c +++ b/src/grib_expression_class_long.c @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -65,8 +65,8 @@ static grib_expression_class _grib_expression_class_long = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, 0, diff --git a/src/grib_expression_class_string.c b/src/grib_expression_class_string.c index 73ca19ccf..f36d23dbe 100644 --- a/src/grib_expression_class_string.c +++ b/src/grib_expression_class_string.c @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -63,8 +63,8 @@ static grib_expression_class _grib_expression_class_string = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, 0, diff --git a/src/grib_expression_class_string_compare.c b/src/grib_expression_class_string_compare.c index 9d15cab96..1686ca0ba 100644 --- a/src/grib_expression_class_string_compare.c +++ b/src/grib_expression_class_string_compare.c @@ -67,8 +67,8 @@ static grib_expression_class _grib_expression_class_string_compare = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, 0, diff --git a/src/grib_expression_class_sub_string.c b/src/grib_expression_class_sub_string.c index 9f3dd695c..3d7fa5507 100644 --- a/src/grib_expression_class_sub_string.c +++ b/src/grib_expression_class_sub_string.c @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -63,8 +63,8 @@ static grib_expression_class _grib_expression_class_sub_string = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, 0, diff --git a/src/grib_expression_class_true.c b/src/grib_expression_class_true.c index 1895b55b5..ec702322a 100644 --- a/src/grib_expression_class_true.c +++ b/src/grib_expression_class_true.c @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -63,8 +63,8 @@ static grib_expression_class _grib_expression_class_true = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, 0, diff --git a/src/grib_expression_class_unop.c b/src/grib_expression_class_unop.c index 75aeb0cab..619cb3564 100644 --- a/src/grib_expression_class_unop.c +++ b/src/grib_expression_class_unop.c @@ -10,7 +10,7 @@ #include "grib_api_internal.h" -/* +/* This is used by make_class.pl START_CLASS_DEF @@ -69,8 +69,8 @@ static grib_expression_class _grib_expression_class_unop = { &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ - &print, - &add_dependency, + &print, + &add_dependency, &native_type, 0, diff --git a/src/grib_fieldset.c b/src/grib_fieldset.c index 1c84e564c..5c104405e 100644 --- a/src/grib_fieldset.c +++ b/src/grib_fieldset.c @@ -562,6 +562,7 @@ static grib_order_by* grib_fieldset_new_order_by(grib_context* c, const char* ob char *t1 = 0, *t2 = 0, *p = 0; int id = 0; char* z = NULL; + char* lasts = NULL; int mode, mode_default = GRIB_ORDER_BY_ASC; grib_order_by *ob, *sob; @@ -584,7 +585,7 @@ static grib_order_by* grib_fieldset_new_order_by(grib_context* c, const char* ob ob->mode = 0; ob->next = 0; - t1 = strtok(z, ","); + t1 = strtok_r(z, ",", &lasts); while (t1) { grib_trim(&t1); @@ -609,7 +610,7 @@ static grib_order_by* grib_fieldset_new_order_by(grib_context* c, const char* ob } grib_trim(&t2); id = -1; - t1 = strtok(NULL, ","); + t1 = strtok_r(NULL, ",", &lasts); if (ob->key) { ob->next = (grib_order_by*)grib_context_malloc_clear(c, sizeof(grib_order_by)); diff --git a/src/grib_gaussian_reduced.c b/src/grib_gaussian_reduced.c index 7d9aeac75..12f616c02 100644 --- a/src/grib_gaussian_reduced.c +++ b/src/grib_gaussian_reduced.c @@ -314,7 +314,7 @@ void grib_get_reduced_row_wrapper(grib_handle* h, long pl, double lon_first, dou { grib_get_reduced_row(pl, lon_first, lon_last, npoints, ilon_first, ilon_last); - /* Legacy + /* Legacy * grib_get_reduced_row1(pl, lon_first, lon_last, npoints, ilon_first, ilon_last); */ } diff --git a/src/grib_geography.c b/src/grib_geography.c index 4d76b0b72..5afbec4a8 100644 --- a/src/grib_geography.c +++ b/src/grib_geography.c @@ -3953,7 +3953,7 @@ static int get_precomputed_latitudes_N640(double* lats) /* '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 _grib_get_gaussian_latitudes(long trunc, double* lats) +static int ecc_grib_get_gaussian_latitudes(long trunc, double* lats) { long jlat, iter, legi; double rad2deg, convval, root, legfonc = 0; @@ -4015,7 +4015,7 @@ int grib_get_gaussian_latitudes(long trunc, double* lats) if (trunc == 640) return get_precomputed_latitudes_N640(lats); else - return _grib_get_gaussian_latitudes(trunc, lats); + return ecc_grib_get_gaussian_latitudes(trunc, lats); } /* Boolean return type: 1 if the reduced gaussian field is global, 0 for sub area */ diff --git a/src/grib_handle.c b/src/grib_handle.c index 84c152cc5..2b152d846 100644 --- a/src/grib_handle.c +++ b/src/grib_handle.c @@ -1398,7 +1398,7 @@ int grib_get_message(const grib_handle* ch, const void** msg, size_t* size) if (h->context->gts_header_on && h->gts_header) { char strbuf[10]; - sprintf(strbuf, "%.8d", (int)(h->buffer->ulength + h->gts_header_len - 6)); + snprintf(strbuf, sizeof(strbuf), "%.8d", (int)(h->buffer->ulength + h->gts_header_len - 6)); memcpy(h->gts_header, strbuf, 8); } return 0; diff --git a/src/grib_hash_keys.c b/src/grib_hash_keys.c index 3f34648aa..a8ab85ef1 100644 --- a/src/grib_hash_keys.c +++ b/src/grib_hash_keys.c @@ -49,7 +49,7 @@ inline #endif #endif static unsigned int -hash_keys (register const char *str, register size_t len) +hash_keys (const char *str, size_t len) { static const unsigned short asso_values[] = { @@ -80,7 +80,7 @@ hash_keys (register const char *str, register size_t len) 32423, 32423, 32423, 32423, 32423, 32423, 32423, 32423, 32423, 32423, 32423, 32423, 32423, 32423, 32423, 32423, 32423, 32423, 32423 }; - register unsigned int hval = len; + unsigned int hval = len; switch (hval) { @@ -9396,21 +9396,21 @@ static const struct grib_keys_hash wordlist[] = }; const struct grib_keys_hash * -grib_keys_hash_get (register const char *str, register size_t len) +grib_keys_hash_get (const char *str, size_t len) { if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) - { - register unsigned int key = hash_keys (str, len); + { + unsigned int key = hash_keys (str, len); if (key <= MAX_HASH_VALUE) if (len == lengthtable[key]) { - register const char *s = wordlist[key].name; + const char *s = wordlist[key].name; if (*str == *s && !memcmp (str + 1, s + 1, len - 1)) return &wordlist[key]; } - } + } return 0; } /* diff --git a/src/grib_iarray.c b/src/grib_iarray.c index 14ff45120..39f1439e1 100644 --- a/src/grib_iarray.c +++ b/src/grib_iarray.c @@ -9,9 +9,7 @@ */ /*************************************************************************** - * * Enrico Fucile - * ***************************************************************************/ #include "grib_api_internal.h" @@ -21,9 +19,9 @@ void grib_iarray_print(const char* title, const grib_iarray* iarray) { size_t i; Assert(iarray); - printf("%s: iarray.n=%lu \t", title, (unsigned long)iarray->n); + printf("%s: iarray.n=%zu \t", title, iarray->n); for (i = 0; i < iarray->n; i++) { - printf("iarray[%lu]=%ld\t", (unsigned long)i, iarray->v[i]); + printf("iarray[%zu]=%ld\t", i, iarray->v[i]); } printf("\n"); } @@ -57,7 +55,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 %ld bytes\n", sizeof(grib_iarray)); + "grib_iarray_new unable to allocate %lu bytes\n", sizeof(grib_iarray)); return NULL; } v->context = c; @@ -68,7 +66,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 %ld bytes\n", sizeof(long) * size); + "grib_iarray_new unable to allocate %lu bytes\n", sizeof(long) * size); return NULL; } return v; @@ -109,7 +107,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 %ld bytes\n", sizeof(long) * newsize); + "grib_iarray_resize unable to allocate %lu bytes\n", sizeof(long) * newsize); return NULL; } @@ -152,7 +150,7 @@ grib_iarray* grib_iarray_push_front(grib_iarray* v, long val) { size_t start_size = 100; size_t start_incsize = 100; - int i; + size_t i; if (!v) v = grib_iarray_new(0, start_size, start_incsize); diff --git a/src/grib_index.c b/src/grib_index.c index 21197f105..a31435424 100644 --- a/src/grib_index.c +++ b/src/grib_index.c @@ -1012,21 +1012,21 @@ int grib_index_search_same(grib_index* index, grib_handle* h) case GRIB_TYPE_STRING: err = grib_get_string(h, keys->name, buf, &buflen); if (err == GRIB_NOT_FOUND) - sprintf(buf, GRIB_KEY_UNDEF); + snprintf(buf, sizeof(buf), GRIB_KEY_UNDEF); break; case GRIB_TYPE_LONG: err = grib_get_long(h, keys->name, &lval); if (err == GRIB_NOT_FOUND) - sprintf(buf, GRIB_KEY_UNDEF); + snprintf(buf, sizeof(buf), GRIB_KEY_UNDEF); else - sprintf(buf, "%ld", lval); + snprintf(buf, sizeof(buf), "%ld", lval); break; case GRIB_TYPE_DOUBLE: err = grib_get_double(h, keys->name, &dval); if (err == GRIB_NOT_FOUND) - sprintf(buf, GRIB_KEY_UNDEF); + snprintf(buf, sizeof(buf), GRIB_KEY_UNDEF); else - sprintf(buf, "%g", dval); + snprintf(buf, sizeof(buf), "%g", dval); break; default: err = GRIB_WRONG_TYPE; @@ -1038,7 +1038,7 @@ int grib_index_search_same(grib_index* index, grib_handle* h) keys->name, grib_get_error_message(err)); return err; } - sprintf(keys->value, "%s", buf); + snprintf(keys->value, sizeof(buf), "%s", buf); keys = keys->next; } grib_index_rewind(index); @@ -1052,7 +1052,7 @@ int grib_index_add_file(grib_index* index, const char* filename) else if (index->product_kind == PRODUCT_BUFR) message_type = CODES_BUFR; else return GRIB_INVALID_ARGUMENT; - return _codes_index_add_file(index, filename, message_type); + return ecc__codes_index_add_file(index, filename, message_type); } static grib_handle* new_message_from_file(int message_type, grib_context* c, FILE* f, int* error) @@ -1067,7 +1067,7 @@ static grib_handle* new_message_from_file(int message_type, grib_context* c, FIL #define MAX_NUM_KEYS 40 -int _codes_index_add_file(grib_index* index, const char* filename, int message_type) +int ecc__codes_index_add_file(grib_index* index, const char* filename, int message_type) { double dval; size_t svallen; @@ -1166,21 +1166,21 @@ int _codes_index_add_file(grib_index* index, const char* filename, int message_t case GRIB_TYPE_STRING: err = grib_get_string(h, index_key->name, buf, &svallen); if (err == GRIB_NOT_FOUND) - sprintf(buf, GRIB_KEY_UNDEF); + snprintf(buf, sizeof(buf), GRIB_KEY_UNDEF); break; case GRIB_TYPE_LONG: err = grib_get_long(h, index_key->name, &lval); if (err == GRIB_NOT_FOUND) - sprintf(buf, GRIB_KEY_UNDEF); + snprintf(buf, sizeof(buf), GRIB_KEY_UNDEF); else - sprintf(buf, "%ld", lval); + snprintf(buf, sizeof(buf), "%ld", lval); break; case GRIB_TYPE_DOUBLE: err = grib_get_double(h, index_key->name, &dval); if (err == GRIB_NOT_FOUND) - sprintf(buf, GRIB_KEY_UNDEF); + snprintf(buf, sizeof(buf), GRIB_KEY_UNDEF); else - sprintf(buf, "%g", dval); + snprintf(buf, sizeof(buf), "%g", dval); break; default: err = GRIB_WRONG_TYPE; @@ -1344,17 +1344,17 @@ int grib_index_add_file(grib_index* index, const char* filename) switch (index_key->type) { case GRIB_TYPE_STRING: err=grib_get_string(h,index_key->name,buf,&svallen); - if (err==GRIB_NOT_FOUND) sprintf(buf,GRIB_KEY_UNDEF); + if (err==GRIB_NOT_FOUND) snprintf(buf,1024,GRIB_KEY_UNDEF); break; case GRIB_TYPE_LONG: err=grib_get_long(h,index_key->name,&lval); - if (err==GRIB_NOT_FOUND) sprintf(buf,GRIB_KEY_UNDEF); - else sprintf(buf,"%ld",lval); + if (err==GRIB_NOT_FOUND) snprintf(buf,1024,GRIB_KEY_UNDEF); + else snprintf(buf,1024,"%ld",lval); break; case GRIB_TYPE_DOUBLE: err=grib_get_double(h,index_key->name,&dval); - if (err==GRIB_NOT_FOUND) sprintf(buf,GRIB_KEY_UNDEF); - else sprintf(buf,"%g",dval); + if (err==GRIB_NOT_FOUND) snprintf(buf,1024,GRIB_KEY_UNDEF); + else snprintf(buf,1024,"%g",dval); break; default : err=GRIB_WRONG_TYPE; @@ -1573,7 +1573,7 @@ int grib_index_select_long(grib_index* index, const char* skey, long value) return err; } Assert(key); - sprintf(key->value, "%ld", value); + snprintf(key->value, sizeof(key->value), "%ld", value); grib_index_rewind(index); return 0; } @@ -1605,7 +1605,7 @@ int grib_index_select_double(grib_index* index, const char* skey, double value) return err; } Assert(key); - sprintf(key->value, "%g", value); + snprintf(key->value, sizeof(key->value), "%g", value); grib_index_rewind(index); return 0; } @@ -1637,7 +1637,7 @@ int grib_index_select_string(grib_index* index, const char* skey, const char* va return err; } Assert(key); - sprintf(key->value, "%s", value); + snprintf(key->value, sizeof(key->value), "%s", value); grib_index_rewind(index); return 0; } @@ -1961,7 +1961,7 @@ int grib_index_search(grib_index* index, grib_index_key* keys) ki = search_key(ki, ks); } if (ki) - sprintf(ki->value, "%s", ks->value); + snprintf(ki->value, 1024, "%s", ks->value); ks = ks->next; } diff --git a/src/grib_io.c b/src/grib_io.c index 6c82c7319..c2c7196c0 100644 --- a/src/grib_io.c +++ b/src/grib_io.c @@ -111,7 +111,7 @@ static int read_the_rest(reader* r, size_t message_length, unsigned char* tmp, i if ((r->read(r->read_data, buffer + already_read, rest, &err) != rest) || err) { /*fprintf(stderr, "read_the_rest: r->read failed: %s\n", grib_get_error_message(err));*/ if (c->debug) - fprintf(stderr, "ECCODES DEBUG read_the_rest: Read failed (Coded length=%lu, Already read=%d)\n", + fprintf(stderr, "ECCODES DEBUG read_the_rest: Read failed (Coded length=%zu, Already read=%d)\n", message_length, already_read); return err; } @@ -123,7 +123,7 @@ static int read_the_rest(reader* r, size_t message_length, unsigned char* tmp, i buffer[message_length - 1] != '7')) { if (c->debug) - fprintf(stderr, "ECCODES DEBUG read_the_rest: No final 7777 at expected location (Coded length=%lu)\n", message_length); + fprintf(stderr, "ECCODES DEBUG read_the_rest: No final 7777 at expected location (Coded length=%zu)\n", message_length); return GRIB_WRONG_LENGTH; } @@ -261,7 +261,7 @@ static int read_GRIB(reader* r) total_length = length; /* length=8+sec1len + sec2len+sec3len+11; */ length = i; - err = r->seek(r->read_data, total_length - length - 1); + r->seek(r->read_data, total_length - length - 1); } else if (length & 0x800000) { /* Large GRIBs */ @@ -501,7 +501,7 @@ static int read_HDF5_offset(reader* r, int length, unsigned long* v, unsigned ch static int read_HDF5(reader* r) { - /* + /* * See: http://www.hdfgroup.org/HDF5/doc/H5.format.html#Superblock */ unsigned char tmp[49]; /* Should be enough */ @@ -848,7 +848,7 @@ static int read_BUFR(reader* r) return err; } -static int _read_any(reader* r, int grib_ok, int bufr_ok, int hdf5_ok, int wrap_ok) +static int ecc_read_any(reader* r, int grib_ok, int bufr_ok, int hdf5_ok, int wrap_ok) { unsigned char c; int err = 0; @@ -924,7 +924,7 @@ static int read_any(reader* r, int grib_ok, int bufr_ok, int hdf5_ok, int wrap_o GRIB_MUTEX_LOCK(&mutex1); #endif - result = _read_any(r, grib_ok, bufr_ok, hdf5_ok, wrap_ok); + result = ecc_read_any(r, grib_ok, bufr_ok, hdf5_ok, wrap_ok); #ifndef ECCODES_EACH_THREAD_OWN_FILE GRIB_MUTEX_UNLOCK(&mutex1); @@ -1154,7 +1154,7 @@ static void* user_provider_buffer(void* data, size_t* length, int* err) return u->user_buffer; } -static int _wmo_read_any_from_file(FILE* f, void* buffer, size_t* len, int grib_ok, int bufr_ok, int hdf5_ok, int wrap_ok) +static int ecc_wmo_read_any_from_file(FILE* f, void* buffer, size_t* len, int grib_ok, int bufr_ok, int hdf5_ok, int wrap_ok) { int err; user_buffer_t u; @@ -1163,15 +1163,16 @@ static int _wmo_read_any_from_file(FILE* f, void* buffer, size_t* len, int grib_ u.user_buffer = buffer; u.buffer_size = *len; - r.message_size = 0; r.read_data = f; r.read = &stdio_read; - r.seek = &stdio_seek; - r.seek_from_start = &stdio_seek_from_start; - r.tell = &stdio_tell; r.alloc_data = &u; r.alloc = &user_provider_buffer; r.headers_only = 0; + r.seek = &stdio_seek; + r.seek_from_start = &stdio_seek_from_start; + r.tell = &stdio_tell; + r.offset = 0; + r.message_size = 0; err = read_any(&r, grib_ok, bufr_ok, hdf5_ok, wrap_ok); *len = r.message_size; @@ -1181,17 +1182,17 @@ static int _wmo_read_any_from_file(FILE* f, void* buffer, size_t* len, int grib_ int wmo_read_any_from_file(FILE* f, void* buffer, size_t* len) { - return _wmo_read_any_from_file(f, buffer, len, 1, 1, 1, 1); + return ecc_wmo_read_any_from_file(f, buffer, len, 1, 1, 1, 1); } int wmo_read_grib_from_file(FILE* f, void* buffer, size_t* len) { - return _wmo_read_any_from_file(f, buffer, len, 1, 0, 0, 0); + return ecc_wmo_read_any_from_file(f, buffer, len, 1, 0, 0, 0); } int wmo_read_bufr_from_file(FILE* f, void* buffer, size_t* len) { - return _wmo_read_any_from_file(f, buffer, len, 0, 1, 0, 0); + return ecc_wmo_read_any_from_file(f, buffer, len, 0, 1, 0, 0); } int wmo_read_gts_from_file(FILE* f, void* buffer, size_t* len) @@ -1203,15 +1204,16 @@ int wmo_read_gts_from_file(FILE* f, void* buffer, size_t* len) u.user_buffer = buffer; u.buffer_size = *len; - r.message_size = 0; r.read_data = f; r.read = &stdio_read; - r.seek = &stdio_seek; - r.seek_from_start = &stdio_seek_from_start; - r.tell = &stdio_tell; r.alloc_data = &u; r.alloc = &user_provider_buffer; r.headers_only = 0; + r.seek = &stdio_seek; + r.seek_from_start = &stdio_seek_from_start; + r.tell = &stdio_tell; + r.offset = 0; + r.message_size = 0; err = read_any_gts(&r); *len = r.message_size; @@ -1230,12 +1232,14 @@ int wmo_read_taf_from_file(FILE* f, void* buffer, size_t* len) r.read_data = f; r.read = &stdio_read; - r.seek = &stdio_seek; - r.seek_from_start = &stdio_seek_from_start; - r.tell = &stdio_tell; r.alloc_data = &u; r.alloc = &user_provider_buffer; r.headers_only = 0; + r.seek = &stdio_seek; + r.seek_from_start = &stdio_seek_from_start; + r.tell = &stdio_tell; + r.offset = 0; + r.message_size = 0; err = read_any_taf(&r); *len = r.message_size; @@ -1254,12 +1258,14 @@ int wmo_read_metar_from_file(FILE* f, void* buffer, size_t* len) r.read_data = f; r.read = &stdio_read; - r.seek = &stdio_seek; - r.seek_from_start = &stdio_seek_from_start; - r.tell = &stdio_tell; r.alloc_data = &u; r.alloc = &user_provider_buffer; r.headers_only = 0; + r.seek = &stdio_seek; + r.seek_from_start = &stdio_seek_from_start; + r.tell = &stdio_tell; + r.offset = 0; + r.message_size = 0; err = read_any_metar(&r); *len = r.message_size; @@ -1413,16 +1419,16 @@ void* wmo_read_taf_from_file_malloc(FILE* f, int headers_only, size_t* size, off u.buffer = NULL; - r.offset = 0; - r.message_size = 0; r.read_data = f; r.read = &stdio_read; - r.seek = &stdio_seek; - r.seek_from_start = &stdio_seek_from_start; - r.tell = &stdio_tell; r.alloc_data = &u; r.alloc = &allocate_buffer; r.headers_only = headers_only; + r.seek = &stdio_seek; + r.seek_from_start = &stdio_seek_from_start; + r.tell = &stdio_tell; + r.offset = 0; + r.message_size = 0; *err = read_any_taf(&r); *size = r.message_size; @@ -1439,16 +1445,16 @@ void* wmo_read_metar_from_file_malloc(FILE* f, int headers_only, size_t* size, o u.buffer = NULL; - r.message_size = 0; r.read_data = f; - r.offset = 0; r.read = &stdio_read; - r.seek = &stdio_seek; - r.seek_from_start = &stdio_seek_from_start; - r.tell = &stdio_tell; r.alloc_data = &u; r.alloc = &allocate_buffer; r.headers_only = headers_only; + r.seek = &stdio_seek; + r.seek_from_start = &stdio_seek_from_start; + r.tell = &stdio_tell; + r.offset = 0; + r.message_size = 0; *err = read_any_metar(&r); *size = r.message_size; @@ -1458,7 +1464,7 @@ void* wmo_read_metar_from_file_malloc(FILE* f, int headers_only, size_t* size, o } /* This function allocates memory for the result so the user is responsible for freeing it */ -static void* _wmo_read_any_from_file_malloc(FILE* f, int* err, size_t* size, off_t* offset, +static void* ecc_wmo_read_any_from_file_malloc(FILE* f, int* err, size_t* size, off_t* offset, int grib_ok, int bufr_ok, int hdf5_ok, int wrap_ok, int headers_only) { alloc_buffer u; @@ -1489,17 +1495,17 @@ static void* _wmo_read_any_from_file_malloc(FILE* f, int* err, size_t* size, off /* This function allocates memory for the result so the user is responsible for freeing it */ void* wmo_read_any_from_file_malloc(FILE* f, int headers_only, size_t* size, off_t* offset, int* err) { - return _wmo_read_any_from_file_malloc(f, err, size, offset, 1, 1, 1, 1, headers_only); + return ecc_wmo_read_any_from_file_malloc(f, err, size, offset, 1, 1, 1, 1, headers_only); } /* This function allocates memory for the result so the user is responsible for freeing it */ void* wmo_read_grib_from_file_malloc(FILE* f, int headers_only, size_t* size, off_t* offset, int* err) { - return _wmo_read_any_from_file_malloc(f, err, size, offset, 1, 0, 0, 0, headers_only); + return ecc_wmo_read_any_from_file_malloc(f, err, size, offset, 1, 0, 0, 0, headers_only); } /* This function allocates memory for the result so the user is responsible for freeing it */ void* wmo_read_bufr_from_file_malloc(FILE* f, int headers_only, size_t* size, off_t* offset, int* err) { - return _wmo_read_any_from_file_malloc(f, err, size, offset, 0, 1, 0, 0, headers_only); + return ecc_wmo_read_any_from_file_malloc(f, err, size, offset, 0, 1, 0, 0, headers_only); } /* ======================================= */ @@ -1531,15 +1537,16 @@ int grib_read_any_headers_only_from_file(grib_context* ctx, FILE* f, void* buffe u.user_buffer = buffer; u.buffer_size = *len; - r.message_size = 0; r.read_data = f; r.read = &stdio_read; - r.seek = &stdio_seek; - r.seek_from_start = &stdio_seek_from_start; - r.tell = &stdio_tell; r.alloc_data = &u; r.alloc = &user_provider_buffer; r.headers_only = 1; + r.seek = &stdio_seek; + r.seek_from_start = &stdio_seek_from_start; + r.tell = &stdio_tell; + r.offset = 0; + r.message_size = 0; err = read_any(&r, 1, ECCODES_READS_BUFR, ECCODES_READS_HDF5, ECCODES_READS_WRAP); @@ -1558,15 +1565,16 @@ int grib_read_any_from_file(grib_context* ctx, FILE* f, void* buffer, size_t* le u.user_buffer = buffer; u.buffer_size = *len; - r.message_size = 0; r.read_data = f; r.read = &stdio_read; - r.seek = &stdio_seek; - r.seek_from_start = &stdio_seek_from_start; - r.tell = &stdio_tell; r.alloc_data = &u; r.alloc = &user_provider_buffer; r.headers_only = 0; + r.seek = &stdio_seek; + r.seek_from_start = &stdio_seek_from_start; + r.tell = &stdio_tell; + r.offset = 0; + r.message_size = 0; offset = ftello(f); @@ -1630,15 +1638,16 @@ int grib_read_any_from_memory_alloc(grib_context* ctx, unsigned char** data, siz u.length = 0; u.ctx = ctx ? ctx : grib_context_get_default(); - r.message_size = 0; r.read_data = &m; r.read = &memory_read; - r.seek = &memory_seek; - r.seek_from_start = &memory_seek; - r.tell = &memory_tell; r.alloc_data = &u; r.alloc = &context_allocate_buffer; r.headers_only = 0; + r.seek = &memory_seek; + r.seek_from_start = &memory_seek; + r.tell = &memory_tell; + r.offset = 0; + r.message_size = 0; err = read_any(&r, 1, ECCODES_READS_BUFR, ECCODES_READS_HDF5, ECCODES_READS_WRAP); *buffer = u.buffer; @@ -1663,15 +1672,16 @@ int grib_read_any_from_memory(grib_context* ctx, unsigned char** data, size_t* d u.user_buffer = buffer; u.buffer_size = *len; - r.message_size = 0; r.read_data = &m; r.read = &memory_read; - r.seek = &memory_seek; - r.seek_from_start = &memory_seek; - r.tell = &memory_tell; r.alloc_data = &u; r.alloc = &user_provider_buffer; r.headers_only = 0; + r.seek = &memory_seek; + r.seek_from_start = &memory_seek; + r.tell = &memory_tell; + r.offset = 0; + r.message_size = 0; err = read_any(&r, 1, ECCODES_READS_BUFR, ECCODES_READS_HDF5, ECCODES_READS_WRAP); *len = r.message_size; diff --git a/src/grib_iterator_class_gaussian.c b/src/grib_iterator_class_gaussian.c index 163e8839d..11b9d6641 100644 --- a/src/grib_iterator_class_gaussian.c +++ b/src/grib_iterator_class_gaussian.c @@ -11,7 +11,6 @@ * Enrico Fucile **************************************/ - #include "grib_api_internal.h" #include @@ -37,15 +36,13 @@ 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 void init_class (grib_iterator_class*); +static int init (grib_iterator* i,grib_handle*,grib_arguments*); typedef struct grib_iterator_gaussian{ grib_iterator it; /* Members defined in gen */ - long carg; + int carg; const char* missingValue; /* Members defined in regular */ double *las; @@ -83,14 +80,14 @@ grib_iterator_class* grib_iterator_class_gaussian = &_grib_iterator_class_gaussi static void init_class(grib_iterator_class* c) { - c->next = (*(c->super))->next; - c->previous = (*(c->super))->previous; - c->reset = (*(c->super))->reset; - c->has_next = (*(c->super))->has_next; + c->next = (*(c->super))->next; + c->previous = (*(c->super))->previous; + c->reset = (*(c->super))->reset; + c->has_next = (*(c->super))->has_next; } /* END_CLASS_IMP */ -static void binary_search(const double xx[], const unsigned long n, double x, unsigned long* j); +static void binary_search_gaussian_latitudes(const double xx[], const unsigned long n, double x, long* j); static int init(grib_iterator* i, grib_handle* h, grib_arguments* args) { @@ -100,12 +97,12 @@ static int init(grib_iterator* i, grib_handle* h, grib_arguments* args) double laf; /* latitude of first point in degrees */ double lal; /* latitude of last point in degrees */ long trunc; /* number of parallels between a pole and the equator */ - long lai; + long lai = 0; long jScansPositively = 0; - int size; + int size = 0; double start; - unsigned long istart = 0; - int ret = GRIB_SUCCESS; + long istart = 0; + int ret = GRIB_SUCCESS; const char* latofirst = grib_arguments_get_name(h, args, self->carg++); const char* latoflast = grib_arguments_get_name(h, args, self->carg++); @@ -134,20 +131,24 @@ static int init(grib_iterator* i, grib_handle* h, grib_arguments* args) return ret; } /* - for(loi=(trunc*2)-1;loi>=0;loi--) - if(fabs(lats[loi] - lal) < glatPrecision) break; - for(j=(trunc*2)-1;j>0;j--) { - if(fabs(lats[j] - laf) < glatPrecision) break; - } + for(loi=(trunc*2)-1;loi>=0;loi--) + if(fabs(lats[loi] - lal) < glatPrecision) break; + for(j=(trunc*2)-1;j>0;j--) { + if(fabs(lats[j] - laf) < glatPrecision) break; + } */ - binary_search(lats, size - 1, start, &istart); - Assert(istart < size); + binary_search_gaussian_latitudes(lats, size-1, start, &istart); + if (istart < 0 || istart >= size) { + grib_context_log(h->context, GRIB_LOG_ERROR, "Failed to find index for latitude=%g", start); + return GRIB_GEOCALCULUS_PROBLEM; + } if (jScansPositively) { for (lai = 0; lai < self->Nj; lai++) { + DebugAssert(istart >= 0); self->las[lai] = lats[istart--]; - /*if (istart<0) istart=size-1; this condition is always FALSE -- 'istart' is unsigned long */ + if (istart<0) istart=size-1; } } else { @@ -163,14 +164,47 @@ static int init(grib_iterator* i, grib_handle* h, grib_arguments* args) return ret; } -static void binary_search(const double xx[], const unsigned long n, double x, unsigned long* j) +#define EPSILON 1e-3 +/* Note: the argument 'n' is NOT the size of the 'xx' array but its LAST index i.e. size of xx - 1 */ +static void binary_search_gaussian_latitudes(const double array[], const unsigned long n, double x, long* j) +{ + unsigned long low = 0; + unsigned long high = n; + unsigned long mid; + const int descending = (array[n] < array[0]); + Assert(descending); /* Gaussian latitudes should be in descending order */ + while (low <= high) { + mid = (high + low) / 2; + + if (fabs(x - array[mid]) < EPSILON) { + *j = mid; + return; + } + + if (x < array[mid]) + low = mid + 1; + else + high = mid - 1; + } + *j = -1; /* Not found */ +} + +#if 0 +static void binary_search_old(const double xx[], const unsigned long n, double x, long* j) { /*This routine works only on descending ordered arrays*/ -#define EPSILON 1e-3 - unsigned long ju, jm, jl; jl = 0; ju = n; + if (fabs(x - xx[0]) < EPSILON) { + *j = 0; + return; + } + if (fabs(x - xx[n]) < EPSILON) { + *j = n; + return; + } + while (ju - jl > 1) { jm = (ju + jl) >> 1; if (fabs(x - xx[jm]) < EPSILON) { @@ -185,3 +219,4 @@ static void binary_search(const double xx[], const unsigned long n, double x, un } *j = jl; } +#endif diff --git a/src/grib_iterator_class_gaussian_reduced.c b/src/grib_iterator_class_gaussian_reduced.c index fe57d970c..fd934d686 100644 --- a/src/grib_iterator_class_gaussian_reduced.c +++ b/src/grib_iterator_class_gaussian_reduced.c @@ -52,7 +52,7 @@ static int destroy (grib_iterator* i); typedef struct grib_iterator_gaussian_reduced{ grib_iterator it; /* Members defined in gen */ - long carg; + int carg; const char* missingValue; /* Members defined in gaussian_reduced */ double *las; @@ -168,7 +168,7 @@ static int iterate_reduced_gaussian_subarea_legacy(grib_iterator* iter, grib_han if (h->context->debug) { const size_t np = count_subarea_points(h, get_reduced_row, pl, plsize, lon_first, lon_last); - fprintf(stderr, "ECCODES DEBUG grib_iterator_class_gaussian_reduced: Legacy sub-area num points=%ld\n", (long)np); + fprintf(stderr, "ECCODES DEBUG grib_iterator_class_gaussian_reduced: Legacy sub-area num points=%zu\n", np); } /*find starting latitude */ @@ -222,7 +222,7 @@ static int iterate_reduced_gaussian_subarea_algorithm2(grib_iterator* iter, grib if (h->context->debug) { const size_t np = count_subarea_points(h, get_reduced_row, pl, plsize, lon_first, lon_last); - fprintf(stderr, "ECCODES DEBUG grib_iterator_class_gaussian_reduced: sub-area num points=%ld\n", (long)np); + fprintf(stderr, "ECCODES DEBUG grib_iterator_class_gaussian_reduced: sub-area num points=%zu\n", np); } /* Find starting latitude */ @@ -381,7 +381,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) iter->e = 0; if (h->context->debug) { const size_t np = count_global_points(pl, plsize); - fprintf(stderr, "ECCODES DEBUG grib_iterator_class_gaussian_reduced: global num points=%ld\n", (long)np); + fprintf(stderr, "ECCODES DEBUG grib_iterator_class_gaussian_reduced: global num points=%zu\n", np); } for (j = 0; j < plsize; j++) { diff --git a/src/grib_iterator_class_gen.c b/src/grib_iterator_class_gen.c index eaba5a623..cea90181b 100644 --- a/src/grib_iterator_class_gen.c +++ b/src/grib_iterator_class_gen.c @@ -19,8 +19,8 @@ IMPLEMENTS = has_next IMPLEMENTS = init IMPLEMENTS = reset - MEMBERS = long carg - MEMBERS = const char* missingValue; + MEMBERS = int carg + MEMBERS = const char* missingValue; END_CLASS_DEF */ @@ -47,7 +47,7 @@ static long has_next (grib_iterator* i); typedef struct grib_iterator_gen{ grib_iterator it; /* Members defined in gen */ - long carg; + int carg; const char* missingValue; } grib_iterator_gen; diff --git a/src/grib_iterator_class_lambert_azimuthal_equal_area.c b/src/grib_iterator_class_lambert_azimuthal_equal_area.c index 8998e7017..5d54aee88 100644 --- a/src/grib_iterator_class_lambert_azimuthal_equal_area.c +++ b/src/grib_iterator_class_lambert_azimuthal_equal_area.c @@ -46,7 +46,7 @@ static int destroy (grib_iterator* i); typedef struct grib_iterator_lambert_azimuthal_equal_area{ grib_iterator it; /* Members defined in gen */ - long carg; + int carg; const char* missingValue; /* Members defined in lambert_azimuthal_equal_area */ double *lats; diff --git a/src/grib_iterator_class_lambert_conformal.c b/src/grib_iterator_class_lambert_conformal.c index 4fd681cdb..a39b314ab 100644 --- a/src/grib_iterator_class_lambert_conformal.c +++ b/src/grib_iterator_class_lambert_conformal.c @@ -46,7 +46,7 @@ static int destroy (grib_iterator* i); typedef struct grib_iterator_lambert_conformal{ grib_iterator it; /* Members defined in gen */ - long carg; + int carg; const char* missingValue; /* Members defined in lambert_conformal */ double *lats; diff --git a/src/grib_iterator_class_latlon.c b/src/grib_iterator_class_latlon.c index 9da3631a3..444aa594c 100644 --- a/src/grib_iterator_class_latlon.c +++ b/src/grib_iterator_class_latlon.c @@ -32,16 +32,14 @@ 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 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); typedef struct grib_iterator_latlon{ grib_iterator it; /* Members defined in gen */ - long carg; + int carg; const char* missingValue; /* Members defined in regular */ double *las; @@ -79,9 +77,9 @@ grib_iterator_class* grib_iterator_class_latlon = &_grib_iterator_class_latlon; 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; + c->previous = (*(c->super))->previous; + c->reset = (*(c->super))->reset; + c->has_next = (*(c->super))->has_next; } /* END_CLASS_IMP */ @@ -137,14 +135,14 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) long jScansPositively; long lai; - const char* s_lat1 = grib_arguments_get_name(h, args, self->carg++); - const char* s_jdir = grib_arguments_get_name(h, args, self->carg++); - const char* s_jScansPos = grib_arguments_get_name(h, args, self->carg++); - const char* s_jPtsConsec = grib_arguments_get_name(h, args, self->carg++); - const char* s_isRotatedGrid = grib_arguments_get_name(h, args, self->carg++); - const char* s_angleOfRotation= grib_arguments_get_name(h, args, self->carg++); - const char* s_latSouthernPole= grib_arguments_get_name(h, args, self->carg++); - const char* s_lonSouthernPole= grib_arguments_get_name(h, args, self->carg++); + const char* s_lat1 = grib_arguments_get_name(h, args, self->carg++); + const char* s_jdir = grib_arguments_get_name(h, args, self->carg++); + const char* s_jScansPos = grib_arguments_get_name(h, args, self->carg++); + const char* s_jPtsConsec = grib_arguments_get_name(h, args, self->carg++); + const char* s_isRotatedGrid = grib_arguments_get_name(h, args, self->carg++); + const char* s_angleOfRotation = grib_arguments_get_name(h, args, self->carg++); + const char* s_latSouthernPole = grib_arguments_get_name(h, args, self->carg++); + const char* s_lonSouthernPole = grib_arguments_get_name(h, args, self->carg++); self->angleOfRotation = 0; self->isRotated = 0; diff --git a/src/grib_iterator_class_latlon_reduced.c b/src/grib_iterator_class_latlon_reduced.c index d6efd546b..03f0d5e04 100644 --- a/src/grib_iterator_class_latlon_reduced.c +++ b/src/grib_iterator_class_latlon_reduced.c @@ -51,7 +51,7 @@ static int destroy (grib_iterator* i); typedef struct grib_iterator_latlon_reduced{ grib_iterator it; /* Members defined in gen */ - long carg; + int carg; const char* missingValue; /* Members defined in latlon_reduced */ double *las; diff --git a/src/grib_iterator_class_mercator.c b/src/grib_iterator_class_mercator.c index 01cf6c925..1690792d6 100644 --- a/src/grib_iterator_class_mercator.c +++ b/src/grib_iterator_class_mercator.c @@ -46,7 +46,7 @@ static int destroy (grib_iterator* i); typedef struct grib_iterator_mercator{ grib_iterator it; /* Members defined in gen */ - long carg; + int carg; const char* missingValue; /* Members defined in mercator */ double *lats; diff --git a/src/grib_iterator_class_polar_stereographic.c b/src/grib_iterator_class_polar_stereographic.c index 542e9c155..0e3988030 100644 --- a/src/grib_iterator_class_polar_stereographic.c +++ b/src/grib_iterator_class_polar_stereographic.c @@ -46,7 +46,7 @@ static int destroy (grib_iterator* i); typedef struct grib_iterator_polar_stereographic{ grib_iterator it; /* Members defined in gen */ - long carg; + int carg; const char* missingValue; /* Members defined in polar_stereographic */ double *lats; diff --git a/src/grib_iterator_class_regular.c b/src/grib_iterator_class_regular.c index 499d16767..1078243c0 100644 --- a/src/grib_iterator_class_regular.c +++ b/src/grib_iterator_class_regular.c @@ -56,7 +56,7 @@ static int destroy (grib_iterator* i); typedef struct grib_iterator_regular{ grib_iterator it; /* Members defined in gen */ - long carg; + int carg; const char* missingValue; /* Members defined in regular */ double *las; diff --git a/src/grib_iterator_class_space_view.c b/src/grib_iterator_class_space_view.c index c42a2bbe1..355acfa13 100644 --- a/src/grib_iterator_class_space_view.c +++ b/src/grib_iterator_class_space_view.c @@ -46,7 +46,7 @@ static int destroy (grib_iterator* i); typedef struct grib_iterator_space_view{ grib_iterator it; /* Members defined in gen */ - long carg; + int carg; const char* missingValue; /* Members defined in space_view */ double *lats; diff --git a/src/grib_jasper_encoding.c b/src/grib_jasper_encoding.c index d51c57147..609991a0a 100644 --- a/src/grib_jasper_encoding.c +++ b/src/grib_jasper_encoding.c @@ -216,7 +216,7 @@ int grib_jasper_encode(grib_context* c, j2k_encode_helper* helper) if (helper->compression != 0) { /* Lossy */ - ecc_snprintf(opts, MAXOPTSSIZE, "mode=real\nrate=%f", 1.0 / helper->compression); + snprintf(opts, MAXOPTSSIZE, "mode=real\nrate=%f", 1.0 / helper->compression); } Assert(cmpt.width_ * cmpt.height_ * cmpt.cps_ == buflen); diff --git a/src/grib_loader_from_handle.c b/src/grib_loader_from_handle.c index a9242584d..4f481d10a 100644 --- a/src/grib_loader_from_handle.c +++ b/src/grib_loader_from_handle.c @@ -165,7 +165,7 @@ int grib_init_accessor_from_handle(grib_loader* loader, grib_accessor* ga, grib_ switch (grib_accessor_get_native_type(ga)) { case GRIB_TYPE_STRING: - /*_grib_get_string_length(ga,&len); See ECC-490 */ + /*ecc__grib_get_string_length(ga,&len); See ECC-490 */ grib_get_string_length(h, name, &len); sval = (char*)grib_context_malloc(h->context, len); ret = grib_get_string_internal(h, name, sval, &len); diff --git a/src/grib_nearest.c b/src/grib_nearest.c index 5a69622d5..ae07d598d 100644 --- a/src/grib_nearest.c +++ b/src/grib_nearest.c @@ -128,7 +128,8 @@ int grib_nearest_get_radius(grib_handle* h, double* radiusInKm) return GRIB_SUCCESS; } -void grib_binary_search(const double xx[], size_t n, double x, size_t* ju, size_t* jl) +/* Note: the argument 'n' is NOT the size of the 'xx' array but its LAST index i.e. size of xx - 1 */ +void grib_binary_search(const double xx[], const size_t n, double x, size_t* ju, size_t* jl) { size_t jm = 0; int ascending = 0; @@ -167,7 +168,7 @@ int grib_nearest_find_multiple( int ret = 0; long i = 0; size_t len = 4; - int flags = GRIB_NEAREST_SAME_GRID | GRIB_NEAREST_SAME_DATA; + const unsigned long flags = GRIB_NEAREST_SAME_GRID | GRIB_NEAREST_SAME_DATA; if (values) rvalues = qvalues; @@ -305,8 +306,8 @@ int grib_nearest_find_generic( double* outlats, double* outlons, double* values, double* distances, int* indexes, size_t* len) { - int ret = 0, i = 0; - size_t nvalues = 0, nneighbours = 0; + int ret = 0; + size_t i = 0, nvalues = 0, nneighbours = 0; double radiusInKm; grib_iterator* iter = NULL; double lat = 0, lon = 0; @@ -398,7 +399,7 @@ int grib_nearest_find_generic( /*printf("Candidate: lat=%.5f lon=%.5f dist=%f Idx=%ld Val=%f\n",lat,lon,dist,the_index,the_value);*/ /* store this candidate point */ neighbours[i].m_dist = dist; - neighbours[i].m_index = the_index; + neighbours[i].m_index = (int)the_index; neighbours[i].m_lat = lat; neighbours[i].m_lon = lon; neighbours[i].m_value = the_value; diff --git a/src/grib_nearest_class.c b/src/grib_nearest_class.c index 2cd0937a0..edb4c74cc 100644 --- a/src/grib_nearest_class.c +++ b/src/grib_nearest_class.c @@ -33,7 +33,7 @@ static const struct table_entry table[] = { grib_nearest* grib_nearest_factory(grib_handle* h, grib_arguments* args) { - int i; + size_t i = 0; int ret = GRIB_SUCCESS; char* type = (char*)grib_arguments_get_name(h, args, 0); diff --git a/src/grib_nearest_class_latlon_reduced.c b/src/grib_nearest_class_latlon_reduced.c index 9e8b8a4eb..fc682ed05 100644 --- a/src/grib_nearest_class_latlon_reduced.c +++ b/src/grib_nearest_class_latlon_reduced.c @@ -105,10 +105,60 @@ static int init(grib_nearest* nearest, grib_handle* h, grib_arguments* args) return 0; } +static int find_global(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 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) +{ + int err = 0; + grib_nearest_latlon_reduced* self = (grib_nearest_latlon_reduced*)nearest; + double lat1, lat2, lon1, lon2; + int is_global = 1; + + if (grib_get_double(h, "longitudeFirstInDegrees", &lon1) == GRIB_SUCCESS && + grib_get_double(h, "longitudeLastInDegrees", &lon2) == GRIB_SUCCESS && + grib_get_double(h, "latitudeFirstInDegrees", &lat1) == GRIB_SUCCESS && + grib_get_double(h, "latitudeLastInDegrees", &lat2) == GRIB_SUCCESS) + { + const double difflat = fabs(lat1-lat2); + if (difflat < 180 || lon1 != 0 || lon2 < 359) { + is_global = 0; /* subarea */ + } + } + + if (is_global) { + err = find_global(nearest, h, inlat, inlon, flags, + outlats, outlons, values, + distances, indexes, len); + } + else + { + int lons_count = 0; /*dummy*/ + err = grib_nearest_find_generic( + nearest, h, inlat, inlon, flags, + self->values_key, + "Ni", + self->Nj, + &(self->lats), + &(self->lats_count), + &(self->lons), + &(lons_count), + &(self->distances), + outlats, outlons, + values, distances, indexes, len); + } + return err; +} + +static int find_global(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_latlon_reduced* self = (grib_nearest_latlon_reduced*)nearest; int ret = 0, kk = 0, ii = 0, jj = 0; diff --git a/src/grib_nearest_class_reduced.c b/src/grib_nearest_class_reduced.c index 0b75b1167..4e034e9b8 100644 --- a/src/grib_nearest_class_reduced.c +++ b/src/grib_nearest_class_reduced.c @@ -112,14 +112,14 @@ static int init(grib_nearest* nearest, grib_handle* h, grib_arguments* args) /*TODO longitudeOfFirstGridPointInDegrees from the def file*/ if ((ret = grib_get_double(h, "longitudeOfFirstGridPointInDegrees", &self->lon_first)) != GRIB_SUCCESS) { grib_context_log(h->context, GRIB_LOG_ERROR, - "grib_nearest_reduced.find(): unable to get longitudeOfFirstGridPointInDegrees %s\n", + "grib_nearest_reduced: Unable to get longitudeOfFirstGridPointInDegrees %s\n", grib_get_error_message(ret)); return ret; } /*TODO longitudeOfLastGridPointInDegrees from the def file*/ if ((ret = grib_get_double(h, "longitudeOfLastGridPointInDegrees", &self->lon_last)) != GRIB_SUCCESS) { grib_context_log(h->context, GRIB_LOG_ERROR, - "grib_nearest_reduced.find(): unable to get longitudeOfLastGridPointInDegrees %s\n", + "grib_nearest_reduced: Unable to get longitudeOfLastGridPointInDegrees %s\n", grib_get_error_message(ret)); return ret; } @@ -186,7 +186,8 @@ static int find_global(grib_nearest* nearest, grib_handle* h, double* distances, int* indexes, size_t* len) { grib_nearest_reduced* self = (grib_nearest_reduced*)nearest; - int ret = 0, kk = 0, ii = 0, jj = 0; + int ret = 0, kk = 0, ii = 0; + size_t jj = 0; long* pla = NULL; long* pl = NULL; size_t nvalues = 0; @@ -245,7 +246,7 @@ static int find_global(grib_nearest* nearest, grib_handle* h, iter = grib_iterator_new(h, 0, &ret); if (ret != GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Unable to create lat/lon iterator"); + grib_context_log(h->context, GRIB_LOG_ERROR, "grib_nearest_reduced: Unable to create lat/lon iterator"); return ret; } while (grib_iterator_next(iter, &lat, &lon, &dummy)) { @@ -483,7 +484,13 @@ static int find_global(grib_nearest* nearest, grib_handle* h, * grib_get_double_element_internal(h, self->values_key, self->k[kk], &(values[kk])); *} */ - indexes[kk] = self->k[kk]; + if (self->k[kk] >= INT_MAX) { + /* Current interface uses an 'int' for 'indexes' which is 32bits! We should change this to a 64bit type */ + grib_context_log(h->context, GRIB_LOG_ERROR, "grib_nearest_reduced: Unable to compute index. Value too large"); + return GRIB_OUT_OF_RANGE; + } else { + indexes[kk] = self->k[kk]; + } kk++; } } diff --git a/src/grib_nearest_class_regular.c b/src/grib_nearest_class_regular.c index 85835958a..132da2f5f 100644 --- a/src/grib_nearest_class_regular.c +++ b/src/grib_nearest_class_regular.c @@ -318,7 +318,7 @@ static int find(grib_nearest* nearest, grib_handle* h, iter = grib_iterator_new(h, 0, &ret); if (ret != GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Unable to create lat/lon iterator"); + grib_context_log(h->context, GRIB_LOG_ERROR, "grib_nearest_regular: Unable to create lat/lon iterator"); return ret; } while (grib_iterator_next(iter, &lat, &lon, &dummy)) { @@ -455,7 +455,13 @@ static int find(grib_nearest* nearest, grib_handle* h, /* Assert(self->k[kk] < nvalues); */ /* values[kk]=nearest->values[self->k[kk]]; */ - indexes[kk] = self->k[kk]; + if (self->k[kk] >= INT_MAX) { + /* Current interface uses an 'int' for 'indexes' which is 32bits! We should change this to a 64bit type */ + grib_context_log(h->context, GRIB_LOG_ERROR, "grib_nearest_regular: Unable to compute index. Value too large"); + return GRIB_OUT_OF_RANGE; + } else { + indexes[kk] = self->k[kk]; + } kk++; } } diff --git a/src/grib_nearest_class_sh.c b/src/grib_nearest_class_sh.c index e94e6244d..4cf28a474 100644 --- a/src/grib_nearest_class_sh.c +++ b/src/grib_nearest_class_sh.c @@ -100,7 +100,8 @@ static int find(grib_nearest* nearest, grib_handle* h, grib_nearest_sh* self = (grib_nearest_sh*)nearest; long J, K, M; double* values; - int size, i, ret; + int i, ret; + size_t size = 0; size_t vsize = 0; double val; @@ -116,8 +117,7 @@ static int find(grib_nearest* nearest, grib_handle* h, values = (double*)grib_context_malloc_clear(h->context, sizeof(double) * size); if (!values) { grib_context_log(h->context, GRIB_LOG_ERROR, - "nearest_sh: Error allocating %ld bytes", - sizeof(double) * size); + "nearest_sh: Error allocating %zu bytes", sizeof(double) * size); return GRIB_OUT_OF_MEMORY; } diff --git a/src/grib_oarray.c b/src/grib_oarray.c index f7ad9f4bb..5e51751c5 100644 --- a/src/grib_oarray.c +++ b/src/grib_oarray.c @@ -24,7 +24,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 %ld bytes\n", sizeof(grib_oarray)); + "grib_oarray_new unable to allocate %lu bytes\n", sizeof(grib_oarray)); return NULL; } v->size = size; @@ -34,7 +34,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 %ld bytes\n", sizeof(char*) * size); + "grib_oarray_new unable to allocate %lu bytes\n", sizeof(char*) * size); return NULL; } return v; @@ -51,7 +51,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 %ld bytes\n", sizeof(char*) * newsize); + "grib_oarray_resize unable to allocate %lu bytes\n", sizeof(char*) * newsize); return NULL; } return v; @@ -102,8 +102,8 @@ void grib_oarray_delete_content(grib_context* c, grib_oarray* v) void** grib_oarray_get_array(grib_context* c, grib_oarray* v) { - void** ret; - int i; + void** ret = NULL; + size_t i = 0; if (!v) return NULL; ret = (void**)grib_context_malloc_clear(c, sizeof(char*) * v->n); @@ -114,7 +114,8 @@ void** grib_oarray_get_array(grib_context* c, grib_oarray* v) void* grib_oarray_get(grib_oarray* v, int i) { - if (v == NULL || i > v->n - 1) + DebugAssert(i >= 0); + if (v == NULL || (size_t)i > v->n - 1) return NULL; return v->v[i]; } diff --git a/src/grib_optimize_decimal_factor.c b/src/grib_optimize_decimal_factor.c index 9f183d4a1..f3b5eeaf5 100644 --- a/src/grib_optimize_decimal_factor.c +++ b/src/grib_optimize_decimal_factor.c @@ -16,7 +16,7 @@ static double epsilon() { - volatile double e = 1.; + double e = 1.; while (1. != (1. + e)) { e /= 2; } diff --git a/src/grib_parse_utils.c b/src/grib_parse_utils.c index f74fd1eb6..11c5aabf8 100644 --- a/src/grib_parse_utils.c +++ b/src/grib_parse_utils.c @@ -105,7 +105,7 @@ int grib_recompose_name(grib_handle* h, grib_accessor* observer, const char* una a = grib_find_accessor(h, loc); if (!a) { if (!fail) { - sprintf(val, "undef"); + snprintf(val, sizeof(val), "undef"); } else { grib_context_log(h->context, GRIB_LOG_WARNING, "grib_recompose_name: Problem to recompose filename with : %s ( %s no accessor found)", uname, loc); @@ -121,12 +121,12 @@ int grib_recompose_name(grib_handle* h, grib_accessor* observer, const char* una case GRIB_TYPE_DOUBLE: replen = 1; ret = grib_unpack_double(a, &dval, &replen); - sprintf(val, "%.12g", dval); + snprintf(val, sizeof(val), "%.12g", dval); break; case GRIB_TYPE_LONG: replen = 1; ret = grib_unpack_long(a, &lval, &replen); - sprintf(val, "%d", (int)lval); + snprintf(val, sizeof(val), "%d", (int)lval); break; default: grib_context_log(h->context, GRIB_LOG_WARNING, "grib_recompose_name: Problem to recompose filename with : %s, invalid type %d", loc, type); @@ -209,7 +209,7 @@ int grib_accessor_print(grib_accessor* a, const char* name, int type, const char size = count; } else { - ret = _grib_get_size(h, a, &size); + ret = ecc__grib_get_size(h, a, &size); } if (ret) return ret; dval = (double*)grib_context_malloc_clear(h->context, sizeof(double) * size); @@ -219,7 +219,7 @@ int grib_accessor_print(grib_accessor* a, const char* name, int type, const char } else { replen = 0; - ret = _grib_get_double_array_internal(h, a, dval, size, &replen); + ret = ecc__grib_get_double_array_internal(h, a, dval, size, &replen); } if (replen == 1) fprintf(out, myformat, dval[0]); @@ -250,7 +250,7 @@ int grib_accessor_print(grib_accessor* a, const char* name, int type, const char size = count; } else { - ret = _grib_get_size(h, a, &size); + ret = ecc__grib_get_size(h, a, &size); } if (ret) return ret; lval = (long*)grib_context_malloc_clear(h->context, sizeof(long) * size); @@ -260,7 +260,7 @@ int grib_accessor_print(grib_accessor* a, const char* name, int type, const char } else { replen = 0; - ret = _grib_get_long_array_internal(h, a, lval, size, &replen); + ret = ecc__grib_get_long_array_internal(h, a, lval, size, &replen); } if (replen == 1) fprintf(out, myformat, lval[0]); @@ -679,7 +679,7 @@ void grib_parser_include(const char* included_fname) if (f == NULL) { char buffer[1024]; grib_context_log(grib_parser_context, (GRIB_LOG_ERROR) | (GRIB_LOG_PERROR), "grib_parser_include: cannot open: '%s'", parse_file); - sprintf(buffer, "Cannot include file: '%s'", parse_file); + snprintf(buffer, sizeof(buffer), "Cannot include file: '%s'", parse_file); grib_yyerror(buffer); } else { diff --git a/src/grib_sarray.c b/src/grib_sarray.c index 96a33d711..93e372e94 100644 --- a/src/grib_sarray.c +++ b/src/grib_sarray.c @@ -10,6 +10,18 @@ #include "grib_api_internal.h" +/* For debugging purposes */ +void grib_sarray_print(const char* title, const grib_sarray* sarray) +{ + size_t i; + Assert(sarray); + printf("%s: sarray.n=%zu \t", title, sarray->n); + for (i = 0; i < sarray->n; i++) { + printf("sarray[%zu]=%s\t", i, sarray->v[i]); + } + printf("\n"); +} + grib_sarray* grib_sarray_new(grib_context* c, size_t size, size_t incsize) { grib_sarray* v = NULL; @@ -18,7 +30,7 @@ grib_sarray* grib_sarray_new(grib_context* c, size_t size, size_t incsize) v = (grib_sarray*)grib_context_malloc_clear(c, sizeof(grib_sarray)); if (!v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_sarray_new unable to allocate %ld bytes\n", sizeof(grib_sarray)); + "grib_sarray_new unable to allocate %lu bytes\n", sizeof(grib_sarray)); return NULL; } v->size = size; @@ -28,7 +40,7 @@ grib_sarray* grib_sarray_new(grib_context* c, size_t size, size_t incsize) v->v = (char**)grib_context_malloc_clear(c, sizeof(char*) * size); if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_sarray_new unable to allocate %ld bytes\n", sizeof(char*) * size); + "grib_sarray_new unable to allocate %lu bytes\n", sizeof(char*) * size); return NULL; } return v; @@ -45,7 +57,7 @@ static grib_sarray* grib_sarray_resize(grib_sarray* v) v->size = newsize; if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_sarray_resize unable to allocate %ld bytes\n", sizeof(char*) * newsize); + "grib_sarray_resize unable to allocate %lu bytes\n", sizeof(char*) * newsize); return NULL; } return v; @@ -78,14 +90,16 @@ void grib_sarray_delete(grib_context* c, grib_sarray* v) void grib_sarray_delete_content(grib_context* c, grib_sarray* v) { - int i; + size_t i = 0; if (!v || !v->v) return; if (!c) c = grib_context_get_default(); for (i = 0; i < v->n; i++) { - if (v->v[i]) + if (v->v[i]) { + /*printf("grib_sarray_delete_content: %s %p\n", v->v[i], (void*)v->v[i]);*/ grib_context_free(c, v->v[i]); + } v->v[i] = 0; } v->n = 0; @@ -93,8 +107,8 @@ void grib_sarray_delete_content(grib_context* c, grib_sarray* v) char** grib_sarray_get_array(grib_context* c, grib_sarray* v) { - char** ret; - int i; + char** ret = NULL; + size_t i = 0; if (!v) return NULL; ret = (char**)grib_context_malloc_clear(c, sizeof(char*) * v->n); diff --git a/src/grib_templates.c b/src/grib_templates.c index b179dd987..24648d61f 100644 --- a/src/grib_templates.c +++ b/src/grib_templates.c @@ -57,15 +57,15 @@ static grib_handle* try_product_template(grib_context* c, ProductKind product_ki int err = 0; if (string_ends_with(name, ".tmpl")) - sprintf(path, "%s/%s", dir, name); + snprintf(path, sizeof(path), "%s/%s", dir, name); else - sprintf(path, "%s/%s.tmpl", dir, name); + snprintf(path, sizeof(path), "%s/%s.tmpl", dir, name); if (c->debug) { fprintf(stderr, "ECCODES DEBUG try_product_template product=%s, path='%s'\n", codes_get_product_name(product_kind), path); } - if (codes_access(path, F_OK) == 0) { + if (codes_access(path, F_OK) == 0) { /* 0 means file exists */ FILE* f = codes_fopen(path, "r"); if (!f) { grib_context_log(c, GRIB_LOG_PERROR, "cannot open %s", path); @@ -113,11 +113,11 @@ static char* try_template_path(grib_context* c, const char* dir, const char* nam { char path[2048]; if (string_ends_with(name, ".tmpl")) - sprintf(path, "%s/%s", dir, name); + snprintf(path, sizeof(path), "%s/%s", dir, name); else - sprintf(path, "%s/%s.tmpl", dir, name); + snprintf(path, sizeof(path), "%s/%s.tmpl", dir, name); - if (codes_access(path, F_OK) == 0) { + if (codes_access(path, F_OK) == 0) { /* 0 means file exists */ return grib_context_strdup(c, path); } diff --git a/src/grib_util.c b/src/grib_util.c index 414892322..e017e6d4e 100644 --- a/src/grib_util.c +++ b/src/grib_util.c @@ -74,12 +74,12 @@ static grib_handle* grib_sections_copy_internal(grib_handle* hfrom, grib_handle* h = hto; } - sprintf(section_length_str, "section%dLength", i); + snprintf(section_length_str, sizeof(section_length_str), "section%dLength", i); if (grib_get_long(h, section_length_str, &length)) continue; section_length[i] = length; - sprintf(section_offset_str, "offsetSection%d", i); + snprintf(section_offset_str, sizeof(section_offset_str), "offsetSection%d", i); if (grib_get_long(h, section_offset_str, &offset)) continue; section_offset[i] = offset; @@ -384,12 +384,12 @@ static void print_values(grib_context* c, size_t i = 0; int isConstant = 1; double v = 0, minVal = DBL_MAX, maxVal = -DBL_MAX; - fprintf(stderr, "ECCODES DEBUG grib_util: grib_set_values, setting %lu key/value pairs\n", (unsigned long)count); + fprintf(stderr, "ECCODES DEBUG grib_util: grib_set_values, setting %zu key/value pairs\n", count); for (i = 0; i < count; i++) { switch (keyval_pairs[i].type) { case GRIB_TYPE_LONG: - fprintf(stderr, "ECCODES DEBUG grib_util: => %s = %ld;\n", keyval_pairs[i].name, (long)keyval_pairs[i].long_value); + fprintf(stderr, "ECCODES DEBUG grib_util: => %s = %ld;\n", keyval_pairs[i].name, keyval_pairs[i].long_value); break; case GRIB_TYPE_DOUBLE: fprintf(stderr, "ECCODES DEBUG grib_util: => %s = %.16e;\n", keyval_pairs[i].name, keyval_pairs[i].double_value); @@ -400,7 +400,7 @@ static void print_values(grib_context* c, } } - fprintf(stderr, "ECCODES DEBUG grib_util: data_values_count=%lu;\n", (unsigned long)data_values_count); + fprintf(stderr, "ECCODES DEBUG grib_util: data_values_count=%zu;\n", data_values_count); for (i = 0; i < data_values_count; i++) { if (i == 0) v = data_values[i]; @@ -506,7 +506,7 @@ static int angle_can_be_encoded(grib_handle* h, const double angle) return ret; Assert(angle_subdivisions > 0); - sprintf(sample_name, "GRIB%ld", edition); + snprintf(sample_name, sizeof(sample_name), "GRIB%ld", edition); h2 = grib_handle_new_from_samples(0, sample_name); if ((ret = grib_set_double(h2, "latitudeOfFirstGridPointInDegrees", angle)) != 0) return ret; @@ -629,8 +629,8 @@ static int check_geometry(grib_handle* handle, const grib_util_grid_spec2* 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 (%ld!=%ld)\n", - msg, (long)data_values_count, (long)sum); + 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); return GRIB_WRONG_GRID; } } @@ -650,7 +650,7 @@ static int check_handle_against_spec(grib_handle* handle, const long edition, long angleSubdivisions = 0; double angular_precision = 1.0/1000.0; /* millidegree by default */ double tolerance = 0; - + if (edition == 2) { return GRIB_SUCCESS; /* For now only do checks on edition 1 */ } @@ -997,152 +997,11 @@ grib_handle* grib_util_set_spec2(grib_handle* h, goto cleanup; }*/ - if (flags & GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING) { - if (packing_spec->packing == GRIB_UTIL_PACKING_USE_PROVIDED && - strcmp(input_packing_type, "grid_simple_matrix")) { - switch (packing_spec->packing_type) { - case GRIB_UTIL_PACKING_TYPE_SPECTRAL_COMPLEX: - if (strcmp(input_packing_type, "spectral_complex") && !strcmp(input_packing_type, "spectral_simple")) - SET_STRING_VALUE("packingType", "spectral_complex"); - break; - case GRIB_UTIL_PACKING_TYPE_SPECTRAL_SIMPLE: - if (strcmp(input_packing_type, "spectral_simple") && !strcmp(input_packing_type, "spectral_complex")) - SET_STRING_VALUE("packingType", "spectral_simple"); - break; - case GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE: - if (strcmp(input_packing_type, "grid_simple") && !strcmp(input_packing_type, "grid_complex")) - SET_STRING_VALUE("packingType", "grid_simple"); - break; - case GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE_MATRIX: - SET_STRING_VALUE("packingType", "grid_simple_matrix"); - break; - case GRIB_UTIL_PACKING_TYPE_GRID_COMPLEX: - if (strcmp(input_packing_type, "grid_complex") && !strcmp(input_packing_type, "grid_simple")) - SET_STRING_VALUE("packingType", "grid_complex"); - break; - case GRIB_UTIL_PACKING_TYPE_JPEG: - if (strcmp(input_packing_type, "grid_jpeg") && !strcmp(input_packing_type, "grid_simple")) - SET_STRING_VALUE("packingType", "grid_jpeg"); - break; - case GRIB_UTIL_PACKING_TYPE_CCSDS: - if (strcmp(input_packing_type, "grid_ccsds") && !strcmp(input_packing_type, "grid_simple")) - SET_STRING_VALUE("packingType", "grid_ccsds"); - break; - case GRIB_UTIL_PACKING_TYPE_IEEE: - if (strcmp(input_packing_type, "grid_ieee") && !strcmp(input_packing_type, "grid_simple")) - SET_STRING_VALUE("packingType", "grid_ieee"); - break; - case GRIB_UTIL_PACKING_TYPE_GRID_SECOND_ORDER: - /* we delay the set of grid_second_order because we don't want - to do it on a field with bitsPerValue=0 */ - setSecondOrder = 1; - break; - default: - fprintf(stderr, "GRIB_UTIL_SET_SPEC: invalid packing_spec->packing_type (%ld)\n", - (long)packing_spec->packing_type); - *err = GRIB_INTERNAL_ERROR; - goto cleanup; - break; - } - } - switch (packing_spec->accuracy) { - case GRIB_UTIL_ACCURACY_SAME_BITS_PER_VALUES_AS_INPUT: - break; - - case GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES: - if (input_bits_per_value != packing_spec->bitsPerValue) - SET_LONG_VALUE("bitsPerValue", packing_spec->bitsPerValue); - break; - - case GRIB_UTIL_ACCURACY_SAME_DECIMAL_SCALE_FACTOR_AS_INPUT: - break; - - case GRIB_UTIL_ACCURACY_USE_PROVIDED_DECIMAL_SCALE_FACTOR: - if (input_decimal_scale_factor != packing_spec->decimalScaleFactor) - SET_LONG_VALUE("decimalScaleFactor", packing_spec->decimalScaleFactor); - break; - - default: - fprintf(stderr, "GRIB_UTIL_SET_SPEC: invalid packing_spec->accuracy (%ld)\n", (long)packing_spec->accuracy); - *err = GRIB_INTERNAL_ERROR; - goto cleanup; - break; - } - - /*nothing to be changed*/ - if (count == 0) { - *err = -1; - return h; - } - - if (h->context->debug == -1) { - print_values(h->context, spec, packing_spec, data_values, data_values_count, values, count); - } - - if ((*err = grib_set_values(h, values, count)) != 0) { - fprintf(stderr, "GRIB_UTIL_SET_SPEC: Cannot set values: %s\n", 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; - } - if (h->context->debug == -1) { - int j = 0; - fprintf(stderr, "ECCODES DEBUG grib_util: grib_set_double_array\n"); - for (j = 0; j < 20; j++) - fprintf(stderr, "ECCODES DEBUG grib_util %g\n", data_values[j]); - fprintf(stderr, "ECCODES DEBUG grib_util: data_values_count=%d \n", (int)data_values_count); - } - - if ((*err = grib_set_double_array(h, "values", data_values, data_values_count)) != 0) { - goto cleanup; - } - if (h->context->debug == -1) - fprintf(stderr, "ECCODES DEBUG grib_util: done grib_set_double_array \n"); - - /* convert to second_order if not constant field */ - if (setSecondOrder) { - int constant = 0; - double missingValue = 0; - grib_get_double(h, "missingValue", &missingValue); - constant = is_constant_field(missingValue, data_values, data_values_count); - - if (!constant) { - size_t packTypeLen; - if (editionNumber == 1) { - long numberOfGroups; - grib_handle* htmp = grib_handle_clone(h); - - packTypeLen = 17; - grib_set_string(htmp, "packingType", "grid_second_order", &packTypeLen); - grib_get_long(htmp, "numberOfGroups", &numberOfGroups); - /* GRIBEX is not able to decode overflown numberOfGroups with SPD */ - if (numberOfGroups > 65534 && h->context->no_spd) { - packTypeLen = 24; - grib_set_string(h, "packingType", "grid_second_order_no_SPD", &packTypeLen); - grib_handle_delete(htmp); - } - else { - grib_handle_delete(h); - h = htmp; - } - } - else { - packTypeLen = 17; - grib_set_string(h, "packingType", "grid_second_order", &packTypeLen); - grib_set_double_array(h, "values", data_values, data_values_count); - } - } - else { - if (h->context->gribex_mode_on) { - h->context->gribex_mode_on = 0; - grib_set_double_array(h, "values", data_values, data_values_count); - h->context->gribex_mode_on = 1; - } - } - } - - return h; - } /* flags & GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING */ + /* ECC-1269: + * Code that was here was moved to "deprecated" directory + * See grib_util.GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING.c + * Dealing with obsolete option GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING + */ grid_type = get_grid_type_name(spec->grid_type); if (!grid_type) { @@ -1158,10 +1017,10 @@ grib_handle* grib_util_set_spec2(grib_handle* h, 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 */ - sprintf(sample_name, "%s_pl_%ld_grib%ld", grid_type, spec->N, editionNumber); + 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 */ - sprintf(sample_name, "%s_pl_grib%ld", grid_type, editionNumber); + snprintf(sample_name, sizeof(sample_name), "%s_pl_grib%ld", grid_type, editionNumber); } break; case GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA: @@ -1173,13 +1032,13 @@ grib_handle* grib_util_set_spec2(grib_handle* h, grid_type); convertEditionEarlier = 1; } - sprintf(sample_name, "GRIB%ld", editionNumber); + snprintf(sample_name, sizeof(sample_name), "GRIB%ld", editionNumber); break; case GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL: - sprintf(sample_name, "GRIB%ld", editionNumber); + snprintf(sample_name, sizeof(sample_name), "GRIB%ld", editionNumber); break; default: - sprintf(sample_name, "%s_pl_grib%ld", grid_type, editionNumber); + snprintf(sample_name, sizeof(sample_name), "%s_pl_grib%ld", grid_type, editionNumber); } if (spec->pl && spec->grid_name) { @@ -1188,7 +1047,7 @@ grib_handle* grib_util_set_spec2(grib_handle* h, goto cleanup; } if (spec->grid_name) { - sprintf(sample_name, "%s_grib%ld", spec->grid_name, editionNumber); + snprintf(sample_name,sizeof(sample_name), "%s_grib%ld", spec->grid_name, editionNumber); } } @@ -1442,7 +1301,7 @@ grib_handle* grib_util_set_spec2(grib_handle* h, setSecondOrder = 1; break; default: - fprintf(stderr, "GRIB_UTIL_SET_SPEC: invalid packing_spec.packing_type (%ld)\n", (long)packing_spec->packing_type); + fprintf(stderr, "GRIB_UTIL_SET_SPEC: invalid packing_spec.packing_type (%ld)\n", packing_spec->packing_type); *err = GRIB_INTERNAL_ERROR; goto cleanup; break; @@ -1505,7 +1364,7 @@ grib_handle* grib_util_set_spec2(grib_handle* h, break; default: - fprintf(stderr, "GRIB_UTIL_SET_SPEC: invalid packing_spec.accuracy (%ld)\n", (long)packing_spec->accuracy); + fprintf(stderr, "GRIB_UTIL_SET_SPEC: invalid packing_spec.accuracy (%ld)\n", packing_spec->accuracy); grib_handle_delete(h_sample); *err = GRIB_INTERNAL_ERROR; goto cleanup; @@ -1564,8 +1423,8 @@ grib_handle* grib_util_set_spec2(grib_handle* h, 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: " - "specified as global, data_values_count=%ld but sum of pl array=%ld\n", - (long)data_values_count, (long)sum); + "specified as global, data_values_count=%zu but sum of pl array=%zu\n", + data_values_count, sum); *err = GRIB_WRONG_GRID; goto cleanup; } @@ -1610,7 +1469,7 @@ grib_handle* grib_util_set_spec2(grib_handle* h, ferror = fopen("error.data", "w"); lcount = 0; - fprintf(ferror, "# data_values_count=%ld\n", (long)data_values_count); + 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]); @@ -1940,28 +1799,32 @@ static void set_value(grib_values* value, char* str, int equal) /* 'grib_tool' Optional tool name which is printed on error. Can be NULL - 'arg' The string to be parsed e.g. key1=value1,key2!=value2 etc + 'arg' The string to be parsed e.g. key1=value1,key2!=value2 etc (cannot be const) 'values_required' If true then each key must have a value after it 'default_type' The default type e.g. GRIB_TYPE_UNDEFINED or GRIB_TYPE_DOUBLE 'values' The array we populate and return (output) - 'count' The number of elements (output) + 'count' Number of elements (output). Must be initialised to the size of the values array */ int parse_keyval_string(const char* grib_tool, char* arg, int values_required, int default_type, grib_values values[], int* count) { char* p = NULL; - int i = 0; + char* lasts = NULL; + int i = 0; if (arg == NULL) { *count = 0; return GRIB_SUCCESS; } - p = strtok(arg, ","); + /* Note: strtok modifies its input argument 'arg' + * so it cannot be 'const' + */ + p = strtok_r(arg, ",", &lasts); while (p != NULL) { values[i].name = (char*)calloc(1, strlen(p) + 1); Assert(values[i].name); strcpy((char*)values[i].name, p); - p = strtok(NULL, ","); + p = strtok_r(NULL, ",", &lasts); i++; if (i >= *count) { fprintf(stderr, "Input string contains too many entries (max=%d)\n", *count); @@ -2071,7 +1934,7 @@ int grib2_is_PDTN_Aerosol(long pdtn) /* Notes: PDT 44 is deprecated and replaced by 48 */ /* PDT 47 is deprecated and replaced by 85 */ return ( - pdtn == 44 || + pdtn == 44 || pdtn == 48 || pdtn == 49 || pdtn == 45 || diff --git a/src/grib_value.c b/src/grib_value.c index 5443bf53c..f83eef956 100644 --- a/src/grib_value.c +++ b/src/grib_value.c @@ -36,7 +36,7 @@ static void print_debug_info__set_double_array(grib_handle* h, const char* func, if (length <= N) N = length; - fprintf(stderr, "ECCODES DEBUG %s key=%s %lu values (", func, name, (unsigned long)length); + fprintf(stderr, "ECCODES DEBUG %s key=%s %zu values (", func, name, length); for (i = 0; i < N; ++i) { if (i != 0) fprintf(stderr,", "); fprintf(stderr, "%.10g", val[i]); @@ -93,7 +93,7 @@ int grib_set_long_internal(grib_handle* h, const char* name, long val) a = grib_find_accessor(h, name); if (h->context->debug) - fprintf(stderr, "ECCODES DEBUG grib_set_long_internal %s=%ld\n", name, (long)val); + fprintf(stderr, "ECCODES DEBUG grib_set_long_internal %s=%ld\n", name, val); if (a) { ret = grib_pack_long(a, &val, &l); @@ -121,9 +121,9 @@ int grib_set_long(grib_handle* h, const char* name, long val) if (a) { if (h->context->debug) { if (strcmp(name, a->name)!=0) - fprintf(stderr, "ECCODES DEBUG grib_set_long %s=%ld (a->name=%s)\n", name, (long)val, a->name); + fprintf(stderr, "ECCODES DEBUG grib_set_long %s=%ld (a->name=%s)\n", name, val, a->name); else - fprintf(stderr, "ECCODES DEBUG grib_set_long %s=%ld\n", name, (long)val); + fprintf(stderr, "ECCODES DEBUG grib_set_long %s=%ld\n", name, val); } if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) @@ -410,7 +410,7 @@ static int process_packingType_change(grib_handle* h, const char* keyname, const err = grib_get_long(h, "bitsPerValue", &bitsPerValue); if (!err && bitsPerValue == 0) { /* ECC-1219: packingType conversion from grid_ieee to grid_second_order. - * Normally having a bitsPerValue of 0 means a constant field but this is + * Normally having a bitsPerValue of 0 means a constant field but this is * not so for IEEE packing which can be non-constant but always has bitsPerValue==0! */ len = sizeof(input_packing_type); grib_get_string(h, "packingType", input_packing_type, &len); @@ -491,7 +491,7 @@ int grib_set_string_array(grib_handle* h, const char* name, const char** val, si a = grib_find_accessor(h, name); if (h->context->debug) { - fprintf(stderr, "ECCODES DEBUG grib_set_string_array key=%s %ld values\n", name, (long)length); + fprintf(stderr, "ECCODES DEBUG grib_set_string_array key=%s %zu values\n", name, length); } if (a) { @@ -714,7 +714,7 @@ static int _grib_set_double_array_internal(grib_handle* h, grib_accessor* a, *encoded_length += len; if (err == GRIB_SUCCESS) { /* See ECC-778 */ - return _grib_dependency_notify_change(h, a); + return ecc__grib_dependency_notify_change(h, a); } } else { @@ -752,7 +752,7 @@ static int _grib_set_double_array(grib_handle* h, const char* name, err = GRIB_ARRAY_TOO_SMALL; if (err == GRIB_SUCCESS) - return _grib_dependency_notify_change(h, a); /* See ECC-778 */ + return ecc__grib_dependency_notify_change(h, a); /* See ECC-778 */ return err; } @@ -899,7 +899,7 @@ static int _grib_set_long_array(grib_handle* h, const char* name, const long* va size_t N = 5; if (length <= N) N = length; - fprintf(stderr, "ECCODES DEBUG _grib_set_long_array key=%s %ld values (", name, (long)length); + fprintf(stderr, "ECCODES DEBUG _grib_set_long_array key=%s %zu values (", name, length); for (i = 0; i < N; ++i) fprintf(stderr, " %ld,", val[i]); if (N >= length) @@ -1106,7 +1106,7 @@ int grib_get_double_elements(const grib_handle* h, const char* name, const int* if (!act) return GRIB_NOT_FOUND; - err = _grib_get_size(h, act, &size); + err = ecc__grib_get_size(h, act, &size); if (err != GRIB_SUCCESS) { grib_context_log(h->context, GRIB_LOG_ERROR, "grib_get_double_elements: cannot get size of %s\n", name); @@ -1289,7 +1289,7 @@ int grib_get_double_array(const grib_handle* h, const char* name, double* val, s } } -int _grib_get_string_length(grib_accessor* a, size_t* size) +int ecc__grib_get_string_length(grib_accessor* a, size_t* size) { size_t s = 0; @@ -1315,7 +1315,7 @@ int grib_get_string_length(const grib_handle* h, const char* name, size_t* size) al = grib_find_accessors_list(h, name); if (!al) return GRIB_NOT_FOUND; - ret = _grib_get_string_length(al->accessor, size); + ret = ecc__grib_get_string_length(al->accessor, size); grib_context_free(h->context, al); return ret; } @@ -1323,11 +1323,11 @@ int grib_get_string_length(const grib_handle* h, const char* name, size_t* size) a = grib_find_accessor(h, name); if (!a) return GRIB_NOT_FOUND; - return _grib_get_string_length(a, size); + return ecc__grib_get_string_length(a, size); } } -int _grib_get_size(const grib_handle* h, grib_accessor* a, size_t* size) +int ecc__grib_get_size(const grib_handle* h, grib_accessor* a, size_t* size) { long count = 0; int err = 0; @@ -1375,7 +1375,7 @@ int grib_get_size(const grib_handle* ch, const char* name, size_t* size) return ret; } else - return _grib_get_size(h, a, size); + return ecc__grib_get_size(h, a, size); } } @@ -1409,10 +1409,10 @@ int grib_get_offset(const grib_handle* ch, const char* key, size_t* val) return GRIB_NOT_FOUND; } -int _grib_get_string_array_internal(const grib_handle* h, grib_accessor* a, char** val, size_t buffer_len, size_t* decoded_length) +int ecc__grib_get_string_array_internal(const grib_handle* h, grib_accessor* a, char** val, size_t buffer_len, size_t* decoded_length) { if (a) { - int err = _grib_get_string_array_internal(h, a->same, val, buffer_len, decoded_length); + int err = ecc__grib_get_string_array_internal(h, a->same, val, buffer_len, decoded_length); if (err == GRIB_SUCCESS) { size_t len = buffer_len - *decoded_length; @@ -1451,7 +1451,7 @@ int grib_get_string_array(const grib_handle* h, const char* name, char** val, si } else { *length = 0; - return _grib_get_string_array_internal(h, a, val, len, length); + return ecc__grib_get_string_array_internal(h, a, val, len, length); } } } @@ -1750,7 +1750,7 @@ int grib_set_values(grib_handle* h, grib_values* args, size_t count) break; } /*if (args[i].error != GRIB_SUCCESS) - grib_context_log(h->context,GRIB_LOG_ERROR,"unable to set %s (%s)", + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to set %s (%s)", args[i].name,grib_get_error_message(args[i].error)); */ } } diff --git a/src/grib_vdarray.c b/src/grib_vdarray.c index 9967c6165..3510bf77c 100644 --- a/src/grib_vdarray.c +++ b/src/grib_vdarray.c @@ -19,12 +19,12 @@ /* For debugging purposes */ void grib_vdarray_print(const char* title, const grib_vdarray* vdarray) { - size_t i; + size_t i = 0; char text[100] = {0,}; Assert(vdarray); - printf("%s: vdarray.n=%lu\n", title, (unsigned long)vdarray->n); + printf("%s: vdarray.n=%zu\n", title, vdarray->n); for (i = 0; i < vdarray->n; i++) { - sprintf(text, " vdarray->v[%lu]", (unsigned long)i); + snprintf(text, sizeof(text), " vdarray->v[%zu]", i); grib_darray_print(text, vdarray->v[i]); } printf("\n"); @@ -38,7 +38,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 %ld bytes\n", sizeof(grib_vdarray)); + "grib_vdarray_new unable to allocate %lu bytes\n", sizeof(grib_vdarray)); return NULL; } v->size = size; @@ -48,7 +48,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 %ld bytes\n", sizeof(grib_darray*) * size); + "grib_vdarray_new unable to allocate %lu bytes\n", sizeof(grib_darray*) * size); return NULL; } return v; @@ -65,7 +65,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 %ld bytes\n", sizeof(grib_darray*) * newsize); + "grib_vdarray_resize unable to allocate %lu bytes\n", sizeof(grib_darray*) * newsize); return NULL; } return v; @@ -91,14 +91,15 @@ void grib_vdarray_delete(grib_context* c, grib_vdarray* v) return; if (!c) c = grib_context_get_default(); - if (v->v) + if (v->v) { grib_context_free(c, v->v); + } grib_context_free(c, v); } void grib_vdarray_delete_content(grib_context* c, grib_vdarray* v) { - int i; + size_t i = 0; if (!v || !v->v) return; if (!c) @@ -113,7 +114,7 @@ void grib_vdarray_delete_content(grib_context* c, grib_vdarray* v) grib_darray** grib_vdarray_get_array(grib_context* c, grib_vdarray* v) { grib_darray** ret; - int i; + size_t i = 0; if (!v) return NULL; ret = (grib_darray**)grib_context_malloc_clear(c, sizeof(grib_darray*) * v->n); diff --git a/src/grib_viarray.c b/src/grib_viarray.c index c3b805a16..dde75f8de 100644 --- a/src/grib_viarray.c +++ b/src/grib_viarray.c @@ -21,10 +21,11 @@ void grib_viarray_print(const char* title, const grib_viarray* viarray) { size_t i; char text[100] = {0,}; + const size_t textLen = sizeof(text); Assert(viarray); - printf("%s: viarray.n=%lu\n", title, (unsigned long)viarray->n); + printf("%s: viarray.n=%zu\n", title, viarray->n); for (i = 0; i < viarray->n; i++) { - sprintf(text, " viarray->v[%lu]", (unsigned long)i); + snprintf(text, textLen, " viarray->v[%zu]", i); grib_iarray_print(text, viarray->v[i]); } printf("\n"); @@ -38,7 +39,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 %ld bytes\n", sizeof(grib_viarray)); + "grib_viarray_new unable to allocate %lu bytes\n", sizeof(grib_viarray)); return NULL; } v->size = size; @@ -48,7 +49,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 %ld bytes\n", sizeof(grib_iarray*) * size); + "grib_viarray_new unable to allocate %lu bytes\n", sizeof(grib_iarray*) * size); return NULL; } return v; @@ -65,7 +66,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 %ld bytes\n", sizeof(grib_iarray*) * newsize); + "grib_viarray_resize unable to allocate %lu bytes\n", sizeof(grib_iarray*) * newsize); return NULL; } return v; @@ -98,7 +99,7 @@ void grib_viarray_delete(grib_context* c, grib_viarray* v) void grib_viarray_delete_content(grib_context* c, grib_viarray* v) { - int i; + size_t i=0; if (!v || !v->v) return; @@ -112,7 +113,7 @@ void grib_viarray_delete_content(grib_context* c, grib_viarray* v) grib_iarray** grib_viarray_get_array(grib_context* c, grib_viarray* v) { grib_iarray** ret; - int i; + size_t i = 0; if (!v) return NULL; ret = (grib_iarray**)grib_context_malloc_clear(c, sizeof(grib_iarray*) * v->n); diff --git a/src/grib_vsarray.c b/src/grib_vsarray.c index 30ab5bddd..025e9c6de 100644 --- a/src/grib_vsarray.c +++ b/src/grib_vsarray.c @@ -16,6 +16,23 @@ #include "grib_api_internal.h" +/* For debugging purposes */ +void grib_vsarray_print(const char* title, const grib_vsarray* vsarray) +{ + size_t i = 0; + char text[64] = {0,}; + if(!vsarray) { + printf("%s: vsarray=NULL\n", title); + return; + } + printf("%s: vsarray.n=%zu\n", title, vsarray->n); + for (i = 0; i < vsarray->n; i++) { + snprintf(text, sizeof(text), " vsarray->v[%zu]", i); + grib_sarray_print(text, vsarray->v[i]); + } + printf("\n"); +} + grib_vsarray* grib_vsarray_new(grib_context* c, size_t size, size_t incsize) { grib_vsarray* v = NULL; @@ -24,7 +41,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 %ld bytes\n", sizeof(grib_vsarray)); + "grib_vsarray_new unable to allocate %lu bytes\n", sizeof(grib_vsarray)); return NULL; } v->size = size; @@ -34,7 +51,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 %ld bytes\n", sizeof(grib_sarray*) * size); + "grib_vsarray_new unable to allocate %lu bytes\n", sizeof(grib_sarray*) * size); return NULL; } return v; @@ -51,7 +68,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 %ld bytes\n", sizeof(grib_sarray*) * newsize); + "grib_vsarray_resize unable to allocate %lu bytes\n", sizeof(grib_sarray*) * newsize); return NULL; } return v; @@ -84,7 +101,7 @@ void grib_vsarray_delete(grib_context* c, grib_vsarray* v) void grib_vsarray_delete_content(grib_context* c, grib_vsarray* v) { - int i; + size_t i = 0; if (!v || !v->v) return; if (!c) @@ -100,7 +117,7 @@ void grib_vsarray_delete_content(grib_context* c, grib_vsarray* v) grib_sarray** grib_vsarray_get_array(grib_context* c, grib_vsarray* v) { grib_sarray** ret; - int i; + size_t i = 0; if (!v) return NULL; ret = (grib_sarray**)grib_context_malloc_clear(c, sizeof(grib_sarray*) * v->n); diff --git a/src/grib_yacc.c b/src/grib_yacc.c index 3c9fa9821..09bbbb45f 100644 --- a/src/grib_yacc.c +++ b/src/grib_yacc.c @@ -2069,7 +2069,7 @@ grib_yysyntax_error (YYPTRDIFF_T *grib_yymsg_alloc, char **grib_yymsg, return 1; } - /* Avoid sprintf, as that infringes on the user's name space. + /* Avoid snprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { @@ -3520,14 +3520,14 @@ grib_yyreduce: case 206: #line 752 "griby.y" { - char buf[80]; sprintf(buf,"%ld",(long)(grib_yyvsp[-4].lval)); (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,buf,(grib_yyvsp[-1].concept_condition));} + char buf[80]; snprintf(buf,sizeof(buf),"%ld",(long)(grib_yyvsp[-4].lval)); (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,buf,(grib_yyvsp[-1].concept_condition));} #line 3525 "y.tab.c" break; case 207: #line 754 "griby.y" { - char buf[80]; sprintf(buf,"%g",(double)(grib_yyvsp[-4].dval)); (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,buf,(grib_yyvsp[-1].concept_condition));} + char buf[80]; snprintf(buf,sizeof(buf),"%g",(double)(grib_yyvsp[-4].dval)); (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,buf,(grib_yyvsp[-1].concept_condition));} #line 3532 "y.tab.c" break; diff --git a/src/griby.y b/src/griby.y index 425a8d7b9..32b6a6962 100644 --- a/src/griby.y +++ b/src/griby.y @@ -750,9 +750,9 @@ concept_value: STRING '=' '{' concept_conditions '}' { | IDENT '=' '{' concept_conditions '}' { $$ = grib_concept_value_new(grib_parser_context,$1,$4); free($1);} | INTEGER '=' '{' concept_conditions '}' { - char buf[80]; sprintf(buf,"%ld",(long)$1); $$ = grib_concept_value_new(grib_parser_context,buf,$4);} + char buf[80]; snprintf(buf, sizeof(buf), "%ld",(long)$1); $$ = grib_concept_value_new(grib_parser_context,buf,$4);} | FLOAT '=' '{' concept_conditions '}' { - char buf[80]; sprintf(buf,"%g",(double)$1); $$ = grib_concept_value_new(grib_parser_context,buf,$4);} + char buf[80]; snprintf(buf, sizeof(buf), "%g", (double)$1); $$ = grib_concept_value_new(grib_parser_context,buf,$4);} ; concept_conditions: concept_condition diff --git a/src/iterator_class_hierarchy.txt b/src/iterator_class_hierarchy.txt new file mode 100644 index 000000000..730373f0d --- /dev/null +++ b/src/iterator_class_hierarchy.txt @@ -0,0 +1,14 @@ + +Iterator Class Hierarchy + |-grib_iterator_class_gen + |---grib_iterator_class_gaussian_reduced + |---grib_iterator_class_lambert_azimuthal_equal_area + |---grib_iterator_class_lambert_conformal + |---grib_iterator_class_latlon_reduced + |---grib_iterator_class_mercator + |---grib_iterator_class_polar_stereographic + |---grib_iterator_class_regular + |-----grib_iterator_class_gaussian + |-----grib_iterator_class_latlon + |---grib_iterator_class_space_view + diff --git a/src/make_hash_keys.sh b/src/make_hash_keys.sh index b9210e810..83efd6d9f 100755 --- a/src/make_hash_keys.sh +++ b/src/make_hash_keys.sh @@ -4,7 +4,7 @@ set -xe cd ../tests echo "List all keys..." -./list_all_keys.ksh +./list_all_keys.sh cd ../src diff --git a/src/md5.c b/src/md5.c index 9bebbe750..7bf2279e3 100644 --- a/src/md5.c +++ b/src/md5.c @@ -281,7 +281,7 @@ void grib_md5_end(grib_md5_state* s, char* digest) #define U(x) ((unsigned int)(x)) - sprintf(digest, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", + snprintf(digest, 1024, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", U(s->h0 & 0xff), U((s->h0 >> 8) & 0xff), U((s->h0 >> 16) & 0xff), U((s->h0 >> 24) & 0xff), U(s->h1 & 0xff), U((s->h1 >> 8) & 0xff), U((s->h1 >> 16) & 0xff), U((s->h1 >> 24) & 0xff), U(s->h2 & 0xff), U((s->h2 >> 8) & 0xff), U((s->h2 >> 16) & 0xff), U((s->h2 >> 24) & 0xff), diff --git a/src/minmax_val.c b/src/minmax_val.c index 878c89bfe..097747991 100644 --- a/src/minmax_val.c +++ b/src/minmax_val.c @@ -240,8 +240,8 @@ static void minmax_val(const double* restrict data, long datasize, double* fmin, long i, j; long residual = datasize % __UNROLL_DEPTH_1; long ofs = datasize - residual; - double register dmin[__UNROLL_DEPTH_1]; - double register dmax[__UNROLL_DEPTH_1]; + double dmin[__UNROLL_DEPTH_1]; + double dmax[__UNROLL_DEPTH_1]; for (j = 0; j < __UNROLL_DEPTH_1; j++) { dmin[j] = data[0]; diff --git a/src/string_util.c b/src/string_util.c index f42845ff9..9ba818b97 100644 --- a/src/string_util.c +++ b/src/string_util.c @@ -85,6 +85,7 @@ char** string_split(char* inputString, const char* delimiter) char* p = inputString; char* lastDelimiter = NULL; char* aToken = NULL; + char* lasts = NULL; size_t numTokens = 0; size_t strLength = 0; size_t index = 0; @@ -111,11 +112,11 @@ char** string_split(char* inputString, const char* delimiter) Assert(result); /* Start tokenizing */ - aToken = strtok(inputString, delimiter); + aToken = strtok_r(inputString, delimiter, &lasts); while (aToken) { Assert(index < numTokens); *(result + index++) = strdup(aToken); - aToken = strtok(NULL, delimiter); + aToken = strtok_r(NULL, delimiter, &lasts); } Assert(index == numTokens - 1); *(result + index) = NULL; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 344004292..8ac3058ec 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -49,6 +49,14 @@ list(APPEND test_c_bins grib_lam_bf grib_lam_gp) +if( HAVE_EXPERIMENTAL_BUILD_WITH_CXX ) + foreach( _bin ${test_c_bins} ) + SET( _src ${_bin}.c ) + set_source_files_properties( ${_src} PROPERTIES LANGUAGE CXX ) + endforeach() +endif() + + foreach( tool ${test_c_bins} ) # here we use the fact that each tool has only one C file that matches its name ecbuild_add_executable( TARGET ${tool} @@ -197,6 +205,7 @@ if( HAVE_BUILD_TOOLS ) bufr_ecc-887 bufr_ecc-1187 bufr_ecc-1305 + bufr_ecc-1476 grib_ecc-490 grib_ecc-756 grib_ecc-806 @@ -333,18 +342,6 @@ if( HAVE_BUILD_TOOLS ) endif() - if( HAVE_PYTHON2 AND ENABLE_EXTRA_TESTS ) - list( APPEND ptests bufr_dump_decode_python ) - # list( APPEND ptests bufr_dump_encode_python ) - foreach( test ${ptests} ) - ecbuild_add_test( TARGET eccodes_t_${test} - TYPE SCRIPT - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/${test}.sh - ENVIRONMENT PYTHON=${PYTHON_EXECUTABLE} PYTHONPATH=${PROJECT_BINARY_DIR}/python - TEST_DEPENDS eccodes_download_bufrs ) - endforeach() - endif() - ########################################### # Note: the reference file is in the tests dir not data dir! ecbuild_add_test( TARGET eccodes_t_grib_grid_lamb_az_eq_area diff --git a/tests/bufr_check_descriptors.c b/tests/bufr_check_descriptors.c index 755db8a7d..76cec0f1f 100644 --- a/tests/bufr_check_descriptors.c +++ b/tests/bufr_check_descriptors.c @@ -58,30 +58,30 @@ int main(int argc, char** argv) if (line[0] == '#') continue; /* Ignore first line with column titles */ list = string_split(line, "|"); if (!list) { - fprintf(stderr, "Error on line %lu: string_split failed!\n", line_number); + fprintf(stderr, "Error on line %zu: string_split failed!\n", line_number); return 1; } for (i = 0; list[i] != NULL; ++i) {} /* count how many tokens */ if (i < MIN_NUM_COLUMNS) { - fprintf(stderr, "Error on line %lu: Number of columns (=%lu) < required miniumum (=%lu)!\n", + fprintf(stderr, "Error on line %zu: Number of columns (=%zu) < required miniumum (=%zu)!\n", line_number, i, MIN_NUM_COLUMNS); return 1; } str_code = list[0]; if (string_to_long(str_code, &lValue) != GRIB_SUCCESS) { - fprintf(stderr, "Error on line %lu: descriptor code '%s' (column 1) is not numeric.\n", + fprintf(stderr, "Error on line %zu: descriptor code '%s' (column 1) is not numeric.\n", line_number, str_code); return 1; } if (strlen(str_code) != NUM_DESCRIPTOR_DIGITS) { - fprintf(stderr, "Error on line %lu: descriptor code '%s' (column 1) is not %lu digits.\n", + fprintf(stderr, "Error on line %zu: descriptor code '%s' (column 1) is not %zu digits.\n", line_number, str_code, NUM_DESCRIPTOR_DIGITS); return 1; } str_key = list[1]; str_type = list[2]; if (check_descriptor_type(str_type) != GRIB_SUCCESS) { - fprintf(stderr, "Error on line %lu: descriptor key type '%s' (column 3) is not valid.\n", + fprintf(stderr, "Error on line %zu: descriptor key type '%s' (column 3) is not valid.\n", line_number, str_type); fprintf(stderr, "Please choose one of:\n"); for (i = 0; i < NUMBER(allowed_types); ++i) { @@ -90,13 +90,13 @@ int main(int argc, char** argv) return 1; } if (strlen(str_key) >= maxlen_keyName) { - fprintf(stderr, "Error on line %lu: descriptor key name '%s' (column 2) exceeds %lu characters.\n", + fprintf(stderr, "Error on line %zu: descriptor key name '%s' (column 2) exceeds %zu characters.\n", line_number, str_key, maxlen_keyName); return 1; } str_units = list[4]; if (strlen(str_units) >= maxlen_units) { - fprintf(stderr, "Error on line %lu: descriptor units '%s' (column 5) exceeds %lu characters.\n", + fprintf(stderr, "Error on line %zu: descriptor units '%s' (column 5) exceeds %zu characters.\n", line_number, str_units, maxlen_units); return 1; } @@ -104,17 +104,17 @@ int main(int argc, char** argv) str_ref = list[6]; str_width = list[7]; if (string_to_long(str_scale, &lValue) != GRIB_SUCCESS) { - fprintf(stderr, "Error on line %lu: descriptor scale '%s' (column 6) is not numeric.\n", + 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) { - fprintf(stderr, "Error on line %lu: descriptor reference '%s' (column 7) is not numeric.\n", + 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) { - fprintf(stderr, "Error on line %lu: descriptor width '%s' (column 8) is not numeric.\n", + 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/bufr_dump_encode_filter.sh b/tests/bufr_dump_encode_filter.sh index 84bdf540b..a1c44df72 100755 --- a/tests/bufr_dump_encode_filter.sh +++ b/tests/bufr_dump_encode_filter.sh @@ -27,6 +27,16 @@ fBufrTmp=temp.${label}".bufr" # Define filter rules file fRules=temp.${label}.filter +set +u +use_valgrind=0 +if test "x$ECCODES_TEST_WITH_VALGRIND" != "x"; then + use_valgrind=1 + # The presence of ECCODES_TEST_WITH_VALGRIND environment variable redefines + # tools_dir so we reset it to its original + tools_dir=$build_dir/bin +fi +set -u + #----------------------------------------------------------- # NOTE: not all of our BUFR files pass this test. bufr_filter is limited # in what it can do compared to Python or Fortran! @@ -59,7 +69,12 @@ do ${tools_dir}/bufr_dump -Efilter $f > $fRules - ${tools_dir}/codes_bufr_filter -o $fBufrTmp $fRules $f + if [ $use_valgrind -eq 1 ]; then + PREFIX="valgrind --error-exitcode=1 --leak-check=full " + else + PREFIX="" + fi + $PREFIX ${tools_dir}/codes_bufr_filter -o $fBufrTmp $fRules $f ${tools_dir}/bufr_compare $fBufrTmp $f diff --git a/tests/bufr_ecc-1259.sh b/tests/bufr_ecc-1259.sh index 5cca062ae..a65e65be5 100755 --- a/tests/bufr_ecc-1259.sh +++ b/tests/bufr_ecc-1259.sh @@ -34,7 +34,7 @@ EOF ${tools_dir}/bufr_filter -f $tempFilt $sample_bufr4 2>$tempOut # Check the right error message came out -grep -q "ECCODES ERROR.*Error while setting key pack (Encoding invalid)" $tempOut +grep -q "ECCODES ERROR.*Error while setting key 'pack' (Encoding invalid)" $tempOut # Now fix the order of keys and rerun diff --git a/tests/bufr_ecc-1288.c b/tests/bufr_ecc-1288.c index be38bae60..327fe320d 100644 --- a/tests/bufr_ecc-1288.c +++ b/tests/bufr_ecc-1288.c @@ -42,7 +42,7 @@ int main(int argc, char* argv[]) codes_handle_delete(h); printf("Wipe the cache and extend the definitions path...\n"); - sprintf(buf, "%s:%s", DEFS_PATH_LOCAL, codes_definition_path(NULL)); + snprintf(buf, 1024, "%s:%s", DEFS_PATH_LOCAL, codes_definition_path(NULL)); codes_context_delete(NULL); codes_context_set_definitions_path(NULL, buf); printf("ECCODES_DEFINITION_PATH is now = |%s|\n", buf); diff --git a/tests/bufr_ecc-1476.sh b/tests/bufr_ecc-1476.sh new file mode 100755 index 000000000..197bc73c4 --- /dev/null +++ b/tests/bufr_ecc-1476.sh @@ -0,0 +1,128 @@ +#!/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="bufr_ecc-1476_test" +tempFilt=temp.$label.filt +tempLog=temp.$label.log + +set +u +if test "x$ECCODES_TEST_WITH_VALGRIND" = "x"; then + echo "Environment variable ECCODES_TEST_WITH_VALGRIND not defined. Test disabled" + exit 0 +fi +set -u + +# The presence of ECCODES_TEST_WITH_VALGRIND environment variable redefines +# tools_dir so we reset it to its original +tools_dir=$build_dir/bin + +files=" +aaen_55.bufr +aben_55.bufr +ahws_139.bufr +airs_57.bufr +alws_139.bufr +amsa_55.bufr +amsb_55.bufr +amse_55.bufr +amsu_55.bufr +amv2_87.bufr +amv3_87.bufr +asbh_139.bufr +asbl_139.bufr +asca_139.bufr +asch_139.bufr +ascs_139.bufr +aseh_139.bufr +asel_139.bufr +ashs_139.bufr +atap_55.bufr +ateu_155.bufr +atms_201.bufr +atov_55.bufr +avhm_87.bufr +avhn_87.bufr +avhr_58.bufr +b002_95.bufr +b002_96.bufr +b003_56.bufr +b005_87.bufr +b005_89.bufr +b006_96.bufr +cmwi_87.bufr +cmwn_87.bufr +cori_156.bufr +crit_202.bufr +csrh_189.bufr +ecc738.msg2.bufr +emsg_189.bufr +emsg_87.bufr +eumetsat_iasi_co.bufr +eum_iasi_twt.bufr +euwv_87.bufr +fy3a_154.bufr +fy3b_154.bufr +g2to_206.bufr +go15_87.bufr +goee_87.bufr +goes_87.bufr +goga_89.bufr +hirb_55.bufr +hirs_55.bufr +iasi_241.bufr +imssnow.bufr +itwt_233.bufr +jaso_214.bufr +maer_207.bufr +mhen_55.bufr +mhsa_55.bufr +mhsb_55.bufr +mhse_55.bufr +mloz_206.bufr +modi_87.bufr +modw_87.bufr +monw_87.bufr +new.bufr +nomi_206.bufr +ocea_21.bufr +pilo_91.bufr +profiler_european.bufr +rada_250.bufr +rado_250.bufr +s4kn_165.bufr +sb19_206.bufr +sbu8_206.bufr +smin_49.bufr +smis_49.bufr +smiu_49.bufr +smos_203.bufr +sn4k_165.bufr +soil_7.bufr +ssbt_127.bufr +stuk_7.bufr +syno_1.bufr +syno_3.bufr +syno_4.bufr +temp_101.bufr +temp-land-with-substituted-values.bufr +tmr7_129.bufr +" + +VALGRIND_OPTIONS="--error-exitcode=1 --leak-check=full --log-file=$tempLog" +for f in $files; do + bf=${data_dir}/bufr/$f + ${tools_dir}/bufr_dump -Efilter $bf > $tempFilt #>& /dev/null + valgrind $VALGRIND_OPTIONS ${tools_dir}/codes_bufr_filter $tempFilt $bf >/dev/null + rm -f $tempFilt +done + +rm -f $tempLog $tempFilt + diff --git a/tests/bufr_extract_headers.c b/tests/bufr_extract_headers.c index cf8934f93..a963a32f0 100644 --- a/tests/bufr_extract_headers.c +++ b/tests/bufr_extract_headers.c @@ -29,7 +29,7 @@ int main(int argc, char* argv[]) filename = argv[1]; err = codes_extract_offsets_malloc(c, filename, PRODUCT_GRIB, &offsets, &num_messages, strict_mode); assert(!err); - + for (i = 0; i < num_messages; ++i) { printf("Message #%d: %lu\n", i, offsets[i]); } diff --git a/tests/bufr_filter_extract_area.sh b/tests/bufr_filter_extract_area.sh index 93663c542..fadc4050f 100755 --- a/tests/bufr_filter_extract_area.sh +++ b/tests/bufr_filter_extract_area.sh @@ -27,6 +27,22 @@ fBufrTmp=${label}".bufr.tmp" # Define filter rules file fRules=${label}.filter +set +u +use_valgrind=0 +if test "x$ECCODES_TEST_WITH_VALGRIND" != "x"; then + use_valgrind=1 + # The presence of ECCODES_TEST_WITH_VALGRIND environment variable redefines + # tools_dir so we reset it to its original + tools_dir=$build_dir/bin +fi +set -u + +if [ $use_valgrind -eq 1 ]; then + PREFIX="valgrind --error-exitcode=1 --leak-check=full " +else + PREFIX="" +fi + #----------------------------------------------------------- # Test: Area extraction #----------------------------------------------------------- @@ -53,7 +69,7 @@ rm -f $outputFilt echo "Test: Area extraction" >> $fLog echo "file: $outputBufr" >> $fLog -${tools_dir}/codes_bufr_filter -o $outputBufr $fRules $inputBufr > $outputFilt +$PREFIX ${tools_dir}/codes_bufr_filter -o $outputBufr $fRules $inputBufr > $outputFilt [ -f $outputBufr ] cat > $fRules <> $outputFilt +$PREFIX ${tools_dir}/codes_bufr_filter $fRules $inputBufr $outputBufr >> $outputFilt cat > $outputRef < $fRules <number = i; @@ -166,7 +175,7 @@ void* runner(void* ptr) void do_stuff(void* ptr) { /* Cast argument to struct v pointer */ - struct v* data = ptr; + struct v* data = (struct v*)ptr; size_t i; char output_file[50]; time_t ltime; @@ -175,7 +184,7 @@ void do_stuff(void* ptr) for (i = 0; i < FILES_PER_ITERATION; i++) { if (opt_write) { - sprintf(output_file, "output/output_file_%ld-%ld.bufr", data->number, i); + snprintf(output_file, 50, "output/output_file_%ld-%ld.bufr", data->number, i); encode_file(INPUT_FILE, output_file); } else { diff --git a/tests/codes_set_samples_path.c b/tests/codes_set_samples_path.c index 4c2cf7767..dbcff4ed7 100644 --- a/tests/codes_set_samples_path.c +++ b/tests/codes_set_samples_path.c @@ -38,7 +38,7 @@ int main(int argc, char** argv) h = grib_handle_new_from_samples(c, sample_name); Assert(!h); - sprintf(full_path, "%s%c%s", new_dir, ECC_PATH_DELIMITER_CHAR, grib_samples_path(c)); + snprintf(full_path, 2048, "%s%c%s", new_dir, ECC_PATH_DELIMITER_CHAR, grib_samples_path(c)); printf("Change samples_path to: %s\n", full_path); grib_context_set_samples_path(c, full_path); diff --git a/tests/extract_offsets.c b/tests/extract_offsets.c index e103d966b..13d0ce378 100644 --- a/tests/extract_offsets.c +++ b/tests/extract_offsets.c @@ -28,7 +28,7 @@ int main(int argc, char* argv[]) filename = argv[1]; err = codes_extract_offsets_malloc(c, filename, PRODUCT_ANY, &offsets, &num_messages, strict_mode); if (err) return err; - + for (i = 0; i < num_messages; ++i) { printf("%lu\n", (unsigned long)offsets[i]); } diff --git a/tests/grib2_version.sh b/tests/grib2_version.sh index 4f1661836..1f7cbe8b5 100755 --- a/tests/grib2_version.sh +++ b/tests/grib2_version.sh @@ -31,7 +31,7 @@ if [ "$latest" != "$highest_num" ]; then exit 1 fi - +cd $test_dir # Check table 1.0 # Check it has the latest with description matching "Version implemented on DD MM YYYY" tempText=temp.$label.txt diff --git a/tests/grib_2nd_order_numValues.c b/tests/grib_2nd_order_numValues.c index e129703ee..8e66c04e5 100644 --- a/tests/grib_2nd_order_numValues.c +++ b/tests/grib_2nd_order_numValues.c @@ -2714,14 +2714,15 @@ static double values[] = { int main(int argc, char* argv[]) { size_t len, slen; - grib_handle* h; - const char* packingType[2] = { "grid_second_order", "grid_complex_spatial_differencing" }; - int ipackingType; + grib_handle* h = NULL; + const char* packingType[] = { "grid_second_order", "grid_complex_spatial_differencing", "grid_complex" }; + const size_t numTypes = sizeof(packingType)/sizeof(packingType[0]); + int ipackingType = 0; const double zmiss = 9999999999.; long numberOfValues, numberOfDataPoints; int i, numberOfMissing; - for (ipackingType = 0; ipackingType < 2; ipackingType++) { + for (ipackingType = 0; ipackingType < numTypes; ipackingType++) { GRIB_CHECK(((h = grib_handle_new_from_samples(NULL, "regular_ll_pl_grib2")) == NULL), 0); GRIB_CHECK(grib_set_long(h, "Ni", NLON), 0); GRIB_CHECK(grib_set_long(h, "Nj", NLAT), 0); @@ -2737,6 +2738,7 @@ int main(int argc, char* argv[]) GRIB_CHECK(grib_set_long(h, "bitsPerValue", 16), 0); slen = strlen(packingType[ipackingType]); + printf("Doing packingType=%s\n", packingType[ipackingType]); GRIB_CHECK(grib_set_string(h, "packingType", packingType[ipackingType], &slen), 0); GRIB_CHECK(grib_set_long(h, "bitmapPresent", 1), 0); @@ -2753,8 +2755,9 @@ int main(int argc, char* argv[]) GRIB_CHECK(grib_get_long(h, "numberOfDataPoints", &numberOfDataPoints), 0); if (numberOfValues + numberOfMissing != numberOfDataPoints) { - printf(" numberOfValues = %ld, numberOfDataPoints = %ld, numberOfMissing = %d\n", numberOfValues, numberOfDataPoints, numberOfMissing); - printf(" numberOfValues appears to be incorrect\n"); + printf("ERROR: numberOfValues = %ld, numberOfDataPoints = %ld, numberOfMissing = %d\n", + numberOfValues, numberOfDataPoints, numberOfMissing); + printf("ERROR: numberOfValues appears to be incorrect\n"); return 1; } diff --git a/tests/grib_bitmap.sh b/tests/grib_bitmap.sh index c773bb6fd..e2a237531 100755 --- a/tests/grib_bitmap.sh +++ b/tests/grib_bitmap.sh @@ -106,14 +106,37 @@ cat > $tempRef <cclass->name, "long") == 0) { grib_expression_long* el = (grib_expression_long*)expression; - sprintf(condition_value, "%ld", el->value); + snprintf(condition_value, sizeof(condition_value), "%ld", el->value); } else if (strcmp(expression->cclass->name, "functor") == 0) { grib_expression_functor* ef = (grib_expression_functor*)expression; - sprintf(condition_value, "%s", ef->name); + snprintf(condition_value, sizeof(condition_value), "%s", ef->name); } else if (strcmp(expression->cclass->name, "string") == 0) { grib_expression_string* es = (grib_expression_string*)expression; - sprintf(condition_value, "%s", es->value); + snprintf(condition_value, sizeof(condition_value), "%s", es->value); } else { fprintf(stderr, "%s %s: Unknown class name: '%s'\n", diff --git a/tests/grib_check_param_concepts.sh b/tests/grib_check_param_concepts.sh index 59ee1c7a1..405e39afd 100755 --- a/tests/grib_check_param_concepts.sh +++ b/tests/grib_check_param_concepts.sh @@ -95,5 +95,23 @@ cp $ECMF_DIR/shortName.legacy.def shortName.def cp $ECMF_DIR/units.legacy.def units.def $CHECK_DEFS +# ------------------------------- +echo "Check duplicates" +# ------------------------------- +paramIdFile=$ECCODES_DEFINITION_PATH/grib2/paramId.def +pids=$(grep "^'" $paramIdFile | awk -F"'" '{printf "%s\n", $2}') +set +e +for p in $pids; do + # For each paramId found in the top-level WMO file, check if it also exists + # in the ECMWF local one + grep "'$p'" $ECCODES_DEFINITION_PATH/grib2/localConcepts/ecmf/paramId.def + if [ $? -ne 1 ]; then + echo "ERROR: check paramId $p. Is it duplicated?" + exit 1 + fi +done +set -e + + cd $test_dir rm -fr $tempDir diff --git a/tests/grib_complex.sh b/tests/grib_complex.sh index 05f5663e8..9fba2c28b 100755 --- a/tests/grib_complex.sh +++ b/tests/grib_complex.sh @@ -29,3 +29,11 @@ for file in $files; do rm -f $temp $temp1 $temp2 done + +# ECC-523 +infile=${data_dir}/gfs.complex.mvmu.grib2 +grib_check_key_equals $infile 'missingValueManagementUsed,bitmapPresent' '1 0' +grib_check_key_equals $infile 'numberOfMissing,numberOfMissingValues' '556901 556901' +infile=${data_dir}/gfs.c255.grib2 +grib_check_key_equals $infile 'missingValueManagementUsed,bitmapPresent' '0 1' +grib_check_key_equals $infile 'numberOfMissing,numberOfMissingValues' '7665 7665' diff --git a/tests/grib_ecc-1406.sh b/tests/grib_ecc-1406.sh index ace8e0031..38d9d34c8 100755 --- a/tests/grib_ecc-1406.sh +++ b/tests/grib_ecc-1406.sh @@ -41,7 +41,6 @@ ${tools_dir}/grib_filter -o $tempGrib $tempFilt $sample2 ${tools_dir}/grib_ls -l 37.5,16.0,1 $tempGrib > $tempOut grep -q "Grid Point chosen #1 index=5016590" $tempOut -grep -q "grid_simple 42" $tempOut ${tools_dir}/grib_ls -j -l 37.5,16.0,1 $tempGrib > $tempOut grep -q 'latitude" : 37.5, "longitude" : 16, "distance" : 0,.*"value" : 42 ,' $tempOut diff --git a/tests/grib_encode_pthreads.c b/tests/grib_encode_pthreads.c index ab752ba21..44a69eafc 100644 --- a/tests/grib_encode_pthreads.c +++ b/tests/grib_encode_pthreads.c @@ -117,7 +117,7 @@ void do_stuff(void* arg) int i; for (i = 0; i < FILES_PER_ITERATION; i++) { - sprintf(output_file, "temp.grib_encode_pthreads_test.out_%d-%d.grib", (int)number, i); + snprintf(output_file, 50, "temp.grib_encode_pthreads_test.out_%d-%d.grib", (int)number, i); encode_file(INPUT_FILE, output_file); } } diff --git a/tests/grib_jpeg.sh b/tests/grib_jpeg.sh index 25b7a49fe..ddf5868f9 100755 --- a/tests/grib_jpeg.sh +++ b/tests/grib_jpeg.sh @@ -10,6 +10,8 @@ . ./include.ctest.sh +label="grib_jpeg_test" + REDIRECT=/dev/null BLACKLIST="totalLength,section5Length,section7Length,dataRepresentationTemplateNumber,typeOfPacking" @@ -102,3 +104,24 @@ if [ "x$HAVE_LIBOPENJPEG" != x ]; then do_tests fi fi + +# ECC-802 +# ------- +sample2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +tempFilt=temp.$label.filt +tempGrib=temp.$label.grib +cat > $tempFilt </dev/null +grib_check_key_equals $tempGrib 'packingType,numberOfValues' 'grid_jpeg 4' +stats=`${tools_dir}/grib_get -M -F%.2f -p min,max $tempGrib` +[ "$stats" = "-0.01 98.99" ] + + +rm -f $tempFilt $tempGrib diff --git a/tests/grib_keys_iter.c b/tests/grib_keys_iter.c index efdba87fa..d0f368021 100644 --- a/tests/grib_keys_iter.c +++ b/tests/grib_keys_iter.c @@ -1,3 +1,12 @@ +/* + * (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 diff --git a/tests/grib_lam_bf.c b/tests/grib_lam_bf.c index bbe79315a..c7170a192 100644 --- a/tests/grib_lam_bf.c +++ b/tests/grib_lam_bf.c @@ -1,9 +1,18 @@ +/* + * (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 -#include "grib_api.h" +#include "grib_api_internal.h" /* * Test encoding of LAM spectral fields @@ -787,7 +796,7 @@ int main(int argc, char* argv[]) FILE* fp; size_t size; const void* buffer = NULL; - sprintf(f, "lam_bf_%s_%s.grib", grids[igrid], trunc[itrunc].name); + snprintf(f, 128, "lam_bf_%s_%s.grib", grids[igrid], trunc[itrunc].name); fp = fopen(f, "wb"); GRIB_CHECK(grib_get_message(h, &buffer, &size), 0); if (fwrite(buffer, 1, size, fp) != size) { @@ -811,7 +820,7 @@ int main(int argc, char* argv[]) long int nsmax, nmsmax; char geometry[128]; - sprintf(f, "lam_bf_%s_%s.grib", grids[igrid], trunc[itrunc].name); + snprintf(f, 128, "lam_bf_%s_%s.grib", grids[igrid], trunc[itrunc].name); fp = fopen(f, "rb"); h = grib_handle_new_from_file(0, fp, &err); vals = (double*)malloc(sizeof(double) * trunc[itrunc].len); diff --git a/tests/grib_lam_gp.c b/tests/grib_lam_gp.c index 5708bb6b4..38b2178ed 100644 --- a/tests/grib_lam_gp.c +++ b/tests/grib_lam_gp.c @@ -1,9 +1,18 @@ +/* + * (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 -#include "grib_api.h" +#include "grib_api_internal.h" /* * Test encoding of grid-point LAM fields @@ -915,7 +924,7 @@ int main(int argc, char* argv[]) FILE* fp; size_t size; const void* buffer = NULL; - sprintf(f, "lam_gp_%s.grib", grids[igrid]); + snprintf(f, 128, "lam_gp_%s.grib", grids[igrid]); fp = fopen(f, "wb"); GRIB_CHECK(grib_get_message(h, &buffer, &size), 0); if (fwrite(buffer, 1, size, fp) != size) { @@ -938,7 +947,7 @@ int main(int argc, char* argv[]) long int Nux, Nuy, Ncx, Ncy; char geometry[128]; - sprintf(f, "lam_gp_%s.grib", grids[igrid]); + snprintf(f, 128, "lam_gp_%s.grib", grids[igrid]); fp = fopen(f, "rb"); h = grib_handle_new_from_file(0, fp, &err); vals = (double*)malloc(sizeof(double) * 4096); diff --git a/tests/grib_ls.sh b/tests/grib_ls.sh index 246a8c20c..88036b633 100755 --- a/tests/grib_ls.sh +++ b/tests/grib_ls.sh @@ -13,9 +13,22 @@ tempLog=temp.ls.log rm -f $tempLog +sample_g1="$ECCODES_SAMPLES_PATH/GRIB1.tmpl" +sample_g2="$ECCODES_SAMPLES_PATH/GRIB2.tmpl" + cd ${data_dir} infile=regular_gaussian_model_level.grib1 +# Basic test of man page +set +e +${tools_dir}/grib_ls > $tempLog +status=$? +set -e +[ $status -eq 1 ] +grep -q "Full documentation and examples at" $tempLog +grep -q "https://confluence.ecmwf.int/display/ECC/grib_ls" $tempLog + + ${tools_dir}/grib_ls -P count $infile > $tempLog ${tools_dir}/grib_ls -p count,step $infile >> $tempLog ${tools_dir}/grib_ls $infile >> $tempLog @@ -89,11 +102,11 @@ grep -q 'Point chosen #2 index=749 .* distance=204\.' $temp_ls # 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 $ECCODES_SAMPLES_PATH/GRIB1.tmpl +${tools_dir}/grib_ls -n data $sample_g1 # Angle subdivisions -grib_check_key_equals $ECCODES_SAMPLES_PATH/GRIB1.tmpl angleSubdivisions 1000 -grib_check_key_equals $ECCODES_SAMPLES_PATH/GRIB2.tmpl angleSubdivisions 1000000 +grib_check_key_equals $sample_g1 angleSubdivisions 1000 +grib_check_key_equals $sample_g2 angleSubdivisions 1000000 # Print 'offset' key as string and integer temp1=temp.grib_ls.1.txt @@ -102,5 +115,9 @@ ${tools_dir}/grib_ls -p offset:s tigge_cf_ecmwf.grib2 > $temp1 ${tools_dir}/grib_ls -p offset:i tigge_cf_ecmwf.grib2 > $temp2 diff $temp1 $temp2 +# Section pointers +grib_check_key_equals $sample_g2 'section0Pointer,section1Pointer,section3Pointer,section4Pointer' '0_16 16_21 37_72 109_34' + + rm -f $temp1 $temp2 rm -f $temp_ls diff --git a/tests/grib_optimize_scaling.c b/tests/grib_optimize_scaling.c index 192840e4c..fac0fdb62 100644 --- a/tests/grib_optimize_scaling.c +++ b/tests/grib_optimize_scaling.c @@ -8,7 +8,7 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -#include "grib_api.h" +#include "grib_api_internal.h" /* * Test the use of optimizeScaleFactor; on the following field, the packing error diff --git a/tests/grib_optimize_scaling_sh.c b/tests/grib_optimize_scaling_sh.c index 6cb1b3afd..053fcd1f3 100644 --- a/tests/grib_optimize_scaling_sh.c +++ b/tests/grib_optimize_scaling_sh.c @@ -8,7 +8,7 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -#include "grib_api.h" +#include "grib_api_internal.h" /* * Check that optimizeScaleFactor=1 reduces the error on spherical harmonics encoding. Check that sub-truncation is preserved in IEEE-32 precision. diff --git a/tests/grib_packing_order.c b/tests/grib_packing_order.c index e8cb2830a..4fe8d2df8 100644 --- a/tests/grib_packing_order.c +++ b/tests/grib_packing_order.c @@ -24804,7 +24804,7 @@ int main(int argc, char** argv) int check = 1; if (argc != 4) usage(argv[0]); - + packing_type = argv[1]; if (strcmp(argv[2], "packing_type_before_values")==0) packing_stage = PACKING_TYPE_BEFORE_VALUES; @@ -24818,7 +24818,7 @@ int main(int argc, char** argv) fprintf(stderr,"Using sample_filename = %s\n", sample_filename); h = grib_handle_new_from_samples(0, sample_filename); Assert(h); - + if (strcmp(packing_type, "grid_second_order")==0 && packing_stage == VALUES_BEFORE_PACKING_TYPE) { check = 0; /* TDOD */ } @@ -24828,15 +24828,15 @@ int main(int argc, char** argv) fprintf(stderr,"Set packingType to %s\n", packing_type); GRIB_CHECK(grib_set_string(h, "packingType", packing_type, &str_len), 0); } - + fprintf(stderr,"Set values. values_len=%lu\n", (unsigned long)values_len); GRIB_CHECK(grib_set_double_array(h, "values", values, values_len), 0); - + if (packing_stage == VALUES_BEFORE_PACKING_TYPE) { fprintf(stderr, "Set packingType to %s\n", packing_type); GRIB_CHECK(grib_set_string(h, "packingType", packing_type, &str_len), 0); } - + GRIB_CHECK(grib_write_message(h, outfile_name, "w"), 0); fprintf(stderr, "%s checks on decoded values '%s' (%s) ...\n", @@ -24848,7 +24848,7 @@ int main(int argc, char** argv) for (i = 0; i < values_len; i++) { const double diff = fabs(values[i] - vals[i]); if (diff > EPSILON) { - fprintf(stderr, "Unpacked value different at i=%lu: original=%.7f decoded=%.7f\n", + fprintf(stderr, "Unpacked value different at i=%zu: original=%.7f decoded=%.7f\n", i, values[i], vals[i]); return 1; } diff --git a/tests/grib_png.sh b/tests/grib_png.sh index 5d28981a3..3b151ea35 100755 --- a/tests/grib_png.sh +++ b/tests/grib_png.sh @@ -18,11 +18,18 @@ temp2=${label}".2.tmp" files=" reduced_gaussian_model_level.grib2 reduced_gaussian_sub_area.grib2 + regular_gaussian_model_level.grib2 regular_latlon_surface_constant.grib2 + test_file.grib2 + constant_field.grib2 " +if [ $HAVE_AEC -eq 1 ]; then + files="ccsds.grib2 "$files +fi + if [ $HAVE_JPEG -eq 1 ]; then - files="v.grib2"$files + files="jpeg.grib2 reduced_gaussian_surface_jpeg.grib2 "$files fi # TODO: For the following the PNG packing fails with an assert! diff --git a/tests/grib_set_force.c b/tests/grib_set_force.c index 93bcd771b..fdc9b4694 100644 --- a/tests/grib_set_force.c +++ b/tests/grib_set_force.c @@ -175,14 +175,14 @@ int main(int argc, char** argv) Assert(num_all_vals == numberOfDataPoints); /*Sanity check*/ GRIB_CHECK(grib_set_long(h, "bitmapPresent", 1), 0); GRIB_CHECK(grib_set_double(h, "missingValue", missing), 0); - printf("Fully specified: %ld values\n", num_all_vals); + printf("Fully specified: %zu values\n", num_all_vals); GRIB_CHECK(grib_set_double_array(h, "values", values, num_all_vals), 0); } else { const size_t num_coded_vals = sizeof(codedValues) / sizeof(codedValues[0]); Assert(strcmp(mode, "coded_values") == 0); Assert(num_coded_vals < numberOfDataPoints); /*Sanity check*/ - printf("Partially specified: %ld values\n", num_coded_vals); + printf("Partially specified: %zu values\n", num_coded_vals); GRIB_CHECK(grib_set_force_double_array(h, "codedValues", codedValues, num_coded_vals), 0); } diff --git a/tests/grib_set_force.sh b/tests/grib_set_force.sh index 9153eb86e..3fe85d458 100755 --- a/tests/grib_set_force.sh +++ b/tests/grib_set_force.sh @@ -10,8 +10,6 @@ . ./include.ctest.sh -REDIRECT=/dev/null - label="grib_set_force_test" tempInput=temp.$label.input.grib2 diff --git a/tests/grib_sh_ieee64.c b/tests/grib_sh_ieee64.c index e9f32e2ce..15209cdab 100644 --- a/tests/grib_sh_ieee64.c +++ b/tests/grib_sh_ieee64.c @@ -11,7 +11,7 @@ #include #include -#include "grib_api.h" +#include "grib_api_internal.h" /* * Check that encoding of sub-truncation using IEEE64 works. diff --git a/tests/grib_sh_spectral_complex.c b/tests/grib_sh_spectral_complex.c index d9340f713..188736e14 100644 --- a/tests/grib_sh_spectral_complex.c +++ b/tests/grib_sh_spectral_complex.c @@ -42,7 +42,7 @@ int main(int argc, char* argv[]) printf("Encode values...\n"); GRIB_CHECK(grib_set_double_array(h, "values", values, ILCHAM), 0); - + /* Write to a temporary GRIB file */ printf("Save to GRIB %s...\n",TEMPFILE); fout = fopen(TEMPFILE, "wb"); @@ -51,7 +51,7 @@ int main(int argc, char* argv[]) Assert(!"Failed to write data"); } fclose(fout); - + printf("Decode values and compare...\n"); len = ILCHAM; GRIB_CHECK(grib_get_double_array(h, "values", zval, &len), 0); @@ -76,7 +76,7 @@ int main(int argc, char* argv[]) } GRIB_CHECK(grib_handle_delete(h), 0); - + /* Read in the saved GRIB file */ printf("Load values from saved file and compare....\n"); fin = fopen(TEMPFILE, "rb"); Assert(fin); diff --git a/tests/grib_threads_ecc-604-encode.c b/tests/grib_threads_ecc-604-encode.c index 992a5c78f..d2438e299 100644 --- a/tests/grib_threads_ecc-604-encode.c +++ b/tests/grib_threads_ecc-604-encode.c @@ -1,3 +1,12 @@ +/* + * (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. + */ /* * Test for ECC-604: GRIB decoding/encoding sequentially and parallel with POSIX threads */ @@ -87,7 +96,7 @@ int main(int argc, char** argv) } { - pthread_t* workers = malloc(NUM_THREADS * sizeof(pthread_t)); + pthread_t* workers = (pthread_t*)malloc(NUM_THREADS * sizeof(pthread_t)); for (i = 0; i < NUM_THREADS; i++) { struct v* data = (struct v*)malloc(sizeof(struct v)); data->number = i; @@ -124,7 +133,7 @@ void* runner(void* ptr) void do_encode(void* ptr) { /* Cast argument to struct v pointer */ - struct v* data = ptr; + struct v* data = (struct v*)ptr; size_t i; char output_file[50]; time_t ltime; @@ -137,7 +146,7 @@ void do_encode(void* ptr) for (i = 0; i < FILES_PER_ITERATION; i++) { grib_handle* h = grib_handle_clone(hs); if (opt_write) { - sprintf(output_file, "output/output_file_%ld-%ld.grib", data->number, i); + snprintf(output_file, 50, "output/output_file_%ld-%ld.grib", data->number, i); encode_values(h, output_file); } else { diff --git a/tests/grib_threads_ecc-604.c b/tests/grib_threads_ecc-604.c index e553b65c1..c09d2ea91 100644 --- a/tests/grib_threads_ecc-604.c +++ b/tests/grib_threads_ecc-604.c @@ -1,3 +1,12 @@ +/* + * (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. + */ /* * Test for ECC-604: GRIB decoding/encoding sequentially and parallel with POSIX threads */ @@ -137,7 +146,7 @@ int main(int argc, char** argv) } { - pthread_t* workers = malloc(NUM_THREADS * sizeof(pthread_t)); + pthread_t* workers = (pthread_t*)malloc(NUM_THREADS * sizeof(pthread_t)); for (i = 0; i < NUM_THREADS; i++) { struct v* data = (struct v*)malloc(sizeof(struct v)); data->number = i; @@ -175,7 +184,7 @@ void* runner(void* ptr) void do_stuff(void* ptr) { /* Cast argument to struct v pointer */ - struct v* data = ptr; + struct v* data = (struct v*)ptr; size_t i; char output_file[50]; time_t ltime; @@ -184,7 +193,7 @@ void do_stuff(void* ptr) for (i = 0; i < FILES_PER_ITERATION; i++) { if (opt_write) { - sprintf(output_file, "output/output_file_%ld-%ld.grib", data->number, i); + snprintf(output_file, 50, "output/output_file_%ld-%ld.grib", data->number, i); encode_file(INPUT_FILE, output_file); } else { diff --git a/tests/grib_util_set_spec.c b/tests/grib_util_set_spec.c index 5f21d940e..a2a4b4756 100644 --- a/tests/grib_util_set_spec.c +++ b/tests/grib_util_set_spec.c @@ -284,8 +284,7 @@ static void test_grid_complex_spatial_differencing(int remove_local_def, int edi CODES_CHECK(codes_get_size(handle,"values",&inlen), 0); values = (double*)malloc(sizeof(double)*inlen); CODES_CHECK(codes_get_double_array(handle, "values", values,&inlen), 0); - - + CODES_CHECK(codes_get_double(handle, "max", &theMax),0); CODES_CHECK(codes_get_double(handle, "min", &theMin),0); CODES_CHECK(codes_get_double(handle, "average",&theAverage),0); diff --git a/tests/gribex_perf.c b/tests/gribex_perf.c index a229dcf02..89628b0de 100644 --- a/tests/gribex_perf.c +++ b/tests/gribex_perf.c @@ -312,7 +312,7 @@ int main(int argc, char* argv[]) { fclose(fin); - if (append) + if (append) fout = fopen(ofilename,"ab"); else fout = fopen(ofilename,"wb"); @@ -376,7 +376,7 @@ int main(int argc, char* argv[]) { sprintf(grid,"T%ld",J); } - if (!append) + if (!append) fprintf(fout, "shortName gridType numberOfValues bitsPerValue grid encodeso encodeSimple decodeso decodeSimple\n"); @@ -384,7 +384,7 @@ int main(int argc, char* argv[]) { /* decode values grib_api */ grib_timer_start(tdga); - for (count=0;count ../src/grib_hash_keys.c diff --git a/tests/packing.c b/tests/packing.c index c568c4576..59ceaef06 100644 --- a/tests/packing.c +++ b/tests/packing.c @@ -295,10 +295,10 @@ int statistics(grib_context* c, double err_threshold,double* values, } if (gribex_grib_errmax > err_threshold) { printf(" gribex_grib_errmax=%.5e gribex_grib_ierrmax=%d\n",gribex_grib_errmax,gribex_grib_ierrmax); - if (values[gribex_grib_ierrmax]!=0) + if (values[gribex_grib_ierrmax]!=0) error=(gribex_values[gribex_grib_ierrmax]-values[gribex_grib_ierrmax])/values[gribex_grib_ierrmax]; printf("v[%d]=%.15e err=%.15e (gribex)\n",gribex_grib_ierrmax,gribex_values[gribex_grib_ierrmax],error); - if (values[gribex_grib_ierrmax]!=0) + if (values[gribex_grib_ierrmax]!=0) error=(grib_values[gribex_grib_ierrmax]-values[gribex_grib_ierrmax])/values[gribex_grib_ierrmax]; printf("v[%d]=%.15e err=%.15e (grib_api)\n",gribex_grib_ierrmax,grib_values[gribex_grib_ierrmax],error); printf("v[%d]=%.15e \n",gribex_grib_ierrmax,values[gribex_grib_ierrmax]); @@ -450,7 +450,7 @@ int main(int argc, char* argv[]) { /* calculate P factor */ lval=-32767; - if (calculateP) + if (calculateP) GRIB_CHECK(grib_set_long(h,"P",lval),0); /* encode/decode with grib_api */ diff --git a/tests/packing_check.c b/tests/packing_check.c index 7a98d30f4..510bf82fe 100644 --- a/tests/packing_check.c +++ b/tests/packing_check.c @@ -263,8 +263,7 @@ int main(int argc, char* argv[]) { gribex_msg_len=length; sec4len=nvalues+100000; gribex_check(cgribex( miss, ksec0,ksec1,ksec2,rsec2,ksec3,rsec3, - ksec4,gvalues,sec4len, (char*)msg,&gribex_msg_len,"D")); - + ksec4,gvalues,sec4len, (char*)msg,&gribex_msg_len,"D")); for (i=0;id_name[0] == '.') continue; - sprintf(tmp,"%s/%s",name,e->d_name); + snprintf(tmp, 1024, "%s/%s",name,e->d_name); scan(tmp); } @@ -53,12 +53,12 @@ void scan(const char* name) struct _finddata_t fileinfo; intptr_t handle; char tmp[1024]; - sprintf(tmp, "%s/*", name); + snprintf(tmp, 1024, "%s/*", name); if((handle = _findfirst(tmp, &fileinfo)) != -1) { do { if(fileinfo.name[0] != '.') { - sprintf(tmp, "%s/%s", name, fileinfo.name); + snprintf(tmp, 1024, "%s/%s", name, fileinfo.name); scan(tmp); } } while(!_findnext(handle, &fileinfo)); diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index c93047b3e..5d97a110d 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -68,12 +68,21 @@ endforeach() # Install extra tools # User must run cmake with -DECCODES_INSTALL_EXTRA_TOOLS=ON foreach( tool ${ecc_tools_binaries_extra} ) + if( HAVE_EXPERIMENTAL_BUILD_WITH_CXX ) + set_source_files_properties(${tool}.c PROPERTIES LANGUAGE CXX) + endif() ecbuild_add_executable( TARGET ${tool} SOURCES ${tool}.c CONDITION ECCODES_INSTALL_EXTRA_TOOLS LIBS ecc_tools ) endforeach() +if( HAVE_EXPERIMENTAL_BUILD_WITH_CXX ) + set_source_files_properties(bufr_filter.c PROPERTIES LANGUAGE CXX) + set_source_files_properties(codes_count.c PROPERTIES LANGUAGE CXX) + set_source_files_properties(grib_to_netcdf.c PROPERTIES LANGUAGE CXX) +endif() + # grib_count/bufr_count etc. Same source code, different executable names ecbuild_add_executable( TARGET grib_count SOURCES codes_count.c diff --git a/tools/bufr_compare.c b/tools/bufr_compare.c index 57037796a..fd332aa94 100644 --- a/tools/bufr_compare.c +++ b/tools/bufr_compare.c @@ -45,8 +45,9 @@ const char* tool_description = "\n\tFloating-point values are compared exactly by default, different tolerances can be defined (see -A -R)." "\n\tDefault behaviour: absolute error=0, bit-by-bit compare, same order in files."; -const char* tool_name = "bufr_compare"; -const char* tool_usage = "[options] bufr_file1 bufr_file2"; +const char* tool_name = "bufr_compare"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/bufr_compare"; +const char* tool_usage = "[options] bufr_file1 bufr_file2"; GRIB_INLINE static int grib_inline_strcmp(const char* a, const char* b) { @@ -155,7 +156,7 @@ static void write_message(grib_handle* h, const char* str) FILE* fh; grib_get_message(h, &m, &s); - sprintf(fname, "%s_%d.bufr", str, write_count); + snprintf(fname, sizeof(fname), "%s_%d.bufr", str, write_count); fh = fopen(fname, "w"); if (!fh) { @@ -381,7 +382,7 @@ int grib_tool_init(grib_runtime_options* options) /* Take the filename of the 1st file and append to dir */ char bufr[2048] = {0,}; /* options->infile_extra->name is the 1st file */ - sprintf(bufr, "%s%c%s", + snprintf(bufr, sizeof(bufr), "%s%c%s", infile->name, get_dir_separator_char(), extract_filename(options->infile_extra->name)); @@ -559,8 +560,7 @@ int grib_tool_finalise_action(grib_runtime_options* options) while ((global_handle = codes_bufr_handle_new_from_file(c, options->infile_extra->file, &err))) { morein1++; - if (global_handle) - grib_handle_delete(global_handle); + grib_handle_delete(global_handle); } error += morein1 + morein2; @@ -636,9 +636,9 @@ static char* double_as_string(grib_context* c, double v) { char* sval = (char*)grib_context_malloc_clear(c, sizeof(char) * 40); if (v == GRIB_MISSING_DOUBLE) - sprintf(sval, "MISSING"); + snprintf(sval, 32, "MISSING"); else - sprintf(sval, "%.20e", v); + snprintf(sval, 32, "%.20e", v); return sval; } @@ -889,7 +889,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g if (err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1 != len2) { printInfo(handle1); - printf("Different size for \"%s\" [%ld] [%ld]\n", name, (long)len1, (long)len2); + printf("Different size for \"%s\" [%zu] [%zu]\n", name, len1, len2); err1 = GRIB_INTERNAL_ERROR; save_error(c, name); } @@ -907,7 +907,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g if (len1 == 1) printf("string [%s]: [%s] != [%s]\n", name, *svals1, *svals2); else - printf("string [%s] %d out of %ld different\n", name, countdiff, (long)len1); + printf("string [%s] %d out of %zu different\n", name, countdiff, len1); } } for (ii = 0; ii < len1; ++ii) grib_context_free(c, svals1[ii]); @@ -945,12 +945,12 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g if (err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1 != len2) { printInfo(handle1); - printf("Different size for \"%s\" [%ld] [%ld]\n", name, (long)len1, (long)len2); + printf("Different size for \"%s\" [%zu] [%zu]\n", name, len1, len2); err1 = GRIB_INTERNAL_ERROR; save_error(c, name); } if (err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1 == len2) { - int ii; + size_t ii; countdiff = 0; for (ii = 0; ii < len1; ii++) if (lval1[ii] != lval2[ii]) @@ -963,7 +963,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g if (len1 == 1) printf("long [%s]: [%ld] != [%ld]\n", name, *lval1, *lval2); else - printf("long [%s] %d out of %ld different\n", name, countdiff, (long)len1); + printf("long [%s] %d out of %zu different\n", name, countdiff, len1); } } @@ -1030,7 +1030,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g if (err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1 != len2) { printInfo(handle1); - printf("Different size for \"%s\" [%ld] [%ld]\n", name, (long)len1, (long)len2); + printf("Different size for \"%s\" [%zu] [%zu]\n", name, len1, len2); save_error(c, name); } if (err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1 == len2) { @@ -1074,7 +1074,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g printInfo(handle1); save_error(c, name); if (len1 > 1) { - printf("double [%s]: %d out of %ld different\n", name, countdiff, (long)len1); + printf("double [%s]: %d out of %zu different\n", name, countdiff, len1); if (dval1[imaxdiff] != GRIB_MISSING_DOUBLE && dval2[imaxdiff] != GRIB_MISSING_DOUBLE) { if (compareAbsolute) printf(" max"); @@ -1238,8 +1238,9 @@ static int compare_attribute(grib_handle* handle1, grib_handle* handle2, grib_ru { int ret = 0; grib_context* c = handle1->context; - char* fullname = (char*)grib_context_malloc_clear(c, sizeof(char) * (strlen(a->name) + strlen(prefix) + 5)); - sprintf(fullname, "%s->%s", prefix, a->name); + const size_t fullnameMaxLen = strlen(a->name) + strlen(prefix) + 5; + char* fullname = (char*)grib_context_malloc_clear(c, sizeof(char) * fullnameMaxLen); + snprintf(fullname, fullnameMaxLen, "%s->%s", prefix, a->name); if (compare_values(options, handle1, handle2, fullname, GRIB_TYPE_UNDEFINED)) { (*err)++; write_messages(handle1, handle2); @@ -1279,9 +1280,8 @@ static int compare_all_dump_keys(grib_handle* handle1, grib_handle* handle2, gri } } iter = grib_keys_iterator_new(handle1, 0, NULL); - if (!iter) { - grib_context_log(context, GRIB_LOG_ERROR, "unable to create keys iterator"); + grib_context_log(context, GRIB_LOG_ERROR, "unable to create the BUFR keys iterator"); exit(1); } @@ -1304,9 +1304,10 @@ static int compare_all_dump_keys(grib_handle* handle1, grib_handle* handle2, gri /* Get full name of key, e.g. '#2#windSpeed' or 'blockNumber' */ rank = compute_bufr_key_rank(handle1, keys_list, xa->name); if (rank != 0) { - prefix = (char*)grib_context_malloc_clear(context, sizeof(char) * (strlen(xa->name) + 10)); + const size_t prefixMaxLen = strlen(xa->name) + 10; + prefix = (char*)grib_context_malloc_clear(context, sizeof(char) * prefixMaxLen); dofree = 1; - sprintf(prefix, "#%d#%s", rank, xa->name); + snprintf(prefix, prefixMaxLen, "#%d#%s", rank, xa->name); } else { prefix = (char*)xa->name; diff --git a/tools/bufr_copy.c b/tools/bufr_copy.c index cc8dedc19..7b91cab1a 100644 --- a/tools/bufr_copy.c +++ b/tools/bufr_copy.c @@ -8,19 +8,15 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: bufr_copy - * - */ - #include "grib_tools.h" const char* tool_description = "Copies the content of BUFR files printing" " values of some keys." "\n\tIf the name of the output_bufr_file contains a key enclosed in square brackets, its value will be used."; -const char* tool_name = "bufr_copy"; -const char* tool_usage = "[options] bufr_file bufr_file ... output_bufr_file"; +const char* tool_name = "bufr_copy"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/bufr_copy"; +const char* tool_usage = "[options] bufr_file bufr_file ... output_bufr_file"; grib_option grib_options[] = { /* {id, args, help}, on, command_line, value */ diff --git a/tools/bufr_dump.c b/tools/bufr_dump.c index 974195547..ae63965c7 100644 --- a/tools/bufr_dump.c +++ b/tools/bufr_dump.c @@ -8,11 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: bufr_dump - * - */ - #include "grib_tools.h" grib_option grib_options[] = { @@ -41,7 +36,7 @@ grib_option grib_options[] = { /*{"S",0,0,1,0,0},*/ { "O", 0, "Octet mode. WMO documentation style dump.\n", 0, 1, 0 }, - { "p", 0, "Plain dump (key=value format).\n", 0, 1, 0 }, + { "p", 0, "Plain/Flat dump (key=value format).\n", 0, 1, 0 }, /* {"D",0,0,0,1,0}, */ /* See ECC-215 */ { "d", 0, "Dump the expanded descriptors.\n", 0, 1, 0 }, /*{"u",0,"Print only some values.\n",0,1,0},*/ @@ -64,6 +59,7 @@ grib_option grib_options[] = { const char* tool_description = "Dump the content of a BUFR file in different formats."; const char* tool_name = "bufr_dump"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/bufr_dump"; const char* tool_usage = "[options] bufr_file bufr_file ..."; static int json = 0; static int dump_descriptors = 0; @@ -232,7 +228,7 @@ int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* fi } else { char tmp[1024]; - sprintf(tmp, "FILE: %s ", options->current_infile->name); + snprintf(tmp, sizeof(tmp), "FILE: %s ", options->current_infile->name); if (!grib_options_on("p")) fprintf(stdout, "***** %s\n", tmp); } @@ -532,7 +528,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) } else if (grib_options_on("O")) { char tmp[1024]; - sprintf(tmp, "MESSAGE %d ( length=%ld )", options->handle_count, length); + snprintf(tmp, sizeof(tmp), "MESSAGE %d ( length=%ld )", options->handle_count, length); if (!grib_options_on("C")) fprintf(stdout, "#============== %-38s ==============\n", tmp); grib_dump_content(h, stdout, options->dump_mode, options->dump_flags, 0); diff --git a/tools/bufr_filter.c b/tools/bufr_filter.c index cd0f9b428..bee0fe2da 100644 --- a/tools/bufr_filter.c +++ b/tools/bufr_filter.c @@ -8,11 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: bufr_filter - * - */ - #include "grib_tools.h" grib_option grib_options[] = { @@ -34,10 +29,10 @@ const char* tool_description = "Apply the rules defined in rules_file to each BUFR " "message\n\tin the BUFR files provided as arguments.\n\t" "If you specify '-' (a single dash) for the rules_file, the rules will be read from standard input."; -const char* tool_name = "bufr_filter"; -const char* tool_usage = - "[options] rules_file " - "bufr_file bufr_file ..."; +const char* tool_name = "bufr_filter"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/bufr_filter"; +const char* tool_usage = "[options] rules_file " + "bufr_file bufr_file ..."; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); diff --git a/tools/bufr_get.c b/tools/bufr_get.c index 73bfce41a..57664a7ce 100644 --- a/tools/bufr_get.c +++ b/tools/bufr_get.c @@ -8,11 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: bufr_get - * - */ - #include "grib_tools.h" grib_option grib_options[] = { @@ -39,8 +34,9 @@ const char* tool_description = "Get values of some header keys from a BUFR file." "\n\tIt is similar to bufr_ls, but fails returning an error code " "\n\twhen an error occurs (e.g. key not found)."; -const char* tool_name = "bufr_get"; -const char* tool_usage = "[options] file file ..."; +const char* tool_name = "bufr_get"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/bufr_get"; +const char* tool_usage = "[options] file file ..."; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); @@ -88,6 +84,11 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) exit(err); } + if (options->current_infile && options->current_infile->name) { + size_t size = strlen(options->current_infile->name); + grib_set_string(h, "file", options->current_infile->name, &size); + } + return 0; } diff --git a/tools/bufr_index_build.c b/tools/bufr_index_build.c index aa5041f2d..12dcf7bf5 100644 --- a/tools/bufr_index_build.c +++ b/tools/bufr_index_build.c @@ -8,21 +8,17 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: bufr_index_build - * - */ - #include "grib_tools.h" const char* tool_description = "Build an index file for a set of input BUFR files.\n" "\tWarning: THIS TOOL IS STILL EXPERIMENTAL"; -const char* tool_name = "bufr_index_build"; -const char* tool_usage = "[options] file file ... "; +const char* tool_name = "bufr_index_build"; +const char* tool_online_doc = NULL; +const char* tool_usage = "[options] file file ... "; grib_index* idx = NULL; -char* keys; -char* default_keys = "mars"; +const char* keys; +const char* default_keys = "mars"; grib_option grib_options[] = { /* {id, args, help}, on, command_line, value */ diff --git a/tools/bufr_ls.c b/tools/bufr_ls.c index 461f69f25..556d85407 100644 --- a/tools/bufr_ls.c +++ b/tools/bufr_ls.c @@ -8,10 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: bufr_ls - * - */ #include "grib_tools.h" grib_option grib_options[] = { @@ -42,6 +38,7 @@ const char* tool_description = "some header keys.\n\tOnly scalar keys can be printed." "\n\tIt does not fail when a key is not found."; const char* tool_name = "bufr_ls"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/bufr_ls"; const char* tool_usage = "[options] bufr_file bufr_file ..."; static int first_handle = 1; diff --git a/tools/bufr_set.c b/tools/bufr_set.c index 78dc8e959..272e78592 100644 --- a/tools/bufr_set.c +++ b/tools/bufr_set.c @@ -8,9 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: bufr_set - */ #include "grib_tools.h" grib_option grib_options[] = { @@ -45,8 +42,9 @@ const char* tool_description = "Sets key/value pairs in the input BUFR file and writes" "\n\teach message to the output_file." "\n\tIt fails when an error occurs (e.g. key not found)."; -const char* tool_name = "bufr_set"; -const char* tool_usage = "[options] file file ... output_file"; +const char* tool_name = "bufr_set"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/bufr_set"; +const char* tool_usage = "[options] file file ... output_file"; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); diff --git a/tools/bufr_split_by_rdbSubtype.c b/tools/bufr_split_by_rdbSubtype.c index b6af983ac..5f7beaf4c 100644 --- a/tools/bufr_split_by_rdbSubtype.c +++ b/tools/bufr_split_by_rdbSubtype.c @@ -31,7 +31,7 @@ static void usage(const char* prog) /* If rdbSubtype can be extracted, return GRIB_SUCCESS otherwise error code. */ /* If BUFR message does not have an ECMWF local section, set rdbSubtype to -1 */ -static int decode_rdbSubtype(const void* message, long* rdbSubtype) +static int decode_rdbSubtype(const void* msg, long* rdbSubtype) { int err = GRIB_SUCCESS; long edition = 0; @@ -49,6 +49,7 @@ static int decode_rdbSubtype(const void* message, long* rdbSubtype) long pos_section1Length = 8 * 8; int ecmwfLocalSectionPresent = 0; + const unsigned char* message = (const unsigned char*)msg; Assert(message); *rdbSubtype = -1; /* default */ @@ -111,7 +112,7 @@ static int split_file_by_subtype(FILE* in, const char* filename, unsigned long* if (!in) return 1; - sprintf(ofilename, "%s", OUTPUT_FILENAME_DEFAULT); /*default name*/ + snprintf(ofilename, 2048, "%s", OUTPUT_FILENAME_DEFAULT); /*default name*/ while (err != GRIB_END_OF_FILE) { mesg = wmo_read_bufr_from_file_malloc(in, 0, &size, &offset, &err); @@ -124,9 +125,9 @@ static int split_file_by_subtype(FILE* in, const char* filename, unsigned long* return status; } - sprintf(ofilename, "%s", OUTPUT_FILENAME_DEFAULT); + snprintf(ofilename, 2048, "%s", OUTPUT_FILENAME_DEFAULT); if (rdbSubtype != -1) - sprintf(ofilename, OUTPUT_FILENAME_SUBTYPE, rdbSubtype); + snprintf(ofilename, 2048, OUTPUT_FILENAME_SUBTYPE, rdbSubtype); if (verbose) { if (!path_is_regular_file(ofilename)) diff --git a/tools/codes_export_resource.c b/tools/codes_export_resource.c index 829b6f199..1511ae762 100644 --- a/tools/codes_export_resource.c +++ b/tools/codes_export_resource.c @@ -27,7 +27,7 @@ static void usage(const char* prog) int main(int argc, char* argv[]) { char* resource_path = NULL; - char* resource_name = NULL; + const char* resource_name = NULL; ResourceType resource_type = UNKNOWN; char* full_path = NULL; char* out_file = NULL; @@ -76,6 +76,7 @@ int main(int argc, char* argv[]) fin = codes_fopen(full_path, "r"); if (!fin) { fprintf(stderr, "Failed to open resource '%s'\n", full_path); + fclose(fout); return 1; } /* write resource bytes to fout */ diff --git a/tools/codes_split_file.c b/tools/codes_split_file.c index 568dfcd89..8896053c1 100644 --- a/tools/codes_split_file.c +++ b/tools/codes_split_file.c @@ -12,7 +12,7 @@ * Description: * Split an input file (GRIB, BUFR etc) into chunks of roughly the same size. * The output files are named input_01, input_02 etc. This is much faster than grib_copy/bufr_copy - * + * * 2019-07-26 W.Qu Allow an input file to be split into each individual message (if nchunk=-1) * */ @@ -34,6 +34,7 @@ static int split_file(FILE* in, const char* filename, const int nchunks, unsigne 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; @@ -44,7 +45,8 @@ static int split_file(FILE* in, const char* filename, const int nchunks, unsigne return 1; /* name of output file */ - ofilename = (char*)calloc(1, strlen(filename) + 10); + ofilenameMaxLen = strlen(filename) + 10; + ofilename = (char*)calloc(1, ofilenameMaxLen); fseeko(in, 0, SEEK_END); insize = ftello(in); @@ -58,7 +60,7 @@ static int split_file(FILE* in, const char* filename, const int nchunks, unsigne } i = 1; - sprintf(ofilename, OUTPUT_FILENAME_FORMAT, filename, i); + snprintf(ofilename, ofilenameMaxLen, OUTPUT_FILENAME_FORMAT, filename, i); out = fopen(ofilename, "w"); if (!out) { perror(ofilename); @@ -82,12 +84,12 @@ static int split_file(FILE* in, const char* filename, const int nchunks, unsigne msg_size += size; if (read_size > chunk_size && msg_size < insize) { if (verbose) - printf("Wrote output file %s (%lu msgs)\n", ofilename, (unsigned long)num_msg); + printf("Wrote output file %s (%zu msgs)\n", ofilename, num_msg); fclose(out); i++; /* Start writing to the next file */ /*printf("=2=%d\t%d\n",*count,msg_size);*/ - sprintf(ofilename, OUTPUT_FILENAME_FORMAT, filename, i); + snprintf(ofilename, ofilenameMaxLen, OUTPUT_FILENAME_FORMAT, filename, i); out = fopen(ofilename, "w"); if (!out) { perror(ofilename); @@ -101,7 +103,7 @@ static int split_file(FILE* in, const char* filename, const int nchunks, unsigne } } if (verbose) - printf("Wrote output file %s (%lu msgs)\n", ofilename, (unsigned long)num_msg - 1); + printf("Wrote output file %s (%zu msgs)\n", ofilename, num_msg - 1); fclose(out); free(ofilename); diff --git a/tools/gg_sub_area_check.c b/tools/gg_sub_area_check.c index c9a45005e..85a7bab60 100644 --- a/tools/gg_sub_area_check.c +++ b/tools/gg_sub_area_check.c @@ -31,7 +31,7 @@ int main(int argc, char* argv[]) double *lat1, *lat2, *lat, *glat; size_t size1, size2, size, gsize; double err1, err2, err; - int i, j; + size_t i, j; grib_context* c; grib_iterator *iter1, *iter2; diff --git a/tools/grib2ppm.c b/tools/grib2ppm.c index 0a20a72d4..cac306481 100644 --- a/tools/grib2ppm.c +++ b/tools/grib2ppm.c @@ -8,8 +8,7 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -#include "grib_api.h" -#include +#include "grib_api_internal.h" #define CMAP_MAX 20480 @@ -186,7 +185,7 @@ int main(int argc, char* argv[]) for (jj = 0; jj < height; jj++) { for (i = 0; i < width; i++) { int m = (i + width / 2) % width + jj * width; - assert(k < count); + Assert(k < count); indices[k++] = m; } } diff --git a/tools/grib_check_gaussian_grid.c b/tools/grib_check_gaussian_grid.c index 0ff8e656c..0a26cea96 100644 --- a/tools/grib_check_gaussian_grid.c +++ b/tools/grib_check_gaussian_grid.c @@ -35,12 +35,13 @@ static int DBL_EQUAL(double d1, double d2, double tolerance) static void usage(const char* prog) { - printf("Usage: %s [-f] [-v] grib_file grib_file ...\n\n", prog); + printf("Usage: %s [-f] [-v] [-V] grib_file grib_file ...\n\n", prog); printf("Check geometry of GRIB fields with a Gaussian Grid.\n"); printf("(The grid is assumed to be GLOBAL)\n\n"); printf("Options:\n"); printf(" -f Do not exit on first error\n"); printf(" -v Verbose\n"); + printf(" -V Print the ecCodes version\n"); printf("\n"); exit(1); } @@ -52,9 +53,9 @@ static void error(const char* filename, int msg_num, const char* fmt, ...) va_list list; va_start(list, fmt); if (verbose) - sprintf(buf, " Error: %s", fmt); /* indent a bit */ + snprintf(buf, sizeof(buf), " Error: %s", fmt); /* indent a bit */ else - sprintf(buf, "Error: %s #%d: %s", filename, msg_num, fmt); + snprintf(buf, sizeof(buf), "Error: %s #%d: %s", filename, msg_num, fmt); vfprintf(stderr, buf, list); va_end(list); @@ -96,35 +97,35 @@ static int process_file(const char* filename) printf("Checking file %s\n", filename); while ((h = grib_handle_new_from_file(0, in, &err)) != NULL) { - int is_reduced = 0, is_regular = 0, grid_ok = 0; + int is_reduced_gaussian = 0, is_regular_gaussian = 0, grid_ok = 0; long edition = 0, N = 0, Nj = 0, numberOfDataPoints; size_t len = 0, sizeOfValuesArray = 0; double* lats = NULL; long* pl = NULL; char gridType[128] = {0,}; double angular_tolerance, lat1, lon1, lat2, lon2, expected_lon2; - double iDirectionIncrementInDegrees; if (err != GRIB_SUCCESS) GRIB_CHECK(err, 0); ++msg_num; GRIB_CHECK(grib_get_long(h, "edition", &edition), 0); - if (verbose) - printf(" Processing GRIB message #%d (edition=%ld)\n", msg_num, edition); len = 32; GRIB_CHECK(grib_get_string(h, "gridType", gridType, &len), 0); - is_regular = STR_EQUAL(gridType, "regular_gg"); - is_reduced = STR_EQUAL(gridType, "reduced_gg"); - grid_ok = is_regular || is_reduced; + is_regular_gaussian = STR_EQUAL(gridType, "regular_gg"); + is_reduced_gaussian = STR_EQUAL(gridType, "reduced_gg"); + grid_ok = is_regular_gaussian || is_reduced_gaussian; if (!grid_ok) { /*error("ERROR: gridType should be Reduced or Regular Gaussian Grid!\n");*/ if (verbose) - printf(" WARNING: gridType=%s. It should be Reduced or Regular Gaussian Grid! Ignoring\n", gridType); + printf(" Note: gridType=%s. Not Gaussian so ignoring\n", gridType); grib_handle_delete(h); continue; } + if (verbose) + printf(" Processing GRIB message #%d (edition=%ld)\n", msg_num, edition); + GRIB_CHECK(grib_get_long(h, "N", &N), 0); GRIB_CHECK(grib_get_long(h, "Nj", &Nj), 0); GRIB_CHECK(grib_get_long(h, "numberOfDataPoints", &numberOfDataPoints), 0); @@ -132,7 +133,6 @@ static int process_file(const char* filename) GRIB_CHECK(grib_get_double(h, "longitudeOfFirstGridPointInDegrees", &lon1), 0); GRIB_CHECK(grib_get_double(h, "latitudeOfLastGridPointInDegrees", &lat2), 0); GRIB_CHECK(grib_get_double(h, "longitudeOfLastGridPointInDegrees", &lon2), 0); - GRIB_CHECK(grib_get_double(h, "iDirectionIncrementInDegrees", &iDirectionIncrementInDegrees), 0); angular_tolerance = get_precision(edition); @@ -165,15 +165,21 @@ static int process_file(const char* filename) error(filename, msg_num, "latitudeOfLastGridPointInDegrees=%f but should be %f\n", lat2, lats[Nj - 1]); } - if (is_reduced) { + if (is_reduced_gaussian) { int pl_sum = 0, max_pl = 0, is_missing_Ni = 0, is_missing_Di = 0; size_t i = 0, pl_len = 0; long is_octahedral = 0; long interpretationOfNumberOfPoints = 0; + long iDirectionIncrementGiven = 0; + is_missing_Ni = grib_is_missing(h, "Ni", &err); assert(err == GRIB_SUCCESS); is_missing_Di = grib_is_missing(h, "iDirectionIncrement", &err); assert(err == GRIB_SUCCESS); + GRIB_CHECK(grib_get_long(h, "iDirectionIncrementGiven", &iDirectionIncrementGiven), 0); + if (iDirectionIncrementGiven) { + error(filename, msg_num, "For a reduced grid, iDirectionIncrementGiven should be 0\n"); + } if (!is_missing_Ni) { error(filename, msg_num, "For a reduced grid, Ni should be missing\n"); } @@ -181,15 +187,9 @@ static int process_file(const char* filename) error(filename, msg_num, "For a reduced grid, iDirectionIncrement should be missing\n"); } - GRIB_CHECK(grib_get_long(h, "interpretationOfNumberOfPoints", &interpretationOfNumberOfPoints), 0); - if (interpretationOfNumberOfPoints != 1) { - error(filename, msg_num, "For a reduced grid, interpretationOfNumberOfPoints should be 1 " - "(See Code Table 3.11)\n"); - } - GRIB_CHECK(grib_get_size(h, "pl", &pl_len), 0); assert(pl_len > 0); - if (pl_len != 2 * N) { + if (pl_len != (size_t)(2 * N)) { error(filename, msg_num, "Length of pl array is %ld but should be 2*N (%ld)\n", pl_len, 2 * N); } pl = (long*)malloc(pl_len * sizeof(long)); @@ -223,6 +223,12 @@ static int process_file(const char* filename) expected_lon2 = 360.0 - 360.0 / max_pl; } free(pl); + + GRIB_CHECK(grib_get_long(h, "interpretationOfNumberOfPoints", &interpretationOfNumberOfPoints), 0); + if (interpretationOfNumberOfPoints != 1) { + error(filename, msg_num, "For a reduced grid, interpretationOfNumberOfPoints should be 1 " + "(See Code Table 3.11)\n"); + } } if (fabs(lon2 - expected_lon2) > angular_tolerance) { @@ -230,7 +236,7 @@ static int process_file(const char* filename) } GRIB_CHECK(grib_get_size(h, "values", &sizeOfValuesArray), 0); - if (sizeOfValuesArray != numberOfDataPoints) { + if (sizeOfValuesArray != (size_t)numberOfDataPoints) { error(filename, msg_num, "Number of data points %d different from size of values array %d\n", numberOfDataPoints, sizeOfValuesArray); } @@ -262,6 +268,12 @@ int main(int argc, char** argv) } exit_on_error = 0; } + else if (STR_EQUAL(arg, "-V")) { + printf("\necCodes Version "); + grib_print_api_version(stdout); + printf("\n\n"); + return 0; + } else if (STR_EQUAL(arg, "-v")) { if (argc < 3) { usage(argv[0]); diff --git a/tools/grib_compare.c b/tools/grib_compare.c index cb4f8ab90..8fe18585d 100644 --- a/tools/grib_compare.c +++ b/tools/grib_compare.c @@ -44,6 +44,7 @@ const char* tool_description = "\n\tDefault behaviour: absolute error=0, bit-by-bit compare, same order in files."; const char* tool_name = "grib_compare"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/grib_compare"; const char* tool_usage = "[options] grib_file1 grib_file2"; typedef double (*compare_double_proc)(const double*, const double*, double); @@ -260,6 +261,9 @@ int grib_tool_init(grib_runtime_options* options) const char* filename[1]; filename[0] = options->infile_extra->name; /* First file */ options->random = 1; + /* Setting 'orderby' will cause the second file to also be read as a sorted fieldset + * See file: grib_tool.c function: grib_tool + */ options->orderby = strdup(orderby); options->idx = grib_fieldset_new_from_files(context, filename, nfiles, 0, 0, 0, orderby, &ret); @@ -344,7 +348,7 @@ int grib_tool_init(grib_runtime_options* options) /* Take the filename of the 1st file and append to dir */ char bufr[2048] = {0,}; /* options->infile_extra->name is the 1st file */ - sprintf(bufr, "%s%c%s", + snprintf(bufr, sizeof(bufr), "%s%c%s", infile->name, get_dir_separator_char(), extract_filename(options->infile_extra->name)); @@ -684,7 +688,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h 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; + return GRIB_TYPE_MISMATCH; } */ @@ -742,7 +746,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h if (verbose) printf(" is set to missing in %s field\n", first_str); printInfo(h1); - printf("%s is set to missing in %s field is not missing in %s field\n", name, first_str, second_str); + printf("%s is set to missing in %s field but is not missing in %s field\n", name, first_str, second_str); err1 = GRIB_VALUE_MISMATCH; save_error(c, name); return GRIB_VALUE_MISMATCH; @@ -752,7 +756,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h if (verbose) printf(" is set to missing in %s field\n", first_str); printInfo(h1); - printf("%s is set to missing in %s field is not missing in %s field\n", name, second_str, first_str); + printf("%s is set to missing in %s field but is not missing in %s field\n", name, second_str, first_str); err1 = GRIB_VALUE_MISMATCH; save_error(c, name); return GRIB_VALUE_MISMATCH; @@ -840,7 +844,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h if (err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1 != len2) { printInfo(h1); - printf("Different size for \"%s\" [%ld] [%ld]\n", name, (long)len1, (long)len2); + printf("Different size for \"%s\" [%zu] [%zu]\n", name, len1, len2); save_error(c, name); } if (err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1 == len2) { @@ -865,7 +869,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h printf("\n"); } else { - printf("long [%s] %d out of %ld different\n", name, countdiff, (long)len1); + printf("long [%s] %d out of %zu different\n", name, countdiff, len1); } } } @@ -917,14 +921,17 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h packingError1 = 0.0005; packingError2 = 0.0005; isangle = 1; - value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2; + /* value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2; */ + value_tolerance = packingError1; } else if (!grib_inline_strcmp(name, "referenceValue")) { packingError1 = 0; packingError2 = 0; err1 = grib_get_double(h1, "referenceValueError", &packingError1); err2 = grib_get_double(h2, "referenceValueError", &packingError2); - value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2; + if (!err1 && !err2) { + value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2; + } } if (!compareAbsolute) { @@ -962,7 +969,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h if (err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1 != len2) { printInfo(h1); - printf("Different size for \"%s\" [%ld] [%ld]\n", name, (long)len1, (long)len2); + printf("Different size for \"%s\" [%zu] [%zu]\n", name, len1, len2); save_error(c, name); } if (err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1 == len2) { @@ -1012,7 +1019,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h printInfo(h1); save_error(c, name); if (len1 > 1) { - printf("double [%s]: %d out of %ld different\n", name, countdiff, (long)len1); + printf("double [%s]: %d out of %zu different\n", name, countdiff, len1); if (compareAbsolute) printf(" max"); printf(" absolute diff. = %.16e,", fabs(dval1[imaxdiff] - dval2[imaxdiff])); @@ -1083,7 +1090,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h if (err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS) { const size_t len_min = MINIMUM(len1, len2); if (memcmp(uval1, uval2, len_min) != 0) { - for (i = 0; i < len_min; i++) + for (i = 0; i < len_min; i++) { if (uval1[i] != uval2[i]) { printInfo(h1); save_error(c, name); @@ -1097,6 +1104,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h err1 = GRIB_VALUE_MISMATCH; break; } + } err1 = GRIB_VALUE_MISMATCH; } } @@ -1133,6 +1141,7 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option int i = 0; const char* name = NULL; grib_keys_iterator* iter = NULL; + grib_context* context = handle1->context; /* mask only if no -c option or headerMode (-H)*/ if (blocklist && (!listFromCommandLine || headerMode)) { @@ -1145,6 +1154,14 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option } */ } +#if 0 + { + long of1,of2; /* Debugging: print offset of each handle */ + grib_get_long(h1, "offset", &of1); grib_get_long(h2, "offset", &of2); + printf("of1=%lu of2=%lu\n",of1,of2); + } +#endif + if (headerMode) { const void *msg1 = NULL, *msg2 = NULL; size_t size1 = 0, size2 = 0; @@ -1161,7 +1178,7 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option iter = grib_keys_iterator_new(h11, GRIB_KEYS_ITERATOR_SKIP_COMPUTED, NULL); if (!iter) { - printf("ERROR: unable to get keys iterator\n"); + grib_context_log(context, GRIB_LOG_ERROR, "unable to create the GRIB keys iterator"); exit(1); } diff --git a/tools/grib_copy.c b/tools/grib_copy.c index 974bb4550..c80cdd62c 100644 --- a/tools/grib_copy.c +++ b/tools/grib_copy.c @@ -8,11 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: grib_copy - * - */ - #include "grib_tools.h" const char* tool_description = @@ -20,6 +15,7 @@ const char* tool_description = " values of some keys." "\n\tIf the name of the output_grib_file contains a key enclosed in square brackets, its value will be used."; const char* tool_name = "grib_copy"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/grib_copy"; const char* tool_usage = "[options] grib_file grib_file ... output_grib_file"; grib_option grib_options[] = { diff --git a/tools/grib_dump.c b/tools/grib_dump.c index 1659a354a..41a64c77e 100644 --- a/tools/grib_dump.c +++ b/tools/grib_dump.c @@ -8,11 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: grib_dump - * - */ - #include "grib_tools.h" grib_option grib_options[] = { @@ -41,6 +36,7 @@ grib_option grib_options[] = { const char* tool_description = "Dump the content of a GRIB file in different formats."; const char* tool_name = "grib_dump"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/grib_dump"; const char* tool_usage = "[options] grib_file grib_file ..."; static int json = 0; static int first_handle = 1; @@ -132,7 +128,7 @@ int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* fi Assert(file); exit_if_input_is_directory(tool_name, file->name); - sprintf(tmp, "FILE: %s ", options->current_infile->name); + snprintf(tmp, sizeof(tmp), "FILE: %s ", options->current_infile->name); if (!grib_options_on("C")) fprintf(stdout, "***** %s\n", tmp); @@ -211,7 +207,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) char tmp[1024]; char identifier[100]; size_t idlen = 100; - sprintf(tmp, "MESSAGE %d ( length=%ld )", options->handle_count, length); + snprintf(tmp, sizeof(tmp), "MESSAGE %d ( length=%ld )", options->handle_count, length); if (!grib_options_on("C")) fprintf(stdout, "#============== %-38s ==============\n", tmp); if (!strcmp(options->dump_mode, "default")) { diff --git a/tools/grib_filter.c b/tools/grib_filter.c index a8683702e..8ed7ff296 100644 --- a/tools/grib_filter.c +++ b/tools/grib_filter.c @@ -31,9 +31,9 @@ const char* tool_description = "message\n\tin the GRIB files provided as arguments.\n\t" "If you specify '-' (a single dash) for the rules_file, the rules will be read from standard input."; const char* tool_name = "grib_filter"; -const char* tool_usage = - "[options] rules_file " - "grib_file grib_file ..."; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/grib_filter"; +const char* tool_usage = "[options] rules_file " + "grib_file grib_file ..."; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); diff --git a/tools/grib_get.c b/tools/grib_get.c index 52c38b05d..4d5040bfa 100644 --- a/tools/grib_get.c +++ b/tools/grib_get.c @@ -40,6 +40,7 @@ const char* tool_description = "\n\tIt is similar to grib_ls, but fails returning an error code " "\n\twhen an error occurs (e.g. key not found)."; const char* tool_name = "grib_get"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/grib_get"; const char* tool_usage = "[options] grib_file grib_file ..."; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); @@ -204,6 +205,11 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) } } + if (options->current_infile && options->current_infile->name) { + size = strlen(options->current_infile->name); + grib_set_string(h, "file", options->current_infile->name, &size); + } + return 0; } diff --git a/tools/grib_get.dox b/tools/grib_get.dox index 125f6b0b4..24aac9246 100644 --- a/tools/grib_get.dox +++ b/tools/grib_get.dox @@ -31,7 +31,7 @@ For each key a string (key:s), a double (key:d) or an integer (key:i) type can be specified. Default type is string. \n \n -n namespace \n - All the keys belonging to namespace are printed. + All the keys belonging to the given namespace are printed. \n \n -s key[:{s/d/i}]=value,key[:{s/d/i}]=value,... \n Key/values to set. For each key a string (key:s), a double (key:d) or an integer (key:i) diff --git a/tools/grib_get_data.c b/tools/grib_get_data.c index 682d7764b..5682e3875 100644 --- a/tools/grib_get_data.c +++ b/tools/grib_get_data.c @@ -39,6 +39,7 @@ const char* tool_description = "Print a latitude, longitude, data values list.\n" "\tNote: Rotated grids are first unrotated"; const char* tool_name = "grib_get_data"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/grib_get_data"; const char* tool_usage = "[options] grib_file grib_file ..."; extern FILE* dump_file; @@ -81,9 +82,9 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) int i = 0; grib_values* values = NULL; grib_iterator* iter = NULL; - char* format_values = NULL; + char format_values[32] = {0,}; char format_latlons[32] = {0,}; - char* default_format_values = "%.10e"; + const char* default_format_values = "%.10e"; const char* default_format_latlons = "%9.3f%9.3f"; int print_keys = grib_options_on("p:"); long numberOfPoints = 0; @@ -126,10 +127,11 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) } if (grib_options_on("F:")) { - format_values = grib_options_get_option("F:"); + const char* str = grib_options_get_option("F:"); + snprintf(format_values, sizeof(format_values), "%s", str); } else { - format_values = default_format_values; + snprintf(format_values, sizeof(format_values), "%s", default_format_values); } if (grib_options_on("L:")) { @@ -142,10 +144,10 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) str, default_format_latlons); exit(1); } - sprintf(format_latlons, "%s ", str); /* Add a final space to separate from data values */ + snprintf(format_latlons, sizeof(format_latlons), "%s ", str); /* Add a final space to separate from data values */ } else { - sprintf(format_latlons, "%s ", default_format_latlons); + snprintf(format_latlons, sizeof(format_latlons), "%s ", default_format_latlons); } if ((err = grib_get_long(h, "numberOfPoints", &numberOfPoints)) != GRIB_SUCCESS) { @@ -158,8 +160,8 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) num_bytes = (numberOfPoints + 1) * sizeof(double); data_values = (double*)calloc(numberOfPoints + 1, sizeof(double)); if (!data_values) { - fprintf(stderr, "ERROR: Failed to allocate %ld bytes for data values (number of points=%ld)\n", - (long)num_bytes, numberOfPoints); + fprintf(stderr, "ERROR: Failed to allocate %zu bytes for data values (number of points=%ld)\n", + num_bytes, numberOfPoints); exit(GRIB_OUT_OF_MEMORY); } @@ -180,9 +182,9 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) grib_get_error_message(err)); exit(1); } - if (size != numberOfPoints) { + if (size != (size_t)numberOfPoints) { if (!grib_options_on("q")) - fprintf(stderr, "ERROR: Wrong number of points %d\n", (int)numberOfPoints); + fprintf(stderr, "ERROR: Wrong number of points %ld\n", numberOfPoints); if (grib_options_on("f")) exit(1); } @@ -315,7 +317,7 @@ static grib_values* get_key_values(grib_runtime_options* options, grib_handle* h if (grib_is_missing(h, options->print_keys[i].name, &ret) && ret == GRIB_SUCCESS) { options->print_keys[i].type = GRIB_TYPE_MISSING; - sprintf(value, "MISSING"); + snprintf(value, sizeof(value), "MISSING"); } else if (ret != GRIB_NOT_FOUND) { if (options->print_keys[i].type == GRIB_TYPE_UNDEFINED) { @@ -329,12 +331,12 @@ static grib_values* get_key_values(grib_runtime_options* options, grib_handle* h case GRIB_TYPE_DOUBLE: ret = grib_get_double(h, options->print_keys[i].name, &(options->print_keys[i].double_value)); - sprintf(value, "%g", options->print_keys[i].double_value); + snprintf(value, sizeof(value), "%g", options->print_keys[i].double_value); break; case GRIB_TYPE_LONG: ret = grib_get_long(h, options->print_keys[i].name, &(options->print_keys[i].long_value)); - sprintf(value, "%ld", (long)options->print_keys[i].long_value); + snprintf(value, sizeof(value), "%ld", (long)options->print_keys[i].long_value); break; default: fprintf(dump_file, "invalid type for %s\n", options->print_keys[i].name); diff --git a/tools/grib_histogram.c b/tools/grib_histogram.c index a88d5738a..a41105c74 100644 --- a/tools/grib_histogram.c +++ b/tools/grib_histogram.c @@ -21,6 +21,7 @@ int grib_options_count = sizeof(grib_options) / sizeof(grib_option); const char* tool_description = "Histogram of GRIB files"; const char* tool_name = "grib_histogram"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] grib_file grib_file ..."; int main(int argc, char* argv[]) @@ -56,7 +57,7 @@ int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* fi */ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { - int i, j, err = 0; + size_t i, j, err = 0; size_t last_size = 0; long missingValuesPresent; double delta; @@ -64,12 +65,12 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) double* values = NULL; size_t size; double min, max; - long count = 10; + size_t count = 10; long intervals[10]; const char* names[1024]; - int name_count = 0; + size_t name_count = 0; - for (i = 0; i < options->requested_print_keys_count; i++) { + for (i = 0; i < (size_t)options->requested_print_keys_count; i++) { names[name_count++] = options->requested_print_keys[i].name; } @@ -91,7 +92,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) values = (double*)malloc(size * sizeof(double)); /*last_size = size;*/ if (!values) { - fprintf(stderr, "Failed to allocate memory for values (%lu bytes)\n", size * sizeof(double)); + fprintf(stderr, "Failed to allocate memory for values (%zu bytes)\n", size * sizeof(double)); exit(1); } } @@ -121,7 +122,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) for (j = 0; j < size; j++) { if (values[j] != missing) { int x = (values[j] - min) / delta * count; - if (x == count) + if (x == (int)count) x = x - 1; /*handle the absolute maximum */ intervals[x]++; } @@ -142,7 +143,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) for (j = 0; j < size; j++) { int x = (values[j] - min) / delta * count; - if (x == count) + if (x == (int)count) x = x - 1; /*handle the absolute maximum */ intervals[x]++; } diff --git a/tools/grib_index_build.c b/tools/grib_index_build.c index d8c0add78..6a13586c1 100644 --- a/tools/grib_index_build.c +++ b/tools/grib_index_build.c @@ -8,15 +8,11 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: grib_index_build - * - */ - #include "grib_tools.h" const char* tool_description = "Build an index file for a set of input GRIB files."; const char* tool_name = "grib_index_build"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/grib_index_build"; const char* tool_usage = "[options] grib_file grib_file ... "; static grib_index* idx = NULL; static const char* keys; diff --git a/tools/grib_ls.c b/tools/grib_ls.c index 1828d0357..a3bc703a6 100644 --- a/tools/grib_ls.c +++ b/tools/grib_ls.c @@ -8,10 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: grib_ls - * - */ #include "grib_tools.h" grib_option grib_options[] = { @@ -45,8 +41,9 @@ grib_option grib_options[] = { const char* tool_description = "List content of GRIB files printing values of " "some keys.\n\tIt does not fail when a key is not found."; -const char* tool_name = "grib_ls"; -const char* tool_usage = "[options] grib_file grib_file ..."; +const char* tool_name = "grib_ls"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/grib_ls"; +const char* tool_usage = "[options] grib_file grib_file ..."; static const char* new_handle = ""; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); diff --git a/tools/grib_ls.dox b/tools/grib_ls.dox index b0908ddc3..0759b56a3 100644 --- a/tools/grib_ls.dox +++ b/tools/grib_ls.dox @@ -39,7 +39,7 @@ \n \n -i index \n Data value corresponding to the given index is printed. \n \n -n namespace \n - All the keys belonging to namespace are printed. + All the keys belonging to the given namespace are printed. \n \n -m \n Mars keys are printed. \n \n -V \n Version. \n \n -W width \n diff --git a/tools/grib_merge.c b/tools/grib_merge.c index ac74019db..d84a0ee81 100644 --- a/tools/grib_merge.c +++ b/tools/grib_merge.c @@ -9,8 +9,6 @@ */ /* - * C Implementation: grib_merge - * * Author: Enrico Fucile * Description: * In Observations team we need a tool to merge the GRIB messages coming from GTS. @@ -36,6 +34,7 @@ static const char* md5Key = "md5Product"; const char* tool_description = "Merge two fields with identical parameters and different geographical area"; const char* tool_name = "grib_merge"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] file file ... output_file"; grib_option grib_options[] = { @@ -337,7 +336,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) md5Key, grib_get_error_message(err)); exit(err); } - sprintf(fname, "_%s.orig.grib", md5); + snprintf(fname, sizeof(fname), "_%s.orig.grib", md5); err = grib_write_message(h, fname, "a"); if ((hm = merge(h, hh)) == NULL) { @@ -349,7 +348,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) md5Key, grib_get_error_message(err)); exit(err); } - sprintf(fname, "_%s.merge.grib", md5); + snprintf(fname, sizeof(fname), "_%s.merge.grib", md5); grib_write_message(hh, fname, "a"); } grib_handle_delete(hh); diff --git a/tools/grib_nearest_land.c b/tools/grib_nearest_land.c index b6bcfb54d..da2428f56 100644 --- a/tools/grib_nearest_land.c +++ b/tools/grib_nearest_land.c @@ -8,11 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: points - * - */ - #include #include #include diff --git a/tools/grib_options.c b/tools/grib_options.c index ee546cf3f..affc49efc 100644 --- a/tools/grib_options.c +++ b/tools/grib_options.c @@ -8,10 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: grib_options - * - */ #include "grib_tools.h" extern char* optarg; @@ -48,14 +44,14 @@ static grib_options_help grib_options_help_list[] = { { "i:", "index", "\n\t\tData value corresponding to the given index is printed.\n" }, { "j", 0, "JSON mode (JavaScript Object Notation).\n" }, - { "l:", "Latitude,Longitude[,MODE,file]", - "\n\t\tValue close to the point of a Latitude,Longitude." + { "l:", "latitude,longitude[,MODE,file]", + "\n\t\tValue close to the point of a latitude,longitude (nearest neighbour)." "\n\t\tAllowed values for MODE are:" "\n\t\t 4 (4 values in the nearest points are printed) Default" "\n\t\t 1 (the value at the nearest point is printed)" "\n\t\tfile (file is used as mask. The closer point with mask value>=0.5 is printed)\n" }, { "n:", "namespace", - "\n\t\tAll the keys belonging to namespace are printed.\n" }, + "\n\t\tAll the keys belonging to the given namespace are printed.\n" }, { "m", 0, "Mars keys are printed.\n" }, { "o:", "output_file", "\n\t\tOutput is written to output_file." @@ -91,7 +87,7 @@ static grib_options_help grib_options_help_list[] = { { "C", 0, "C code mode. A C code program generating the message is dumped.\n" }, { "D", 0, "Debug mode.\n" }, { "H", 0, "Print octet content in hexadecimal format.\n" }, - { "M", 0, "Multi-field support off. Turn off support for multiple fields in single GRIB message.\n" }, + { "M", 0, "Multi-field support off. Turn off support for multiple fields in a single GRIB message.\n" }, { "O", 0, "Octet mode. WMO documentation style dump.\n" }, { "P:", "key[:{s|d|i}],key[:{s|d|i}],...", "\n\t\tAs -p adding the declared keys to the default list.\n" }, @@ -125,12 +121,16 @@ void usage(void) printf("USAGE \n\t%s %s\n\n", tool_name, tool_usage); printf("OPTIONS\n"); for (i = 0; i < grib_options_count; i++) { - if (grib_options[i].command_line) + if (grib_options[i].command_line) { printf("\t-%c %s\t%s", grib_options[i].id[0], grib_options_get_args(grib_options[i].id), grib_options_get_help(grib_options[i].id)); + } } - printf("\n\n"); + printf("\n"); + if (tool_online_doc) + printf("SEE ALSO\n\tFull documentation and examples at:\n\t<%s>\n\n", tool_online_doc); + printf("\n"); exit(1); } @@ -406,8 +406,9 @@ const char* grib_options_get_help(const char* id) { int i = 0; char msg[] = "ERROR: help not found for option "; - char* err = (char*)calloc(1, sizeof(msg) + 3); - sprintf(err, "%s%c\n", msg, *id); + const size_t msize = sizeof(msg) + 3; + char* err = (char*)calloc(1, msize); + snprintf(err, msize, "%s%c\n", msg, *id); for (i = 0; i < grib_options_count; i++) { if (!strcmp(id, grib_options[i].id)) { if (grib_options[i].help != NULL) @@ -418,7 +419,7 @@ const char* grib_options_get_help(const char* id) } for (i = 0; i < grib_options_help_count; i++) { if (!strcmp(id, grib_options_help_list[i].id)) { - return grib_options_help_list[i].help != NULL ? (char*)grib_options_help_list[i].help : err; + return grib_options_help_list[i].help != NULL ? grib_options_help_list[i].help : err; } } return err; @@ -429,11 +430,12 @@ const char* grib_options_get_args(const char* id) int i = 0; char empty[] = ""; char msg[] = "ERROR: help not found for option -"; + const size_t msize = sizeof(msg) + 3; char* err = NULL; if (id[1] != ':') return strdup(empty); - err = (char*)calloc(1, sizeof(msg) + 3); - sprintf(err, "%s%c\n", msg, *id); + err = (char*)calloc(1, msize); + snprintf(err, msize, "%s%c\n", msg, *id); for (i = 0; i < grib_options_count; i++) { if (!strcmp(id, grib_options[i].id)) { if (grib_options[i].args != NULL) { @@ -445,11 +447,12 @@ const char* grib_options_get_args(const char* id) } } } + for (i = 0; i < grib_options_help_count; i++) { if (!strcmp(id, grib_options_help_list[i].id)) { if (grib_options_help_list[i].args != NULL) { free(err); - return (char*)grib_options_help_list[i].args; + return grib_options_help_list[i].args; } else { return err; diff --git a/tools/grib_set.c b/tools/grib_set.c index 149b9f2d1..1c4ace444 100644 --- a/tools/grib_set.c +++ b/tools/grib_set.c @@ -8,10 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * C Implementation: grib_set - * - */ #include "grib_tools.h" grib_option grib_options[] = { @@ -50,8 +46,9 @@ const char* tool_description = "Sets key/value pairs in the input GRIB file and writes" "\n\teach message to the output_grib_file." "\n\tIt fails when an error occurs (e.g. key not found)."; -const char* tool_name = "grib_set"; -const char* tool_usage = "[options] grib_file grib_file ... output_grib_file"; +const char* tool_name = "grib_set"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/grib_set"; +const char* tool_usage = "[options] grib_file grib_file ... output_grib_file"; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); diff --git a/tools/grib_to_json.c b/tools/grib_to_json.c index 187573a7e..f5d4a5580 100644 --- a/tools/grib_to_json.c +++ b/tools/grib_to_json.c @@ -135,6 +135,8 @@ header_keys header[] = { { NULL, + NULL, + NULL, } }; @@ -150,7 +152,7 @@ int main(int argc, char* argv[]) printf("["); - for (i = 1; i < argc; i++) { + for (i = 1; i < (size_t)argc; i++) { f = fopen(argv[i], "r"); if (!f) { perror(argv[i]); diff --git a/tools/grib_to_netcdf.c b/tools/grib_to_netcdf.c index 3b2fdb3e7..f485286c9 100644 --- a/tools/grib_to_netcdf.c +++ b/tools/grib_to_netcdf.c @@ -33,6 +33,7 @@ const char* tool_description = "\n\tNote: The GRIB geometry should be a regular lat/lon grid or a regular Gaussian grid" "\n\t(the key \"typeOfGrid\" should be \"regular_ll\" or \"regular_gg\")"; const char* tool_name = "grib_to_netcdf"; +const char* tool_online_doc = "https://confluence.ecmwf.int/display/ECC/grib_to_netcdf"; const char* tool_usage = "[options] -o output_file grib_file grib_file ... "; static char argvString[2048] = {0,}; @@ -163,7 +164,7 @@ static parameter* find_parameter(const request* r, const char* parname) return NULL; } -static void _reqmerge(parameter* pa, const parameter* pb, request* a) +static void ecc_reqmerge(parameter* pa, const parameter* pb, request* a) { const value* vb = pb->values; @@ -200,7 +201,7 @@ static void _reqmerge(parameter* pa, const parameter* pb, request* a) } /* Fast version if a && b same */ -static boolean _reqmerge1(request* a, const request* b) +static boolean ecc_reqmerge1(request* a, const request* b) { parameter* pa = a->params; const parameter* pb = b->params; @@ -209,7 +210,7 @@ static boolean _reqmerge1(request* a, const request* b) if (strcmp(pa->name, pb->name) != 0) return FALSE; - _reqmerge(pa, pb, a); + ecc_reqmerge(pa, pb, a); pa = pa->next; pb = pb->next; @@ -389,13 +390,13 @@ static void add_value(request* r, const char* parname, const char* fmt, ...) va_list list; va_start(list, fmt); - vsprintf(buffer, fmt, list); + vsnprintf(buffer, sizeof(buffer), fmt, list); va_end(list); put_value(r, parname, buffer, TRUE, FALSE, FALSE); } -static void _reqmerge2(request* a, const request* b) +static void ecc_reqmerge2(request* a, const request* b) { const parameter* pb = b->params; @@ -410,7 +411,7 @@ static void _reqmerge2(request* a, const request* b) } } else { - _reqmerge(pa, pb, a); + ecc_reqmerge(pa, pb, a); } pb = pb->next; @@ -420,8 +421,8 @@ static void _reqmerge2(request* a, const request* b) static void reqmerge(request* a, const request* b) { if (a && b) { - if (!_reqmerge1(a, b)) - _reqmerge2(a, b); + if (!ecc_reqmerge1(a, b)) + ecc_reqmerge2(a, b); } } @@ -536,7 +537,7 @@ static void set_value(request* r, const char* parname, const char* fmt, ...) va_list list; va_start(list, fmt); - vsprintf(buffer, fmt, list); + vsnprintf(buffer, sizeof(buffer), fmt, list); va_end(list); put_value(r, parname, buffer, FALSE, FALSE, FALSE); @@ -718,7 +719,7 @@ static const char* get_axis(const hypercube* h, int pos); static const char* get_axis(const hypercube* h, int pos); static int cube_order(const hypercube* h, const request* r); static void free_hypercube(hypercube* h); -static int _cube_position(const hypercube* h, const request* r, boolean remove_holes); +static int ecc_cube_position(const hypercube* h, const request* r, boolean remove_holes); static value* clone_one_value(const value* p) { @@ -1531,12 +1532,12 @@ static int count_hypercube(const request* r) static int cube_order(const hypercube* h, const request* r) { - return _cube_position(h, r, TRUE); + return ecc_cube_position(h, r, TRUE); } static int cube_position(const hypercube* h, const request* r) { - return _cube_position(h, r, FALSE); + return ecc_cube_position(h, r, FALSE); } static void reserve_index_cache(hypercube* h, int size) @@ -1552,7 +1553,7 @@ static void reserve_index_cache(hypercube* h, int size) h->index_cache_size = size; } -static int _cube_position(const hypercube* h, const request* r, boolean remove_holes) +static int ecc_cube_position(const hypercube* h, const request* r, boolean remove_holes) { request* cube = h->cube; int c = count_axis(h); @@ -1584,7 +1585,7 @@ static int _cube_position(const hypercube* h, const request* r, boolean remove_h break; } else - grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: _cube_position, %s, %s != %s [%scompare function available]", axis, w, v, h->compare ? "" : "no "); + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: ecc_cube_position, %s, %s != %s [%scompare function available]", axis, w, v, h->compare ? "" : "no "); } } @@ -1657,6 +1658,7 @@ static void cube_indexes( } indexes[i] = j; } + (void)index; } /*********************************/ @@ -1840,7 +1842,7 @@ typedef struct ncatt nc_type nctype; } ncatt_t; -typedef struct filter +typedef struct filter_type { fieldset* fset; hypercube* filter; @@ -1957,7 +1959,7 @@ static long monthnumber(const char* m) return -1; } -int check_stepUnits(const char* step_units_str) +static int check_stepUnits(const char* step_units_str) { /* Only hours, minutes and seconds supported */ if (strcmp(step_units_str, "h") == 0 || @@ -2017,7 +2019,7 @@ static void validation_time(request* r) if (is_number(p)) date = atol(p); else { - long julian = 0, second = 0; + long second = 0; boolean isjul, date_ok; date_ok = parsedate(p, &julian, &second, &isjul); if (!date_ok) @@ -2943,10 +2945,10 @@ static int define_netcdf_dimensions(hypercube* h, fieldset* fs, int ncid, datase for (i = 0; i < naxis; ++i) { int nctype = NC_INT; const char* axis = get_axis(h, i); - char* units = NULL; + const char* units = NULL; char u[10240]; const char* lowaxis = (axis); - char* longname = (char*)lowaxis; + const char* longname = (char*)lowaxis; n = count_values(cube, axis); if (count_values(data_r, "levtype") > 1) { @@ -2981,25 +2983,25 @@ static int define_netcdf_dimensions(hypercube* h, fieldset* fs, int ncid, datase } if (strcmp(axis, "date") == 0) { - sprintf(u, "days since %ld-%02ld-%02ld 00:00:0.0", setup.refdate / 10000, (setup.refdate % 10000) / 100, (setup.refdate % 100)); + snprintf(u, sizeof(u), "days since %ld-%02ld-%02ld 00:00:0.0", setup.refdate / 10000, (setup.refdate % 10000) / 100, (setup.refdate % 100)); units = u; longname = "Base_date"; if (setup.climatology) { - sprintf(u, "months"); + snprintf(u, sizeof(u), "months"); units = u; } } if (strcmp(axis, "time") == 0) { boolean onedtime = (count_values(cube, "date") == 0 && count_values(cube, "step") == 0); - sprintf(u, "hours since 0000-00-00 00:00:00.0"); + snprintf(u, sizeof(u), "hours since 0000-00-00 00:00:00.0"); longname = "reference_time"; if (setup.usevalidtime || onedtime) { - sprintf(u, "hours since %ld-%02ld-%02ld 00:00:00.0", setup.refdate / 10000, (setup.refdate % 10000) / 100, (setup.refdate % 100)); + snprintf(u, sizeof(u), "hours since %ld-%02ld-%02ld 00:00:00.0", setup.refdate / 10000, (setup.refdate % 10000) / 100, (setup.refdate % 100)); longname = "time"; } if (setup.climatology) { - sprintf(u, "hours"); + snprintf(u, sizeof(u), "hours"); } units = u; /* nctype = NC_FLOAT; */ @@ -3014,7 +3016,7 @@ static int define_netcdf_dimensions(hypercube* h, fieldset* fs, int ncid, datase long date = d ? atol(d) : 0; long hour = t ? atol(t) : 0; long min = t ? 60 * (atof(t) - hour) : 0; - sprintf(u, "hours since %ld-%02ld-%02ld %02ld:%02ld:00.0", date / 10000, (date % 10000) / 100, (date % 100), hour, min); + snprintf(u, sizeof(u), "hours since %ld-%02ld-%02ld %02ld:%02ld:00.0", date / 10000, (date % 10000) / 100, (date % 100), hour, min); units = u; } } @@ -3033,9 +3035,9 @@ static int define_netcdf_dimensions(hypercube* h, fieldset* fs, int ncid, datase strcat(ymd, "01"); } else { - sprintf(ymd, "00-00-00"); + snprintf(ymd, sizeof(ymd), "00-00-00"); } - sprintf(u, "months since %s 00:00:00.0", ymd); + snprintf(u, sizeof(u), "months since %s 00:00:00.0", ymd); units = u; longname = "time"; } @@ -3047,7 +3049,7 @@ static int define_netcdf_dimensions(hypercube* h, fieldset* fs, int ncid, datase const char* cal = "gregorian"; if (setup.mmeans) { - char* period = "0000-01-00 00:00:00"; + const char* period = "0000-01-00 00:00:00"; stat = nc_put_att_text(ncid, var_id, "avg_period", strlen(period), period); check_err("nc_put_att_text", stat, __LINE__); } @@ -3143,7 +3145,7 @@ static int define_netcdf_dimensions(hypercube* h, fieldset* fs, int ncid, datase } /* Dimension-less variable for MARS request */ - if (0) /* reset when we have proper & fast mars_description */ + if ((0)) /* reset when we have proper & fast mars_description */ { /* parameter *p = data_r->params; */ parameter* p = setup.mars_description->params; @@ -3156,11 +3158,11 @@ static int define_netcdf_dimensions(hypercube* h, fieldset* fs, int ncid, datase if (p->name[0] != '_') { char par[1024]; char val[1024000] = ""; - sprintf(par, "%s", (p->name)); + snprintf(par, sizeof(par), "%s", (p->name)); #if 0 value2string(p->values,val); #else - sprintf(val, "%s", (p->values->name)); + snprintf(val, sizeof(val), "%s", (p->values->name)); #endif stat = nc_put_att_text(ncid, var_id, par, strlen(val), (val)); if (stat != NC_NOERR) { @@ -3177,7 +3179,7 @@ static int define_netcdf_dimensions(hypercube* h, fieldset* fs, int ncid, datase char timestamp[80]; time_t now; /* char *convention = "MARS;CF"; */ - char* convention = "CF-1.6"; + const char* convention = "CF-1.6"; char history[10240]; /* char *institution = "ECMWF Meteorological Archival and Retrieval System"; */ @@ -3187,7 +3189,7 @@ static int define_netcdf_dimensions(hypercube* h, fieldset* fs, int ncid, datase /* Use history provided or Timestamp */ if (setup.history) { - sprintf(history, "%s", setup.history); + snprintf(history, sizeof(history), "%s", setup.history); } else { int major = ECCODES_MAJOR_VERSION; @@ -3196,7 +3198,7 @@ static int define_netcdf_dimensions(hypercube* h, fieldset* fs, int ncid, datase time(&now); strftime(timestamp, sizeof(timestamp), "%Y-%m-%d %H:%M:%S GMT", gmtime(&now)); - sprintf(history, "%s by grib_to_netcdf-%d.%d.%d: %s", timestamp, major, minor, revision, argvString); + snprintf(history, sizeof(history), "%s by grib_to_netcdf-%d.%d.%d: %s", timestamp, major, minor, revision, argvString); } stat = nc_put_att_text(ncid, NC_GLOBAL, "history", strlen(history), history); check_err("nc_put_att_text", stat, __LINE__); @@ -3461,7 +3463,7 @@ static void find_nc_attributes(const request* subset_r, const request* user_r, n if (!metadata_dir) metadata_dir = getenv("METADATA_DIR"); - sprintf(metapath, "%s/%s", metadata_dir ? metadata_dir : ".", metafile); + snprintf(metapath, sizeof(metapath), "%s/%s", metadata_dir ? metadata_dir : ".", metafile); att->metadata = 0; /* read_request_file(metapath); */ } @@ -3495,7 +3497,7 @@ static void find_nc_attributes(const request* subset_r, const request* user_r, n if (!isalpha(att->name[0])) { char buf[1048]; const char* val = get_value(subset_r, "param", 0); - sprintf(buf, "%s_%s", (val ? val : "p"), att->name); + snprintf(buf, sizeof(buf), "%s_%s", (val ? val : "p"), att->name); strcpy(att->name, buf); } } @@ -3756,7 +3758,7 @@ static boolean parsedate(const char* name, long* julian, long* second, boolean* if (isalpha(*p)) { char month[32]; int day = 0; - int n = sscanf(p, "%[^-]-%d", month, &day); + n = sscanf(p, "%[^-]-%d", month, &day); /* Matched two items (month and day) and month is 3 letters */ if (n == 2 && strlen(month) == 3) { y = 1900; /* no year specified */ @@ -3934,7 +3936,7 @@ static int deflate_option = 0; /* Table of formats for legal -k values. Inspired by nccopy */ struct KindValue { - char* name; + const char* name; int kind; } legalkinds[] = { { "1", NC_FORMAT_CLASSIC }, @@ -4314,7 +4316,7 @@ int grib_tool_finalise_action(grib_runtime_options* options) stat = nc_create(options->outfile->name, creation_mode, &ncid); if (stat != NC_NOERR) { char msg[1024]; - ecc_snprintf(msg, sizeof(msg), "nc_create: '%s'", options->outfile->name); + snprintf(msg, sizeof(msg), "nc_create: '%s'", options->outfile->name); check_err(msg, stat, __LINE__); } @@ -4340,7 +4342,7 @@ int grib_tool_finalise_action(grib_runtime_options* options) for (i = 0; i < count; ++i) { if (subsets[i].fset) { char dataset[100]; - ecc_snprintf(dataset, sizeof(dataset), subsets[i].att.name, i + 1); + snprintf(dataset, sizeof(dataset), subsets[i].att.name, i + 1); put_data(dims, ncid, dataset, &subsets[i]); } else { diff --git a/tools/grib_tools.c b/tools/grib_tools.c index 2680a2488..7668432e7 100644 --- a/tools/grib_tools.c +++ b/tools/grib_tools.c @@ -590,7 +590,7 @@ static int scan(grib_context* c, grib_runtime_options* options, const char* dir) while ((s = readdir(d)) && (err == 0)) { if (strcmp(s->d_name, ".") != 0 && strcmp(s->d_name, "..") != 0) { char buf[1024]; - sprintf(buf, "%s/%s", dir, s->d_name); + snprintf(buf, sizeof(buf), "%s/%s", dir, s->d_name); process(c, options, buf); } } @@ -603,12 +603,12 @@ static int scan(grib_context* c, grib_runtime_options* options, const char* dir) struct _finddata_t fileinfo; intptr_t handle; char buffer[1024]; - sprintf(buffer, "%s/*", dir); + snprintf(buffer, sizeof(buffer), "%s/*", dir); if ((handle = _findfirst(buffer, &fileinfo)) != -1) { do { if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) { char buf[1024]; - sprintf(buf, "%s/%s", dir, fileinfo.name); + snprintf(buf, sizeof(buf), "%s/%s", dir, fileinfo.name); process(c, options, buf); } } while (!_findnext(handle, &fileinfo)); @@ -946,7 +946,7 @@ static int get_initial_element_of_array(grib_handle* h, const char* keyName, siz free(sval); return err; } - sprintf(value, "%s", sval); + snprintf(value, len, "%s", sval); free(sval); break; case GRIB_TYPE_LONG: @@ -955,7 +955,7 @@ static int get_initial_element_of_array(grib_handle* h, const char* keyName, siz return GRIB_OUT_OF_MEMORY; if ((err = grib_get_long_array(h, keyName, lval, &len)) != GRIB_SUCCESS) return err; - sprintf(value, "%ld...", lval[0]); + snprintf(value, 32, "%ld...", lval[0]); free(lval); break; case GRIB_TYPE_DOUBLE: @@ -964,7 +964,7 @@ static int get_initial_element_of_array(grib_handle* h, const char* keyName, siz return GRIB_OUT_OF_MEMORY; if ((err = grib_get_double_array(h, keyName, dval, &len)) != GRIB_SUCCESS) return err; - sprintf(value, "%g...", dval[0]); + snprintf(value, 32, "%g...", dval[0]); free(dval); break; case GRIB_TYPE_BYTES: @@ -973,11 +973,11 @@ static int get_initial_element_of_array(grib_handle* h, const char* keyName, siz return GRIB_OUT_OF_MEMORY; if ((err = grib_get_bytes(h, keyName, uval, &len)) != GRIB_SUCCESS) return err; - sprintf(value, "%d...", (short)uval[0]); + snprintf(value, 32, "%d...", (short)uval[0]); free(uval); break; default: - sprintf(value, "%s...", ""); + snprintf(value, 32, "%s...", ""); } return GRIB_SUCCESS; } @@ -991,11 +991,11 @@ static void get_value_for_key(grib_handle* h, const char* key_name, int key_type size_t len = MAX_STRING_LEN; if (grib_is_missing(h, key_name, &ret) && ret == GRIB_SUCCESS) { - sprintf(value_str, "MISSING"); + snprintf(value_str, 32, "MISSING"); return; } if (ret == GRIB_NOT_FOUND) { - sprintf(value_str, "not_found"); + snprintf(value_str, 32, "not_found"); return; } @@ -1022,11 +1022,11 @@ static void get_value_for_key(grib_handle* h, const char* key_name, int key_type } else if (type == GRIB_TYPE_DOUBLE) { ret = grib_get_double(h, key_name, &dvalue); - sprintf(value_str, format, dvalue); + snprintf(value_str, 32, format, dvalue); } else if (type == GRIB_TYPE_LONG) { ret = grib_get_long(h, key_name, &lvalue); - sprintf(value_str, "%ld", lvalue); + snprintf(value_str, 32, "%ld", lvalue); } else if (type == GRIB_TYPE_BYTES) { ret = grib_get_string(h, key_name, value_str, &len); @@ -1038,7 +1038,7 @@ static void get_value_for_key(grib_handle* h, const char* key_name, int key_type if (ret != GRIB_SUCCESS) { if (ret == GRIB_NOT_FOUND) { - sprintf(value_str, "not_found"); + snprintf(value_str, 32, "not_found"); } else { fprintf(dump_file, "ERROR: Failed to get value for key %s\n", key_name); exit(1); @@ -1123,15 +1123,15 @@ void grib_print_key_values(grib_runtime_options* options, grib_handle* h) acc = grib_find_accessor(h, options->print_keys[i].name); ret = grib_get_string(h, options->print_keys[i].name, value, &len); if (grib_is_missing_string(acc, (unsigned char*)value, len)) - sprintf(value, "MISSING"); + snprintf(value, 32, "MISSING"); break; case GRIB_TYPE_DOUBLE: if (num_vals > 1) { ret = GRIB_ARRAY_TOO_SMALL; } else { ret = grib_get_double(h, options->print_keys[i].name, &dvalue); - if (dvalue == GRIB_MISSING_DOUBLE) sprintf(value, "MISSING"); - else sprintf(value, options->format, dvalue); + if (dvalue == GRIB_MISSING_DOUBLE) snprintf(value, 32, "MISSING"); + else snprintf(value, 32, options->format, dvalue); } break; case GRIB_TYPE_LONG: @@ -1139,8 +1139,8 @@ void grib_print_key_values(grib_runtime_options* options, grib_handle* h) ret = GRIB_ARRAY_TOO_SMALL; } else { ret = grib_get_long(h, options->print_keys[i].name, &lvalue); - if (lvalue == GRIB_MISSING_LONG) sprintf(value, "MISSING"); - else sprintf(value, "%ld", lvalue); + if (lvalue == GRIB_MISSING_LONG) snprintf(value, 32, "MISSING"); + else snprintf(value, 32, "%ld", lvalue); } break; case GRIB_TYPE_BYTES: @@ -1155,7 +1155,7 @@ void grib_print_key_values(grib_runtime_options* options, grib_handle* h) else { /* Other products e.g. GRIB */ if (grib_is_missing(h, options->print_keys[i].name, &ret) && ret == GRIB_SUCCESS) { - sprintf(value, "MISSING"); + snprintf(value, 32, "MISSING"); } else if (ret == GRIB_SUCCESS) { const char* pName = NULL; @@ -1180,11 +1180,11 @@ void grib_print_key_values(grib_runtime_options* options, grib_handle* h) break; case GRIB_TYPE_DOUBLE: ret = grib_get_double(h, options->print_keys[i].name, &dvalue); - sprintf(value, options->format, dvalue); + snprintf(value, 32, options->format, dvalue); break; case GRIB_TYPE_LONG: ret = grib_get_long(h, options->print_keys[i].name, &lvalue); - sprintf(value, "%ld", lvalue); + snprintf(value, 32, "%ld", lvalue); break; case GRIB_TYPE_BYTES: ret = grib_get_string(h, options->print_keys[i].name, value, &len); @@ -1231,7 +1231,7 @@ void grib_print_key_values(grib_runtime_options* options, grib_handle* h) written_to_dump = 1; } else if (options->latlon_mode == 1) { - sprintf(value, options->format, options->values[options->latlon_idx]); + snprintf(value, sizeof(value), options->format, options->values[options->latlon_idx]); strlenvalue = (int)strlen(value); width = strlenvalue < options->default_print_width ? options->default_print_width + 2 : strlenvalue + 2; fprintf(dump_file, "%-*s", (int)width, value); @@ -1248,7 +1248,7 @@ void grib_print_key_values(grib_runtime_options* options, grib_handle* h) err = grib_get_size(h, "values", &size); if (err) { - sprintf(value, "unknown"); + snprintf(value, 32, "unknown"); if (!options->fail) exit(err); return; @@ -1266,7 +1266,7 @@ void grib_print_key_values(grib_runtime_options* options, grib_handle* h) grib_context_free(h->context, values); } - sprintf(value, options->format, v); + snprintf(value, 32, options->format, v); strlenvalue = (int)strlen(value); width = strlenvalue < options->default_print_width ? options->default_print_width + 2 : strlenvalue + 2; fprintf(dump_file, "%-*s", (int)width, value); @@ -1296,16 +1296,14 @@ void grib_print_file_statistics(grib_runtime_options* options, grib_tools_file* if (!failed) return; /* - fprintf(dump_file,"Following bad messages found in %s\n", - file->name); - fprintf(dump_file,"N Error\n"); - while (failed){ - fprintf(dump_file,"%-*d %s\n", - 7,failed->count, - grib_get_error_message(failed->error)); - failed=failed->next; - } - fprintf(dump_file,"\n"); + fprintf(dump_file,"Following bad messages found in %s\n", file->name); + fprintf(dump_file,"N Error\n"); + while (failed){ + fprintf(dump_file,"%-*d %s\n", 7,failed->count, + grib_get_error_message(failed->error)); + failed=failed->next; + } + fprintf(dump_file,"\n"); */ } diff --git a/tools/grib_tools.h b/tools/grib_tools.h index e877aa52c..ef9ed42c1 100644 --- a/tools/grib_tools.h +++ b/tools/grib_tools.h @@ -78,9 +78,9 @@ typedef struct grib_options_help typedef struct grib_option { - char* id; - char* args; - char* help; + const char* id; + const char* args; + const char* help; int on; int command_line; char* value; @@ -181,6 +181,7 @@ extern int grib_options_count; extern const char* tool_name; extern const char* tool_description; extern const char* tool_usage; +extern const char* tool_online_doc; /* Can be NULL */ extern FILE* dump_file; diff --git a/tools/gts_compare.c b/tools/gts_compare.c index 5fa20aa06..de430d13e 100644 --- a/tools/gts_compare.c +++ b/tools/gts_compare.c @@ -41,6 +41,7 @@ const char* tool_description = "\n\tDefault behaviour: bit-by-bit compare, same order in files."; const char* tool_name = "gts_compare"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] " "file file"; @@ -103,7 +104,7 @@ static void write_message(grib_handle* h, const char* str) FILE* fh = NULL; grib_get_message(h, &m, &s); - sprintf(fname, "%s_%d.gts", str, write_count); + snprintf(fname, 1024, "%s_%d.gts", str, write_count); fh = fopen(fname, "w"); if (!fh) { @@ -252,7 +253,7 @@ int grib_tool_init(grib_runtime_options* options) /* Take the filename of the 1st file and append to dir */ char bufr[2048] = {0,}; /* options->infile_extra->name is the 1st file */ - sprintf(bufr, "%s%c%s", + snprintf(bufr, 2048, "%s%c%s", infile->name, get_dir_separator_char(), extract_filename(options->infile_extra->name)); @@ -332,8 +333,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) if (!global_handle || err != GRIB_SUCCESS) { morein1++; - if (global_handle) - grib_handle_delete(global_handle); + grib_handle_delete(global_handle); return 0; } @@ -521,7 +521,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h 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; + return GRIB_TYPE_MISMATCH; } */ @@ -579,7 +579,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h if (verbose) printf(" is set to missing in 1st field\n"); printInfo(h1); - printf("%s is set to missing in 1st field is not missing in 2nd field\n", name); + printf("%s is set to missing in 1st field but is not missing in 2nd field\n", name); err1 = GRIB_VALUE_MISMATCH; save_error(c, name); return GRIB_VALUE_MISMATCH; @@ -589,7 +589,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h if (verbose) printf(" is set to missing in 1st field\n"); printInfo(h1); - printf("%s is set to missing in 2nd field is not missing in 1st field\n", name); + printf("%s is set to missing in 2nd field but is not missing in 1st field\n", name); err1 = GRIB_VALUE_MISMATCH; save_error(c, name); return GRIB_VALUE_MISMATCH; diff --git a/tools/gts_copy.c b/tools/gts_copy.c index 2edc55bd5..eba1bc438 100644 --- a/tools/gts_copy.c +++ b/tools/gts_copy.c @@ -14,6 +14,7 @@ const char* tool_description = "Copies the content of GTS files printing" " values of some keys."; const char* tool_name = "gts_copy"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] file file ... output_file"; grib_option grib_options[] = { diff --git a/tools/gts_dump.c b/tools/gts_dump.c index c8fe98eb3..b33831ef0 100644 --- a/tools/gts_dump.c +++ b/tools/gts_dump.c @@ -35,6 +35,7 @@ grib_option grib_options[] = { const char* tool_description = "Dump the content of a GTS file in different formats."; const char* tool_name = "gts_dump"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] file file ..."; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); @@ -58,7 +59,7 @@ int grib_tool_init(grib_runtime_options* options) { int opt = grib_options_on("C") + grib_options_on("O") + grib_options_on("D"); - options->dump_mode = "default"; + options->dump_mode = (char*)"default"; if (opt > 1) { @@ -67,12 +68,12 @@ int grib_tool_init(grib_runtime_options* options) } if (grib_options_on("O")) { - options->dump_mode = "wmo"; + options->dump_mode = (char*)"wmo"; options->dump_flags = GRIB_DUMP_FLAG_CODED | GRIB_DUMP_FLAG_OCTET | GRIB_DUMP_FLAG_VALUES | GRIB_DUMP_FLAG_READ_ONLY; } if (grib_options_on("D")) { - options->dump_mode = "debug"; + options->dump_mode = (char*)"debug"; options->dump_flags = GRIB_DUMP_FLAG_VALUES | GRIB_DUMP_FLAG_READ_ONLY; } @@ -101,7 +102,7 @@ int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* fi char tmp[1024]; if (!options->current_infile->name) return 0; - sprintf(tmp, "FILE: %s ", options->current_infile->name); + snprintf(tmp, 1024, "FILE: %s ", options->current_infile->name); if (!grib_options_on("C")) fprintf(stdout, "***** %s\n", tmp); return 0; @@ -120,7 +121,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) for (i = 0; i < options->print_keys_count; i++) grib_set_flag(h, options->print_keys[i].name, GRIB_ACCESSOR_FLAG_DUMP); - sprintf(tmp, "MESSAGE %d ( length=%ld )", options->handle_count, length); + snprintf(tmp, 1024, "MESSAGE %d ( length=%ld )", options->handle_count, length); if (!grib_options_on("C")) fprintf(stdout, "#============== %-38s ==============\n", tmp); if (!strcmp(options->dump_mode, "default")) { diff --git a/tools/gts_filter.c b/tools/gts_filter.c index 8c5223e79..c57dc7dce 100644 --- a/tools/gts_filter.c +++ b/tools/gts_filter.c @@ -31,6 +31,7 @@ const char* tool_description = "message\n\tin the GTS files provided as arguments.\n\t" "If you specify '-' (a single dash) for the rules_file, the rules will be read from standard input."; const char* tool_name = "gts_filter"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] rules_file " "file file ..."; diff --git a/tools/gts_get.c b/tools/gts_get.c index e7a1db6fd..39c1d2731 100644 --- a/tools/gts_get.c +++ b/tools/gts_get.c @@ -33,6 +33,7 @@ const char* tool_description = "\n\tIt is similar to gts_ls, but fails returning an error code " "\n\twhen an error occurs (e.g. key not found)."; const char* tool_name = "gts_get"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] file file ..."; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); diff --git a/tools/gts_ls.c b/tools/gts_ls.c index e8d68b478..b6a8a6666 100644 --- a/tools/gts_ls.c +++ b/tools/gts_ls.c @@ -36,6 +36,7 @@ const char* tool_description = "List content of GTS files printing values of " "some keys.\n\tIt does not fail when a key is not found."; const char* tool_name = "gts_ls"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] file file ..."; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); @@ -48,7 +49,7 @@ int main(int argc, char* argv[]) /* This is executed before processing the options with i -getopt and therfore it is the right place for hacking +getopt and therfore it is the right place for hacking the arguments if needed */ int grib_tool_before_getopt(grib_runtime_options* options) diff --git a/tools/metar_compare.c b/tools/metar_compare.c index b5e2e59bc..96a9abf5b 100644 --- a/tools/metar_compare.c +++ b/tools/metar_compare.c @@ -44,6 +44,7 @@ const char* tool_description = "\n\tDefault behaviour: absolute error=0, bit-by-bit compare, same order in files."; const char* tool_name = "metar_compare"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] " "file file"; @@ -116,7 +117,7 @@ static void write_message(grib_handle* h, const char* str) FILE* fh; grib_get_message(h, &m, &s); - sprintf(fname, "%s_%d.metar", str, write_count); + snprintf(fname, 1024, "%s_%d.metar", str, write_count); fh = fopen(fname, "w"); if (!fh) { @@ -323,7 +324,7 @@ int grib_tool_init(grib_runtime_options* options) /* Take the filename of the 1st file and append to dir */ char bufr[2048] = {0,}; /* options->infile_extra->name is the 1st file */ - sprintf(bufr, "%s%c%s", + snprintf(bufr, 2048, "%s%c%s", infile->name, get_dir_separator_char(), extract_filename(options->infile_extra->name)); @@ -598,7 +599,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h 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; + return GRIB_TYPE_MISMATCH; } */ @@ -656,7 +657,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h if (verbose) printf(" is set to missing in 1st field\n"); printInfo(h1); - printf("%s is set to missing in 1st field is not missing in 2nd field\n", name); + printf("%s is set to missing in 1st field but is not missing in 2nd field\n", name); err1 = GRIB_VALUE_MISMATCH; save_error(c, name); return GRIB_VALUE_MISMATCH; @@ -666,7 +667,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* h1, grib_h if (verbose) printf(" is set to missing in 1st field\n"); printInfo(h1); - printf("%s is set to missing in 2nd field is not missing in 1st field\n", name); + printf("%s is set to missing in 2nd field but is not missing in 1st field\n", name); err1 = GRIB_VALUE_MISMATCH; save_error(c, name); return GRIB_VALUE_MISMATCH; diff --git a/tools/metar_copy.c b/tools/metar_copy.c index a8bed2211..c9835eeb2 100644 --- a/tools/metar_copy.c +++ b/tools/metar_copy.c @@ -14,6 +14,7 @@ const char* tool_description = "Copies the content of METAR files printing" " values of some keys."; const char* tool_name = "metar_copy"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] file file ... output_file"; grib_option grib_options[] = { diff --git a/tools/metar_dump.c b/tools/metar_dump.c index 2dcfe14b9..080ec8ea3 100644 --- a/tools/metar_dump.c +++ b/tools/metar_dump.c @@ -38,6 +38,7 @@ grib_option grib_options[] = { const char* tool_description = "Dump the content of a METAR file in different formats."; const char* tool_name = "metar_dump"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] file file ..."; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); @@ -56,7 +57,7 @@ int grib_tool_init(grib_runtime_options* options) { int opt = grib_options_on("C") + grib_options_on("O") + grib_options_on("D"); - options->dump_mode = "default"; + options->dump_mode = (char*)"default"; if (opt > 1) { printf("%s: simultaneous O/D options not allowed\n", tool_name); @@ -64,22 +65,22 @@ int grib_tool_init(grib_runtime_options* options) } if (grib_options_on("O")) { - options->dump_mode = "wmo"; + options->dump_mode = (char*)"wmo"; options->dump_flags = GRIB_DUMP_FLAG_CODED | GRIB_DUMP_FLAG_OCTET | GRIB_DUMP_FLAG_VALUES | GRIB_DUMP_FLAG_READ_ONLY; } if (grib_options_on("D")) { - options->dump_mode = "debug"; + options->dump_mode = (char*)"debug"; options->dump_flags = GRIB_DUMP_FLAG_VALUES | GRIB_DUMP_FLAG_READ_ONLY; } if (grib_options_on("J")) { - options->dump_mode = "json"; + options->dump_mode = (char*)"json"; options->dump_flags = GRIB_DUMP_FLAG_VALUES | GRIB_DUMP_FLAG_READ_ONLY; } if (grib_options_on("X")) { - options->dump_mode = "xml"; + options->dump_mode = (char*)"xml"; options->dump_flags = GRIB_DUMP_FLAG_VALUES | GRIB_DUMP_FLAG_READ_ONLY; } @@ -108,7 +109,7 @@ int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* fi char tmp[1024]; if (!options->current_infile->name) return 0; - sprintf(tmp, "FILE: %s ", options->current_infile->name); + snprintf(tmp, 1024, "FILE: %s ", options->current_infile->name); if (!grib_options_on("C") && !grib_options_on("J") && !grib_options_on("X")) fprintf(stdout, "***** %s\n", tmp); return 0; @@ -127,7 +128,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) for (i = 0; i < options->print_keys_count; i++) grib_set_flag(h, options->print_keys[i].name, GRIB_ACCESSOR_FLAG_DUMP); - sprintf(tmp, "MESSAGE %d ( length=%ld )", options->handle_count, length); + snprintf(tmp, 1024, "MESSAGE %d ( length=%ld )", options->handle_count, length); if (!grib_options_on("C") && !grib_options_on("X") && !grib_options_on("J")) fprintf(stdout, "#============== %-38s ==============\n", tmp); if (!strcmp(options->dump_mode, "default")) { diff --git a/tools/metar_filter.c b/tools/metar_filter.c index bbf3306c0..e0e0fe131 100644 --- a/tools/metar_filter.c +++ b/tools/metar_filter.c @@ -28,6 +28,7 @@ const char* tool_description = "Apply the rules defined in rules_file to each METAR " "message\n\tin the files provided as arguments."; const char* tool_name = "metar_filter"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] rules_file " "file file ..."; diff --git a/tools/metar_get.c b/tools/metar_get.c index 2508034ba..122dbf92a 100644 --- a/tools/metar_get.c +++ b/tools/metar_get.c @@ -34,6 +34,7 @@ const char* tool_description = "\n\tIt is similar to metar_ls, but fails returning an error code " "\n\twhen an error occurs (e.g. key not found)."; const char* tool_name = "metar_get"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] file file ..."; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); diff --git a/tools/metar_ls.c b/tools/metar_ls.c index 8d795b7b9..ebb160c80 100644 --- a/tools/metar_ls.c +++ b/tools/metar_ls.c @@ -48,6 +48,7 @@ const char* tool_description = "List content of METAR files printing values of " "some keys.\n\tIt does not fail when a key is not found."; const char* tool_name = "metar_ls"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] file file ..."; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); @@ -63,7 +64,7 @@ int main(int argc, char* argv[]) /* This is executed before processing the options with i -getopt and therfore it is the right place for hacking +getopt and therfore it is the right place for hacking the arguments if needed */ int grib_tool_before_getopt(grib_runtime_options* options) @@ -72,8 +73,8 @@ int grib_tool_before_getopt(grib_runtime_options* options) } /* -The options have been parsed and the structure -grib_runtime_options* options has been loaded. +The options have been parsed and the structure +grib_runtime_options* options has been loaded. Initialization and startup can be done here */ int grib_tool_init(grib_runtime_options* options) diff --git a/tools/taf_dump.c b/tools/taf_dump.c index 346a6b1cc..fa5636509 100644 --- a/tools/taf_dump.c +++ b/tools/taf_dump.c @@ -31,6 +31,7 @@ grib_option grib_options[] = { const char* tool_description = "Dump the content of a TAF file in different formats."; const char* tool_name = "taf_dump"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] file file ..."; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); diff --git a/tools/taf_filter.c b/tools/taf_filter.c index 148d5b1c9..7851f1ca6 100644 --- a/tools/taf_filter.c +++ b/tools/taf_filter.c @@ -30,6 +30,7 @@ const char* tool_description = "Apply the rules defined in rules_file to each TAF " "message\n\tin the files provided as arguments."; const char* tool_name = "taf_filter"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] rules_file " "file file ..."; diff --git a/tools/taf_get.c b/tools/taf_get.c index de1c66078..9e873f957 100644 --- a/tools/taf_get.c +++ b/tools/taf_get.c @@ -38,6 +38,7 @@ const char* tool_description = "\n\tIt is similar to taf_ls, but fails returning an error code " "\n\twhen an error occurs (e.g. key not found)."; const char* tool_name = "taf_get"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] file file ..."; int grib_options_count = sizeof(grib_options) / sizeof(grib_option); diff --git a/tools/taf_ls.c b/tools/taf_ls.c index ad0a2ff92..1c1ad049d 100644 --- a/tools/taf_ls.c +++ b/tools/taf_ls.c @@ -41,6 +41,7 @@ const char* tool_description = "List content of TAF files printing values of " "some keys.\n\tIt does not fail when a key is not found."; const char* tool_name = "taf_ls"; +const char* tool_online_doc = NULL; const char* tool_usage = "[options] file file ..."; int grib_options_count = sizeof(grib_options) / sizeof(grib_option);