Page tree

GRIB-API support is being discontinued at the end of 2018.

Please upgrade to ecCodes

Skip to end of metadata
Go to start of metadata

Version 1.28.0 (December 2018)

Please note: GRIB-API support is being discontinued at the end of 2018. After which there will be no further releases.

This is the last release of this package.

  • [GRIB-1094] - Add probability parameters to comply with new GDPFS Manual
  • [GRIB-1096] - 172144 and 172189 - short name is undefined
  • [GRIB-1091] - Create a new MARS class for running CAMS Research experiments
  • [GRIB-1092] - GRIB Parameters: create GRIB2 definitions for table 210 (Wildfire flux)
  • [GRIB-1093] - GRIB parameters: change shortName of 171170 (should be stal2)

Version 1.27.0 (June 2018)

  • [GRIB-1084] - New parameters for CAMS chemistry schemes: new species (table 217)
  • [GRIB-1085] - New parameters for CAMS chemistry schemes: species total column (table 218)
  • [GRIB-1086] - New parameters for CAMS chemistry schemes: Emissions and Wildfire flux (table 219)
  • [GRIB-1087] - Use WMO codes for new lightning parameters
  • [GRIB-1088] - Add numberOfForecastsInEnsemble to the GRIB1 Local Definition number 16
  • [GRIB-1089] - GRIB: Remove shortNames 'ocu' and 'ocv' from parameters 150133 and 150134
  • [GRIB-1090] - GRIB parameters: change name and shortName of aerosols (table 215)

Version 1.26.1 (April 2018)

  • [GRIB-1087] - Use WMO codes for new lightning parameters
    These are lightning flash density parameters output by the model in IFS cycle 45r1

Version 1.26.0 (February 2018)

  • [GRIB-1083] - Wave forecast verification support (LC-WFV)
  • [GRIB-1081] - Add parameters for Standardised Precipitation index (seasonal fc)
  • [GRIB-1082] - New parameters for Global Fire Assimilation System (GFAS)

Version 1.25.0 (December 2017)

New Features/Improvements

  • [GRIB-1070] - Create MARS stream for GRIB EFAS output
  • [GRIB-1071] - Add verificationYear, monthlyVerificationYear, verificationMonth, monthlyVerificationMonth for monthly streams
  • [GRIB-1069] - Add WMO definition to 2 wave parameters and rename them
  • [GRIB-1072] - Update MARS stream descriptions for esmm and ehmm
  • [GRIB-1073] - Add new GRIB fields for lightning
  • [GRIB-1074] - Long names of GRIB parameters 210007-210010 (aermr07-10) are incorrect
  • [GRIB-1075] - Change of parameter name and units: 210064 and 210065
  • [GRIB-1076] - Tables 172 and 173: rename parameters and assign shortnames
  • [GRIB-1077] - Two new parameters: Water Vapour Flux and Water Vapour Flux Index
  • [GRIB-1078] - Add parameter for 'Fraction of snow cover' with units 'Proportion'

Bug fixes

  • [GRIB-1079] - grib_api does not honour GRIB_API_NO_ABORT
  • [GRIB-1080] - Standard deviation is shown as NAN

Version 1.24.0 (October 2017)

  • [GRIB-1066] - Add two parameters for river discharge in the last 6 and 24 hrs
  • [GRIB-1067] - Update the local concepts for DWD (2017.09)
  • [GRIB-1068] - Add GRIB2 Product Definition Templates 4.67 and 4.68

Version 1.23.1 (August 2017)

  • [GRIB-120] - Complex spectral data packing and unpacking seems to be broken in the GRIB API
  • [GRIB-688] - strange behaviour with new NCEP grib2 data
  • [GRIB-733] - Errors converting packingType from grid_complex_spatial_differencing to grid_simple
  • [GRIB-917] - isOctahedral returns 0 for sub-area of octahedral grid
  • [GRIB-1063] - New runoff parameters for system 5 seasonal forecast
  • [GRIB-1065] - Add new MARS class for ERA5 land surface parameters

Version 1.23.0 (July 2017)

  • [GRIB-1056] - Add mars key 'system' for class 'c3'
  • [GRIB-1057] - Add parameter for '2 metre relative humidity with respect to water'
  • [GRIB-1058] - Add GRIB1 representation for parameter 260048 (total precipitation rate)
  • [GRIB-1060] - type=oi for UERRA class
  • [GRIB-1061] - Request for a modification of the naming of the new lightning GRIB fields
  • [GRIB-1062] - New parameters needed for system 5 seasonal forecast

Version 1.22.0 (May 2017)

  • [GRIB-1055] - Update GRIB2 definitions with the latest WMO V19.0.0 code tables/templates
  • [GRIB-1045] - Add new parameters for land reanalysis (ERA5-Land)
  • [GRIB-1054] - Add two parameters for evaporation in the last 6 and 24 hrs
  • [GRIB-1053] - Add centre codes for New Delhi (dems/vabb)

Version 1.21.0 (March 2017)

  • [GRIB-1043] - GRIB2 local coding for SPP random field parameters
  • [GRIB-1044] - Add parameters: maximum CAPE in the last 6 hours and maximum CAPES (CAPE/Shear) in the last 6 hours

Version 1.20.0 (January 2017)

New Features/Improvements

  • [GRIB-1036] - Patch for CCSDS
  • [GRIB-1032] - Add a new MARS class for YOPP
  • [GRIB-1038] - Support for CAMS and CERA-SAT: streams mnth/edmm/wamo/ewmm
  • [GRIB-1035] - Rename parameter 260242 to '2 metre relative humidity'
  • [GRIB-1039] - Name change for parameters 78 and 79
  • [GRIB-1033] - Update parameter mappings for JRA55
  • [GRIB-1030] - Text fix for grib_index.c
  • [GRIB-1041] - DWD local definitions: Remove superfluous tables

Bug fixes

  • [GRIB-1034] - Slow-down of read routine
  • [GRIB-1023] - ERROR using '--enable-omp-packing' (since v1.15.0)
  • [GRIB-1029] - grib-api hangs on output from OpenIFS

Version 1.19.0 (November 2016)

  • [GRIB-1022] - Update GRIB2 definitions with the latest WMO V18.0.0 code tables/templates
  • [GRIB-1027] - UERRA: "Type of first fixed surface" 118 should be mapped to the levtype=ml
  • [GRIB-1028] - Provide API function to access the name of the package

Version 1.18.0 (October 2016)

New Features/Improvements

  • [GRIB-1019] - New parameters for random fields

Bug Fixes

  •  [GRIB-1017] - Date incorrect for 4v monthly means
  • [GRIB-1018] - surface air relative humidity from MetOffice must be matched to UERRA paramId=260242
  • [GRIB-1020] - CMake deprecation messages not suppressed

Version 1.17.0 (August 2016)

New Features/Improvements

  • [GRIB-1007] - New wave parameters as requested by member state users
  • [GRIB-909] - UERRA: Parameter changes
  • [GRIB-871] - Soil layers for UERRA
  • [GRIB-757] - tigge_check ability to check validityTime and validityDate

Bug Fixes

  • [GRIB-1000] - Cannot build grib-api with tests disabled
  • [GRIB-1002] - cosmo4uerra conversion to grib2 problem

Version 1.16.0 (June 2016)

New Features/Improvements

  • [GRIB-998] - Update GRIB2 definitions with the latest WMO V17.0.0 code tables/templates
  • [GRIB-909] - UERRA: Parameter changes
  • [GRIB-767] - UERRA: hl levtype for class="uerra"
  • [GRIB-872] - UERRA: Parameters with varying length of time rang
  • [GRIB-911] - UERRA: support for stream 'enda'
  • [GRIB-995] - Add new MARS class for Copernicus Climate Change Service
  • [GRIB-984] - Add GRIB2 coding for parameter 'Cloud cover' (unit=%)
  • [GRIB-992] - Add GRIB1 parameter '2m specific humidity' (174096)
  • [GRIB-996] - Update the local concepts for DWD (2016.06.13)
  • [GRIB-102] - Improve documentation for "grib_handle_new_from_multi_message" function
  • [GRIB-989] - Unknown GRIB2 NOAA parameter (Icing severity)
  • [GRIB-991] - Add grib2 template.4.57.def
  • [GRIB-994] - New "unbalanced" GRIB parameters
  • [GRIB-999] - GRIB1: Add kwbc local parameter V-component of ice drift
  • [GRIB-1001] - grib_to_netcdf: Update netcdf variables to reflect shortNames

Bug Fixes

  • [GRIB-576] - grib_close_file() segmentation fault when closing a file reading metadata only
  • [GRIB-975] - Parameter 'Mean wave direction' unit should be 'Degree true'
  • [GRIB-976] - ifs_samples files moved to install prefix
  • [GRIB-979] - UERRA conversion to GRIB2 issue (sfc become hl level)
  • [GRIB-983] - Parameter 248 (Cloud cover) should be renamed to 'Fraction of cloud cover'
  • [GRIB-990] - Invalid parameter unit: Pa**m-1

Version 1.15.0 (April 2016)

New Features/Improvements

  • [GRIB-847] - Python module installs as "grib_api/" instead of "gribapi/"
    The Python installation now follows the standard way packages are installed by using the "" initialisation file

  • [GRIB-884] - OpenMP Support
    There is now the support for OpenMP as an alternative to POSIX Threads. This can be enabled at configuration time by:


    Thanks to Eric Millin for this contribution

  • [GRIB-747] - 4x performance improvement on grib_get_double_array and little endian
    Thanks to Heiko Klein of the Norwegian Meteorological Institute for this contribution

  • [GRIB-29] - GRIB2: Support for negative 'forecastTime'
    Several centres have a requirement to support negative forecast times in their GRIB2 data, for example models that run backwards in time.
    This change allows the forecast time octets (in the Product Definition Templates) to be interpreted as a signed value rather than unsigned
    i.e. allowing it to take on negative as well as positive values

  • [GRIB-796] - 'include' statement in definitions does not search GRIB_DEFINITION_PATH
    This change only affects users who have their own versions of the definition files (overriding the default definitions):
    The "include" statements now require the relative path from the top-level of the definitions directory so instead of
       include "template.4.statistical.def"

    We now have

       include "grib2/template.4.statistical.def"

  • [GRIB-767] - hl levtype for class="uerra"
  • [GRIB-788] - Add computed key modelName
  • [GRIB-797] - grib_compare: allow last argument to be a directory
  • [GRIB-824] - Change local GRIB2 mean rate parameter codes to WMO codes
  • [GRIB-869] - Adding 4 new surface parameters in GRIB1
  • [GRIB-960] - New parameter for Energy sector
  • [GRIB-238] - Grib iterator on rotated latlon representation
  • [GRIB-602] - tigge_check s2s update
  • [GRIB-786] - CMake run too slow copying definitions
  • [GRIB-798] - Visual Studio support: replace use of rint() for VS 2013
  • [GRIB-809] - Add check for compatibility between engine and definitions
  • [GRIB-822] - grib_api should export correct samples and definition paths for build and install trees
  • [GRIB-837] - Python: allow user to set data values using grib_set
  • [GRIB-838] - CMake: IFS sample files not copied to build directory
  • [GRIB-862] - GRIB1 Local definition 19: misleading key names
  • [GRIB-887] - Change the parameter name for 'magss'
  • [GRIB-896] - Add "turbulent" to the names of "magss" like parameters.
  • [GRIB-897] - Add the centre for Max Planck Institute for Meteorology
  • [GRIB-922] - grib_util_set_spec: if "global" is set, do not check lat/lon values
  • [GRIB-927] - Use Python distutils to build Python SWIG extension module
  • [GRIB-928] - Support for stream=enda type=4i
  • [GRIB-933] - GRIB 2 definitions for EFAS
  • [GRIB-966] - Assertion: grib_find_nearest on single point grid
  • [GRIB-756] - Update GRIB2 definitions with the latest WMO V15.0.0 templates/tables
  • [GRIB-784] - Add test for md5 keys
  • [GRIB-799] - Add grib_util_set_spec mark2 for octahedral support
  • [GRIB-802] - Provide mechanism to produce compact constant fields ignoring GRIB_API_LARGE_CONSTANT_FIELDS
  • [GRIB-810] - Update descriptions and units of wave parameters
  • [GRIB-828] - Deployment of PGI compiled versions on LXC
  • [GRIB-829] - tigge_check support for octahedral grid
  • [GRIB-850] - DWD delivering ECMWF-GRIB-API localConcepts
  • [GRIB-876] - Lightning parameters
  • [GRIB-882] - Update GRIB2 definitions with the latest WMO V16.0.0 templates/tables
  • [GRIB-885] - GRIB2 EFAS parameters in table 240 should use WMO codes
  • [GRIB-889] - Update titles for ERA class names in definition files and the Parameter Database
  • [GRIB-902] - Update copyright notices: 2015 -> 2016
  • [GRIB-921] - Update the local concepts for DWD (2016.02.03)
  • [GRIB-944] - Add Python example showing how to query the bitmap array
  • [GRIB-954] - "first day of the month" for class="j5" stream=moda

Bug Fixes

  • [GRIB-203] - grib_ls -l fails with 2nd order packed and boustrophedonic ordering
  • [GRIB-213] - grib_get -l does not respect land-sea mask when returning nearest grid point
  • [GRIB-318] - "grib_nearest_find" performance for reduced gaussian grids
  • [GRIB-384] - Using the "-Wp,-D_FORTIFY_SOURCE=2 -O2" gcc CFLAGS, "" test fails
  • [GRIB-573] - grib_compare: adding blacklist gives incorrect results for spectral_complex
  • [GRIB-591] - Crash with multithreaded grib_handle_new_from_samples()
  • [GRIB-660] - TimeRangeIndicator=132 is interpreted incorrectly for JRA-55 data
  • [GRIB-679] - "mconv" short name has two inconsistent definitions
  • [GRIB-787] - Assertion failure: decoding large grib2 file
  • [GRIB-795] - Remove generated Makefiles from distribution tarball
  • [GRIB-801] - Lat/lon iterator: Divide by zero when Ni==1
  • [GRIB-804] - grib_api does not enable JPEG code if only openjpeg is present and not jasper
  • [GRIB-805] - CMake: test fails if build configured without jpeg support
  • [GRIB-807] - grib_get (and grib_ls) does not process rotated-pole grids properly
  • [GRIB-808] - README file only mentions autotools (and not CMake)
  • [GRIB-812] - WMO parameters Haines Index and Apparent Temperature not recognized
  • [GRIB-813] - grib_nearest_find does not work on successive calls for Lambert grid
  • [GRIB-814] - grib_nearest on Lambert Conformal grid picks wrong point
  • [GRIB-815] - GRIB1 definition for Stretched Spherical Harmonics contains keys for rotated grids
  • [GRIB-816] - grib_get: using nearest function with multiple files gives incorrect results
  • [GRIB-819] - High-level Pythonic interface: indexing broken
  • [GRIB-846] - GRIB2 definition for parameter 10fg3
  • [GRIB-848] - GRIB2 definition for mx2t6 and mn2t6 lacks lengthOfTimeRange
  • [GRIB-853] - GRIB2 Tile-template examples from DWD
  • [GRIB-879] - Concepts for parameters defining a "lengthOfTimeRange" key MUST also define the "indicatorOfUnitForTimeRange" key
  • [GRIB-883] - Assert in grib_accessor_class_data_g1second_order_general_extended_packing
  • [GRIB-892] - stepUnits=M vs. stepUnits=m
  • [GRIB-894] - Compiler warnings on MacOSX 10.10 using clang
  • [GRIB-898] - Encoding a constant field with grid_second_order generates error
  • [GRIB-903] - Fortran test fails when using gfortran with option -frecursive
  • [GRIB-912] - Wrong parameter definitions for 131139 and 131151
  • [GRIB-915] - grib_compare excluding totalLength
  • [GRIB-932] - Crash: using keys iterator with skip duplicates
  • [GRIB-934] - grib_to_netcdf with -D NC_FLOAT does not preserve missing values
  • [GRIB-937] - review grib_util_spec rounding error
  • [GRIB-938] - grib_compare: argument to '-A' (absolute error) is not checked
  • [GRIB-941] - GRIB2 angles are not rounded
  • [GRIB-943] - GRIB2 uses the same originating centre table as GRIB1 (grib1/0.table)
  • [GRIB-951] - Assertion: set packingType grid_second_order (boustrophedonic) on constant field
  • [GRIB-952] - grib_set -r repacks values despite errors in setting the keys
  • [GRIB-953] - grib_to_netcdf should not use a missingValue of 9999
  • [GRIB-956] - resolutionAndComponentFlag vs resolutionAndComponentFlags
  • [GRIB-958] - Some lat/lon values are invalid for Polar stereographic grid
  • [GRIB-961] - Fix wrong exports of grib variables in bundle
  • [GRIB-962] - grib_get_data does not fail when it cannot decode the data
  • [GRIB-968] - grib_get_data fails with a GRIB containing only a single point
  • [GRIB-971] - grib_compare: Cannot specify real number for the '-T' switch argument
  • [GRIB-972] - grib_compare: Using -P and -R switches together (JPEG packing)

Version 1.14.7 (March 2016)

  • [GRIB-948] - Increment the required cmake version from 2.8.4 to 2.8.11
  • [GRIB-942] - check all memory allocations are successful

Version 1.14.6 (March 2016)

  • [GRIB-907] - Reduced Gaussian grid: key "global" incorrect for particular GRIB
  • [GRIB-904] - UERRA: remove mars key 'model'
  • [GRIB-900] - UERRA: analysis type
  • [GRIB-911] - UERRA: support for stream 'enda'

Version 1.14.5 (January 2016)

  • [GRIB-873] - Encoding of brightness temperatures clbt and csbt
  • [GRIB-860] - JRA-55: Need to use 'paramId' for 'mars.param'
  • [GRIB-899] - Add new MARS class for CERA-SAT
  • [GRIB-901] - grib_util_set_spec: print more helpful message when failing to encode angles

Version 1.14.4 (December 2015)

New Features

  • [GRIB-890] - Add a new key called "gridName"

Version 1.14.3 (November 2015)

Bug Fixes

  • [GRIB-238] - Grib iterator on rotated latlon representation
  • [GRIB-807] - grib_get (and grib_ls) does not process rotated-pole grids properly
  • [GRIB-831] - Add new wave parameter for KNMI

  • [GRIB-834] - grib_util_set_spec: if "pl" array is provided, should not require specific sample file
  • [GRIB-854] - Octahedral grids: Setting the "global" key sets invalid last longitude
  • [GRIB-857] - grib_util_set_spec: setting the "global" key produces invalid grib
  • [GRIB-863] - grib_util_set_spec: GRIB edition 1 high resolution increments
  • [GRIB-864] - grib_util_set_spec should fail if cannot encode angles to requested precision

Version 1.14.2 (October 2015)

Bug Fixes

  • [GRIB-761] - S2S parameters recognition must ignore local concepts
  • [GRIB-792] - Performance: grib_to_netcdf takes days for grib1 file of 250,000 messages
  • [GRIB-833] - For class="ep", stream=edmm/ewmm, mars.step should equal endStep
  • [GRIB-856] - Wrong MARS levtype for DWD data
  • [GRIB-858] - Provide reduced gaussian sample for N=64
  • [GRIB-839] - Improve isOctahedral check
  • [GRIB-845] - Fortran: calling grib_dump should produce verbose output
  • [GRIB-827] - Rename class="ep" to CERA-20C
  • [GRIB-828] - Deployment of PGI compiled versions on LXC

Version 1.14.0 (July 2015)

This release comes with experimental support for Microsoft Windows (Thanks to contributions from FMI).
See Microsoft Windows (experimental)

New Features/Improvements

  • [GRIB-691] - grib_to_netcdf: Support for NetCDF4/HDF5 format
    A "-k" option is provided for grib_to_netcdf to allow specification of the kind of file created:
      1 -> netCDF classic file format
      2 -> netCDF 64 bit classic file format (Default)
      3 -> netCDF-4 file format
      4 -> netCDF-4 classic model file format
    Note: The default is now (netcdf3) 64bit classic file format (large file support). This is a change from previous behaviour.
    You must compile with the netcdf4 library to create the last two formats.

  • [GRIB-527] - Allow tests to be run in parallel
    Now you can speed up the tests by running them in parallel e.g. for cmake
      ctest -j8
    will run the tests using 8 jobs. This also works for Autotools (make check -j8)

  • [GRIB-341] - Provide function to get the message offset
  • [GRIB-342] - Provide function to get the message size
  • [GRIB-344] - grib_dump: Provide fast option which only loads headers not data
  • [GRIB-695] - grib_filter should be able to read rules from standard input (stdin)
  • [GRIB-696] - grib_count: add capability to show count per message as well as total
  • [GRIB-697] - New GRIB code for the GPP and Reco flux adjustment coefficients
  • [GRIB-703] - New parameters fo French EUROSIP partners
  • [GRIB-716] - request for additional MACC IFS aerosol parameters
  • [GRIB-764] - Add mean rate parameters for ERA5
  • [GRIB-766] - ERA5: set MARS step to be endStep
  • [GRIB-340] - Provide headers_only option to load BUFR and GTS
  • [GRIB-153] - gribapi patch to speed up encoding on IBM P6/7
  • [GRIB-293] - Enable DIAG pseudo GRIB type
  • [GRIB-428] - grib_to_netcdf file size limit
  • [GRIB-446] - Missing version information in grib_api header files
  • [GRIB-505] - Add error handling for the method value_count
  • [GRIB-601] - GRIB edition 2: Support the new identification templates in section 1
  • [GRIB-626] - grib_to_netcdf: CF checker warning about calendar
  • [GRIB-663] - Support for HDF5 headers
  • [GRIB-677] - does not behave correctly in case of errors
  • [GRIB-681] - CMake Exports for IFS Samples Path
  • [GRIB-704] - Support Octahedral Gaussian grids
  • [GRIB-711] - CMake build: should not need to download data to compile!
  • [GRIB-736] - FMI Local code table definitions to mainstream grib_api
  • [GRIB-744] - Create computed key to indicate if gaussian grid is octahedral
  • [GRIB-753] - Rename class="ea" to ERA5
  • [GRIB-759] - Add extra gridTypes for other reduced gaussian grids: rotated, stretched etc
  • [GRIB-782] - Rename parser to not clash with other executable of that name
  • [GRIB-613] - Use CMake to install grib api at ECMWF
  • [GRIB-676] - Addition of accumulated freezing rain diagnostic
  • [GRIB-683] - Check thread safety with clang thread sanitizer
  • [GRIB-709] - Rename grib_windef.h to grib_api_windef.h
  • [GRIB-722] - Update the local concepts for DWD (2015.03.04)
  • [GRIB-743] - Introduce new GRIB entry for geometric vertical velocity
  • [GRIB-755] - Verify that nearest grid point/iterators work with octahedral grid
  • [GRIB-775] - Remove GRIB2 local codes for EFI parameters
  • [GRIB-776] - Add new parameters for CAPE Shear

Bug Fixes

  • [GRIB-17] - GRIB API latitudes out by 1 point for a regular Gaussian sub-area
  • [GRIB-23] - wrong value for longitudeOfSouthernPole
  • [GRIB-225] - Building grib_api: GRIB_DEFINITION_PATH is not expanded in src/config.h
  • [GRIB-352] - BUDG: Error when decoding stepRangeInHours
  • [GRIB-438] - Error encoding values with mars formula (JPEG data)
  • [GRIB-578] - grib_compare -H compares referenceValue which is not meta-data (grib2)
  • [GRIB-616] - Python object file links to wrong library
  • [GRIB-641] - Parameters with WMO definitions are in ECMWF local concepts
  • [GRIB-651] - CRASH: grib_dump -D on grib with jpeg packing when jpeg is disabled
  • [GRIB-666] - Compile errors with -Werror=format-security
  • [GRIB-668] - Cygwin: tigge_check fails checking gaussian grid
  • [GRIB-669] - Missing tables for grib2 local definition 500: obstat
  • [GRIB-680] - CMake: lib/pkgconfig not created
  • [GRIB-690] - Building with cmake: make fails when threads enabled
  • [GRIB-693] - macro GRIB_API_VERSION is not well defined by including grib_api.h only
  • [GRIB-699] - grib_to_netcdf with S2S data (reforecast)
  • [GRIB-701] - GRIB-API for windows
  • [GRIB-705] - cc[ab]: Linking shared libraries with grib_api on INTEL/140 fails
  • [GRIB-707] - GRIB edition 1 mars keys: class and stream not of 'string' type
  • [GRIB-708] - Fortran: grib_keys_iterator_new with empty namespace does not work
  • [GRIB-710] - Call to wmo_read_grib_from_file with NULL pointer to buffer causes crash
  • [GRIB-719] - grib_to_netcdf: segmentation fault if invalid argument passed to -D option
  • [GRIB-721] - Nearest functions don't work with grid_complex_spatial_differencing packing
  • [GRIB-723] - Non-compliant JSON output
  • [GRIB-724] - CRASH: grib_nearest_find_multiple on lambert grid
  • [GRIB-725] - Problem reading level-number from gfs-files with grib-independent 'level' key
  • [GRIB-729] - Crash: calling grib_keys_iterator_get_name before grib_keys_iterator_next
  • [GRIB-738] - Incorrect units in Table 2 v 172
  • [GRIB-745] - issue with spint; writing spectral fields in grib_api
  • [GRIB-749] - grib_to_netcdf: Floating-point exception generated in nc_put_att_type
  • [GRIB-752] - GRIB2: incorrect code table used in section 4 aerosol templates
  • [GRIB-758] - help page for some tools incomplete
  • [GRIB-761] - S2S parameters recognition must ignore local concepts
  • [GRIB-762] - CRASH: grib_to_netcdf on S2S data (forecast)
  • [GRIB-772] - grib_get_all_names present in grib_api.h but not actually implemented in the library
  • [GRIB-774] - Memory leaks in Python example keys_iterator

Version 1.13.1 (April 2015)

Bug Fixes

  • [GRIB-735] - Performance: decoding large grib1 files from some centres
  • [GRIB-665] - CMake: build does not install Fortran module
  • [GRIB-672] - CMake: python bindings do not support numpy
  • [GRIB-689] - CMake: threads not enabled

Version 1.13.0 (December 2014)


Release 1.13.0 comes with support for the CMake build system for compilation and installation.
At the moment this is still experimental. Please report any issues to or via JIRA to .
More Information can be found in the GRIB API CMake installation

Please note that autotools (the configure script) is still supported.

Note: Some of the GRIB files used in the tests are now downloaded rather than included in the distribution tarball.

Before running the "make check" step please make sure you are connected to the internet.

New Features/Improvements

  • [GRIB-640] - Deprecate the tools "grib_convert" and "grib_cmp"
    Note: These two tools are deprecated. Instead of grib_cmp please use grib_compare and instead of grib_convert use grib_filter.
    In the next major version these tools will be removed.

  • [GRIB-605] - Mark the function "grib_handle_new_from_template" as deprecated
    Note: This function is deprecated. Please use "grib_handle_new_from_samples" instead.
    In the next major version this function will be removed.

  • [GRIB-658] - GRIB2 Grid definition template 3.12 key 'm' datatype
    This concerns GRIB edition 2 messages with grid type of Transverse Mercator (grid definition template 3.12).
    The type of the key "m" (also known as scaleFactorAtReferencePoint) has been corrected (changed from signed integer to a float).
    If you have any existing grib2 data using this template, you should re-encode this key.
  • [GRIB-534] - Implement and/or document a clean way of removing vertical coordinates, that now requires setting two different keys
    You can now use a single key to remove vertical coordinates. This sets the number of coordinates values to 0 and clears the "pv" array:
     grib_set -s deletePV=1 in.grib out.grib 

  • [GRIB-550] - Need access to grib samples path (via API)
    The C API now has a new function to allow access to the samples path:
     char* grib_samples_path(const grib_context *c);

  • [GRIB-368] - grib_dump should support the "-s" option
    A "-s" option is provided for grib_dump to allow you to set a key. (Similar to grib_get/grib_ls)

  • [GRIB-392] - grib_dump: provide output in JSON format
    A "-j" option is provided for grib_dump to have the output in JSON format.

  • [GRIB-389] - Provide option to process the input file after a given offset (in bytes)
    A "-X" option is provided for grib_ls, grib_get and grib_dump to allow you to skip a certain number of bytes by providing an offset

  • [GRIB-437] - grib_to_netcdf: Allow user to make the "time" dimension UNLIMITED
    A "-u" option is provided for grib_to_netcdf which takes the name of a dimension e.g. time and makes it "unlimited":

     grib_to_netcdf -utime -o in.grib

  • [GRIB-259] - Implement grib_find_nearest() for lambert grid type
  • [GRIB-460] - Modify GRIB API to adapt JRA-55's grib table
  • [GRIB-524] - New timeRangeIndicators required for ERA
  • [GRIB-537] - Support access to environment variables within definition files
  • [GRIB-571] - Update local concepts for Met Éireann
  • [GRIB-631] - Update local concepts for DWD
  • [GRIB-574] - grib_get_data: Add Polar Stereographic support
  • [GRIB-577] - Create GRIB1 concept for GLAMEPS CAPE parameter
  • [GRIB-597] - Provide edition independent keys to query shape of the earth
  • [GRIB-620] - Add templates for new reduced Gaussian grid - N96
  • [GRIB-657] - New shortNames required, for table 2, version 162, by NCAR
  • [GRIB-15] - nearest on unsupported grids should fail with a more meaningful message
  • [GRIB-323] - grib_find_nearest: distance to same grid point should be 0
  • [GRIB-338] - Add kwbc (NCEP) local definitions for grib1
  • [GRIB-404] - grib_to_netcdf - new names for some netcdf variables
  • [GRIB-415] - Can't set level to 1.5m
  • [GRIB-468] - Setting Generalized Vertical Height Coordinate should set typeOfFirstFixedSurface=150 and NV=6
  • [GRIB-472] - Boustrophedonic ordering handling of masked not consistent with gribex
  • [GRIB-496] - Feature request: Allow inheritance in Python GRIB API typechecking
  • [GRIB-523] - grib_get_data does not query the bitmap for missing values
  • [GRIB-525] - Better error message when concept match fails
  • [GRIB-526] - grib_filter very picky about format of floats
  • [GRIB-549] - Grib2 template.3.100: Add keys to namespace "geography"
  • [GRIB-615] - Compiler warnings with jasper: macros redefined
  • [GRIB-638] - grib_to_netcdf: Inform user which keys are being ignored
  • [GRIB-639] - Inclusion of lower and upper limit virtual keys in templates 4.5 and 4.9
  • [GRIB-600] - Add development helper scripts to distribution archive
  • [GRIB-604] - Add grib1 sample file for the clustering products
  • [GRIB-623] - Add centre code for Indonesia
  • [GRIB-629] - Remove grib2 local coding for parameters "wildfire flux ..."
  • [GRIB-634] - Update GRIB2 definitions with the latest WMO V14.0.0 templates/tables
  • [GRIB-647] - New UERRA related set up
  • [GRIB-652] - New stream and types for MACC GFAS dataset
  • [GRIB-653] - GRIB-API definition files for MACC GFAS support in MARS
  • [GRIB-659] - Provide key to get angular precision
  • [GRIB-662] - Add new entries for UERRA in Table 1.3 'Production status of data'

Bug Fixes

  • [GRIB-140] - GRIB2 JPEG packing error (using jasper)
  • [GRIB-201] - Variable defined twice in shortName.def
  • [GRIB-205] - mars.type is changed during grib1->grib2 conversion using TIGGE definition file
  • [GRIB-249] - grib_api bug: multi-field messages
  • [GRIB-272] - Wrong computed iDirectionIncrementInDegrees when first=5, last=355, iScansNegatively=1
  • [GRIB-343] - Memory leak: when decoding md5 keys
  • [GRIB-355] - CRASH: grib_compare on grib1 files after changing local definition
  • [GRIB-356] - Unclear message when concept def file not found
  • [GRIB-370] - grib_dump -O tn.grb1 SECTION 2: 29-32 padding_grid0_1 = *** ERR=-6 (Passed array is too small)
  • [GRIB-383] - grib_get reports negative length for large grib2 message!
  • [GRIB-394] - grib_filter arithmetic operators not correct for floating point values
  • [GRIB-406] - grib_get_data: Values outside of subarea specified
  • [GRIB-419] - grib_to_netcdf: time dimension is present even though specifying -I time and -T
  • [GRIB-420] - grib_to_netcdf: Should fail if several messages have the same validity time
  • [GRIB-422] - The MARS STEP key is incorrectly defined for stream=EDMM/EDMO and type=FC
  • [GRIB-476] - wrong automated change of grib key typeOfProcessedData for tigge GRIB2 datasets
  • [GRIB-478] - Support of local usage for GRIB edition 2
  • [GRIB-481] - Grib_api not threadsafe when creating grib_handle, grib_handle_create
  • [GRIB-486] - grib_histogram bug
  • [GRIB-488] - GRIB2: step calculation for typeOfTimeIncrement=1
  • [GRIB-489] - Crash using a calculated key to retrieve 'apparently numeric' index value with grib_index_get_long
  • [GRIB-497] - Mars.step needs to be defined appropriately
  • [GRIB-499] - Incorrect units in Table 2, version 162
  • [GRIB-500] - grib_ls crashes if specified index to "-i" switch is out of bounds
  • [GRIB-503] - GRIB_API problems coding variables with typeOfLevel = generalVertical in GRIB2.
  • [GRIB-504] - Skewness and kurtosis stats seem to be wrongly computed
  • [GRIB-506] - grib_ls goes into infinite loop when a directory is passed in
  • [GRIB-514] - Potential buffer overrun in grib_util.c
  • [GRIB-515] - Cppcheck error: resource leak
  • [GRIB-516] - needs to be defined appropriately
  • [GRIB-518] - Using flex in maximal compatibility mode causes syntax errors
  • [GRIB-530] - PDT 4.44 inconsistent with specifications
  • [GRIB-540] - grib_api rounding/packing bug
  • [GRIB-542] - Sample file geometry is incorrectly specified
  • [GRIB-543] - Error with grib_set scaleValuesBy: unable to set bitsPerValue
  • [GRIB-544] - Valgrind reports errors on "make check"
  • [GRIB-545] - GRIB2 probability templates: declare type of limits as "signed"
  • [GRIB-547] - Setting productionStatusOfProcessedData creates unreadable GRIB
  • [GRIB-557] - Extension of CMA local table to support radionuclides
  • [GRIB-563] - grib_find_nearest memory leak
  • [GRIB-564] - grib_find_nearest returns missing values with jpeg packing
  • [GRIB-566] - Key iterator filters grib_skip_computed and grib_skip_coded do not work
  • [GRIB-568] - Python call grib_new_from_file does not fail on corrupt GRIB message
  • [GRIB-569] - Memory leak in grib_yylex
  • [GRIB-570] - grib_keys_iterator memory leak
  • [GRIB-575] - grib_compare: should not print min and max for spectral_complex
  • [GRIB-580] - Creating an index on an empty file crashes
  • [GRIB-581] - typo in template.3.latlon_vares.def
  • [GRIB-594] - netcdf parameter names referring to the radiation
  • [GRIB-603] - Transverse Mercator projection and negative co-ordinates
  • [GRIB-633] - Check fails in example/F90 for (with PGF90)
  • [GRIB-637] - GRIB2: Potential vorticity surface: incorrect decoding of "level" as double


Version 1.12.3 (July 2014)

  • Add GRIB samples for N=1280 Reduced Gaussian Grid
  • New parameters for table 230: variable resolution systems
  • Update the local concepts for DWD
  • Remove GRIB2 local coding for parameters in table 230
  • Update GRIB2 definitions with the latest WMO V13.0.0 templates/tables
  • Added centre codes/abbreviations for Pretoria and Moscow
  • In test scripts use grib_compare rather than the deprecated grib_cmp
  • Bug fix: Change GRIB2 codes for parameters Eastward/Northward turbulent surface stress

    WMO has recently released v13.0.0 of GRIB2 codes/tables which contains the changes needed for S2S (See WMO Latest GRIB2 Version)
    Unfortunately, WMO assigned a code to the two parameters required by S2S which is different from the codes we submitted.
    The two parameters and codes are:

      Northward turbulent surface stress:  WMO code 37 (instead of 36)
      Eastward turbulent surface stress:   WMO code 38 (instead of 37)

    This version of GRIB API uses the new WMO codes.

  • Bug fix: grib_ls -l / grib_nearest_find returns incorrect values for grid_second_order

  • Bug fix: grib_ls -l / grib_nearest_find returns wrong points for specific humidity on model levels in GRIB 2

  • Bug fix: Units of "top net radiation" should be J m**-2

Version 1.12.1 (May 2014)

  • Bug fix: undesirable TIGGE soil moisture & temperature paramId change
    This is an important fix for a problem that caused regressions in TIGGE data recognition (GRIB edition 2)

  • New wave model parameters added
  • New parameters for additional 40r3 diagnostics

Version 1.12.0 (March 2014)

  • grib_to_netcdf: store command-line switches in output netcdf file

  • NetCDF should only be a dependency for grib_to_netcdf

  • Provide implementation for C API call: grib_get_length

  • Update of some grib2 local tables used by obstat

  • grib_index_build should expose the "-N" (do not remove single-value indexes) option that is already implemented

  • Conversion of class="ei", stream=dacl, type=em data from GRIB to NetCDF

  • Parameters for MACC-II Usage

  • Bug fix: grib_dump assertion failure if seconds not zero
  • Bug fix: grib_get_data printing longitudes larger than 360
  • Bug fix: new dimension in grib_to_netcdf files if different types present
  • Bug fix: grib_to_netcdf: The "-I" command-line switch is not processed
  • Bug fix: grib_to_netcdf: Should fail if messages have different level types
  • Bug fix: NetCDF long_name length exceeded
  • Bug fix: Missing GRIB 2 parameters (discipline 3, category 0 and 1)
  • Bug fix: Problem with pooled file cleanup
  • Bug fix: Create GRIB2 parameters for S2S project
  • Bug fix: Exit called from library instead of returning error code
  • Bug fix: swapScanningY=1 truncates latitude first and last points
  • Bug fix: grib_filter hangs if rules_file have wrong path
  • Bug fix: Parameter 211015 does not have a GRIB2 representation
  • Bug fix: Problem identifying "2d" (dewpoint temp)
  • Bug fix: Invalid pkg config name for Fortran 90 library
  • Bug fix: GRIB edition 2 samples have empty local section (section 2)
  • Bug fix: Incorrect definition for parameter 131071 (10 metre Wind gust of at least 20 m/s)
  • Bug fix: Duplicated GRIB2 parameter representations
  • Bug fix: Cygwin: make error in tools directory
  • Bug fix: Parameters "lapse rate" and "Montgomery stream function" have incorrect units
  • Bug fix: GRIB edition 1: Incorrect parameter names/units

Version 1.11.0 (August 2013)

  • Fortran interface: Consistently use size_t for argument "nbytes". This allows reading and writing in of large messages
  • Fortran interface lacks support for byte arrays
  • Addition of WMO GRIB Edition 2 Version 11
  • Update the local concepts for DWD (edzw)
  • Partitioned parameters support in GRIB edition 2
  • Update of GRIB2 concepts for paramIds 167, 168, 121 and 122
  • Bug fix: grib_to_netcdf: incorrect time variable in NetCDF file
  • Bug fix: grib_to_netcdf wrongly converting fields not from table 128
  • Bug fix: grib_to_netcdf: does not work with the -R option
  • Bug fix: Conversion from GRIB2 to GRIB1 works without error for L137 data
  • Bug fix: Setting bitsPerValue=64 fails with assertion
  • Bug fix: grib_ls does not print value for key of type BYTES unless type specifier is given
  • Bug fix: grib_get_context function advertised but not implemented. This has now been removed
  • Bug fix: grib_api soname should be the ABI version
  • Bug fix: Configure: Autoconf features are not correctly implemented
  • Bug fix: pkgconfig libs are incorrect
  • Bug fix: Some surface data in GRIB Edition 2 appear to have mars.levelist, when it shouldn't
  • Bug fix: Failing test: (issue with grib_dump)
  • Bug fix: The MARS STEP key is incorrectly defined for stream=EDMM and type=AN
  • Bug fix: Error in Mercator grid template definition
  • Bug fix: Empty GRIB: computing the average causes division by zero

Version 1.10.4 (May 2013)

  • GRIB_SAMPLES_PATH environment variable can now contain several directories similar to GRIB_DEFINITION_PATH
  • TIGGE-LAM: Support for Limited Area Model in GRIB Edition 2
  • Updated GRIB Table 210 definitions
  • Added local definition to support LAMs (include model and domain)
  • New UKMO Table 174 parameters for EURO4M Archiving
  • grib_filter: Added ability to print integer keys using a print format specifier
  • GRIB-API addition of WMO GRIB Edition2 MasterTableVersionNumber 10
  • Added class for NOAA-CIRES 20CR 20CR Re-analysis
  • Improved performance by allowing type-checking decorator in the python interface to be disabled.
    This can be done by setting the environment variable: GRIB_API_PYTHON_NO_TYPE_CHECKS
  • Added General Unstructured Grid support in GRIB 2
  • Added Generalized Vertical Height Coordinate support in GRIB 2
  • Renamed parameters: surface thermal radiation
  • Provided access to the long description name of a producer centre.
    There is a new key called centreDescription
  • Provided new wave model parameters for grib1, table 140
  • Improved portability for MinGW on Windows
  • Rename some surface stress related parameters to improve usability
  • Update to BUDG definitions to enable writing from IFS
  • Bug fix: issues installing 1.9.9 libtool on the Mac OS
  • Bug fix: grib_compare misbehaving ...
  • Bug fix: Setting step to the new value in GRIB2 creates wrong [day,hour]endOfOverallTimeInterval
  • Bug fix: Fix parameters "Virtual temperature" and "Virtual potential temperature"
  • Bug fix: grib_to_netcdf failure for constant fields
  • Bug fix: grib_iterator for latlon_reduced returns incorrect lat/lon when range crosses dateline.
  • Bug fix: Missing range check in double_pack with FPE trapping enabled with missing values
  • Bug fix: multi.c example doesn't close handles as it should
  • Bug fix: Python gribapi.grib_find_nearest() leaks the memory for Gaussian reduced grid
  • Bug fix: grib_count exits quietly when data is corrupted
  • Bug fix: grib_context_set_path declared but not implemented
  • Bug fix: Python: Fix errors reported by pylint
  • Bug fix: Long Window Daily Archive: Support for Errors in Analysis
  • Bug fix: Test fails: when netcdf is enabled but jpeg disabled
  • Bug fix: Create GRIB file with 15 minutes as forecast time step
  • Bug fix: Redundant grib2 paramId for edzw
  • Bug fix: Valgrind: errors on grib_dump -D
  • Bug fix: grib_api tools abort on 'big' grib message
  • Bug fix: Grib2: Setting stream to "elda" should change the productDefinitionTemplateNumber
  • Bug fix: paramId 228028 (wind gust) update required
  • Bug fix: C code generated by grib_dump produces error when run
  • Bug fix: Grib2: Incorrect unitsOfSecondFixedSurface and nameOfSecondFixedSurface
  • Bug fix: Some GRIB1 parameters from table 2 version 131 appear to be WMO
  • Bug fix: grib_api 1.10.0 crashes with large grib files when bitmap is present
  • Bug fix: grib_filter: cannot convert to grib2 and set typeOfFirstFixedSurface=150

Version 1.10.0 (January 2013)

  • Updated copyright notices to Apache Licence Version 2.0. ( )
  • Availability of grib2_to_netcdf tool from grib_api
  • Support in grib_api for Lambert Conformal grid (grib_get_data)

  • Updated GRIB edition 2 definitions with the latest WMO V9 templates/tables

  • ERA-CLIM: Added support for Simulated Radiances

  • LWDA: Added support to Long Window 4DVar

  • ERA-CLIM: New stream (ensemble supplementary data) and origin (Hadley Centre)

  • GRIB definitions of new variables from LISFLOOD hydrological model

  • Added Local Definition 21 (Sensitive area predictions) for GRIB edition 2

  • Provided user-friendly function in API to check if a key is defined (grib_is_defined)

  • Python: Provided function to set key values in one go (like grib_set -s)

  • New MARS codes for surface parameters (effective total cloudiness)

  • Corrected ifs_samples installation path

  • New streams for ensemble data added to the parameter database

  • New mars streams added for ensemble data assimilation

  • Added pseudo-grib (budg) sample file for IFS

  • Added new centre codes for COSMO, Ireland and Austria

  • Bug fix: python interface missing __version__

  • Bug fix: on make dist, definitions and sample go to /usr/share instead of /usr/share/grib_api/

  • Bug fix: fails in Debian automatic build machines

  • Bug fix: Lambert azimuthal equal area

  • Bug fix: Assertion when trying to encode the level information of some cloud cover fields

  • Bug fix: ERA-CLIM: Support for existing streams EDMM, EDMO, EWMM, EWMO

  • Bug fix: Netcdfs generated by grib_to_netcdf seem to be upside down

  • Bug fix: python binding without numpy support grib_get_array(gid,'pv',float)

  • Bug fix: grib_dump crashing with some second order packed files

  • Bug fix: running grib_to_netcdf on a non regular lat/lon grid GRIB file results in invalid netcdf

  • Bug fix: Assertion: Interpolation (or truncation) of GRIB 2 data into T21

  • Bug fix: Make sure that grib_filter checks all disk writes.

  • Bug fix: if "configure" is run without --prefix, IFS_SAMPLES_PATH starts with "NONE"

  • Bug fix: grib_to_netcdf: long_name/units incorrect

  • Bug fix: grib_filter error: converting edition 1 to 2: unable to get extraDimensionPresent as long

  • Bug fix: grib_check Fortran definition is inconsistent with other Fortran definition: uses "integer" instead of "integer(kind=kindOfInt)" as status variable

  • Bug fix: Remove redundant MARS type and stream entries for TIGGE

  • Bug fix: Remove layer information from grib_api concepts for soil parameters

  • Bug fix: grib_api 1.10.0 with MARS client: Interpolation failed

  • Bug fix: Remove parameter 500011: 2m Temperature

  • Bug fix: Remove new grib2 representations for parameters: 210004 and 210061

  • Bug fix: Wrong short name for centre 82 in 0.table

  • Bug fix: configure option disable-vector actually enables it!

  • Bug fix: LWDA: Support for Errors in Analysis

Version 1.9.18 (October 2012)

  • Updated sample gribs with recent changes for Reduced Gaussian N1024 and N2000
  • Updated GRIB2 definitions with the latest WMO version 8 templates/tables

  • Added missing parts in Grid Definition Template 3.120

  • Added GRIB2 template 4.32 (simulated satellite data)

  • Removed redundant MARS files for type and stream combinations

  • Bug fix: Segmentation violation: calling grib_set on 'values' (decimal scale factor)

  • Bug fix: grib_get_data returns incorrect lat-lon values for some GRIBS

  • Bug fix: grib_filter does not fail with a non-zero return code when setting an invalid key

  • Bug fix: Cannot set paramId to 228170 (Field Capacity) for GRIB edition 2

  • Bug fix: grib_api compilation fails when enabling pthreads in recent Linux distributions

  • Bug fix: Segmentation violation when GRIB_DEFINITION_PATH contains colon

  • Bug fix: Compilation failure: problems with GRIB_INLINE: undefined reference to stdio_read etc

  • Bug fix: Setting step to the new value in GRIB2 creates wrong [day,hour]endOfOverallTimeInterval

  • Bug fix: grib_keys -L should show the real contents of SAMPLES PATH

  • Bug fix: Crash: Running the fortran example get_data

  • Bug fix: grib_filter with verbose option -v writes out lots of blank lines

  • Bug fix: tools/ depends on /usr/bin/ksh which is a non standard location and breaks RPMs

  • Bug fix: GRIB1: Problem with derive probability for wave height larger than 8m

  • Bug fix: Bug when printing thickness of layers (typeOfLevel = depthBelowLandLayer)

  • Bug fix: Correct typos in parameter database

  • Bug fix: test script not working on some stricter shells

  • Bug fix: Compilation failure: tools/grib_compare.c - error on SX9 with the "end" variable

  • Bug fix: Build fails in Solaris 10: Wrong Fortran module include

Version 1.9.16 (March 2012)

  • Disabled boustrophedonic ordering in second order packing.
  • Fixed the python bug in setting keys of type "double".
  • New parameters have been added to the parameter database and to the definition files.
  • Fixed a problem producing unwanted padding between messages when converting some fields from second order packing.
  • Improved thread safety in relation to the creation of an index. Creating a new grib_handle or indexing different files is thread safe.
  • Fixed grib_dump not to display zeros when all values were missing.
  • Fixed various minor bugs.

Version 1.9.9 (March 2011)

  • Two versions of the library are available for download. One is based on libtool and the other one has a build system similar to the previous versions. With the libtool version it is possible to build a shared or static library just changing the --enable-static, --enable-shared options of the configure script. The default behaviour is to generate the shared library.
  • Several changes have been made to the internal functions used by the interpolation package in EMOSLIB 381 to make the results of the grib_api based interpolation as close as possible to the GRIBEX based one.
  • New parameters have been added to the parameter database and to the definition files regarding the MACC project.
  • Second order packing (packingType=grid_second_order) is producing smaller fields as the default setting is to use the boustrophedonic option.
  • Installation of IFS samples files is made automatically in the directory ifs_samples under the installation path or can be configured to be in any directory with the configure option --with-ifs-samples="directory where to install IFS samples".
  • Fixed memory leaks in the python bindings.

Version 1.9.8 (February 2011)

  • IMPORTANT CHANGE: A significant change in the Fortran interface has been made. As a consequence of this change, user programs that ran correctly with previous versions may exhibit memory allocation problems after linking with version 1.9.8 due to unreleased memory associated with the GRIB messages being processed. This change is necessary to avoid possible problems in programs using previous versions.

In previous versions (starting from version 1.6.1) the argument IGRIB of the functions GRIB_NEW_FROM_FILE, GRIB_NEW_FROM_MESSAGE, GRIB_NEW_FROM_SAMPLE, GRIB_NEW_FROM_INDEX, GRIB_CLONE was both an input and output argument. Memory was released when a value of IGRIB associated with a valid message was passed to the function. It has been realised that this behaviour is a possible source of unexpected results when the IGRIB variables used in user programs are not initialised to a non valid IGRIB value (zero or negative integer).

Starting from version 1.9.8, IGRIB is output only and the grib message associated with IGRIB will never be released by one of the functions above. This means that to deallocate the memory associated with the message a call to GRIB_RELEASE(IGRIB) must be introduced once that message is no longer needed. We strongly advise users to revise existing codes using previous grib_api versions or to link to the new library, add the appropriate calls to GRIB_RELEASE and test for memory allocation issues.

For convenience we report an example of code which could cause problems and needs to be reviewed by users of the library.

integer :: IGRIB1
integer :: IGRIB2

call grib_new_from_file(IGRIB1,...)
... do something ...
call grib_new_from_file(IGRIB2,...)
... do something ...

IGRIB1 and IGRIB2 are not initialised to zero and therefore it is not known which value is assigned to them. It could be IGRIB1=IGRIB2=5 or any other number greater than or equal to zero. If this happens, at the second call of grib_new_from_file IGRIB1 will be replaced by IGRIB2 leading to very dangerous consequences as IGRIB1 no longer points to the intended GRIB message. Please revise your code in view of this example or link to the new version and add a call to the GRIB_RELEASE function to deallocate the memory when it is no longer needed as it is not deallocated automatically in the new version.

  • Second order packing algorithm rewritten and working in GRIB edition 1 and 2 with
  • This version is ready to be used with the new GRIB edition 1 and 2 interpolation function (INTF2) available in EMOSLIB version 377.
  • The key longitudeOfSouthernPoleInDegrees has been changed in GRIB edition 2 to convert the negative longitude values in the 0-360 range because negative values of longitudes are not allowed in GRIB edition 2.
  • Review and update of the code tables.
  • Added new parameters. Full list of parameters accessible from:
  • Bug fixes.

Version 1.9.5 (October 2010)

  • Python interface available with the configure option --enable-python. See
  • Available new environment variable GRIB_API_IO_BUFFER_SIZE defining the size in bytes of the buffer used in the IO calls from Fortran and in the tools.
  • Performance improvements and partial vectorisation for the NEC SX platform.
  • Review and update of the code tables.
  • Update of paramId, shortName, name key values and release of a new parameter database web interface.
  • Added a new key called 'global' for regular_gg and reduced_gg which can take the values 1 ( =True) or 0 (=False).
    This is used to specify whether the grid is global or not. Setting global=1 will set the grid parameters computed from N and Ni only. It is used in the conversion from one edition to the other.
  • Available new environment variable GRIB_API_NO_ABORT. Default value is 0 and when it is set to 1 the library will not abort on failing asserts.
  • Bug fixes.

Version 1.9.0 (May 2010)

  • Setting paramId or converting from one edition to the other when a parameter is not
    defined in the paramId.def file will result in a failure.
  • Improved performance in reading/cloning a message.
  • Changed the indexing system and provided new functions to write the index on a file
    grib_index_write and read it grib_index_read.
  • Provided a new tool to build an index from a set of files: grib_index_build.
  • The tool grib_compare is able to compare two index files, running through the grib messages indexed in the first and searching for them in the second.
  • Definition files and library have been updated to be used in operational status in the
    IFS cycle 36R2
  • grib_ls has slightly changed format.
  • A -j option is provided in grib_ls (-l only) to have the output in json format.
  • BUFR messages are read, but only very basic decoding is provided.
  • Parameters have been updated.
  • Native type of paramId has been changed from string to integer.
  • Several small bug fixes.

Version 1.8.0 (July 2009)

  • Improved conversion from edition 1 to 2. Set edition=2 will do the conversion from edition 1 to 2 also of the parameter information.
  • shortName, paramId and units are defined for all the official WMO parameters and for local parameters used at ECMWF and NCEP
  • Added two keys: libraryVersion, definitionFilesVersion.
  • grib_compare has been modified to compare GRIB 1 and 2 (option -e). Other important changes have been done on grib_compare (see examples ) to have a more powerful tool to compare headers and values. New options are provided to choose the tolerance and new namespaces are available to compare only the relevant part of information. The new namespaces are. parameter,geography,vertical,time,local,data.
  • Option -n has been added to grib_ls to list the value of the set of keys belonging to a given namespace. grib_ls -n time in.grib will print the same time information for grib edition 1 and 2.
  • For some ECMWF local definitions the conversion rules have been included in grib_api.
  • A new key cfName is provided for the netcdf CF name. It is at the moment defined only for some parameters.
  • The parameter information is generated from a parameter database maintained at ECMWF and accessible from a new section in the grib_api web pages.
  • A new key typeOfLevel valid for grib edition 1 and 2, with the following values has been introduced: 'surface', 'cloudBase', 'cloudTop', 'isothermZero', 'adiabaticCondensation', 'maxWind', 'tropopause', 'nominalTop', 'seaBottom', 'isobaricInhPa', 'isobaricInPa', 'isobaricLayer', 'meanSea', 'isobaricLayerHighPrecision', 'isobaricLayerMixedPrecision', 'heightAboveSea','heightAboveSeaLayer', 'heightAboveGroundHighPrecision', 'heightAboveGround', 'heightAboveGroundLayer', 'sigma', 'sigmaLayer', 'sigmaLayerHighPrecision', 'hybrid', 'hybridLayer', 'depthBelowLand', 'depthBelowLandLayer', 'theta', 'thetaLayer', 'pressureFromGround', 'pressureFromGroundLayer', 'potentialVorticity', 'depthBelowSea', 'entireAtmosphere', 'entireOcean', 'oceanWave', 'oceanMixedLayer'
  • The open source library OpenJpeg can be used in place of Jasper for the jpeg 2000 coding. --with-openjpeg options in the configure.
  • decimalPrecision can be used also with grid_jpeg packing.
  • parameterName,parameterUnits are provided from the code tables.
  • packingError is also available for spherical harmonics packing. It provides the error due to simple packing.
  • option -l added in grib_get
  • option -F added in grib_get and grib_ls to control the format of floating point keys.
  • grib_ls output has been changed due to the introduction of the new typeOfLevel key
  • Subroutine grib_is_missing added in the Fortran interface to check if a header value is missing.
  • Changed step behaviour. If the step is "instant" and the value doesn't fit into one byte (in grib 1) an appropriate value of timeRangeIndicator is found to code the value in two bytes instead of 1.
  • In grib_filter the function "append" has been added to append a message to a file as opposed to "write" which is writing from the beginning of the file.
  • A new grib_count function is available to count (very fast) the number of messages in a list of files.
  • The value of the key level is zero in both edition when it is not relevant for the message and it is missing in grib edition 2.
  • The indexing routines have been improved to process string keys.

Version 1.7.0 (March 2009)

  • New indexing routines. Example: index.f90
  • New keys stepType,stepUnits,stepRange,startStep,endStep.
  • New keys swapScanningX, swapScanningY, swapScanningLat, swapScanningLon. To swap the field respect one axis. They swap data and fix the header accordingly.
  • "Improved" error messages.
  • write multi fields. Previous versions of grib_api were able only to read multi fields, now you can also write multi fields. We don't suggest to you this feature, it is included only to be compliant with FM-92 spec.
    Examples: multi.f90, multi_write.f90, multi.c, write_multi.c
  • function grib_new_from_template is deprecated and it will be replaced with grib_new_from_samples. Also the environment variable GRIB_TEMPLATES_PATH is
    replaced by GRIB_SAMPLES_PATH. Please replace "template" with "samples" in all the C functions also. The behaviour is the same. I made a new example showing the
    best practice to use samples. The technique of cloning is strongly recommended.
    Example: samples.f90
  • New key decimalPrecision provided. Used in the previous example. Regarding decimalPrecision and bitsPerValue the following problem was found in the
    previous version. If after loading from file or from sample (template) or cloning a constant field you set some non constant values the library doesn't
    know the bitsPerValue or the decimalPrecision you want to code (those are zero in the constant field). The result could have been a field coded with a poor
    precision. Starting with the new 1.7.0 version in these ambiguous cases grib_api is using 24 bits to pack the field (safe value). We always suggest to set
    explicitly the bitsPerValue or decimalPrecision or to clone non constant fields with those values properly set.
  • grib_copy, grib_set. A key name in square brackets can be used in the output file name. The key will be replaced with its value in the processed grib
    message. This will provide an easy way for splitting fields as the file name will be dependent on some key values. Example:
    grib_copy input.grib "output_[shortName]_[date]_[step].grib"
    Please remember to quote the file name otherwise you can get strange behaviours due to the shell.
  • New key packingError. The error introduced by the packing algorithm is returned with this key. It is available only for some packing algorithms. All
    the packed values are affected by this error in the sense that original value before packing = unpacked value ± packingError
    packingError is different for different fields (also for different steps of the same parameter/level/run).
  • all the nearest functions are returning the distance from the grid point in Km, using the radius coded in the message.
  • key bitmapPresent now available also in grib 2.

Version 1.6.4 (September 2008)

  • Fields containing a bitmap with all missing values can be coded in grib1 and grib2
  • Multifields grib2 messages can be loaded from memory.
  • local definition 31 added
  • Better use of memory
  • minor bug fixes

Version 1.6.1 (July 2008)

  • More efficient use of memory and improvement of performance.
  • Thread safe version available through the --enable-pthread configure option.
  • New computation of kindOfInt, kindOfLong, kindOfDouble, kindOfFloat, kindOfSize to allow safe arguments handing between Fortran 90 and C.
  • A new key bitmap is provided to get the full bitmap as a string with the grib_filter instruction: print "[bitmap]";
  • all the tools are failing on error and can be forced to proceed execution with the option -f . The only exception is grib_ls because we already have an identical tool failing (grib_get).
  • new error messages from the Fortran 90 interface will give you some more chance to debug your code.
  • New function grib_count_in_file available from Fortran and C to count the messages in a file. See example: examples/F90/count_messages.f90
  • In the Fortran 90 interface any valid grib id passed to a grib_new_from_file or grib_new_from_message will be released before being assigned to a new grib message. Example
    call grib_new_from_file(ifile,igrib, iret)
    do while (iret /= GRIB_END_OF_FILE)
    ... do something with the message pointed by igrib
    ... igrib will have the same value, but
    ... it will point to a different message each cycle
    ... the message from the previous cycle will be released
    ... no need for grib_release(igrib)
    call grib_new_from_file(ifile,igrib, iret)
    If you want to keep the grib message in memory remember to pass a negative grib id. Example
    call grib_count_in_file(ifile,n)
    allocate (igrib(n))
    do i=1,n
    call grib_new_from_file(ifile,igrib(i), iret)
    ... remember to release the grib ids to free memory
    do i=1,n
    call grib_release(igrib(i))
  • grib_filter is now able to print with a format, number of columns and a separator for array keys. The format is expressed with a % followed by a C like (printf) format declarator. The number of columns is started with ! The separator string is delimited by ' ' Examples print "[values!6%.5f',']" values with 5 digits precision in 6 columns separated by , print "[latitudes%.3f!1]" latitudes with 3 digits precision in a column print "pl={[pl!7', ']}" pl (number of point for each latitude) in 7 columns separated by ', '
  • New keys: julianDay latLonValues array containing latitude(1),longitude(1),value(1), latitude(2),longitude(2),value(2),..., latitude(N),longitude(N),value(N) (N=number of points in the grid) latitudes latitude(1),latitude(2),...,latitude(N) (N=number of points in the grid) longitudes longitude(1),longitude(2),...,longitude(N) (N=number of points in the grid) distinctLatitudes list of distinct latitudes distinctLongitudes list of distinct longitudes
  • minor bug fixes

Version 1.5.0 (June 2008)

  • Modified the internal retrieval of keys, improving performance in getting and setting keys.
  • Implemented memory management. An efficient technique to reuse memory is implemented. --disable-memory-management configure option available to disable the memory management and use system malloc/free.
  • Some experimental multithreaded packing is available for big endian machines. A configure option --enable-omp-packing is provided to enable the openMP instructions contained in the new packing. The environment variable OMP_NUM_THREADS sets the number of threads used in the packing algorithm.
  • grib_filter improvements:
    • it is now possible to set array keys like values or pl as follows:

    values = { 0.1, 3.2, 7.5 };

    • it is now possible to print array keys like values or pl as follows:

    print "values=[values]";

    it is also possible to print on a file ("test.out") doing:

    print("test.out") "values=[values]";

    • better error messages are printed
    • it does not fail if an undefined key is used in a write or print statement
  • New keys or changed keys:
    • a scale factor and an offset can be applied to the data values through the keys "scaleValuesBy" and "offsetValuesBy".
    • setBitsPerValue is the new key to be used to change the number of bits per value. It also executes the repacking.
    • The keys periodOfTime is now working also when indicatorOfUnitOfTimeRange=0 (time units is minutes)
  • Concepts can be defined by the user. Concepts are a way to link the value of a key to a combination of values of other keys. They are used to define the short_name and the name.
  • minor bug fixes

Version 1.4.0 (February 2008)

  • New Fortan 90 interface. Main features:
    • unique grib_get/grib_set subroutines to get/set any variable type.
    • status code is an optional argument in all the subroutines (when omitted the program will exit in case of error)
    • new subroutine grib_get_data to get the latitude/longitude/values arrays.
    • new subroutine grib_get_element to get one or several elements of an array key through their index.
    • new subroutine grib_nearest function to get the nearest grid point of a given lat/lon. It accepts in input also arrays of latitude/longitudes to find the nearest points in one single call. A land sea mask mode is also available to get the nearest land point.
  • New Fortran 90 examples and documentation.
  • New grib_keys tool to obtain the list of keys available for a specified type of grib.
  • Modified the -l option in grib_ls (see documentation or type grib_ls without arguments)
  • fixed a bug in the grib_filter and added the -o option for the output file.
  • minor bug fixes.

Version 1.3.0 (November 2007)

  • grib_ls -l lat/lon/mode to retrieve values in the nearest grid points of a given latitude longitude point.
  • grib_ls -B"order by" to order the output using some keys.
  • grib_ls -i index. To extract the value in the index grid point.
  • new grib_dump exposing a minimum set of keys which are the ones suggested for the standard use. Some options added to the grib_dump. The output of this new grib_dump is ready to be coupled to the new grib_gen which will be released in the next version.
  • grib_copy -r to repack data fixing problems in the original file.
  • improved keys search for faster tools.
  • grib_get_data and grib_iterator working with all scanning mode.
  • new experimental functions introduced, not available in the fortran interface: grib_fieldset_new,grib_fieldset_apply_order_by,grib_fieldset_next_handle grib_nearest_new,grib_nearest_find,grib_nearest_delete.
  • some examples on the grib_fieldset and grib_nearest are added.
  • The management of the missing data in grib_get_data is changed. Please refer to the help obtained executing grib_get_data without arguments.
  • Added the key stepRange which is native type string. It can represent start and end of a cumulation or a max of min interval. Example stepRange=24-36 for a precipitation means that it is cumulated between 24 and 36. It also addresses the problems with the big steps which don't fit in the grib1 P1 and P2.
  • Added key numberOfCodedValues. It is different from numberOfValues only if a bitmap is present and the difference between the two should be numberOfMissingValues.
  • Added the option -g to grib_copy, grib_set, grib_convert, grib_filter to preserve GTS headers wrapping the grib message.
  • fixed some bugs in the fortran interface.
  • fixed a bug in reading the signed floats with the grib_convert.

Version 1.2.0 (September 2007)

  • Changed licensing policy. Now grib_api is distributed under LGPL. See LICENSE and gpl-3.0.txt files in the distribution directory.
  • Changed io functions and to support files larger than 2GB.
  • As a consequence to the large file support the key offset has native type double.
  • Added support for predefined grids.
  • Modified grib_handle_new_from_file to read messages with wrong message length. In this case an error will be raised.
  • A new -M option is provided for all the tools to turn off the multi-field grib
  • Changed behaviour of grib_copy. Default is quiet and option -v (verbose) is available.

Version 1.1.0 (July 2007)

  • Fixed a bug affecting constant fields.
  • Rewritten the ibm floating point encoding/decoding routines gaining a factor of 7 in performance.
  • Fixed a problem in the configure affecting compilation of fortran programs on AIX platforms.
  • Added some new keys:
    - max,min,average (maximum, minimum and average respectively of the data )
    - numberOfDataPoints (alias numberOfPoints) computed from the grid description
    - numberOfValues is the same as the numberOfPoints if a bitmap is not present
    otherwise it takes into account the bitmap
    - numberOfMissing (alias numberOfMissingValues) number of missing values in the field.
    It's easy to check if a field is constant by simply comparing max,min,average
    and some information about bitmap and missing values can be found comparing numberOfValues, numberOfPoints, numberOfMissing.
  • Added some new tests.
  • Added a new example on how to print all the data when the iterator is not available.
  • grib_tools are now failing with an error when the input file does not contain any
    valid grib message.
  • Added management of reduced gaussian non global fields.


Version 1.0 first release version (April 2007)



  • No labels