diff -Nru eccodes-2.15.0/cmake/ecbuild_add_executable.cmake eccodes-2.16.0/cmake/ecbuild_add_executable.cmake --- eccodes-2.15.0/cmake/ecbuild_add_executable.cmake 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/cmake/ecbuild_add_executable.cmake 2020-01-16 10:21:52.000000000 +0000 @@ -96,18 +96,43 @@ # CFLAGS : optional # list of C compiler flags to use for all C source files # +# See usage note below. +# # CXXFLAGS : optional # list of C++ compiler flags to use for all C++ source files # +# See usage note below. +# # FFLAGS : optional # list of Fortran compiler flags to use for all Fortran source files # +# See usage note below. +# # LINKER_LANGUAGE : optional # sets the LINKER_LANGUAGE property on the target # # OUTPUT_NAME : optional # sets the OUTPUT_NAME property on the target # +# Usage +# ----- +# +# The ``CFLAGS``, ``CXXFLAGS`` and ``FFLAGS`` options apply the given compiler +# flags to all C, C++ and Fortran sources passed to this command, respectively. +# If any two ``ecbuild_add_executable``, ``ecbuild_add_library`` or +# ``ecbuild_add_test`` commands are passed the *same* source file and each sets +# a different value for the compiler flags to be applied to that file (including +# when one command adds flags and another adds none), then the two commands +# will be in conflict and the result may not be as expected. +# +# For this reason it is recommended not to use the ``*FLAGS`` options when +# multiple targets share the same source files, unless the exact same flags are +# applied to those sources by each relevant command. +# +# Care should also be taken to ensure that these commands are not passed source +# files which are not required to build the target, if those sources are also +# passed to other commands which set different compiler flags. +# ############################################################################## function( ecbuild_add_executable ) diff -Nru eccodes-2.15.0/cmake/ecbuild_add_library.cmake eccodes-2.16.0/cmake/ecbuild_add_library.cmake --- eccodes-2.15.0/cmake/ecbuild_add_library.cmake 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/cmake/ecbuild_add_library.cmake 2020-01-16 10:21:52.000000000 +0000 @@ -159,18 +159,43 @@ # CFLAGS : optional # list of C compiler flags to use for all C source files # +# See usage note below. +# # CXXFLAGS : optional # list of C++ compiler flags to use for all C++ source files # +# See usage note below. +# # FFLAGS : optional # list of Fortran compiler flags to use for all Fortran source files # +# See usage note below. +# # LINKER_LANGUAGE : optional # sets the LINKER_LANGUAGE property on the target # # OUTPUT_NAME : optional # sets the OUTPUT_NAME property on the target # +# Usage +# ----- +# +# The ``CFLAGS``, ``CXXFLAGS`` and ``FFLAGS`` options apply the given compiler +# flags to all C, C++ and Fortran sources passed to this command, respectively. +# If any two ``ecbuild_add_executable``, ``ecbuild_add_library`` or +# ``ecbuild_add_test`` commands are passed the *same* source file and each sets +# a different value for the compiler flags to be applied to that file (including +# when one command adds flags and another adds none), then the two commands +# will be in conflict and the result may not be as expected. +# +# For this reason it is recommended not to use the ``*FLAGS`` options when +# multiple targets share the same source files, unless the exact same flags are +# applied to those sources by each relevant command. +# +# Care should also be taken to ensure that these commands are not passed source +# files which are not required to build the target, if those sources are also +# passed to other commands which set different compiler flags. +# ############################################################################## function( ecbuild_add_library_impl ) diff -Nru eccodes-2.15.0/cmake/ecbuild_add_test.cmake eccodes-2.16.0/cmake/ecbuild_add_test.cmake --- eccodes-2.15.0/cmake/ecbuild_add_test.cmake 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/cmake/ecbuild_add_test.cmake 2020-01-16 10:21:52.000000000 +0000 @@ -139,15 +139,40 @@ # CFLAGS : optional # list of C compiler flags to use for all C source files # +# See usage note below. +# # CXXFLAGS : optional # list of C++ compiler flags to use for all C++ source files # +# See usage note below. +# # FFLAGS : optional # list of Fortran compiler flags to use for all Fortran source files # +# See usage note below. +# # LINKER_LANGUAGE : optional # sets the LINKER_LANGUAGE property on the target # +# Usage +# ----- +# +# The ``CFLAGS``, ``CXXFLAGS`` and ``FFLAGS`` options apply the given compiler +# flags to all C, C++ and Fortran sources passed to this command, respectively. +# If any two ``ecbuild_add_executable``, ``ecbuild_add_library`` or +# ``ecbuild_add_test`` commands are passed the *same* source file and each sets +# a different value for the compiler flags to be applied to that file (including +# when one command adds flags and another adds none), then the two commands +# will be in conflict and the result may not be as expected. +# +# For this reason it is recommended not to use the ``*FLAGS`` options when +# multiple targets share the same source files, unless the exact same flags are +# applied to those sources by each relevant command. +# +# Care should also be taken to ensure that these commands are not passed source +# files which are not required to build the target, if those sources are also +# passed to other commands which set different compiler flags. +# ############################################################################## function( ecbuild_add_test ) diff -Nru eccodes-2.15.0/cmake/ecbuild_check_os.cmake eccodes-2.16.0/cmake/ecbuild_check_os.cmake --- eccodes-2.15.0/cmake/ecbuild_check_os.cmake 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/cmake/ecbuild_check_os.cmake 2020-01-16 10:21:52.000000000 +0000 @@ -261,7 +261,8 @@ option( ECBUILD_DISABLE_RPATH_FIX "Disable the linker fix for relative RPATH" OFF ) mark_as_advanced( ECBUILD_DISABLE_RPATH_FIX ) - if( NOT ECBUILD_DISABLE_RPATH_FIX ) + get_property(HAVE_SHARED_LIBS GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS) + if( HAVE_SHARED_LIBS AND NOT ECBUILD_DISABLE_RPATH_FIX ) # GNU ld versions before 2.28 do not expand $ORIGIN at link time. # If this is the case for the current linker, disable checking for dynamic symbols # See https://sourceware.org/bugzilla/show_bug.cgi?id=20535 diff -Nru eccodes-2.15.0/cmake/ecbuild_define_properties.cmake eccodes-2.16.0/cmake/ecbuild_define_properties.cmake --- eccodes-2.15.0/cmake/ecbuild_define_properties.cmake 1970-01-01 00:00:00.000000000 +0000 +++ eccodes-2.16.0/cmake/ecbuild_define_properties.cmake 2020-01-16 10:21:52.000000000 +0000 @@ -0,0 +1,19 @@ +# (C) Copyright 2011- 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. + +############################################################################################ +# define custom properties + +############################################################################################ +# source properties: + +# Custom property to determine if compiler flags have been applied yet: +define_property( SOURCE + PROPERTY CUSTOM_FLAGS + BRIEF_DOCS "Custom compiler flags have been applied to source file" + FULL_DOCS "Compiler flags have been applied to the source file, using custom CMake rules. Assists processing of sources that are used by multiple targets. Treated as Boolean." ) diff -Nru eccodes-2.15.0/cmake/ecbuild_generate_fortran_interfaces.cmake eccodes-2.16.0/cmake/ecbuild_generate_fortran_interfaces.cmake --- eccodes-2.15.0/cmake/ecbuild_generate_fortran_interfaces.cmake 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/cmake/ecbuild_generate_fortran_interfaces.cmake 2020-01-16 10:21:52.000000000 +0000 @@ -12,9 +12,18 @@ # ecbuild_generate_fortran_interfaces # =================================== # -# Generates interfaces from the Fortran source files. :: +# Generates interfaces from Fortran source files. :: # -# ecbuild_generate_fortran_interfaces() +# ecbuild_generate_fortran_interfaces( TARGET +# DESTINATION +# DIRECTORIES [ ...] +# [ PARALLEL ] +# [ INCLUDE_DIRS ] +# [ GENERATED ] +# [ SOURCE_DIR ] +# [ SUFFIX ] +# [ FCM_CONFIG_FILE ] +# ) # # Options # ------- @@ -22,6 +31,40 @@ # TARGET : required # target name # +# DESTINATION : required +# sub-directory of ``CMAKE_CURRENT_BINARY_DIR`` to install target to +# +# DIRECTORIES : required +# list of directories in ``SOURCE_DIR`` in which to search for Fortran files to be processed +# +# PARALLEL : optional, defaults to 1 +# number of processes to use (always 1 on Darwin systems) +# +# INCLUDE_DIRS : optional +# name of CMake variable to store the path to the include directory containing the resulting interfaces +# +# GENERATED : optional +# name of CMake variable to store the list of generated interface files, including the full path to each +# +# SOURCE_DIR : optional, defaults to ``CMAKE_CURRENT_SOURCE_DIR`` +# directory in which to look for the sub-directories given as arguments to ``DIRECTORIES`` +# +# SUFFIX : optional, defaults to ".intfb.h" +# suffix to apply to name of each interface file +# +# FCM_CONFIG_FILE : optional, defaults to the ``fcm-make-interfaces.cfg`` file in the ecbuild project +# FCM configuration file to be used to generate interfaces +# +# Usage +# _____ +# +# The listed directories will be recursively searched for Fortran files of the +# form ``.[fF]``, ``.[fF]90``, ``.[fF]03`` or +# ``.[fF]08``. For each matching file, a file ```` will be +# created containing the interface blocks for all external subprograms within +# it, where ```` is the value given to the ``SUFFIX`` option. If a file +# contains no such subprograms, no interface file will be generated for it. +# ############################################################################## function( ecbuild_generate_fortran_interfaces ) diff -Nru eccodes-2.15.0/cmake/ecbuild_get_test_data.cmake eccodes-2.16.0/cmake/ecbuild_get_test_data.cmake --- eccodes-2.15.0/cmake/ecbuild_get_test_data.cmake 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/cmake/ecbuild_get_test_data.cmake 2020-01-16 10:21:52.000000000 +0000 @@ -10,7 +10,7 @@ # function for downloading test data -function( _download_test_data _p_NAME _p_DIRNAME ) +function( _download_test_data _p_NAME _p_DIR_URL ) # TODO: make that 'at ecmwf' #if(1) @@ -34,11 +34,11 @@ if( CURL_PROGRAM ) add_custom_command( OUTPUT ${_p_NAME} - COMMENT "(curl) downloading http://download.ecmwf.org/test-data/${_p_DIRNAME}/${_p_NAME}" + COMMENT "(curl) downloading ${_p_DIR_URL}/${_p_NAME}" COMMAND ${CURL_PROGRAM} --silent --show-error --fail --output ${_p_NAME} --retry ${ECBUILD_DOWNLOAD_RETRIES} --connect-timeout ${ECBUILD_DOWNLOAD_TIMEOUT} - http://download.ecmwf.org/test-data/${_p_DIRNAME}/${_p_NAME} ) + ${_p_DIR_URL}/${_p_NAME} ) else() @@ -50,10 +50,10 @@ math( EXPR ECBUILD_DOWNLOAD_RETRIES "${ECBUILD_DOWNLOAD_RETRIES} + 1" ) add_custom_command( OUTPUT ${_p_NAME} - COMMENT "(wget) downloading http://download.ecmwf.org/test-data/${_p_DIRNAME}/${_p_NAME}" + COMMENT "(wget) downloading ${_p_DIR_URL}/${_p_NAME}" COMMAND ${WGET_PROGRAM} -nv -O ${_p_NAME} -t ${ECBUILD_DOWNLOAD_RETRIES} -T ${ECBUILD_DOWNLOAD_TIMEOUT} - http://download.ecmwf.org/test-data/${_p_DIRNAME}/${_p_NAME} ) + ${_p_DIR_URL}/${_p_NAME} ) else() @@ -111,7 +111,10 @@ # Usage # ----- # -# Download test data from ``http://download.ecmwf.org/test-data//`` +# Download test data from ``//`` +# +# If the ``ECBUILD_DOWNLOAD_BASE_URL`` variable is not set, the default URL +# ``http://download.ecmwf.org/test-data`` is used. # # If the ``DIRNAME`` argument is not given, the project name followed by the # relative path from the root directory to the current directory is used. @@ -176,9 +179,14 @@ # ecbuild_debug_var( _p_URL ) # ecbuild_debug_var( _p_DIRNAME ) + # Allow the user to override the download URL (ECBUILD-447) + if( NOT DEFINED ECBUILD_DOWNLOAD_BASE_URL ) + set( ECBUILD_DOWNLOAD_BASE_URL http://download.ecmwf.org/test-data ) + endif() + # download the data - _download_test_data( ${_p_NAME} ${_p_DIRNAME} ) + _download_test_data( ${_p_NAME} ${ECBUILD_DOWNLOAD_BASE_URL}/${_p_DIRNAME} ) # perform the checksum if requested @@ -192,7 +200,7 @@ COMMAND ${CMAKE_COMMAND} -E md5sum ${_p_NAME} > ${_p_NAME}.localmd5 DEPENDS ${_p_NAME} ) - _download_test_data( ${_p_NAME}.md5 ${_p_DIRNAME} ) + _download_test_data( ${_p_NAME}.md5 ${ECBUILD_DOWNLOAD_BASE_URL}/${_p_DIRNAME} ) add_custom_command( OUTPUT ${_p_NAME}.ok COMMAND ${CMAKE_COMMAND} -E compare_files ${_p_NAME}.md5 ${_p_NAME}.localmd5 && @@ -295,11 +303,14 @@ # Usage # ----- # -# Download test data from ``http://download.ecmwf.org/test-data/`` +# Download test data from ``/`` # for each name given in the list of ``NAMES``. Each name may contain a # relative path, which is appended to ``DIRNAME`` and may be followed by an # md5 checksum, separated with a ``:`` (the name must not contain spaces). # +# If the ``ECBUILD_DOWNLOAD_BASE_URL`` variable is not set, the default URL +# ``http://download.ecmwf.org/test-data`` is used. +# # If the ``DIRNAME`` argument is not given, the project name followed by the # relative path from the root directory to the current directory is used. # diff -Nru eccodes-2.15.0/cmake/ecbuild_pkgconfig.cmake eccodes-2.16.0/cmake/ecbuild_pkgconfig.cmake --- eccodes-2.15.0/cmake/ecbuild_pkgconfig.cmake 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/cmake/ecbuild_pkgconfig.cmake 2020-01-16 10:21:52.000000000 +0000 @@ -139,7 +139,6 @@ if( NOT _skip ) unset( _name ) unset( _dir ) - unset( _file ) if( ${_lib} MATCHES ".+/Frameworks/.+" ) @@ -150,7 +149,9 @@ if( TARGET ${_lib} ) - set( _file "${RPATH_FLAG}$ $" ) + # XXX: %SHORTEN:...% will be resolved later, see pkg-config.cmake.in + set( _name "%SHORTEN:$%" ) + set( _dir "$" ) elseif( ${_lib} MATCHES "-l.+" ) @@ -185,10 +186,8 @@ if( _set_append ) - if( _file ) - list( APPEND _pkgconfig_libs "${_file}" ) - elseif( _dir ) - list( APPEND _pkgconfig_libs "${RPATH_FLAG}${dir}" "-L${_dir}" "-l${_name}" ) + if( _dir ) + list( APPEND _pkgconfig_libs "${RPATH_FLAG}${_dir}" "-L${_dir}" "-l${_name}" ) else() list( APPEND _pkgconfig_libs "-l${_name}" ) endif() diff -Nru eccodes-2.15.0/cmake/ecbuild_system.cmake eccodes-2.16.0/cmake/ecbuild_system.cmake --- eccodes-2.15.0/cmake/ecbuild_system.cmake 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/cmake/ecbuild_system.cmake 2020-01-16 10:21:52.000000000 +0000 @@ -125,6 +125,11 @@ include(ecbuild_define_build_types) ############################################################################################ + # define custom properties + + include(ecbuild_define_properties) + + ############################################################################################ # add cmake macros include(AddFileDependencies) diff -Nru eccodes-2.15.0/cmake/ecbuild_target_flags.cmake eccodes-2.16.0/cmake/ecbuild_target_flags.cmake --- eccodes-2.15.0/cmake/ecbuild_target_flags.cmake 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/cmake/ecbuild_target_flags.cmake 2020-01-16 10:21:52.000000000 +0000 @@ -60,15 +60,38 @@ ecbuild_debug( "ecbuild_target_flags(${target}): overriding flags for ${src} with '${oflags} ${oflags_btype}'" ) # Otherwise append source file specific flags to project specific and target specific flags else() + get_property( flags SOURCE ${src} PROPERTY COMPILE_FLAGS ) get_property( flags_btype SOURCE ${src} PROPERTY COMPILE_FLAGS_${CMAKE_BUILD_TYPE_CAPS} ) - set_source_files_properties( ${src} PROPERTIES COMPILE_FLAGS "${pflags} ${${l}_flags} ${flags} ${flags_btype}" ) - ecbuild_debug( "ecbuild_target_flags(${target}): setting flags for ${src} to '${pflags} ${${l}_flags} ${flags} ${flags_btype}'" ) + + # Has this file already been processed in another target? + get_property( has_flags SOURCE ${src} PROPERTY CUSTOM_FLAGS ) + + if ( has_flags ) + # Avoid applying duplicate flags to a source we've already processed + + # Don't add the project-level custom flags (${pflags}) again. + # Does not protect against misuse of ${l}_flags from multiple targets. + set_source_files_properties( ${src} PROPERTIES COMPILE_FLAGS "${${l}_flags} ${flags} ${flags_btype}" ) + ecbuild_debug( "ecbuild_target_flags(${target}): setting flags for ${src} to '${${l}_flags} ${flags} ${flags_btype}'" ) + + else() + # First time processing this file; add everything + + set_source_files_properties( ${src} PROPERTIES COMPILE_FLAGS "${pflags} ${${l}_flags} ${flags} ${flags_btype}" ) + ecbuild_debug( "ecbuild_target_flags(${target}): setting flags for ${src} to '${pflags} ${${l}_flags} ${flags} ${flags_btype}'" ) + + # Mark source file as already processed. + set_property( SOURCE ${src} PROPERTY CUSTOM_FLAGS TRUE ) + + endif() + endif() endforeach() # 2) Override compile flags from user specified JSON file elseif( ECBUILD_SOURCE_FLAGS ) + ecbuild_source_flags( ${target}_${lang}_SOURCE_FLAGS ${target}_${l} "${${l}_flags}" diff -Nru eccodes-2.15.0/cmake/FindFFTW.cmake eccodes-2.16.0/cmake/FindFFTW.cmake --- eccodes-2.15.0/cmake/FindFFTW.cmake 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/cmake/FindFFTW.cmake 2020-01-16 10:21:52.000000000 +0000 @@ -71,7 +71,7 @@ set( ${CMAKE_FIND_PACKAGE_NAME}_quad_LIBRARY_NAME fftw3q ) if( (NOT FFTW_ROOT) AND EXISTS $ENV{FFTW_ROOT} ) - set( FFTW_ROOT ${FFTW_ROOT} ) + set( FFTW_ROOT $ENV{FFTW_ROOT} ) endif() if( NOT FFTW_ROOT AND $FFTW_DIR ) set( FFTW_ROOT ${FFTW_DIR} ) diff -Nru eccodes-2.15.0/cmake/FindOpenJPEG.cmake eccodes-2.16.0/cmake/FindOpenJPEG.cmake --- eccodes-2.15.0/cmake/FindOpenJPEG.cmake 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/cmake/FindOpenJPEG.cmake 2020-01-16 10:21:52.000000000 +0000 @@ -6,7 +6,7 @@ # granted to it by virtue of its status as an intergovernmental organisation nor # does it submit to any jurisdiction. -# - Try to find the OpenJPEG includes and library (version 1.5.x or 2.1.x) +# - Try to find the OpenJPEG includes and library (version 1.5.x, 2.1.x, 2.2.x, 2.3.x) # This module defines # # OPENJPEG_FOUND - System has OpenJPEG @@ -20,10 +20,10 @@ # Note: OpenJPEG has a version-specific subdirectory in the include # e.g. include/openjpeg-2.0 or include/openjpeg-2.1. -# Only version 1.5.x and 2.1.x are supported. +# Only version 1.5.x and 2.[123].x are supported. # The library name is different for 1.x (libopenjpeg) and 2.x (libopenjp2). -set( _suff include include/openjpeg include/openjpeg-1.5 include/openjpeg-2.1 ) +set( _suff include include/openjpeg include/openjpeg-1.5 include/openjpeg-2.1 include/openjpeg-2.2 include/openjpeg-2.3) find_path( OPENJPEG_INCLUDE_DIR openjpeg.h PATHS ${OPENJPEG_PATH} ENV OPENJPEG_PATH ${OPENJPEG_DIR} ENV OPENJPEG_DIR diff -Nru eccodes-2.15.0/cmake/pkg-config.cmake.in eccodes-2.16.0/cmake/pkg-config.cmake.in --- eccodes-2.15.0/cmake/pkg-config.cmake.in 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/cmake/pkg-config.cmake.in 2020-01-16 10:21:52.000000000 +0000 @@ -7,4 +7,8 @@ endif() string(REPLACE "@CMAKE_INSTALL_PREFIX@/@INSTALL_LIB_DIR@" "\${libdir}" _content "${_content}") +string(REGEX REPLACE "%SHORTEN:lib" "%SHORTEN:" _content "${_content}") +string(REGEX REPLACE "\\.(a|so|dylib|dll|lib)(\\.[0-9]+)*%" "%" _content "${_content}") +string(REGEX REPLACE "%SHORTEN:([^%]+)%" "\\1" _content "${_content}") + file(WRITE @PKGCONFIG_DIR@/@_PAR_FILENAME@ "${_content}") diff -Nru eccodes-2.15.0/cmake/VERSION eccodes-2.16.0/cmake/VERSION --- eccodes-2.15.0/cmake/VERSION 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/cmake/VERSION 2020-01-16 10:21:52.000000000 +0000 @@ -1 +1 @@ -3.1.0 +3.2.0 diff -Nru eccodes-2.15.0/CMakeLists.txt eccodes-2.16.0/CMakeLists.txt --- eccodes-2.15.0/CMakeLists.txt 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/CMakeLists.txt 2020-01-16 10:21:52.000000000 +0000 @@ -78,6 +78,18 @@ DESCRIPTION "Support for JPG decoding/encoding" DEFAULT ON ) +# Options related to JPG. The Jasper and OpenJPEG libraries +ecbuild_add_option( FEATURE JPG_LIBJASPER + DESCRIPTION "Support for JPG decoding/encoding with the Jasper library" + CONDITION ENABLE_JPG + DEFAULT ON +) +ecbuild_add_option( FEATURE JPG_LIBOPENJPEG + DESCRIPTION "Support for JPG decoding/encoding with the OpenJPEG library" + CONDITION ENABLE_JPG + DEFAULT ON +) + ecbuild_add_option( FEATURE PNG DESCRIPTION "Support for PNG decoding/encoding" @@ -192,8 +204,8 @@ if( ENABLE_JPG ) - # Note: This is a deprecated feature but we need it to find Jasper at ECMWF. - # ecbuild_add_extra_search_paths modifies CMAKE_PREFIX_PATH + # Note: The function ecbuild_add_extra_search_paths is deprecated but we need it to find Jasper at ECMWF. + # It modifies CMAKE_PREFIX_PATH # which can affect future package discovery if not undone by the caller. # The current CMAKE_PREFIX_PATH is backed up as _CMAKE_PREFIX_PATH # @@ -205,7 +217,7 @@ find_package( OpenJPEG ) - if( JASPER_FOUND ) + if( JASPER_FOUND AND ENABLE_JPG_LIBJASPER ) list( APPEND ECCODES_TPLS Jasper ) set( HAVE_JPEG 1 ) set( HAVE_LIBJASPER 1 ) @@ -213,13 +225,15 @@ string(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" JASPER_VERSION_MAJOR "${JASPER_VERSION_STRING}") endif() - if( OPENJPEG_FOUND ) + if( OPENJPEG_FOUND AND ENABLE_JPG_LIBOPENJPEG ) list( APPEND ECCODES_TPLS OpenJPEG ) set( HAVE_JPEG 1 ) set( HAVE_LIBOPENJPEG 1 ) endif() ecbuild_info(" HAVE_JPEG=${HAVE_JPEG}") + ecbuild_info(" HAVE_LIBJASPER=${HAVE_LIBJASPER}") + ecbuild_info(" HAVE_LIBOPENJPEG=${HAVE_LIBOPENJPEG}") endif() @@ -292,9 +306,11 @@ set( IEEE_BE 0 ) endif() +set( ECCODES_ON_WINDOWS 0 ) if( EC_OS_NAME MATCHES "windows" ) # Symbols need to be explicitly exported on Windows so we can link to dlls. set( CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE ) + set( ECCODES_ON_WINDOWS 1 ) # Suppress compliler warnings - see ECC-850 # Suppress warnings about using 'insecure' functions. Fixing this would require changes all over diff -Nru eccodes-2.15.0/data/bitmap.diff eccodes-2.16.0/data/bitmap.diff --- eccodes-2.15.0/data/bitmap.diff 2019-07-08 12:06:44.000000000 +0000 +++ eccodes-2.16.0/data/bitmap.diff 2020-01-16 10:21:52.000000000 +0000 @@ -1,123 +1,151 @@ #============== MESSAGE 1 ( length=11680 ) ============== -1-4 identifier = GRIB -5-7 totalLength = 11680 -8 editionNumber = 1 -====================== SECTION_1 ( length=52, padding=0 ) ====================== -1-3 section1Length = 52 -4 table2Version = 128 -5 centre = 98 [European Centre for Medium-Range Weather Forecasts (common/c-1.table) ] -6 generatingProcessIdentifier = 130 -7 gridDefinition = 255 -8 section1Flags = 192 [11000000] -9 indicatorOfParameter = 130 [Temperature (K) (grib1/2.98.128.table) ] -10 indicatorOfTypeOfLevel = 109 [Hybrid level level number (2 octets) (grib1/local/ecmf/3.table , grib1/3.table) ] -11-12 level = 1 -13 yearOfCentury = 8 -14 month = 2 -15 day = 6 -16 hour = 12 -17 minute = 0 -18 unitOfTimeRange = 1 [Hour (grib1/4.table) ] -19 P1 = 0 -20 P2 = 0 -21 timeRangeIndicator = 0 [Forecast product valid at reference time + P1 (P1>0) (grib1/local/ecmf/5.table , grib1/5.table) ] -22-23 numberIncludedInAverage = 0 -24 numberMissingFromAveragesOrAccumulations = 0 -25 centuryOfReferenceTimeOfData = 21 -26 subCentre = 0 [Unknown code table entry (grib1/0.ecmf.table) ] -27-28 decimalScaleFactor = 0 -29-40 reservedNeedNotBePresent = 12 { - 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 - } # pad reservedNeedNotBePresent -41 localDefinitionNumber = 1 [MARS labelling or ensemble forecast data (grib1/localDefinitionNumber.98.table) ] -42 marsClass = 1 [Operational archive (mars/class.table) ] -43 marsType = 2 [Analysis (mars/type.table) ] -44-45 marsStream = 1025 [Atmospheric model (mars/stream.table) ] -46-49 experimentVersionNumber = 0001 -50 perturbationNumber = 0 -51 numberOfForecastsInEnsemble = 0 -52 padding_local1_1 = 1 { - 00 - } # pad padding_local1_1 -====================== SECTION_2 ( length=896, padding=0 ) ====================== -1-3 section2Length = 896 -4 numberOfVerticalCoordinateValues = 184 -5 pvlLocation = 33 -6 dataRepresentationType = 4 [Gaussian Latitude/Longitude Grid (grib1/6.table) ] -7-8 Ni = MISSING -9-10 Nj = 64 -11-13 latitudeOfFirstGridPoint = 87864 -14-16 longitudeOfFirstGridPoint = 0 -17 resolutionAndComponentFlags = 0 [00000000] -18-20 latitudeOfLastGridPoint = -87864 -21-23 longitudeOfLastGridPoint = 357188 -24-25 iDirectionIncrement = MISSING -26-27 N = 32 -28 scanningMode = 0 [00000000] -29-32 padding_grid4_1 = 4 { - 00, 00, 00, 00 - } # pad padding_grid4_1 -33-768 pv = (184,736) { -0.0000000000e+00, 2.0000400543e+00, 3.9808320999e+00, 7.3871860504e+00, 1.2908319473e+01, 2.1413604736e+01, 3.3952865601e+01, 5.1746597290e+01, -7.6167663574e+01, 1.0871556091e+02, 1.5098602295e+02, 2.0463745117e+02, 2.7135644531e+02, 3.5282446289e+02, 4.5068579102e+02, 5.6651928711e+02, -7.0181323242e+02, 8.5794580078e+02, 1.0361665039e+03, 1.2375854492e+03, 1.4631638184e+03, 1.7137097168e+03, 1.9898745117e+03, 2.2921555176e+03, -2.6208984375e+03, 2.9763022461e+03, 3.3584257812e+03, 3.7671960449e+03, 4.2024179688e+03, 4.6637773438e+03, 5.1508593750e+03, 5.6631562500e+03, -6.1998398438e+03, 6.7597265625e+03, 7.3414687500e+03, 7.9429257812e+03, 8.5646250000e+03, 9.2083046875e+03, 9.8735625000e+03, 1.0558882812e+04, -1.1262484375e+04, 1.1982660156e+04, 1.2713898438e+04, 1.3453226562e+04, 1.4192011719e+04, 1.4922687500e+04, 1.5638054688e+04, 1.6329562500e+04, -1.6990625000e+04, 1.7613281250e+04, 1.8191031250e+04, 1.8716968750e+04, 1.9184546875e+04, 1.9587515625e+04, 1.9919796875e+04, 2.0175394531e+04, -2.0348917969e+04, 2.0434156250e+04, 2.0426218750e+04, 2.0319011719e+04, 2.0107031250e+04, 1.9785359375e+04, 1.9348777344e+04, 1.8798824219e+04, -1.8141296875e+04, 1.7385593750e+04, 1.6544585938e+04, 1.5633566406e+04, 1.4665644531e+04, 1.3653218750e+04, 1.2608382812e+04, 1.1543167969e+04, -1.0471312500e+04, 9.4052226562e+03, 8.3562539062e+03, 7.3351640625e+03, 6.3539218750e+03, 5.4228007812e+03, 4.5502148438e+03, 3.7434643555e+03, -3.0101469727e+03, 2.3562026367e+03, 1.7848544922e+03, 1.2976562500e+03, 8.9519360352e+02, 5.7631420898e+02, 3.3677246094e+02, 1.6204342651e+02, -5.4208343506e+01, 6.5756282806e+00, 3.1600000802e-03, 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, -0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00 -... 84 more values -} # ibmfloat pv -769-896 pl = (64,128) { -2.0000000000e+01, 2.7000000000e+01, 3.6000000000e+01, 4.0000000000e+01, 4.5000000000e+01, 5.0000000000e+01, 6.0000000000e+01, 6.4000000000e+01, -7.2000000000e+01, 7.5000000000e+01, 8.0000000000e+01, 9.0000000000e+01, 9.0000000000e+01, 9.6000000000e+01, 1.0000000000e+02, 1.0800000000e+02, -1.0800000000e+02, 1.2000000000e+02, 1.2000000000e+02, 1.2000000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, -1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, -1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, -1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2000000000e+02, 1.2000000000e+02, 1.2000000000e+02, 1.0800000000e+02, -1.0800000000e+02, 1.0000000000e+02, 9.6000000000e+01, 9.0000000000e+01, 9.0000000000e+01, 8.0000000000e+01, 7.5000000000e+01, 7.2000000000e+01, -6.4000000000e+01, 6.0000000000e+01, 5.0000000000e+01, 4.5000000000e+01, 4.0000000000e+01, 3.6000000000e+01, 2.7000000000e+01, 2.0000000000e+01 -} # unsigned pl -====================== SECTION_3 ( length=772, padding=0 ) ====================== -1-3 section3Length = 772 -4 numberOfUnusedBitsAtEndOfSection3 = 14 -5-6 tableReference = 0 -7-772 bitmap = 766 { - ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, - ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, - ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, - ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, - ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, - ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, - ff, ff, ff, ff - ... 665 more values - } # g1bitmap bitmap -====================== SECTION_4 ( length=9948, padding=0 ) ====================== -1-3 section4Length = 9948 -4 dataFlag = 14 [00001110] -5-6 binaryScaleFactor = -6 -7-10 referenceValue = 160.252 -11 bitsPerValue = 13 -12-9948 codedValues = (6114,9937) { -1.9907963562e+02, 1.9872026062e+02, 1.9851713562e+02, 1.9839213562e+02, 1.9822026062e+02, 1.9798588562e+02, 1.9770463562e+02, 1.9747026062e+02, -1.9737651062e+02, 1.9740776062e+02, 1.9756401062e+02, 1.9787651062e+02, 1.9839213562e+02, 1.9907963562e+02, 1.9979838562e+02, 2.0034526062e+02, -2.0059526062e+02, 2.0053276062e+02, 2.0015776062e+02, 1.9959526062e+02, 1.9984526062e+02, 1.9959526062e+02, 1.9954838562e+02, 1.9943901062e+02, -1.9940776062e+02, 1.9926713562e+02, 1.9875151062e+02, 1.9789213562e+02, 1.9698588562e+02, 1.9642338562e+02, 1.9637651062e+02, 1.9679838562e+02, -1.9737651062e+02, 1.9782963562e+02, 1.9806401062e+02, 1.9814213562e+02, 1.9843901062e+02, 1.9925151062e+02, 2.0065776062e+02, 2.0222026062e+02, -2.0334526062e+02, 2.0389213562e+02, 2.0420463562e+02, 2.0442338562e+02, 2.0404838562e+02, 2.0265776062e+02, 2.0090776062e+02, 2.0176713562e+02, -2.0101713562e+02, 2.0039213562e+02, 1.9961088562e+02, 1.9925151062e+02, 1.9940776062e+02, 1.9934526062e+02, 1.9872026062e+02, 1.9790776062e+02, -1.9725151062e+02, 1.9670463562e+02, 1.9623588562e+02, 1.9597026062e+02, 1.9595463562e+02, 1.9612651062e+02, 1.9645463562e+02, 1.9692338562e+02, -1.9750151062e+02, 1.9809526062e+02, 1.9845463562e+02, 1.9845463562e+02, 1.9829838562e+02, 1.9837651062e+02, 1.9882963562e+02, 1.9993901062e+02, -2.0181401062e+02, 2.0401713562e+02, 2.0581401062e+02, 2.0700151062e+02, 2.0781401062e+02, 2.0848588562e+02, 2.0926713562e+02, 2.0973588562e+02, -2.0887651062e+02, 2.0640776062e+02, 2.0356401062e+02, 2.0676713562e+02, 2.0443901062e+02, 2.0272026062e+02, 2.0140776062e+02, 2.0081401062e+02, -2.0068901062e+02, 1.9993901062e+02, 1.9834526062e+02, 1.9704838562e+02, 1.9695463562e+02, 1.9770463562e+02, 1.9812651062e+02, 1.9779838562e+02, -1.9726713562e+02, 1.9690776062e+02, 1.9653276062e+02, 1.9626713562e+02 -... 6014 more values -} # data_g1simple_packing codedValues -====================== SECTION_5 ( length=4, padding=0 ) ====================== -1-4 7777 = 7777 +GRIB { + editionNumber = 1; + table2Version = 128; + # European Centre for Medium-Range Weather Forecasts (common/c-1.table) + centre = 98; + generatingProcessIdentifier = 130; + # Temperature (K) (grib1/2.98.128.table) + indicatorOfParameter = 130; + # Hybrid level level number (2 octets) (grib1/local/ecmf/3.table , grib1/3.table) + indicatorOfTypeOfLevel = 109; + level = 1; + # Forecast product valid at reference time + P1 (P1>0) (grib1/local/ecmf/5.table , grib1/5.table) + timeRangeIndicator = 0; + # 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; + dataTime = 1200; + # Hour (stepUnits.table) + stepUnits = 1; + stepRange = 0; + startStep = 0; + endStep = 0; + #-READ ONLY- marsParam = 130.128; + # MARS labelling or ensemble forecast data (grib1/localDefinitionNumber.98.table) + localDefinitionNumber = 1; + # Operational archive (mars/class.table) + marsClass = 1; + # Analysis (mars/type.table) + marsType = 2; + # Atmospheric model (mars/stream.table) + marsStream = 1025; + experimentVersionNumber = 0001; + perturbationNumber = 0; + numberOfForecastsInEnsemble = 0; + shortName = t; + GDSPresent = 1; + bitmapPresent = 1; + numberOfVerticalCoordinateValues = 184; + Ni = MISSING; + Nj = 64; + latitudeOfFirstGridPointInDegrees = 87.864; + longitudeOfFirstGridPointInDegrees = 0; + earthIsOblate = 0; + uvRelativeToGrid = 0; + latitudeOfLastGridPointInDegrees = -87.864; + longitudeOfLastGridPointInDegrees = 357.188; + iDirectionIncrement = MISSING; + iDirectionIncrementInDegrees = MISSING; + N = 32; + iScansNegatively = 0; + jScansPositively = 0; + jPointsAreConsecutive = 0; + #-READ ONLY- alternativeRowScanning = 0; + global = 1; + #-READ ONLY- numberOfDataPoints = 6114; + #-READ ONLY- numberOfDataPointsExpected = 6114; + #-READ ONLY- numberOfValues = 6114; + isOctahedral = 0; + pv(184) = { + 0, 2.00004, 3.98083, 7.38719, 12.9083, + 21.4136, 33.9529, 51.7466, 76.1677, 108.716, + 150.986, 204.637, 271.356, 352.824, 450.686, + 566.519, 701.813, 857.946, 1036.17, 1237.59, + 1463.16, 1713.71, 1989.87, 2292.16, 2620.9, + 2976.3, 3358.43, 3767.2, 4202.42, 4663.78, + 5150.86, 5663.16, 6199.84, 6759.73, 7341.47, + 7942.93, 8564.62, 9208.3, 9873.56, 10558.9, + 11262.5, 11982.7, 12713.9, 13453.2, 14192, + 14922.7, 15638.1, 16329.6, 16990.6, 17613.3, + 18191, 18717, 19184.5, 19587.5, 19919.8, + 20175.4, 20348.9, 20434.2, 20426.2, 20319, + 20107, 19785.4, 19348.8, 18798.8, 18141.3, + 17385.6, 16544.6, 15633.6, 14665.6, 13653.2, + 12608.4, 11543.2, 10471.3, 9405.22, 8356.25, + 7335.16, 6353.92, 5422.8, 4550.21, 3743.46, + 3010.15, 2356.2, 1784.85, 1297.66, 895.194, + 576.314, 336.772, 162.043, 54.2083, 6.57563, + 0.00316, 0, 0, 0, 0, + 0, 0, 0, 0, 0 + ... 84 more values + } + pl(64) = { + 20, 27, 36, 40, 45, + 50, 60, 64, 72, 75, + 80, 90, 90, 96, 100, + 108, 108, 120, 120, 120, + 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, + 128, 128, 128, 128, 120, + 120, 120, 108, 108, 100, + 96, 90, 90, 80, 75, + 72, 64, 60, 50, 45, + 40, 36, 27, 20 + } + missingValue = 9999; + tableReference = 0; + #-READ ONLY- binaryScaleFactor = -6; + #-READ ONLY- referenceValue = 160.252; + sphericalHarmonics = 0; + complexPacking = 0; + integerPointValues = 0; + additionalFlagPresent = 0; + packingType = grid_simple; + bitsPerValue = 13; + values(6114) = { + 199.08, 198.72, 198.517, 198.392, 198.22, + 197.986, 197.705, 197.47, 197.377, 197.408, + 197.564, 197.877, 198.392, 199.08, 199.798, + 200.345, 200.595, 200.533, 200.158, 199.595, + 199.845, 199.595, 199.548, 199.439, 199.408, + 199.267, 198.752, 197.892, 196.986, 196.423, + 196.377, 196.798, 197.377, 197.83, 198.064, + 198.142, 198.439, 199.252, 200.658, 202.22, + 203.345, 203.892, 204.205, 204.423, 204.048, + 202.658, 200.908, 201.767, 201.017, 200.392, + 199.611, 199.252, 199.408, 199.345, 198.72, + 197.908, 197.252, 196.705, 196.236, 195.97, + 195.955, 196.127, 196.455, 196.923, 197.502, + 198.095, 198.455, 198.455, 198.298, 198.377, + 198.83, 199.939, 201.814, 204.017, 205.814, + 207.002, 207.814, 208.486, 209.267, 209.736, + 208.877, 206.408, 203.564, 206.767, 204.439, + 202.72, 201.408, 200.814, 200.689, 199.939, + 198.345, 197.048, 196.955, 197.705, 198.127, + 197.798, 197.267, 196.908, 196.533, 196.267 + ... 6014 more values + } + #-READ ONLY- numberOfCodedValues = 6114; + #-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; + gridType = reduced_gg; + #-READ ONLY- getNumberOfValues = 6114; +} Binary files /tmp/tmpLaEK2D/bjUsH9llwQ/eccodes-2.15.0/data/bufr/ecc738.msg2.bufr and /tmp/tmpLaEK2D/oVXeiPlpsw/eccodes-2.16.0/data/bufr/ecc738.msg2.bufr differ Binary files /tmp/tmpLaEK2D/bjUsH9llwQ/eccodes-2.15.0/data/bufr/goes16_nm.bufr and /tmp/tmpLaEK2D/oVXeiPlpsw/eccodes-2.16.0/data/bufr/goes16_nm.bufr differ Binary files /tmp/tmpLaEK2D/bjUsH9llwQ/eccodes-2.15.0/data/netcdf/2016_03_06_RemoTeC-GOSAT.nc and /tmp/tmpLaEK2D/oVXeiPlpsw/eccodes-2.16.0/data/netcdf/2016_03_06_RemoTeC-GOSAT.nc differ Binary files /tmp/tmpLaEK2D/bjUsH9llwQ/eccodes-2.15.0/data/netcdf/2016_03_30_RemoTeC-GOSAT.nc and /tmp/tmpLaEK2D/oVXeiPlpsw/eccodes-2.16.0/data/netcdf/2016_03_30_RemoTeC-GOSAT.nc differ Binary files /tmp/tmpLaEK2D/bjUsH9llwQ/eccodes-2.15.0/data/netcdf/ESACCI-GHG-L2-CH4-GOSAT-SRPR-20120104-fv1.nc and /tmp/tmpLaEK2D/oVXeiPlpsw/eccodes-2.16.0/data/netcdf/ESACCI-GHG-L2-CH4-GOSAT-SRPR-20120104-fv1.nc differ diff -Nru eccodes-2.15.0/data/netcdf/netcdf_data_files.txt eccodes-2.16.0/data/netcdf/netcdf_data_files.txt --- eccodes-2.15.0/data/netcdf/netcdf_data_files.txt 2016-10-18 14:55:01.000000000 +0000 +++ eccodes-2.16.0/data/netcdf/netcdf_data_files.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -2016_03_06_RemoTeC-GOSAT.nc -2016_03_30_RemoTeC-GOSAT.nc -ESACCI-GHG-L2-CH4-GOSAT-SRPR-20120104-fv1.nc -pmap_day27m01.nc -pmap_day_m01.nc -pmap_day_m02.nc Binary files /tmp/tmpLaEK2D/bjUsH9llwQ/eccodes-2.15.0/data/netcdf/pmap_day27m01.nc and /tmp/tmpLaEK2D/oVXeiPlpsw/eccodes-2.16.0/data/netcdf/pmap_day27m01.nc differ Binary files /tmp/tmpLaEK2D/bjUsH9llwQ/eccodes-2.15.0/data/netcdf/pmap_day_m01.nc and /tmp/tmpLaEK2D/oVXeiPlpsw/eccodes-2.16.0/data/netcdf/pmap_day_m01.nc differ Binary files /tmp/tmpLaEK2D/bjUsH9llwQ/eccodes-2.15.0/data/netcdf/pmap_day_m02.nc and /tmp/tmpLaEK2D/oVXeiPlpsw/eccodes-2.16.0/data/netcdf/pmap_day_m02.nc differ diff -Nru eccodes-2.15.0/data/no_bitmap.diff eccodes-2.16.0/data/no_bitmap.diff --- eccodes-2.15.0/data/no_bitmap.diff 2019-07-08 12:06:44.000000000 +0000 +++ eccodes-2.16.0/data/no_bitmap.diff 2020-01-16 10:21:52.000000000 +0000 @@ -1,109 +1,150 @@ #============== MESSAGE 1 ( length=10908 ) ============== -1-4 identifier = GRIB -5-7 totalLength = 10908 -8 editionNumber = 1 -====================== SECTION_1 ( length=52, padding=0 ) ====================== -1-3 section1Length = 52 -4 table2Version = 128 -5 centre = 98 [European Centre for Medium-Range Weather Forecasts (common/c-1.table) ] -6 generatingProcessIdentifier = 130 -7 gridDefinition = 255 -8 section1Flags = 128 [10000000] -9 indicatorOfParameter = 130 [Temperature (K) (grib1/2.98.128.table) ] -10 indicatorOfTypeOfLevel = 109 [Hybrid level level number (2 octets) (grib1/local/ecmf/3.table , grib1/3.table) ] -11-12 level = 1 -13 yearOfCentury = 8 -14 month = 2 -15 day = 6 -16 hour = 12 -17 minute = 0 -18 unitOfTimeRange = 1 [Hour (grib1/4.table) ] -19 P1 = 0 -20 P2 = 0 -21 timeRangeIndicator = 0 [Forecast product valid at reference time + P1 (P1>0) (grib1/local/ecmf/5.table , grib1/5.table) ] -22-23 numberIncludedInAverage = 0 -24 numberMissingFromAveragesOrAccumulations = 0 -25 centuryOfReferenceTimeOfData = 21 -26 subCentre = 0 [Unknown code table entry (grib1/0.ecmf.table) ] -27-28 decimalScaleFactor = 0 -29-40 reservedNeedNotBePresent = 12 { - 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 - } # pad reservedNeedNotBePresent -41 localDefinitionNumber = 1 [MARS labelling or ensemble forecast data (grib1/localDefinitionNumber.98.table) ] -42 marsClass = 1 [Operational archive (mars/class.table) ] -43 marsType = 2 [Analysis (mars/type.table) ] -44-45 marsStream = 1025 [Atmospheric model (mars/stream.table) ] -46-49 experimentVersionNumber = 0001 -50 perturbationNumber = 0 -51 numberOfForecastsInEnsemble = 0 -52 padding_local1_1 = 1 { - 00 - } # pad padding_local1_1 -====================== SECTION_2 ( length=896, padding=0 ) ====================== -1-3 section2Length = 896 -4 numberOfVerticalCoordinateValues = 184 -5 pvlLocation = 33 -6 dataRepresentationType = 4 [Gaussian Latitude/Longitude Grid (grib1/6.table) ] -7-8 Ni = MISSING -9-10 Nj = 64 -11-13 latitudeOfFirstGridPoint = 87864 -14-16 longitudeOfFirstGridPoint = 0 -17 resolutionAndComponentFlags = 0 [00000000] -18-20 latitudeOfLastGridPoint = -87864 -21-23 longitudeOfLastGridPoint = 357188 -24-25 iDirectionIncrement = MISSING -26-27 N = 32 -28 scanningMode = 0 [00000000] -29-32 padding_grid4_1 = 4 { - 00, 00, 00, 00 - } # pad padding_grid4_1 -33-768 pv = (184,736) { -0.0000000000e+00, 2.0000400543e+00, 3.9808320999e+00, 7.3871860504e+00, 1.2908319473e+01, 2.1413604736e+01, 3.3952865601e+01, 5.1746597290e+01, -7.6167663574e+01, 1.0871556091e+02, 1.5098602295e+02, 2.0463745117e+02, 2.7135644531e+02, 3.5282446289e+02, 4.5068579102e+02, 5.6651928711e+02, -7.0181323242e+02, 8.5794580078e+02, 1.0361665039e+03, 1.2375854492e+03, 1.4631638184e+03, 1.7137097168e+03, 1.9898745117e+03, 2.2921555176e+03, -2.6208984375e+03, 2.9763022461e+03, 3.3584257812e+03, 3.7671960449e+03, 4.2024179688e+03, 4.6637773438e+03, 5.1508593750e+03, 5.6631562500e+03, -6.1998398438e+03, 6.7597265625e+03, 7.3414687500e+03, 7.9429257812e+03, 8.5646250000e+03, 9.2083046875e+03, 9.8735625000e+03, 1.0558882812e+04, -1.1262484375e+04, 1.1982660156e+04, 1.2713898438e+04, 1.3453226562e+04, 1.4192011719e+04, 1.4922687500e+04, 1.5638054688e+04, 1.6329562500e+04, -1.6990625000e+04, 1.7613281250e+04, 1.8191031250e+04, 1.8716968750e+04, 1.9184546875e+04, 1.9587515625e+04, 1.9919796875e+04, 2.0175394531e+04, -2.0348917969e+04, 2.0434156250e+04, 2.0426218750e+04, 2.0319011719e+04, 2.0107031250e+04, 1.9785359375e+04, 1.9348777344e+04, 1.8798824219e+04, -1.8141296875e+04, 1.7385593750e+04, 1.6544585938e+04, 1.5633566406e+04, 1.4665644531e+04, 1.3653218750e+04, 1.2608382812e+04, 1.1543167969e+04, -1.0471312500e+04, 9.4052226562e+03, 8.3562539062e+03, 7.3351640625e+03, 6.3539218750e+03, 5.4228007812e+03, 4.5502148438e+03, 3.7434643555e+03, -3.0101469727e+03, 2.3562026367e+03, 1.7848544922e+03, 1.2976562500e+03, 8.9519360352e+02, 5.7631420898e+02, 3.3677246094e+02, 1.6204342651e+02, -5.4208343506e+01, 6.5756282806e+00, 3.1600000802e-03, 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, -0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00 -... 84 more values -} # ibmfloat pv -769-896 pl = (64,128) { -2.0000000000e+01, 2.7000000000e+01, 3.6000000000e+01, 4.0000000000e+01, 4.5000000000e+01, 5.0000000000e+01, 6.0000000000e+01, 6.4000000000e+01, -7.2000000000e+01, 7.5000000000e+01, 8.0000000000e+01, 9.0000000000e+01, 9.0000000000e+01, 9.6000000000e+01, 1.0000000000e+02, 1.0800000000e+02, -1.0800000000e+02, 1.2000000000e+02, 1.2000000000e+02, 1.2000000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, -1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, -1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, -1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2800000000e+02, 1.2000000000e+02, 1.2000000000e+02, 1.2000000000e+02, 1.0800000000e+02, -1.0800000000e+02, 1.0000000000e+02, 9.6000000000e+01, 9.0000000000e+01, 9.0000000000e+01, 8.0000000000e+01, 7.5000000000e+01, 7.2000000000e+01, -6.4000000000e+01, 6.0000000000e+01, 5.0000000000e+01, 4.5000000000e+01, 4.0000000000e+01, 3.6000000000e+01, 2.7000000000e+01, 2.0000000000e+01 -} # unsigned pl -====================== SECTION_4 ( length=9948, padding=0 ) ====================== -1-3 section4Length = 9948 -4 dataFlag = 14 [00001110] -5-6 binaryScaleFactor = -6 -7-10 referenceValue = 160.252 -11 bitsPerValue = 13 -12-9948 values = (6114,9937) { -1.9907963562e+02, 1.9872026062e+02, 1.9851713562e+02, 1.9839213562e+02, 1.9822026062e+02, 1.9798588562e+02, 1.9770463562e+02, 1.9747026062e+02, -1.9737651062e+02, 1.9740776062e+02, 1.9756401062e+02, 1.9787651062e+02, 1.9839213562e+02, 1.9907963562e+02, 1.9979838562e+02, 2.0034526062e+02, -2.0059526062e+02, 2.0053276062e+02, 2.0015776062e+02, 1.9959526062e+02, 1.9984526062e+02, 1.9959526062e+02, 1.9954838562e+02, 1.9943901062e+02, -1.9940776062e+02, 1.9926713562e+02, 1.9875151062e+02, 1.9789213562e+02, 1.9698588562e+02, 1.9642338562e+02, 1.9637651062e+02, 1.9679838562e+02, -1.9737651062e+02, 1.9782963562e+02, 1.9806401062e+02, 1.9814213562e+02, 1.9843901062e+02, 1.9925151062e+02, 2.0065776062e+02, 2.0222026062e+02, -2.0334526062e+02, 2.0389213562e+02, 2.0420463562e+02, 2.0442338562e+02, 2.0404838562e+02, 2.0265776062e+02, 2.0090776062e+02, 2.0176713562e+02, -2.0101713562e+02, 2.0039213562e+02, 1.9961088562e+02, 1.9925151062e+02, 1.9940776062e+02, 1.9934526062e+02, 1.9872026062e+02, 1.9790776062e+02, -1.9725151062e+02, 1.9670463562e+02, 1.9623588562e+02, 1.9597026062e+02, 1.9595463562e+02, 1.9612651062e+02, 1.9645463562e+02, 1.9692338562e+02, -1.9750151062e+02, 1.9809526062e+02, 1.9845463562e+02, 1.9845463562e+02, 1.9829838562e+02, 1.9837651062e+02, 1.9882963562e+02, 1.9993901062e+02, -2.0181401062e+02, 2.0401713562e+02, 2.0581401062e+02, 2.0700151062e+02, 2.0781401062e+02, 2.0848588562e+02, 2.0926713562e+02, 2.0973588562e+02, -2.0887651062e+02, 2.0640776062e+02, 2.0356401062e+02, 2.0676713562e+02, 2.0443901062e+02, 2.0272026062e+02, 2.0140776062e+02, 2.0081401062e+02, -2.0068901062e+02, 1.9993901062e+02, 1.9834526062e+02, 1.9704838562e+02, 1.9695463562e+02, 1.9770463562e+02, 1.9812651062e+02, 1.9779838562e+02, -1.9726713562e+02, 1.9690776062e+02, 1.9653276062e+02, 1.9626713562e+02 -... 6014 more values -} # data_g1simple_packing values -====================== SECTION_5 ( length=4, padding=0 ) ====================== -1-4 7777 = 7777 +GRIB { + editionNumber = 1; + table2Version = 128; + # European Centre for Medium-Range Weather Forecasts (common/c-1.table) + centre = 98; + generatingProcessIdentifier = 130; + # Temperature (K) (grib1/2.98.128.table) + indicatorOfParameter = 130; + # Hybrid level level number (2 octets) (grib1/local/ecmf/3.table , grib1/3.table) + indicatorOfTypeOfLevel = 109; + level = 1; + # Forecast product valid at reference time + P1 (P1>0) (grib1/local/ecmf/5.table , grib1/5.table) + timeRangeIndicator = 0; + # 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; + dataTime = 1200; + # Hour (stepUnits.table) + stepUnits = 1; + stepRange = 0; + startStep = 0; + endStep = 0; + #-READ ONLY- marsParam = 130.128; + # MARS labelling or ensemble forecast data (grib1/localDefinitionNumber.98.table) + localDefinitionNumber = 1; + # Operational archive (mars/class.table) + marsClass = 1; + # Analysis (mars/type.table) + marsType = 2; + # Atmospheric model (mars/stream.table) + marsStream = 1025; + experimentVersionNumber = 0001; + perturbationNumber = 0; + numberOfForecastsInEnsemble = 0; + shortName = t; + GDSPresent = 1; + bitmapPresent = 0; + numberOfVerticalCoordinateValues = 184; + Ni = MISSING; + Nj = 64; + latitudeOfFirstGridPointInDegrees = 87.864; + longitudeOfFirstGridPointInDegrees = 0; + earthIsOblate = 0; + uvRelativeToGrid = 0; + latitudeOfLastGridPointInDegrees = -87.864; + longitudeOfLastGridPointInDegrees = 357.188; + iDirectionIncrement = MISSING; + iDirectionIncrementInDegrees = MISSING; + N = 32; + iScansNegatively = 0; + jScansPositively = 0; + jPointsAreConsecutive = 0; + #-READ ONLY- alternativeRowScanning = 0; + global = 1; + #-READ ONLY- numberOfDataPoints = 6114; + #-READ ONLY- numberOfDataPointsExpected = 6114; + #-READ ONLY- numberOfValues = 6114; + isOctahedral = 0; + pv(184) = { + 0, 2.00004, 3.98083, 7.38719, 12.9083, + 21.4136, 33.9529, 51.7466, 76.1677, 108.716, + 150.986, 204.637, 271.356, 352.824, 450.686, + 566.519, 701.813, 857.946, 1036.17, 1237.59, + 1463.16, 1713.71, 1989.87, 2292.16, 2620.9, + 2976.3, 3358.43, 3767.2, 4202.42, 4663.78, + 5150.86, 5663.16, 6199.84, 6759.73, 7341.47, + 7942.93, 8564.62, 9208.3, 9873.56, 10558.9, + 11262.5, 11982.7, 12713.9, 13453.2, 14192, + 14922.7, 15638.1, 16329.6, 16990.6, 17613.3, + 18191, 18717, 19184.5, 19587.5, 19919.8, + 20175.4, 20348.9, 20434.2, 20426.2, 20319, + 20107, 19785.4, 19348.8, 18798.8, 18141.3, + 17385.6, 16544.6, 15633.6, 14665.6, 13653.2, + 12608.4, 11543.2, 10471.3, 9405.22, 8356.25, + 7335.16, 6353.92, 5422.8, 4550.21, 3743.46, + 3010.15, 2356.2, 1784.85, 1297.66, 895.194, + 576.314, 336.772, 162.043, 54.2083, 6.57563, + 0.00316, 0, 0, 0, 0, + 0, 0, 0, 0, 0 + ... 84 more values + } + pl(64) = { + 20, 27, 36, 40, 45, + 50, 60, 64, 72, 75, + 80, 90, 90, 96, 100, + 108, 108, 120, 120, 120, + 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, + 128, 128, 128, 128, 120, + 120, 120, 108, 108, 100, + 96, 90, 90, 80, 75, + 72, 64, 60, 50, 45, + 40, 36, 27, 20 + } + missingValue = 9999; + #-READ ONLY- binaryScaleFactor = -6; + #-READ ONLY- referenceValue = 160.252; + sphericalHarmonics = 0; + complexPacking = 0; + integerPointValues = 0; + additionalFlagPresent = 0; + packingType = grid_simple; + bitsPerValue = 13; + values(6114) = { + 199.08, 198.72, 198.517, 198.392, 198.22, + 197.986, 197.705, 197.47, 197.377, 197.408, + 197.564, 197.877, 198.392, 199.08, 199.798, + 200.345, 200.595, 200.533, 200.158, 199.595, + 199.845, 199.595, 199.548, 199.439, 199.408, + 199.267, 198.752, 197.892, 196.986, 196.423, + 196.377, 196.798, 197.377, 197.83, 198.064, + 198.142, 198.439, 199.252, 200.658, 202.22, + 203.345, 203.892, 204.205, 204.423, 204.048, + 202.658, 200.908, 201.767, 201.017, 200.392, + 199.611, 199.252, 199.408, 199.345, 198.72, + 197.908, 197.252, 196.705, 196.236, 195.97, + 195.955, 196.127, 196.455, 196.923, 197.502, + 198.095, 198.455, 198.455, 198.298, 198.377, + 198.83, 199.939, 201.814, 204.017, 205.814, + 207.002, 207.814, 208.486, 209.267, 209.736, + 208.877, 206.408, 203.564, 206.767, 204.439, + 202.72, 201.408, 200.814, 200.689, 199.939, + 198.345, 197.048, 196.955, 197.705, 198.127, + 197.798, 197.267, 196.908, 196.533, 196.267 + ... 6014 more values + } + #-READ ONLY- numberOfCodedValues = 6114; + #-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; + gridType = reduced_gg; + #-READ ONLY- getNumberOfValues = 6114; +} diff -Nru eccodes-2.15.0/debian/changelog eccodes-2.16.0/debian/changelog --- eccodes-2.15.0/debian/changelog 2019-11-29 14:00:37.000000000 +0000 +++ eccodes-2.16.0/debian/changelog 2020-01-16 10:19:57.000000000 +0000 @@ -1,3 +1,9 @@ +eccodes (2.16.0-1) unstable; urgency=medium + + * New upstream release + + -- Alastair McKinstry Thu, 16 Jan 2020 10:19:57 +0000 + eccodes (2.15.0-1) unstable; urgency=medium * Drop Fortran-Mod: clause in d/control; dh_fortran_mod now uses diff -Nru eccodes-2.15.0/debian/patches/disable-download-tests.patch eccodes-2.16.0/debian/patches/disable-download-tests.patch --- eccodes-2.15.0/debian/patches/disable-download-tests.patch 2019-11-29 14:00:37.000000000 +0000 +++ eccodes-2.16.0/debian/patches/disable-download-tests.patch 2020-01-16 10:19:57.000000000 +0000 @@ -3,11 +3,11 @@ Last-Updated: 2019-07-15 Forwarded: not-needed -Index: eccodes-2.14.0/tests/CMakeLists.txt +Index: eccodes-2.16.0/tests/CMakeLists.txt =================================================================== ---- eccodes-2.14.0.orig/tests/CMakeLists.txt -+++ eccodes-2.14.0/tests/CMakeLists.txt -@@ -208,8 +208,8 @@ foreach( test ${tests_data_reqd} ) +--- eccodes-2.16.0.orig/tests/CMakeLists.txt ++++ eccodes-2.16.0/tests/CMakeLists.txt +@@ -217,8 +217,8 @@ foreach( test ${tests_data_reqd} ) CONDITION ENABLE_EXTRA_TESTS COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/${test}.sh RESOURCES asca_139.t1.ref @@ -18,7 +18,7 @@ ) endforeach() -@@ -228,7 +228,7 @@ if( HAVE_PYTHON AND ENABLE_EXTRA_TESTS ) +@@ -237,7 +237,7 @@ if( HAVE_PYTHON AND ENABLE_EXTRA_TESTS ) TYPE SCRIPT COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/${test}.sh ENVIRONMENT PYTHON=${PYTHON_EXECUTABLE} PYTHONPATH=${PROJECT_BINARY_DIR}/${ECCODES_PYTHON_DIR} @@ -27,7 +27,7 @@ ) endforeach() endif() -@@ -240,7 +240,7 @@ ecbuild_add_test( TARGET eccodes_t_grib_ +@@ -249,7 +249,7 @@ ecbuild_add_test( TARGET eccodes_t_grib_ CONDITION ENABLE_EXTRA_TESTS COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/grib_lamb_az_eq_area.sh RESOURCES grib_lamb_az_eq_area.ref @@ -36,7 +36,7 @@ ) # These ones are conditional -@@ -279,28 +279,28 @@ ecbuild_add_test( TARGET eccodes_t_grib_ +@@ -302,28 +302,28 @@ ecbuild_add_test( TARGET eccodes_t_grib_ TYPE SCRIPT CONDITION HAVE_NETCDF AND ENABLE_EXTRA_TESTS COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/grib_to_netcdf.sh @@ -69,7 +69,7 @@ ) ecbuild_add_test( TARGET eccodes_t_grib_check_param_concepts -@@ -313,7 +313,7 @@ ecbuild_add_test( TARGET eccodes_t_bufr_ +@@ -336,7 +336,7 @@ ecbuild_add_test( TARGET eccodes_t_bufr_ TYPE SCRIPT CONDITION ENABLE_EXTRA_TESTS AND ECCODES_INSTALL_EXTRA_TOOLS COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/bufr_split_by_rdbSubtype.sh @@ -78,28 +78,27 @@ ) # Performance test. Must have -DENABLE_GRIB_TIMER=ON -@@ -321,6 +321,6 @@ ecbuild_add_test( TARGET eccodes_t_grib_ +@@ -344,5 +344,5 @@ ecbuild_add_test( TARGET eccodes_t_grib_ TYPE SCRIPT CONDITION ENABLE_EXTRA_TESTS AND ENABLE_GRIB_TIMER COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/grib_ecc-386.sh - TEST_DEPENDS eccodes_download_gribs + # TEST_DEPENDS eccodes_download_gribs ) - -Index: eccodes-2.14.0/cmake/ecbuild_get_test_data.cmake +Index: eccodes-2.16.0/cmake/ecbuild_get_test_data.cmake =================================================================== ---- eccodes-2.14.0.orig/cmake/ecbuild_get_test_data.cmake -+++ eccodes-2.14.0/cmake/ecbuild_get_test_data.cmake -@@ -178,7 +178,7 @@ function( ecbuild_get_test_data ) +--- eccodes-2.16.0.orig/cmake/ecbuild_get_test_data.cmake ++++ eccodes-2.16.0/cmake/ecbuild_get_test_data.cmake +@@ -186,7 +186,7 @@ function( ecbuild_get_test_data ) # download the data -- _download_test_data( ${_p_NAME} ${_p_DIRNAME} ) -+# _download_test_data( ${_p_NAME} ${_p_DIRNAME} ) +- _download_test_data( ${_p_NAME} ${ECBUILD_DOWNLOAD_BASE_URL}/${_p_DIRNAME} ) ++ # _download_test_data( ${_p_NAME} ${ECBUILD_DOWNLOAD_BASE_URL}/${_p_DIRNAME} ) # perform the checksum if requested -@@ -239,13 +239,13 @@ function( ecbuild_get_test_data ) +@@ -247,13 +247,13 @@ function( ecbuild_get_test_data ) endif() diff -Nru eccodes-2.15.0/debian/patches/memfs.patch eccodes-2.16.0/debian/patches/memfs.patch --- eccodes-2.15.0/debian/patches/memfs.patch 2019-11-29 14:00:37.000000000 +0000 +++ eccodes-2.16.0/debian/patches/memfs.patch 2020-01-16 10:19:57.000000000 +0000 @@ -1,7 +1,7 @@ -Index: eccodes-2.14.0/memfs/CMakeLists.txt +Index: eccodes-2.16.0/memfs/CMakeLists.txt =================================================================== ---- eccodes-2.14.0.orig/memfs/CMakeLists.txt -+++ eccodes-2.14.0/memfs/CMakeLists.txt +--- eccodes-2.16.0.orig/memfs/CMakeLists.txt ++++ eccodes-2.16.0/memfs/CMakeLists.txt @@ -19,7 +19,17 @@ if( CMAKE_C_COMPILER_ID MATCHES Cray ) endif() diff -Nru eccodes-2.15.0/debian/patches/remove-rpms.patch eccodes-2.16.0/debian/patches/remove-rpms.patch --- eccodes-2.15.0/debian/patches/remove-rpms.patch 2019-11-29 14:00:37.000000000 +0000 +++ eccodes-2.16.0/debian/patches/remove-rpms.patch 2020-01-16 10:19:57.000000000 +0000 @@ -3,10 +3,10 @@ Last-Updated: 2016-10-27 Forwarded: no -Index: eccodes-2.14.0/configure.ac +Index: eccodes-2.16.0/configure.ac =================================================================== ---- eccodes-2.14.0.orig/configure.ac -+++ eccodes-2.14.0/configure.ac +--- eccodes-2.16.0.orig/configure.ac ++++ eccodes-2.16.0/configure.ac @@ -39,7 +39,7 @@ AM_SANITY_CHECK AC_CONFIG_SRCDIR([src/grib_api.h]) AC_CONFIG_HEADER([src/config.h]) diff -Nru eccodes-2.15.0/debian/patches/static-fix.patch eccodes-2.16.0/debian/patches/static-fix.patch --- eccodes-2.15.0/debian/patches/static-fix.patch 2019-11-29 14:00:37.000000000 +0000 +++ eccodes-2.16.0/debian/patches/static-fix.patch 2020-01-16 10:19:57.000000000 +0000 @@ -6,11 +6,11 @@ Last-Updated: 2017-10-03 Forwarded: no -Index: eccodes-2.14.0/tools/grib_tools.h +Index: eccodes-2.16.0/tools/grib_tools.h =================================================================== ---- eccodes-2.14.0.orig/tools/grib_tools.h -+++ eccodes-2.14.0/tools/grib_tools.h -@@ -182,7 +182,7 @@ int grib_tool(int argc, char **argv); +--- eccodes-2.16.0.orig/tools/grib_tools.h ++++ eccodes-2.16.0/tools/grib_tools.h +@@ -181,7 +181,7 @@ int grib_tool(int argc, char **argv); char* grib_options_get_help(char* id); char* grib_options_get_args(char* id); int grib_options_command_line(const char* id); @@ -19,10 +19,10 @@ void usage_doxygen(void); int grib_tool_before_getopt(grib_runtime_options* options); int grib_tool_init(grib_runtime_options* options); -Index: eccodes-2.14.0/tools/grib_compare.c +Index: eccodes-2.16.0/tools/grib_compare.c =================================================================== ---- eccodes-2.14.0.orig/tools/grib_compare.c -+++ eccodes-2.14.0/tools/grib_compare.c +--- eccodes-2.16.0.orig/tools/grib_compare.c ++++ eccodes-2.16.0/tools/grib_compare.c @@ -300,7 +300,7 @@ int grib_tool_init(grib_runtime_options* options->tolerance_count=MAX_KEYS; ret=parse_keyval_string(grib_tool_name, sarg,1,GRIB_TYPE_DOUBLE,options->tolerance,&(options->tolerance_count)); @@ -32,10 +32,10 @@ exit(1); } } -Index: eccodes-2.14.0/tools/grib_options.c +Index: eccodes-2.16.0/tools/grib_options.c =================================================================== ---- eccodes-2.14.0.orig/tools/grib_options.c -+++ eccodes-2.14.0/tools/grib_options.c +--- eccodes-2.16.0.orig/tools/grib_options.c ++++ eccodes-2.16.0/tools/grib_options.c @@ -114,7 +114,7 @@ static grib_options_help grib_options_he static int grib_options_help_count=sizeof(grib_options_help_list)/sizeof(grib_options_help); @@ -107,11 +107,11 @@ return GRIB_SUCCESS; } -Index: eccodes-2.14.0/tools/grib_to_netcdf.c +Index: eccodes-2.16.0/tools/grib_to_netcdf.c =================================================================== ---- eccodes-2.14.0.orig/tools/grib_to_netcdf.c -+++ eccodes-2.14.0/tools/grib_to_netcdf.c -@@ -4144,7 +4144,7 @@ int grib_tool_init(grib_runtime_options* +--- eccodes-2.16.0.orig/tools/grib_to_netcdf.c ++++ eccodes-2.16.0/tools/grib_to_netcdf.c +@@ -4149,7 +4149,7 @@ int grib_tool_init(grib_runtime_options* } if (kvalue->name == NULL) { fprintf(stderr, "Invalid format: %s", kind_name); @@ -120,7 +120,7 @@ exit(1); } } -@@ -4155,14 +4155,14 @@ int grib_tool_init(grib_runtime_options* +@@ -4160,14 +4160,14 @@ int grib_tool_init(grib_runtime_options* char* theArg = grib_options_get_option("d:"); if (!is_number(theArg) || atol(theArg)<0 || atol(theArg)>9 ) { fprintf(stderr, "Invalid deflate option: %s (must be 0 to 9)\n", theArg); @@ -137,7 +137,7 @@ exit(1); } } -@@ -4178,7 +4178,7 @@ int grib_tool_init(grib_runtime_options* +@@ -4183,7 +4183,7 @@ int grib_tool_init(grib_runtime_options* else { fprintf(stderr, "Invalid shuffle option. Deflate option needed.\n"); @@ -146,7 +146,7 @@ exit(1); } -@@ -4191,7 +4191,7 @@ int grib_tool_init(grib_runtime_options* +@@ -4196,7 +4196,7 @@ int grib_tool_init(grib_runtime_options* char* theArg = grib_options_get_option("R:"); if (!is_number(theArg)) { fprintf(stderr, "Invalid reference date: %s\n", theArg); @@ -155,7 +155,7 @@ exit(1); } set_value(user_r, "referencedate", theArg); -@@ -4374,7 +4374,7 @@ int grib_tool_finalise_action(grib_runti +@@ -4379,7 +4379,7 @@ int grib_tool_finalise_action(grib_runti if(options->outfile==NULL || options->outfile->name==NULL) { @@ -164,11 +164,11 @@ exit(1); } -Index: eccodes-2.14.0/tools/bufr_compare.c +Index: eccodes-2.16.0/tools/bufr_compare.c =================================================================== ---- eccodes-2.14.0.orig/tools/bufr_compare.c -+++ eccodes-2.14.0/tools/bufr_compare.c -@@ -361,7 +361,7 @@ int grib_tool_init(grib_runtime_options* +--- eccodes-2.16.0.orig/tools/bufr_compare.c ++++ eccodes-2.16.0/tools/bufr_compare.c +@@ -364,7 +364,7 @@ int grib_tool_init(grib_runtime_options* options->tolerance_count=MAX_KEYS; ret=parse_keyval_string(grib_tool_name, sarg,1,GRIB_TYPE_DOUBLE,options->tolerance,&(options->tolerance_count)); if (ret == GRIB_INVALID_ARGUMENT) { diff -Nru eccodes-2.15.0/definitions/boot.def eccodes-2.16.0/definitions/boot.def --- eccodes-2.15.0/definitions/boot.def 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/boot.def 2020-01-16 10:21:52.000000000 +0000 @@ -15,6 +15,11 @@ constant defaultTypeOfLevel="unknown" : hidden; +gribDataQualityChecks = getenv("ECCODES_GRIB_DATA_QUALITY_CHECKS","0") : hidden; +if (gribDataQualityChecks) { + template LIMITS "param_limits.def"; +} + # GRIBEX special boustrophedonic mode. See GRIB-472 # If the environment variable is not defined, the key will be 0 GRIBEX_boustrophedonic = getenv("ECCODES_GRIBEX_BOUSTROPHEDONIC","0") :hidden; @@ -64,10 +69,14 @@ template GRIB "grib[GRIBEditionNumber:l]/boot.def" ; } -if(kindOfProduct == `BUDG`){ +if(kindOfProduct == `BUDG` ){ template BUDG "budg/boot.def" ; } +if(kindOfProduct == `DIAG`){ + template DIAG "diag/boot.def" ; +} + if(kindOfProduct == `TIDE`){ template TIDE "tide/boot.def" ; } diff -Nru eccodes-2.15.0/definitions/diag/boot.def eccodes-2.16.0/definitions/diag/boot.def --- eccodes-2.15.0/definitions/diag/boot.def 1970-01-01 00:00:00.000000000 +0000 +++ eccodes-2.16.0/definitions/diag/boot.def 2020-01-16 10:21:52.000000000 +0000 @@ -0,0 +1,14 @@ +## Copyright 2005-2019 ECMWF. + +position startOfHeaders; +ascii[4] identifier; + +alias ls.identifier=identifier; +transient missingValue = 9999; +constant ieeeFloats = 0: edition_specific; +constant zero=0:hidden; + +template section1 "diag/section.1.def"; +template section4 "diag/section.4.def"; +ascii[4] endMark; +position totalLength; diff -Nru eccodes-2.15.0/definitions/diag/section.1.def eccodes-2.16.0/definitions/diag/section.1.def --- eccodes-2.15.0/definitions/diag/section.1.def 1970-01-01 00:00:00.000000000 +0000 +++ eccodes-2.16.0/definitions/diag/section.1.def 2020-01-16 10:21:52.000000000 +0000 @@ -0,0 +1,79 @@ +# Copyright 2005-2019 ECMWF. + +section_length[3] section1Length ; + +unsigned[1] gribTablesVersionNo ; +codetable[1] centre 'common/c-1.table' : string_type; + +alias ls.centre=centre; +alias identificationOfOriginatingGeneratingCentre=centre; + +unsigned[1] generatingProcessIdentifier ; + +unsigned[1] gridDefinition ; + +flags[1] flag 'grib1/1.table'; + +codetable[1] indicatorOfParameter 'grib1/2.[centre:l].[gribTablesVersionNo:l].table'; + +codetable[1] indicatorOfTypeOfLevel 'grib1/3.table'; +codetable[2] heightPressureEtcOfLevels 'grib1/3.table'; +alias ls.levelType=indicatorOfTypeOfLevel; + +unsigned[1] yearOfCentury ; +unsigned[1] month ; +unsigned[1] day; +unsigned[1] hour ; +unsigned[1] minute ; + +transient second = 0; +meta dataDate budgdate(yearOfCentury,month,day); +alias ls.date=dataDate; +meta dataTime time(hour,minute,second); +alias ls.time=dataTime; +meta julianDay julian_day(dataDate,hour,minute,second) : edition_specific; + +# Indicator of unit of time range +codetable[1] indicatorOfUnitOfTimeRange 'grib1/4.table'; + +# P1 - Period of time (number of time units) +unsigned[1] periodOfTime ; +alias P1 = periodOfTime ; + +# P2 - Period of time +unsigned[1] periodOfTimeIntervals ; +alias P2 = periodOfTimeIntervals ; + +codetable[1] timeRangeIndicator 'grib1/5.table'; + +codetable[1] stepUnits 'grib2/tables/1/4.4.table' = 1 : transient,dump,no_copy; + +concept stepType { + "instant" = {timeRangeIndicator=1;} + "instant" = {timeRangeIndicator=10;} + "instant" = {timeRangeIndicator=0;} + "avg" = {timeRangeIndicator=3;} + "accum" = {timeRangeIndicator=4;} + "max" = {timeRangeIndicator=2;} + "min" = {timeRangeIndicator=2;} + "diff" = {timeRangeIndicator=5;} + "rms" = {timeRangeIndicator=2;} + "sd" = {timeRangeIndicator=2;} + "cov" = {timeRangeIndicator=2;} + "ratio" = {timeRangeIndicator=2;} +} + +meta ls.stepRange g1step_range(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange,stepUnits,stepType) : dump; +meta startStep long_vector(stepRange,0) : dump; +meta endStep long_vector(stepRange,1) : dump; + +# Set stepUnits to 1 to get step range in hours +meta stepRangeInHours g1step_range(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange,one,stepType); +meta startStepInHours long_vector(stepRangeInHours,0) : dump; +meta endStepInHours long_vector(stepRangeInHours,1) : dump; + +constant paramId = 0; +alias parameter = paramId; +alias ls.parameter=parameter; + +section_padding section1Padding : read_only; diff -Nru eccodes-2.15.0/definitions/diag/section.4.def eccodes-2.16.0/definitions/diag/section.4.def --- eccodes-2.15.0/definitions/diag/section.4.def 1970-01-01 00:00:00.000000000 +0000 +++ eccodes-2.16.0/definitions/diag/section.4.def 2020-01-16 10:21:52.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright 2005-2019 ECMWF. + +section_length[3] section4Length ; + +unsigned[1] reserved1=0 : hidden; +flags[1] missingDataFlag 'grib1/1.table'; +unsigned[1] numberOfBytesPerInteger=4; + +unsigned[2] reserved=0 : hidden ; + +unsigned[3] numberOfCharacters : dump; +alias numberOfChars=numberOfCharacters ; + +unsigned[3] numberOfFloats : dump; + +unsigned[3] numberOfIntegers=0 : dump; +alias numberOfInts=numberOfIntegers ; + +unsigned[3] numberOfLogicals ; +unsigned[3] numberOfReservedBytes ; +unsigned[4] reserved=0 : hidden; +unsigned[4] reserved=0 : hidden; +unsigned[1] reserved=0 : hidden; + +ibmfloat floatValues[numberOfFloats] : dump; +alias floatVal=floatValues; + +if (numberOfIntegers) { + signed[4] integerValues[numberOfIntegers] : dump; +} + +# Have to use integers to represent single char strings +if (numberOfCharacters) { + unsigned[1] charValues[numberOfCharacters] : dump, string_type; +} +#charList list(numberOfCharacters) { +# ascii[1] charValues : dump; +#} + +# Final padding +section_padding padding; diff -Nru eccodes-2.15.0/definitions/grib1/local.98.49.def eccodes-2.16.0/definitions/grib1/local.98.49.def --- eccodes-2.15.0/definitions/grib1/local.98.49.def 1970-01-01 00:00:00.000000000 +0000 +++ eccodes-2.16.0/definitions/grib1/local.98.49.def 2020-01-16 10:21:52.000000000 +0000 @@ -0,0 +1,31 @@ +# Copyright 2005-2019 ECMWF. + +template mars_labeling "grib1/mars_labeling.def"; + +#1->2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=49; +if (stepType is "instant") { + alias productDefinitionTemplateNumber=zero; +} else { + alias productDefinitionTemplateNumber=eight; +} + +constant GRIBEXSection1Problem = 56 - section1Length ; + +# Ensemble forecast number: = 0 for a control forecast. Not used for analysis (set to zero) +unsigned[1] perturbationNumber : dump; +alias mars.number=perturbationNumber; +# Total number of forecasts in ensemble (Set to 1 for analysis) +unsigned[1] numberOfForecastsInEnsemble : dump; +# Model error type: 1=Full state 2=Forcing 3=Model Bias +unsigned[1] modelErrorType : dump; + +# Hours +unsigned[2] offsetToEndOf4DvarWindow : dump; +unsigned[2] lengthOf4DvarWindow : dump; +alias anoffset=offsetToEndOf4DvarWindow; + +alias local.perturbationNumber=perturbationNumber; +alias local.numberOfForecastsInEnsemble=numberOfForecastsInEnsemble; +alias local.modelErrorType=modelErrorType; diff -Nru eccodes-2.15.0/definitions/grib1/local.98.5.def eccodes-2.16.0/definitions/grib1/local.98.5.def --- eccodes-2.15.0/definitions/grib1/local.98.5.def 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib1/local.98.5.def 2020-01-16 10:21:52.000000000 +0000 @@ -13,20 +13,19 @@ alias productDefinitionTemplateNumber=probPoint; } - template mars_labeling "grib1/mars_labeling.def"; -unsigned[1] forecastProbabilityNumber : dump ; +unsigned[1] forecastProbabilityNumber : dump; -unsigned[1] totalNumberOfForecastProbabilities : dump; +unsigned[1] totalNumberOfForecastProbabilities : dump; -signed[1] localDecimalScaleFactor : dump ; +signed[1] localDecimalScaleFactor : dump; -unsigned[1] thresholdIndicator : dump ; +unsigned[1] thresholdIndicator : dump; -signed[2] lowerThreshold : dump ; +signed[2] lowerThreshold : can_be_missing,dump; -signed[2] upperThreshold : dump; +signed[2] upperThreshold : can_be_missing,dump; # 1 to 2 conversion _if (thresholdIndicator == 1) { @@ -56,7 +55,6 @@ transient scaledValueOfUpperLimit=upperThreshold; } - # spareSetToZero pad padding_loc5_1(1); alias number = forecastProbabilityNumber; diff -Nru eccodes-2.15.0/definitions/grib1/localDefinitionNumber.98.table eccodes-2.16.0/definitions/grib1/localDefinitionNumber.98.table --- eccodes-2.15.0/definitions/grib1/localDefinitionNumber.98.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib1/localDefinitionNumber.98.table 2020-01-16 10:21:52.000000000 +0000 @@ -36,6 +36,7 @@ 38 38 4D variational increments for long window 4Dvar system 39 39 4DVar model errors for long window 4Dvar system 40 40 MARS labeling with domain and model (for LAM) +49 49 4DVar model errors for ELDA 50 50 Member State data 190 190 Multiple ECMWF local definitions 191 191 Free format data descriptor data diff -Nru eccodes-2.15.0/definitions/grib2/products_s2s.def eccodes-2.16.0/definitions/grib2/products_s2s.def --- eccodes-2.15.0/definitions/grib2/products_s2s.def 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/products_s2s.def 2020-01-16 10:21:52.000000000 +0000 @@ -101,17 +101,16 @@ # ECC-891, ECC-1013 concept is_ocean2d_param(zero) { '1' = { discipline=10; typeOfFirstFixedSurface=160; scaleFactorOfFirstFixedSurface=0; scaledValueOfFirstFixedSurface=0; typeOfSecondFixedSurface=255; } - '1' = { discipline=10; typeOfFirstFixedSurface=160; scaleFactorOfFirstFixedSurface=missing(); scaledValueOfFirstFixedSurface=missing(); typeOfSecondFixedSurface=255; } '1' = { discipline=10; typeOfFirstFixedSurface=20; scaleFactorOfFirstFixedSurface=2; scaledValueOfFirstFixedSurface=29315; typeOfSecondFixedSurface=255; } '1' = { discipline=10; typeOfFirstFixedSurface=169; scaleFactorOfFirstFixedSurface=2; scaledValueOfFirstFixedSurface=1; typeOfSecondFixedSurface=255; } '1' = { discipline=10; typeOfFirstFixedSurface=160; scaleFactorOfFirstFixedSurface=0; scaledValueOfFirstFixedSurface=0; typeOfSecondFixedSurface=160; scaleFactorOfSecondFixedSurface=0; scaledValueOfSecondFixedSurface=300; } '0' = { dummy=1; } -} +} : no_copy; concept is_ocean3d_param(zero) { '1' = { discipline=10; typeOfFirstFixedSurface=160; typeOfSecondFixedSurface=160; } '0' = { discipline=10; typeOfFirstFixedSurface=160; scaleFactorOfFirstFixedSurface=0; scaledValueOfFirstFixedSurface=0; typeOfSecondFixedSurface=160; scaleFactorOfSecondFixedSurface=0; scaledValueOfSecondFixedSurface=300; } '0' = { dummy=1; } -} +}: no_copy; if (is_ocean2d_param) { constant oceanLevName = 'o2d'; diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/0.0.table eccodes-2.16.0/definitions/grib2/tables/0/0.0.table --- eccodes-2.15.0/definitions/grib2/tables/0/0.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/0.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,10 +1,6 @@ -#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 Space products -# 4-9 Reserved 10 10 Oceanographic products -# 11-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/1.0.table eccodes-2.16.0/definitions/grib2/tables/0/1.0.table --- eccodes-2.15.0/definitions/grib2/tables/0/1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,7 +1,5 @@ -# Code Table 1.0: GRIB Master Tables Version Number 0 0 Experimental 1 1 Initial operational version number 2 2 Previous operational version number 3 3 Current operational version number implemented on 2 November 2005 -# 4-254 Future operational version numbers 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 -Nru eccodes-2.15.0/definitions/grib2/tables/0/1.1.table eccodes-2.16.0/definitions/grib2/tables/0/1.1.table --- eccodes-2.15.0/definitions/grib2/tables/0/1.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/1.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,2 @@ -# 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 -Nru eccodes-2.15.0/definitions/grib2/tables/0/1.2.table eccodes-2.16.0/definitions/grib2/tables/0/1.2.table --- eccodes-2.15.0/definitions/grib2/tables/0/1.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/1.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,5 @@ -# 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-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/1.3.table eccodes-2.16.0/definitions/grib2/tables/0/1.3.table --- eccodes-2.15.0/definitions/grib2/tables/0/1.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/1.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,10 +1,7 @@ -# 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 TIGGE Operational products 5 5 TIGGE test products -# 4-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/1.4.table eccodes-2.16.0/definitions/grib2/tables/0/1.4.table --- eccodes-2.15.0/definitions/grib2/tables/0/1.4.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/1.4.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 1.4, Type of data 0 an Analysis products 1 fc Forecast products 2 af Analysis and forecast products @@ -8,6 +7,4 @@ 6 sa Processed satellite observations 7 ra Processed radar observations 8 ep Event Probability -# 8-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/3.0.table eccodes-2.16.0/definitions/grib2/tables/0/3.0.table --- eccodes-2.15.0/definitions/grib2/tables/0/3.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/3.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,3 @@ -# 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 -Nru eccodes-2.15.0/definitions/grib2/tables/0/3.10.table eccodes-2.16.0/definitions/grib2/tables/0/3.10.table --- eccodes-2.15.0/definitions/grib2/tables/0/3.10.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/3.10.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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 diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/3.11.table eccodes-2.16.0/definitions/grib2/tables/0/3.11.table --- eccodes-2.15.0/definitions/grib2/tables/0/3.11.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/3.11.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 3.11, Interpretation of list of numbers defining number of points 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 diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/3.15.table eccodes-2.16.0/definitions/grib2/tables/0/3.15.table --- eccodes-2.15.0/definitions/grib2/tables/0/3.15.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/3.15.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,9 +1,8 @@ -# CODE TABLE 3.15, Physical meaning of vertical coordinate 20 20 Temperature K 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 (see Note 1) m +103 103 Height above ground m 104 104 Sigma coordinate 105 105 Hybrid coordinate 106 106 Depth below land surface m @@ -11,7 +10,7 @@ 108 108 Pressure deviation from ground to level Pa 109 pv Potential vorticity K m-2 kg-1 s-1 110 110 Geometrical height m -111 111 Eta coordinate (see Note 2) +111 111 Eta coordinate 112 112 Geopotential height gpm 160 160 Depth below sea level m 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/3.1.table eccodes-2.16.0/definitions/grib2/tables/0/3.1.table --- eccodes-2.15.0/definitions/grib2/tables/0/3.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/3.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,43 +1,26 @@ -# 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-9 Reserved 10 10 Mercator -# 11-19 Reserved 20 20 Polar stereographic can be south or north -# 21-29 Reserved 30 30 Lambert Conformal can be secant or tangent, conical or bipolar 31 31 Albers equal-area -# 32-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-89 Reserved 90 90 Space view perspective orthographic -# 91-99 Reserved 100 100 Triangular grid based on an icosahedron -# 101-109 Reserved 110 110 Equatorial azimuthal equidistant projection -# 111-119 Reserved 120 120 Azimuth-range projection -# 121-129 Reserved 130 130 Irregular latitude/longitude grid -# 131-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 -Nru eccodes-2.15.0/definitions/grib2/tables/0/3.20.table eccodes-2.16.0/definitions/grib2/tables/0/3.20.table --- eccodes-2.15.0/definitions/grib2/tables/0/3.20.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/3.20.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,3 @@ -# 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 -Nru eccodes-2.15.0/definitions/grib2/tables/0/3.21.table eccodes-2.16.0/definitions/grib2/tables/0/3.21.table --- eccodes-2.15.0/definitions/grib2/tables/0/3.21.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/3.21.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,4 @@ -# CODE TABLE 3.21, Vertical dimension coordinate values definition 0 0 Explicit coordinate values set 1 1 Linear coordinates -# 2-10 Reserved 11 11 Geometric coordinates -# 12-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/3.2.table eccodes-2.16.0/definitions/grib2/tables/0/3.2.table --- eccodes-2.15.0/definitions/grib2/tables/0/3.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/3.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 3.2, Shape of the Earth 0 0 Earth assumed spherical with radius = 6,367,470.0 m 1 1 Earth assumed spherical with radius specified 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) @@ -6,6 +5,4 @@ 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.257222101) 5 5 Earth assumed represented by WGS84 (as used by ICAO since 1998) 6 6 Earth assumed spherical with radius of 6,371,229.0 m -# 7-191 Reserved -# 192- 254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/3.3.table eccodes-2.16.0/definitions/grib2/tables/0/3.3.table --- eccodes-2.15.0/definitions/grib2/tables/0/3.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/3.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# FLAG TABLE 3.3, Resolution and Component Flags 3 0 i direction increments not given 3 1 i direction increments given 4 0 j direction increments not given diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/3.4.table eccodes-2.16.0/definitions/grib2/tables/0/3.4.table --- eccodes-2.15.0/definitions/grib2/tables/0/3.4.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/3.4.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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 diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/3.5.table eccodes-2.16.0/definitions/grib2/tables/0/3.5.table --- eccodes-2.15.0/definitions/grib2/tables/0/3.5.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/3.5.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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 diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/3.6.table eccodes-2.16.0/definitions/grib2/tables/0/3.6.table --- eccodes-2.15.0/definitions/grib2/tables/0/3.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/3.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,2 +1 @@ -# CODE TABLE 3.6, Spectral data representation type 1 1 The Associated Legendre Functions of the first kind are defined by: diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/3.7.table eccodes-2.16.0/definitions/grib2/tables/0/3.7.table --- eccodes-2.15.0/definitions/grib2/tables/0/3.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/3.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,11 +1,3 @@ -# Code Table 3.7: Spectral data representation mode 0 0 Reserved -1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) -# 2-254 Reserved +1 1 The complex numbers Fnm 255 255 Missing -# Note: -# -#(1) Values of N(m) for common truncations cases: -# Triangular M = J = K, N(m) = J -# Rhomboidal K = J + M, N(m) = J+m -# Trapezoidal K = J, K > M, N(m) = J diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/3.8.table eccodes-2.16.0/definitions/grib2/tables/0/3.8.table --- eccodes-2.15.0/definitions/grib2/tables/0/3.8.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/3.8.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,5 @@ -# 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 -Nru eccodes-2.15.0/definitions/grib2/tables/0/3.9.table eccodes-2.16.0/definitions/grib2/tables/0/3.9.table --- eccodes-2.15.0/definitions/grib2/tables/0/3.9.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/3.9.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,3 +1,2 @@ -# 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 diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.0.table eccodes-2.16.0/definitions/grib2/tables/0/4.0.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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 forecast based on all ensemble members at a horizontal level or in a horizontal layer at a point in time diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.1.0.table eccodes-2.16.0/definitions/grib2/tables/0/4.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,3 @@ -#Discipline 0: Meteorological products -#Category Description 0 0 Temperature 1 1 Moisture 2 2 Momentum @@ -21,10 +19,8 @@ 18 18 Nuclear/radiology 19 19 Physical atmospheric properties 20 20 Atmospheric chemical or physical constituents -# 20-189 Reserved 190 190 CCITT IA5 string 191 191 Miscellaneous -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.10.table eccodes-2.16.0/definitions/grib2/tables/0/4.10.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.10.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.10.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.10, Type of statistical processing 0 avg Average 1 accum Accumulation @@ -10,5 +9,4 @@ 7 cov Covariance (Temporal variance) 8 8 Difference (Value at the start of time range minus value at the end) 9 ratio Ratio -# 192 254 Reserved for local use 255 missing Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.1.10.table eccodes-2.16.0/definitions/grib2/tables/0/4.1.10.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.1.10.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.1.10.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,12 +1,8 @@ -#Discipline 10: Oceanographic Products -#Category Description 0 0 Waves 1 1 Currents 2 2 Ice 3 3 Surface Properties 4 4 Sub-surface Properties -# 5-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.1.1.table eccodes-2.16.0/definitions/grib2/tables/0/4.1.1.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.1.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.1.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,9 +1,5 @@ -#Discipline 1: Hydrological products -#Category Description 0 0 Hydrology basic products 1 1 Hydrology probabilities -#2-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.11.table eccodes-2.16.0/definitions/grib2/tables/0/4.11.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.11.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.11.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,9 +1,6 @@ -# CODE TABLE 4.11, Type of time intervals - 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 -# 192 254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.1.2.table eccodes-2.16.0/definitions/grib2/tables/0/4.1.2.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.1.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.1.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,11 +1,7 @@ -#Discipline 2: Land Surface Products -#Category Description 0 0 Vegetation/Biomass 1 1 Agri-/aquacultural Special Products 2 2 Transportation-related Products 3 3 Soil Products -# 4-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.12.table eccodes-2.16.0/definitions/grib2/tables/0/4.12.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.12.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.12.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.12, Operating Mode 0 0 Maintenance Mode 1 1 Clear air diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.1.3.table eccodes-2.16.0/definitions/grib2/tables/0/4.1.3.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.1.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.1.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,9 +1,5 @@ -#Discipline 3: Space Products -#Category Description 0 0 Image format products 1 1 Quantitative products -# 2-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.13.table eccodes-2.16.0/definitions/grib2/tables/0/4.13.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,3 @@ -# CODE TABLE 4.13, Quality Control Indicator - 0 0 No quality control applied 1 1 Quality control applied 192 192 Reserved for local use diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.14.table eccodes-2.16.0/definitions/grib2/tables/0/4.14.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.14.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.14.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.14, Clutter Filter Indicator 0 0 No clutter filter used 1 1 Clutter filter used diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.151.table eccodes-2.16.0/definitions/grib2/tables/0/4.151.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.151.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.151.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.15, Confidence level units 0 0 bad 1 1 suspect diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.15.table eccodes-2.16.0/definitions/grib2/tables/0/4.15.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.15.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.15.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.15, Type of auxiliary information 0 0 Confidence level ('grib2/4.151.table') 1 1 Delta time (seconds) diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.1.table eccodes-2.16.0/definitions/grib2/tables/0/4.1.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.1, Category of parameters by product discipline 0 0 Temperature 1 1 Moisture 3 3 Mass diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.0.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.0.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# Product Discipline 0: Meteorological products, Parameter Category 0: Temperature 0 0 Temperature (K) 1 1 Virtual temperature (K) 2 2 Potential temperature (K) @@ -17,7 +16,5 @@ 15 15 Virtual potential temperature (K) 16 16 Snow phase change heat flux (W m-2) 17 17 Skin Temperature (K) -#17-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,3 @@ -# 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 -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.14.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.14.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.14.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.14.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,7 +1,4 @@ -# Product Discipline 0: Meteorological products, Parameter Category 14: Trace Gases 0 0 Total ozone (Dobson) 1 1 Ozone mixing ratio (kg kg-1) -# 2-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.15.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.15.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.15.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.15.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# Product Discipline 0 - Meteorological products, Parameter Category 15: Radar 0 0 Base spectrum width (m s-1) 1 1 Base reflectivity (dB) 2 2 Base radial velocity (m s-1) @@ -8,7 +7,5 @@ 6 6 Radar spectra (1) (-) 7 7 Radar spectra (2) (-) 8 8 Radar spectra (3) (-) -# 9-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.18.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.18.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.18.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.18.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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) @@ -8,7 +7,5 @@ 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-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.190.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.190.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.190.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.190.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,3 @@ -# Product Discipline 0: Meteorological products, Parameter Category 190: CCITT IA5 string 0 0 Arbitrary text string (CCITTIA5) -# 1-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.191.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.191.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.191.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.191.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,3 @@ -# Product Discipline 0: Meteorological products, Parameter Category 191: Miscellaneous 0 0 Seconds prior to initial reference time (defined in Section 1) (s) -# 1-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# Product Discipline 0: Meteorological products, Parameter Category 19: Physical atmospheric properties 0 0 Visibility (m) 1 1 Albedo (%) 2 2 Thunderstorm probability (%) @@ -18,7 +17,5 @@ 16 16 Contrail base (m) 17 17 Maximum snow albedo (%) 18 18 Snow free albedo (%) -# 19-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# Product Discipline 0: Meteorological products, Parameter Category 1: Moisture 0 0 Specific humidity (kg kg-1) 1 1 Relative humidity (%) 2 2 Humidity mixing ratio (kg kg-1) @@ -60,7 +59,5 @@ 70 70 Specific cloud ice water content (kg kg-1) 71 71 Specific rain water content (kg kg-1) 72 72 Specific snow water content (kg kg-1) -#47-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.201.table eccodes-2.16.0/definitions/grib2/tables/0/4.201.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.201.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.201.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.201, Precipitation Type 1 1 Rain 2 2 Thunderstorm diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.20.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.20.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.20.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.20.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,6 @@ 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-49 9-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-1 @@ -17,10 +16,7 @@ 56 56 Changes of amount in atmosphere (see Note 1) mol s-1 57 57 Total yearly average burden of the atmosphere mol 58 58 Total yearly averaged atmospheric loss (see Note 1) mol s-1 -#59-99 59-99 Reserved 100 100 Surface area density (aerosol) m-1 101 101 Atmosphere optical thickness m -#102-191 102-191 Reserved -#192-254 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.2.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.2.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,4 @@ -# Product Discipline 0: Meteorological products, Parameter Category 2: Momentum -0 0 Wind direction [from which blowing] (deg true) +0 0 Wind direction (from which blowing) (deg true) 1 1 Wind speed (m s-1) 2 2 u-component of wind (m s-1) 3 3 v-component of wind (m s-1) @@ -7,8 +6,8 @@ 5 5 Velocity potential (m2 s-1) 6 6 Montgomery stream function (m2 s-2) 7 7 Sigma coordinate vertical velocity (s-1) -8 8 Vertical velocity [pressure] (Pa s-1) -9 9 Vertical velocity [geometric] (m s-1) +8 8 Vertical velocity (pressure) (Pa s-1) +9 9 Vertical velocity (geometric) (m s-1) 10 10 Absolute vorticity (s-1) 11 11 Absolute divergence (s-1) 12 12 Relative vorticity (s-1) @@ -21,7 +20,7 @@ 19 19 Wind mixing energy (J) 20 20 Boundary layer dissipation (W m-2) 21 21 Maximum wind speed (m s-1) -22 22 Wind speed [gust] (m s-1) +22 22 Wind speed (gust) (m s-1) 23 23 u-component of wind (gust) (m s-1) 24 24 v-component of wind (gust) (m s-1) 25 25 Vertical speed shear (s-1) @@ -30,6 +29,4 @@ 28 28 V-component storm motion (m s-1) 29 29 Drag coefficient (Numeric) 30 30 Frictional velocity (m s-1) -# 31-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.202.table eccodes-2.16.0/definitions/grib2/tables/0/4.202.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.202.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.202.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.202, Precipitable water category 192 192 Reserved for local use 193 193 Reserved for local use diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.3.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.3.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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-1) @@ -19,7 +18,5 @@ 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-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.203.table eccodes-2.16.0/definitions/grib2/tables/0/4.203.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.203.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.203.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.203, Cloud type 0 0 Clear 1 1 Cumulonimbus 2 2 Stratus @@ -21,5 +20,4 @@ 19 19 Cirrocumulus - ground based fog beneath the lowest layer 20 20 Cirrus - ground based fog beneath the lowest layer 191 191 Unknown -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.4.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.4.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.4.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.4.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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) @@ -8,7 +7,5 @@ 6 6 Radiance (with respect to wave length) (W m-3 sr-1) 7 7 Downward short-wave radiation flux (W m-2) 9 8 Upward short-wave radiation flux (W m-2) -# 9-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.204.table eccodes-2.16.0/definitions/grib2/tables/0/4.204.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.204.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.204.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.204, Thunderstorm coverage 0 0 None 1 1 Isolated (1% - 2%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.5.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.5.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.5.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.5.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,11 +1,8 @@ -# 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) -# 5-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.205.table eccodes-2.16.0/definitions/grib2/tables/0/4.205.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.205.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.205.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.205, Aerosol type 0 0 Aerosol not present 1 1 Aerosol present diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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 (%) @@ -24,7 +23,5 @@ 22 22 Cloud cover (%) 23 23 Cloud ice mixing ratio (kg kg-1) 24 24 Sunshine (Numeric) -# 23-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.206.table eccodes-2.16.0/definitions/grib2/tables/0/4.206.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.206.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.206.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.206, Volcanic ash 0 0 Not present 1 1 Present diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.7.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.7.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.0.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.0.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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) @@ -12,7 +11,5 @@ 10 10 Surface lifted index (K) 11 11 Best (4-layer) lifted index (K) 12 12 Richardson number (Numeric) -#13-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.207.table eccodes-2.16.0/definitions/grib2/tables/0/4.207.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.207.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.207.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.207, Icing 0 0 None 1 1 Light diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.208.table eccodes-2.16.0/definitions/grib2/tables/0/4.208.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.208.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.208.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.208, Turbulence 0 0 None (smooth) 1 1 Light diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.209.table eccodes-2.16.0/definitions/grib2/tables/0/4.209.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.209.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.209.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.209, Planetary boundary layer regime 1 1 Stable 2 2 Mechanically driven turbulence diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.10.0.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.10.0.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.10.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.10.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# Product Discipline 10: Oceanographic products, Parameter Category 0: Waves 0 0 Wave spectra (1) (-) 1 1 Wave spectra (2) (-) 2 2 Wave spectra (3) (-) @@ -13,8 +12,6 @@ 11 11 Primary wave mean period (s) 12 12 Secondary wave direction (Degree true) 13 13 Secondary wave mean period (s) -# 14-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.10.1.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.10.1.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.10.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.10.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,5 @@ -# Product Discipline 10: Oceanographic products, Parameter Category 1: Currents 0 0 Current direction (Degree true) 1 1 Current speed (m s-1) 2 2 u-component of current (m s-1) 3 3 v-component of current (m s-1) -# 4-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.10.2.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.10.2.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.10.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.10.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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) @@ -7,6 +6,4 @@ 5 5 v-component of ice drift (m s-1) 6 6 Ice growth rate (m s-1) 7 7 Ice divergence (s-1) -# 8-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.10.3.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.10.3.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.10.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.10.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,3 @@ -# 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-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.10.4.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.10.4.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.10.4.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.10.4.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,9 +1,6 @@ -# Product Discipline 10: Oceanographic products, Parameter Category 4: Sub-surface Properties 0 0 Main thermocline depth (m) 1 1 Main thermocline anomaly (m) 2 2 Transient thermocline depth (m) 3 3 Salinity (kg kg-1) -# 4-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# Product Discipline 1: Hydrologic 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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.210.table eccodes-2.16.0/definitions/grib2/tables/0/4.210.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.210.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.210.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.210, Contrail intensity 0 0 Contrail not present 1 1 Contrail present diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.1.1.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.1.1.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.1.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.1.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,5 @@ -# Product Discipline 1: Hydrologic products, Parameter Category 1: Hydrology probabilities 0 0 Conditional percent precipitation amount fractile for an overall period (Encoded as an accumulation) (kg m-2) 1 1 Percent 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 -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.211.table eccodes-2.16.0/definitions/grib2/tables/0/4.211.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.211.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.211.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.211, Contrail engine type 0 0 Low bypass 1 1 High bypass diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.212.table eccodes-2.16.0/definitions/grib2/tables/0/4.212.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.212.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.212.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.212, Land Use 1 1 Urban land 2 2 Agriculture diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.213.table eccodes-2.16.0/definitions/grib2/tables/0/4.213.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.213.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.213.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.213, Soil type 1 1 Sand 2 2 Loamy sand diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.215.table eccodes-2.16.0/definitions/grib2/tables/0/4.215.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.215.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.215.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.215, Remotely Sensed Snow Coverage 50 50 No-snow/no-cloud 100 100 Clouds diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.216.table eccodes-2.16.0/definitions/grib2/tables/0/4.216.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.216.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.216.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,3 +1,2 @@ -# CODE TABLE 4.216, Elevation of Snow Covered Terrain 254 254 Clouds 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.217.table eccodes-2.16.0/definitions/grib2/tables/0/4.217.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.217.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.217.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.217, Cloud mask type 0 0 Clear over water 1 1 Clear over land diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# Product Discipline 2: Land surface products, Parameter Category 0: Vegetation/Biomass 0 0 Land cover (0=land, 1=sea) (Proportion) 1 1 Surface roughness (m) 2 2 Soil temperature (K) @@ -23,7 +22,5 @@ 21 21 Humidity parameter in canopy conductance (Proportion) 22 22 Soil moisture (kg m-3) 26 26 Wilting point (kg m-3) -# 23-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.220.table eccodes-2.16.0/definitions/grib2/tables/0/4.220.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.220.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.220.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.220, Horizontal dimension processed 0 0 Latitude 1 1 Longitude diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.221.table eccodes-2.16.0/definitions/grib2/tables/0/4.221.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.221.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.221.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.221, Treatment of missing data 0 0 Not included 1 1 Extrapolated diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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) @@ -10,7 +9,5 @@ 8 8 Direct evaporation cease (soil moisture) (Proportion) 9 9 Soil porosity (Proportion) 12 12 Transpiration stress-onset (soil moisture) (kg m-3) -# 11-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.3.0.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.3.0.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.3.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.3.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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) @@ -8,7 +7,5 @@ 6 6 Scaled skin temperature (Numeric) 7 7 Cloud mask (Code table 4.217) 8 8 Pixel scene type (Code table 4.218) -# 9-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.230.table eccodes-2.16.0/definitions/grib2/tables/0/4.230.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.230.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.230.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -#Code figure Code figure Meaning 0 0 Ozone 1 1 Water vapour 2 2 Methane @@ -60,9 +59,7 @@ 10021 10021 Benzene 10022 10022 Toluene 10023 10023 Xylene -#10024-10499 10024-10499 reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides,...) 10500 10500 Dimethyl sulphide -#10501-20000 10501-20000 Reserved 20001 20001 Hydrogen chloride 20002 20002 CFC-11 20003 20003 CFC-12 diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.3.1.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.3.1.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.3.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.3.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,11 +1,8 @@ -# 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-1) 5 5 Estimated v component of wind (m s-1) -# 6-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.2.table eccodes-2.16.0/definitions/grib2/tables/0/4.2.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.2.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -# CODE TABLE 4.2, Parameter number by product discipline and parameter category -# 4 4 unknown -# 151 151 unknown -# 192 192 unknown -# 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.3.table eccodes-2.16.0/definitions/grib2/tables/0/4.3.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.3, Type of generating process 0 0 Analysis 1 1 Initialization 2 2 Forecast @@ -8,6 +7,4 @@ 6 6 Forecast error 7 7 Analysis error 8 8 Observation -# 9-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.4.table eccodes-2.16.0/definitions/grib2/tables/0/4.4.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.4.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.4.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.4, Indicator of unit of time range 0 m Minute 1 h Hour 2 D Day @@ -11,6 +10,4 @@ 11 6h 6 hours 12 12h 12 hours 13 s Second -# 14-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.5.table eccodes-2.16.0/definitions/grib2/tables/0/4.5.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.5.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.5.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -#Code table 4.5: Fixed surface types and units 0 0 Reserved 1 sfc Ground or water surface 2 2 Cloud base level @@ -9,9 +8,7 @@ 7 7 Tropopause 8 sfc Nominal top of the atmosphere 9 9 Sea bottom -# 10-19 Reserved 20 20 Isothermal level (K) -#21-99 Reserved 100 pl Isobaric surface (Pa) 101 sfc Mean sea level 102 102 Specific altitude above mean sea level (m) @@ -24,10 +21,6 @@ 109 pv Potential vorticity surface (K m2 kg-1 s-1) 110 110 Reserved 111 ml Eta level -# 112-116 Reserved 117 117 Mixed layer depth (m) -# 118-159 Reserved 160 160 Depth below sea level (m) -#161-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.6.table eccodes-2.16.0/definitions/grib2/tables/0/4.6.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,6 @@ -# 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 -# 192 254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.7.table eccodes-2.16.0/definitions/grib2/tables/0/4.7.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.7, Derived forecast 0 0 Unweighted mean of all members 1 1 Weighted mean of all members diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.8.table eccodes-2.16.0/definitions/grib2/tables/0/4.8.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.8.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.8.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.8, Clustering Method 0 0 Anomaly correlation 1 1 Root mean square diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.91.table eccodes-2.16.0/definitions/grib2/tables/0/4.91.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.91.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.91.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.91 Category Type 0 0 Below lower limit 1 1 Above upper limit diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/4.9.table eccodes-2.16.0/definitions/grib2/tables/0/4.9.table --- eccodes-2.15.0/definitions/grib2/tables/0/4.9.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/4.9.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.9, Probability Type 0 0 Probability of event below lower limit 1 1 Probability of event above upper limit diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/5.0.table eccodes-2.16.0/definitions/grib2/tables/0/5.0.table --- eccodes-2.15.0/definitions/grib2/tables/0/5.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/5.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 5.0, Data Representation Template Number 0 0 Grid point data - simple packing 1 1 Matrix value - simple packing 2 2 Grid point data - complex packing @@ -10,7 +9,6 @@ 50 50 Spectral data -simple packing 51 51 Spherical harmonics data - complex packing 61 61 Grid point data - simple packing with logarithm pre-processing -# 192-254 Reserved for local use 255 255 Missing 40000 40000 JPEG2000 Packing 40010 40010 PNG pacling diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/5.1.table eccodes-2.16.0/definitions/grib2/tables/0/5.1.table --- eccodes-2.15.0/definitions/grib2/tables/0/5.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/5.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,3 @@ -# CODE TABLE 5.1, Type of original field values 0 0 Floating point 1 1 Integer -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/5.2.table eccodes-2.16.0/definitions/grib2/tables/0/5.2.table --- eccodes-2.15.0/definitions/grib2/tables/0/5.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/5.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,4 @@ -# CODE TABLE 5.2, Matrix coordinate value function definition 0 0 Explicit coordinate values set 1 1 Linear coordinates 11 11 Geometric coordinates -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/5.3.table eccodes-2.16.0/definitions/grib2/tables/0/5.3.table --- eccodes-2.15.0/definitions/grib2/tables/0/5.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/5.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,4 @@ -# 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) -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/5.40000.table eccodes-2.16.0/definitions/grib2/tables/0/5.40000.table --- eccodes-2.15.0/definitions/grib2/tables/0/5.40000.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/5.40000.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,3 @@ -# Code Table 5.40: Type of Compression 0 0 Lossless 1 1 Lossy -#2-254 Reserved 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/5.40.table eccodes-2.16.0/definitions/grib2/tables/0/5.40.table --- eccodes-2.15.0/definitions/grib2/tables/0/5.40.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/5.40.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,3 @@ -# Code Table 5.40: Type of Compression 0 0 Lossless 1 1 Lossy -#2-254 Reserved 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/5.4.table eccodes-2.16.0/definitions/grib2/tables/0/5.4.table --- eccodes-2.15.0/definitions/grib2/tables/0/5.4.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/5.4.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,3 @@ -# CODE TABLE 5.4, Group Splitting Method 0 0 Row by row splitting 1 1 General group splitting -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/5.5.table eccodes-2.16.0/definitions/grib2/tables/0/5.5.table --- eccodes-2.15.0/definitions/grib2/tables/0/5.5.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/5.5.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,7 +1,5 @@ -# 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 -# 192 254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/5.6.table eccodes-2.16.0/definitions/grib2/tables/0/5.6.table --- eccodes-2.15.0/definitions/grib2/tables/0/5.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/5.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 5.6, Order of Spatial Differencing 1 1 First-order spatial differencing 2 2 Second-order spatial differencing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/5.7.table eccodes-2.16.0/definitions/grib2/tables/0/5.7.table --- eccodes-2.15.0/definitions/grib2/tables/0/5.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/5.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 5.7, Precision of floating-point numbers 1 1 IEEE 32-bit (I=4 in Section 7) 2 2 IEEE 64-bit (I=8 in Section 7) diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/5.8.table eccodes-2.16.0/definitions/grib2/tables/0/5.8.table --- eccodes-2.15.0/definitions/grib2/tables/0/5.8.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/5.8.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,3 +1,2 @@ -# CODE TABLE 5.8, lossless compression method 0 no no compression method 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/5.9.table eccodes-2.16.0/definitions/grib2/tables/0/5.9.table --- eccodes-2.15.0/definitions/grib2/tables/0/5.9.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/5.9.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 5.8, pre-processing 0 no no pre-processing 1 logarithm logarithm 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/0/6.0.table eccodes-2.16.0/definitions/grib2/tables/0/6.0.table --- eccodes-2.15.0/definitions/grib2/tables/0/6.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/6.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,7 +1,5 @@ -# 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 -# 2 253 A bit map pre-determined 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 -Nru eccodes-2.15.0/definitions/grib2/tables/0/stepType.table eccodes-2.16.0/definitions/grib2/tables/0/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/0/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/0/stepType.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -# CODE TABLE Step Type - -0 instant Instant -1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/0.0.table eccodes-2.16.0/definitions/grib2/tables/1/0.0.table --- eccodes-2.15.0/definitions/grib2/tables/1/0.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/0.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,10 +1,6 @@ -#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 Space products -# 4-9 Reserved 10 10 Oceanographic products -# 11-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/1.0.table eccodes-2.16.0/definitions/grib2/tables/1/1.0.table --- eccodes-2.15.0/definitions/grib2/tables/1/1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,7 +1,5 @@ -# Code Table 1.0: GRIB Master Tables Version Number 0 0 Experimental 1 1 Initial operational version number 2 2 Previous operational version number 3 3 Current operational version number implemented on 2 November 2005 -# 4-254 Future operational version numbers 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 -Nru eccodes-2.15.0/definitions/grib2/tables/1/1.1.table eccodes-2.16.0/definitions/grib2/tables/1/1.1.table --- eccodes-2.15.0/definitions/grib2/tables/1/1.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/1.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,2 @@ -# 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 -Nru eccodes-2.15.0/definitions/grib2/tables/1/1.2.table eccodes-2.16.0/definitions/grib2/tables/1/1.2.table --- eccodes-2.15.0/definitions/grib2/tables/1/1.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/1.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,5 @@ -# 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-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/1.3.table eccodes-2.16.0/definitions/grib2/tables/1/1.3.table --- eccodes-2.15.0/definitions/grib2/tables/1/1.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/1.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,10 +1,7 @@ -# 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 TIGGE Operational products 5 5 TIGGE test products -# 4-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/1.4.table eccodes-2.16.0/definitions/grib2/tables/1/1.4.table --- eccodes-2.15.0/definitions/grib2/tables/1/1.4.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/1.4.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 1.4, Type of data 0 an Analysis products 1 fc Forecast products 2 af Analysis and forecast products @@ -8,6 +7,4 @@ 6 sa Processed satellite observations 7 ra Processed radar observations 8 ep Event Probability -# 8-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/3.0.table eccodes-2.16.0/definitions/grib2/tables/1/3.0.table --- eccodes-2.15.0/definitions/grib2/tables/1/3.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/3.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,3 @@ -# 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 -Nru eccodes-2.15.0/definitions/grib2/tables/1/3.10.table eccodes-2.16.0/definitions/grib2/tables/1/3.10.table --- eccodes-2.15.0/definitions/grib2/tables/1/3.10.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/3.10.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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 diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/3.11.table eccodes-2.16.0/definitions/grib2/tables/1/3.11.table --- eccodes-2.15.0/definitions/grib2/tables/1/3.11.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/3.11.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 3.11, Interpretation of list of numbers defining number of points 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 diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/3.15.table eccodes-2.16.0/definitions/grib2/tables/1/3.15.table --- eccodes-2.15.0/definitions/grib2/tables/1/3.15.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/3.15.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 3.15, Physical meaning of vertical coordinate 20 20 Temperature K 100 100 Pressure Pa 101 101 Pressure deviation from mean sea level Pa diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/3.1.table eccodes-2.16.0/definitions/grib2/tables/1/3.1.table --- eccodes-2.15.0/definitions/grib2/tables/1/3.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/3.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,43 +1,26 @@ -# 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-9 Reserved 10 10 Mercator -# 11-19 Reserved 20 20 Polar stereographic can be south or north -# 21-29 Reserved 30 30 Lambert Conformal can be secant or tangent, conical or bipolar 31 31 Albers equal-area -# 32-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-89 Reserved 90 90 Space view perspective orthographic -# 91-99 Reserved 100 100 Triangular grid based on an icosahedron -# 101-109 Reserved 110 110 Equatorial azimuthal equidistant projection -# 111-119 Reserved 120 120 Azimuth-range projection -# 121-129 Reserved 130 130 Irregular latitude/longitude grid -# 131-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 -Nru eccodes-2.15.0/definitions/grib2/tables/1/3.20.table eccodes-2.16.0/definitions/grib2/tables/1/3.20.table --- eccodes-2.15.0/definitions/grib2/tables/1/3.20.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/3.20.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,3 @@ -# 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 -Nru eccodes-2.15.0/definitions/grib2/tables/1/3.21.table eccodes-2.16.0/definitions/grib2/tables/1/3.21.table --- eccodes-2.15.0/definitions/grib2/tables/1/3.21.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/3.21.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,4 @@ -# CODE TABLE 3.21, Vertical dimension coordinate values definition 0 0 Explicit coordinate values set 1 1 Linear coordinates -# 2-10 Reserved 11 11 Geometric coordinates -# 12-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/3.2.table eccodes-2.16.0/definitions/grib2/tables/1/3.2.table --- eccodes-2.15.0/definitions/grib2/tables/1/3.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/3.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 3.2, Shape of the Earth 0 0 Earth assumed spherical with radius = 6,367,470.0 m 1 1 Earth assumed spherical with radius specified 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) @@ -6,6 +5,4 @@ 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.257222101) 5 5 Earth assumed represented by WGS84 (as used by ICAO since 1998) 6 6 Earth assumed spherical with radius of 6,371,229.0 m -# 7-191 Reserved -# 192- 254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/3.3.table eccodes-2.16.0/definitions/grib2/tables/1/3.3.table --- eccodes-2.15.0/definitions/grib2/tables/1/3.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/3.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# FLAG TABLE 3.3, Resolution and Component Flags 3 0 i direction increments not given 3 1 i direction increments given 4 0 j direction increments not given diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/3.4.table eccodes-2.16.0/definitions/grib2/tables/1/3.4.table --- eccodes-2.15.0/definitions/grib2/tables/1/3.4.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/3.4.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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 diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/3.5.table eccodes-2.16.0/definitions/grib2/tables/1/3.5.table --- eccodes-2.15.0/definitions/grib2/tables/1/3.5.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/3.5.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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 diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/3.6.table eccodes-2.16.0/definitions/grib2/tables/1/3.6.table --- eccodes-2.15.0/definitions/grib2/tables/1/3.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/3.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,2 +1 @@ -# CODE TABLE 3.6, Spectral data representation type 1 1 The Associated Legendre Functions of the first kind are defined by: diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/3.7.table eccodes-2.16.0/definitions/grib2/tables/1/3.7.table --- eccodes-2.15.0/definitions/grib2/tables/1/3.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/3.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,11 +1,3 @@ -# Code Table 3.7: Spectral data representation mode 0 0 Reserved -1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) -# 2-254 Reserved +1 1 The complex numbers Fnm 255 255 Missing -# Note: -# -#(1) Values of N(m) for common truncations cases: -# Triangular M = J = K, N(m) = J -# Rhomboidal K = J + M, N(m) = J+m -# Trapezoidal K = J, K > M, N(m) = J diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/3.8.table eccodes-2.16.0/definitions/grib2/tables/1/3.8.table --- eccodes-2.15.0/definitions/grib2/tables/1/3.8.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/3.8.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,5 @@ -# 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 -Nru eccodes-2.15.0/definitions/grib2/tables/1/3.9.table eccodes-2.16.0/definitions/grib2/tables/1/3.9.table --- eccodes-2.15.0/definitions/grib2/tables/1/3.9.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/3.9.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,3 +1,2 @@ -# 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 diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.0.table eccodes-2.16.0/definitions/grib2/tables/1/4.0.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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 forecast based on all ensemble members at a horizontal level or in a horizontal layer at a point in time diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.1.0.table eccodes-2.16.0/definitions/grib2/tables/1/4.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,3 @@ -#Discipline 0: Meteorological products -#Category Description 0 0 Temperature 1 1 Moisture 2 2 Momentum @@ -21,10 +19,8 @@ 18 18 Nuclear/radiology 19 19 Physical atmospheric properties 20 20 Atmospheric chemical or physical constituents -# 20-189 Reserved 190 190 CCITT IA5 string 191 191 Miscellaneous -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.10.table eccodes-2.16.0/definitions/grib2/tables/1/4.10.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.10.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.10.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.10, Type of statistical processing 0 avg Average 1 accum Accumulation @@ -10,5 +9,4 @@ 7 cov Covariance (Temporal variance) 8 8 Difference (Value at the start of time range minus value at the end) 9 ratio Ratio -# 192 254 Reserved for local use 255 missing Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.1.10.table eccodes-2.16.0/definitions/grib2/tables/1/4.1.10.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.1.10.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.1.10.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,12 +1,8 @@ -#Discipline 10: Oceanographic Products -#Category Description 0 0 Waves 1 1 Currents 2 2 Ice 3 3 Surface Properties 4 4 Sub-surface Properties -# 5-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.1.1.table eccodes-2.16.0/definitions/grib2/tables/1/4.1.1.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.1.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.1.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,9 +1,5 @@ -#Discipline 1: Hydrological products -#Category Description 0 0 Hydrology basic products 1 1 Hydrology probabilities -#2-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.11.table eccodes-2.16.0/definitions/grib2/tables/1/4.11.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.11.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.11.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,9 +1,7 @@ -# CODE TABLE 4.11, Type of time intervals 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 -# 192 254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.1.2.table eccodes-2.16.0/definitions/grib2/tables/1/4.1.2.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.1.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.1.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,11 +1,7 @@ -#Discipline 2: Land Surface Products -#Category Description 0 0 Vegetation/Biomass 1 1 Agri-/aquacultural Special Products 2 2 Transportation-related Products 3 3 Soil Products -# 4-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.12.table eccodes-2.16.0/definitions/grib2/tables/1/4.12.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.12.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.12.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.12, Operating Mode 0 0 Maintenance Mode 1 1 Clear air diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.1.3.table eccodes-2.16.0/definitions/grib2/tables/1/4.1.3.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.1.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.1.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,9 +1,5 @@ -#Discipline 3: Space Products -#Category Description 0 0 Image format products 1 1 Quantitative products -# 2-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.13.table eccodes-2.16.0/definitions/grib2/tables/1/4.13.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.13, Quality Control Indicator 0 0 No quality control applied 1 1 Quality control applied diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.14.table eccodes-2.16.0/definitions/grib2/tables/1/4.14.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.14.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.14.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.14, Clutter Filter Indicator 0 0 No clutter filter used 1 1 Clutter filter used diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.151.table eccodes-2.16.0/definitions/grib2/tables/1/4.151.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.151.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.151.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.15, Confidence level units 0 0 bad 1 1 suspect diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.15.table eccodes-2.16.0/definitions/grib2/tables/1/4.15.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.15.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.15.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.15, Type of auxiliary information 0 0 Confidence level ('grib2/4.151.table') 1 1 Delta time (seconds) diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.1.table eccodes-2.16.0/definitions/grib2/tables/1/4.1.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.1, Category of parameters by product discipline 0 0 Temperature 1 1 Moisture 3 3 Mass diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.0.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.0.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# Product Discipline 0: Meteorological products, Parameter Category 0: Temperature 0 0 Temperature (K) 1 1 Virtual temperature (K) 2 2 Potential temperature (K) @@ -17,7 +16,5 @@ 15 15 Virtual potential temperature (K) 16 16 Snow phase change heat flux (W m-2) 17 17 Skin Temperature (K) -#17-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,3 @@ -# 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 -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.14.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.14.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.14.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.14.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,7 +1,4 @@ -# Product Discipline 0: Meteorological products, Parameter Category 14: Trace Gases 0 0 Total ozone (Dobson) 1 1 Ozone mixing ratio (kg kg-1) -# 2-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.15.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.15.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.15.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.15.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# Product Discipline 0 - Meteorological products, Parameter Category 15: Radar 0 0 Base spectrum width (m s-1) 1 1 Base reflectivity (dB) 2 2 Base radial velocity (m s-1) @@ -8,7 +7,5 @@ 6 6 Radar spectra (1) (-) 7 7 Radar spectra (2) (-) 8 8 Radar spectra (3) (-) -# 9-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.18.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.18.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.18.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.18.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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) @@ -8,7 +7,5 @@ 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-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.190.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.190.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.190.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.190.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,3 @@ -# Product Discipline 0: Meteorological products, Parameter Category 190: CCITT IA5 string 0 0 Arbitrary text string (CCITTIA5) -# 1-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.191.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.191.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.191.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.191.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,3 @@ -# Product Discipline 0: Meteorological products, Parameter Category 191: Miscellaneous 0 0 Seconds prior to initial reference time (defined in Section 1) (s) -# 1-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# Product Discipline 0: Meteorological products, Parameter Category 19: Physical atmospheric properties 0 0 Visibility (m) 1 1 Albedo (%) 2 2 Thunderstorm probability (%) @@ -18,7 +17,5 @@ 16 16 Contrail base (m) 17 17 Maximum snow albedo (%) 18 18 Snow free albedo (%) -# 19-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# Product Discipline 0: Meteorological products, Parameter Category 1: Moisture 0 0 Specific humidity (kg kg-1) 1 1 Relative humidity (%) 2 2 Humidity mixing ratio (kg kg-1) @@ -56,7 +55,5 @@ 58 58 Convective snowfall rate (m s-1) 59 59 Large scale snowfall rate (m s-1) 60 60 Snow depth water equivalent (kg m-2) -#47-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.201.table eccodes-2.16.0/definitions/grib2/tables/1/4.201.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.201.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.201.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.201, Precipitation Type 1 1 Rain 2 2 Thunderstorm diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.20.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.20.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.20.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.20.table 2020-01-16 10:21:52.000000000 +0000 @@ -8,6 +8,4 @@ 7 7 Chemical gross production rate of mole concentration mole.m-3.s-1 8 8 Chemical gross destruction rate of mole concentration mole.m-3.s-1 9 9 Surface dry deposition mass flux into stomata kg.m-2.s-1 -#10-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.2.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.2.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,4 @@ -# Product Discipline 0: Meteorological products, Parameter Category 2: Momentum -0 0 Wind direction [from which blowing] (deg true) +0 0 Wind direction (from which blowing) (deg true) 1 1 Wind speed (m s-1) 2 2 u-component of wind (m s-1) 3 3 v-component of wind (m s-1) @@ -7,8 +6,8 @@ 5 5 Velocity potential (m2 s-1) 6 6 Montgomery stream function (m2 s-2) 7 7 Sigma coordinate vertical velocity (s-1) -8 8 Vertical velocity [pressure] (Pa s-1) -9 9 Vertical velocity [geometric] (m s-1) +8 8 Vertical velocity (pressure) (Pa s-1) +9 9 Vertical velocity (geometric) (m s-1) 10 10 Absolute vorticity (s-1) 11 11 Absolute divergence (s-1) 12 12 Relative vorticity (s-1) @@ -21,7 +20,7 @@ 19 19 Wind mixing energy (J) 20 20 Boundary layer dissipation (W m-2) 21 21 Maximum wind speed (m s-1) -22 22 Wind speed [gust] (m s-1) +22 22 Wind speed (gust) (m s-1) 23 23 u-component of wind (gust) (m s-1) 24 24 v-component of wind (gust) (m s-1) 25 25 Vertical speed shear (s-1) @@ -30,6 +29,4 @@ 28 28 V-component storm motion (m s-1) 29 29 Drag coefficient (Numeric) 30 30 Frictional velocity (m s-1) -# 31-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.202.table eccodes-2.16.0/definitions/grib2/tables/1/4.202.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.202.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.202.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.202, Precipitable water category 192 192 Reserved for local use 193 193 Reserved for local use diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.3.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.3.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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-1) @@ -19,7 +18,5 @@ 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-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.203.table eccodes-2.16.0/definitions/grib2/tables/1/4.203.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.203.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.203.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.203, Cloud type 0 0 Clear 1 1 Cumulonimbus 2 2 Stratus @@ -21,5 +20,4 @@ 19 19 Cirrocumulus - ground based fog beneath the lowest layer 20 20 Cirrus - ground based fog beneath the lowest layer 191 191 Unknown -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.4.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.4.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.4.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.4.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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) @@ -8,7 +7,5 @@ 6 6 Radiance (with respect to wave length) (W m-3 sr-1) 7 7 Downward short-wave radiation flux (W m-2) 9 8 Upward short-wave radiation flux (W m-2) -# 9-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.204.table eccodes-2.16.0/definitions/grib2/tables/1/4.204.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.204.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.204.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.204, Thunderstorm coverage 0 0 None 1 1 Isolated (1% - 2%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.5.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.5.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.5.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.5.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,11 +1,8 @@ -# 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) -# 5-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.205.table eccodes-2.16.0/definitions/grib2/tables/1/4.205.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.205.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.205.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.205, Aerosol type 0 0 Aerosol not present 1 1 Aerosol present diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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 (%) @@ -24,7 +23,5 @@ 22 22 Cloud cover (%) 23 23 Cloud ice mixing ratio (kg kg-1) 24 24 Sunshine (Numeric) -# 23-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.206.table eccodes-2.16.0/definitions/grib2/tables/1/4.206.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.206.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.206.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.206, Volcanic ash 0 0 Not present 1 1 Present diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.7.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.7.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.0.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.0.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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) @@ -12,7 +11,5 @@ 10 10 Surface lifted index (K) 11 11 Best (4-layer) lifted index (K) 12 12 Richardson number (Numeric) -#13-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.207.table eccodes-2.16.0/definitions/grib2/tables/1/4.207.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.207.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.207.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.207, Icing 0 0 None 1 1 Light diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.208.table eccodes-2.16.0/definitions/grib2/tables/1/4.208.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.208.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.208.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.208, Turbulence 0 0 None (smooth) 1 1 Light diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.209.table eccodes-2.16.0/definitions/grib2/tables/1/4.209.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.209.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.209.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.209, Planetary boundary layer regime 1 1 Stable 2 2 Mechanically driven turbulence diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.10.0.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.10.0.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.10.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.10.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# Product Discipline 10: Oceanographic products, Parameter Category 0: Waves 0 0 Wave spectra (1) (-) 1 1 Wave spectra (2) (-) 2 2 Wave spectra (3) (-) @@ -13,8 +12,6 @@ 11 11 Primary wave mean period (s) 12 12 Secondary wave direction (Degree true) 13 13 Secondary wave mean period (s) -# 14-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.10.1.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.10.1.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.10.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.10.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,5 @@ -# Product Discipline 10: Oceanographic products, Parameter Category 1: Currents 0 0 Current direction (Degree true) 1 1 Current speed (m s-1) 2 2 u-component of current (m s-1) 3 3 v-component of current (m s-1) -# 4-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.10.2.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.10.2.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.10.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.10.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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) @@ -7,6 +6,4 @@ 5 5 v-component of ice drift (m s-1) 6 6 Ice growth rate (m s-1) 7 7 Ice divergence (s-1) -# 8-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.10.3.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.10.3.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.10.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.10.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,3 @@ -# 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-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.10.4.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.10.4.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.10.4.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.10.4.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,9 +1,6 @@ -# Product Discipline 10: Oceanographic products, Parameter Category 4: Sub-surface Properties 0 0 Main thermocline depth (m) 1 1 Main thermocline anomaly (m) 2 2 Transient thermocline depth (m) 3 3 Salinity (kg kg-1) -# 4-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# Product Discipline 1: Hydrologic 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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.210.table eccodes-2.16.0/definitions/grib2/tables/1/4.210.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.210.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.210.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.210, Contrail intensity 0 0 Contrail not present 1 1 Contrail present diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.1.1.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.1.1.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.1.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.1.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,5 @@ -# Product Discipline 1: Hydrologic products, Parameter Category 1: Hydrology probabilities 0 0 Conditional percent precipitation amount fractile for an overall period (Encoded as an accumulation) (kg m-2) 1 1 Percent 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 -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.211.table eccodes-2.16.0/definitions/grib2/tables/1/4.211.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.211.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.211.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.211, Contrail engine type 0 0 Low bypass 1 1 High bypass diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.212.table eccodes-2.16.0/definitions/grib2/tables/1/4.212.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.212.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.212.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.212, Land Use 1 1 Urban land 2 2 Agriculture diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.213.table eccodes-2.16.0/definitions/grib2/tables/1/4.213.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.213.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.213.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.213, Soil type 1 1 Sand 2 2 Loamy sand diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.215.table eccodes-2.16.0/definitions/grib2/tables/1/4.215.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.215.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.215.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.215, Remotely Sensed Snow Coverage 50 50 No-snow/no-cloud 100 100 Clouds diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.216.table eccodes-2.16.0/definitions/grib2/tables/1/4.216.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.216.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.216.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,3 +1,2 @@ -# CODE TABLE 4.216, Elevation of Snow Covered Terrain 254 254 Clouds 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.217.table eccodes-2.16.0/definitions/grib2/tables/1/4.217.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.217.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.217.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.217, Cloud mask type 0 0 Clear over water 1 1 Clear over land diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# Product Discipline 2: Land surface products, Parameter Category 0: Vegetation/Biomass 0 0 Land cover (0=land, 1=sea) (Proportion) 1 1 Surface roughness (m) 2 2 Soil temperature (K) @@ -23,7 +22,5 @@ 21 21 Humidity parameter in canopy conductance (Proportion) 22 22 Soil moisture (kg m-3) 26 26 Wilting point (kg m-3) -# 23-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.220.table eccodes-2.16.0/definitions/grib2/tables/1/4.220.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.220.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.220.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.220, Horizontal dimension processed 0 0 Latitude 1 1 Longitude diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.221.table eccodes-2.16.0/definitions/grib2/tables/1/4.221.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.221.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.221.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.221, Treatment of missing data 0 0 Not included 1 1 Extrapolated diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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) @@ -10,7 +9,5 @@ 8 8 Direct evaporation cease (soil moisture) (Proportion) 9 9 Soil porosity (Proportion) 12 12 Transpiration stress-onset (soil moisture) (kg m-3) -# 11-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.3.0.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.3.0.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.3.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.3.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# 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) @@ -8,7 +7,5 @@ 6 6 Scaled skin temperature (Numeric) 7 7 Cloud mask (Code table 4.217) 8 8 Pixel scene type (Code table 4.218) -# 9-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.3.1.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.3.1.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.3.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.3.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,11 +1,8 @@ -# 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-1) 5 5 Estimated v component of wind (m s-1) -# 6-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.2.table eccodes-2.16.0/definitions/grib2/tables/1/4.2.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.2.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -# CODE TABLE 4.2, Parameter number by product discipline and parameter category -# 4 4 unknown -# 151 151 unknown -# 192 192 unknown -# 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.3.table eccodes-2.16.0/definitions/grib2/tables/1/4.3.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.3, Type of generating process 0 0 Analysis 1 1 Initialization 2 2 Forecast @@ -8,6 +7,4 @@ 6 6 Forecast error 7 7 Analysis error 8 8 Observation -# 9-191 Reserved -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.4.table eccodes-2.16.0/definitions/grib2/tables/1/4.4.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.4.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.4.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.4, Indicator of unit of time range 0 m Minute 1 h Hour 2 D Day @@ -11,6 +10,4 @@ 11 6h 6 hours 12 12h 12 hours 13 s Second -# 14-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.5.table eccodes-2.16.0/definitions/grib2/tables/1/4.5.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.5.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.5.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -#Code table 4.5: Fixed surface types and units 0 0 Reserved 1 sfc Ground or water surface 2 2 Cloud base level @@ -9,9 +8,7 @@ 7 7 Tropopause 8 sfc Nominal top of the atmosphere 9 9 Sea bottom -# 10-19 Reserved 20 20 Isothermal level (K) -#21-99 Reserved 100 pl Isobaric surface (Pa) 101 sfc Mean sea level 102 102 Specific altitude above mean sea level (m) @@ -24,10 +21,6 @@ 109 pv Potential vorticity surface (K m2 kg-1 s-1) 110 110 Reserved 111 111 Eta level -# 112-116 Reserved 117 117 Mixed layer depth (m) -# 118-159 Reserved 160 160 Depth below sea level (m) -#161-191 Reserved -#192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.6.table eccodes-2.16.0/definitions/grib2/tables/1/4.6.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,6 @@ -# 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 -# 192 254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.7.table eccodes-2.16.0/definitions/grib2/tables/1/4.7.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.7, Derived forecast 0 0 Unweighted mean of all members 1 1 Weighted mean of all members diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.8.table eccodes-2.16.0/definitions/grib2/tables/1/4.8.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.8.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.8.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.8, Clustering Method 0 0 Anomaly correlation 1 1 Root mean square diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.91.table eccodes-2.16.0/definitions/grib2/tables/1/4.91.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.91.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.91.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.91 Category Type 0 0 Below lower limit 1 1 Above upper limit diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/4.9.table eccodes-2.16.0/definitions/grib2/tables/1/4.9.table --- eccodes-2.15.0/definitions/grib2/tables/1/4.9.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/4.9.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 4.9, Probability Type 0 0 Probability of event below lower limit 1 1 Probability of event above upper limit diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/5.0.table eccodes-2.16.0/definitions/grib2/tables/1/5.0.table --- eccodes-2.15.0/definitions/grib2/tables/1/5.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/5.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 5.0, Data Representation Template Number 0 0 Grid point data - simple packing 1 1 Matrix value - simple packing 2 2 Grid point data - complex packing @@ -10,7 +9,6 @@ 50 50 Spectral data -simple packing 51 51 Spherical harmonics data - complex packing 61 61 Grid point data - simple packing with logarithm pre-processing -# 192-254 Reserved for local use 255 255 Missing 40000 40000 JPEG2000 Packing 40010 40010 PNG pacling diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/5.1.table eccodes-2.16.0/definitions/grib2/tables/1/5.1.table --- eccodes-2.15.0/definitions/grib2/tables/1/5.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/5.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,3 @@ -# CODE TABLE 5.1, Type of original field values 0 0 Floating point 1 1 Integer -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/5.2.table eccodes-2.16.0/definitions/grib2/tables/1/5.2.table --- eccodes-2.15.0/definitions/grib2/tables/1/5.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/5.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,4 @@ -# CODE TABLE 5.2, Matrix coordinate value function definition 0 0 Explicit coordinate values set 1 1 Linear coordinates 11 11 Geometric coordinates -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/5.3.table eccodes-2.16.0/definitions/grib2/tables/1/5.3.table --- eccodes-2.15.0/definitions/grib2/tables/1/5.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/5.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,4 @@ -# 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) -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/5.40000.table eccodes-2.16.0/definitions/grib2/tables/1/5.40000.table --- eccodes-2.15.0/definitions/grib2/tables/1/5.40000.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/5.40000.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,3 @@ -# Code Table 5.40: Type of Compression 0 0 Lossless 1 1 Lossy -#2-254 Reserved 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/5.40.table eccodes-2.16.0/definitions/grib2/tables/1/5.40.table --- eccodes-2.15.0/definitions/grib2/tables/1/5.40.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/5.40.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,3 @@ -# Code Table 5.40: Type of Compression 0 0 Lossless 1 1 Lossy -#2-254 Reserved 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/5.4.table eccodes-2.16.0/definitions/grib2/tables/1/5.4.table --- eccodes-2.15.0/definitions/grib2/tables/1/5.4.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/5.4.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,3 @@ -# CODE TABLE 5.4, Group Splitting Method 0 0 Row by row splitting 1 1 General group splitting -# 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/5.5.table eccodes-2.16.0/definitions/grib2/tables/1/5.5.table --- eccodes-2.15.0/definitions/grib2/tables/1/5.5.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/5.5.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,7 +1,5 @@ -# 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 -# 192 254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/5.6.table eccodes-2.16.0/definitions/grib2/tables/1/5.6.table --- eccodes-2.15.0/definitions/grib2/tables/1/5.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/5.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 5.6, Order of Spatial Differencing 1 1 First-order spatial differencing 2 2 Second-order spatial differencing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/5.7.table eccodes-2.16.0/definitions/grib2/tables/1/5.7.table --- eccodes-2.15.0/definitions/grib2/tables/1/5.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/5.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 5.7, Precision of floating-point numbers 1 1 IEEE 32-bit (I=4 in Section 7) 2 2 IEEE 64-bit (I=8 in Section 7) diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/5.8.table eccodes-2.16.0/definitions/grib2/tables/1/5.8.table --- eccodes-2.15.0/definitions/grib2/tables/1/5.8.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/5.8.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,3 +1,2 @@ -# CODE TABLE 5.8, lossless compression method 0 no no compression method 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/5.9.table eccodes-2.16.0/definitions/grib2/tables/1/5.9.table --- eccodes-2.15.0/definitions/grib2/tables/1/5.9.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/5.9.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,3 @@ -# CODE TABLE 5.8, pre-processing 0 no no pre-processing 1 logarithm logarithm 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/1/6.0.table eccodes-2.16.0/definitions/grib2/tables/1/6.0.table --- eccodes-2.15.0/definitions/grib2/tables/1/6.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/6.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,7 +1,5 @@ -# 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 -# 2 253 A bit map pre-determined 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 -Nru eccodes-2.15.0/definitions/grib2/tables/1/stepType.table eccodes-2.16.0/definitions/grib2/tables/1/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/1/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/1/stepType.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -# CODE TABLE Step Type - -0 instant Instant -1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/10/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/10/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/10/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/10/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/10/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/10/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/10/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/10/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/10/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/10/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/10/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/10/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 Percent frozen precipitation (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/10/4.2.0.2.table eccodes-2.16.0/definitions/grib2/tables/10/4.2.0.2.table --- eccodes-2.15.0/definitions/grib2/tables/10/4.2.0.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/10/4.2.0.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category. Product discipline 0 - Meteorological products, parameter category 2: momentum -0 0 Wind direction (from which blowing) (degree true) (deg) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/10/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/10/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/10/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/10/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/10/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/10/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/10/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/10/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/10/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/10/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/10/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/10/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/10/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/10/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/10/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/10/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category. Product discipline 2 - Land surface products, parameter category 3: soil products -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/10/4.2.table eccodes-2.16.0/definitions/grib2/tables/10/4.2.table --- eccodes-2.15.0/definitions/grib2/tables/10/4.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/10/4.2.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -# CODE TABLE 4.2, Parameter number by product discipline and parameter category -# 4 4 unknown -# 151 151 unknown -# 192 192 unknown -# 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/10/stepType.table eccodes-2.16.0/definitions/grib2/tables/10/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/10/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/10/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/11/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/11/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/11/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/11/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/11/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/11/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/11/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/11/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/11/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/11/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/11/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/11/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/11/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/11/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/11/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/11/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/11/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/11/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/11/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/11/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/11/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/11/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/11/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/11/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/11/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/11/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/11/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/11/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category. Product discipline 2 - Land surface products, parameter category 3: soil products -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/11/stepType.table eccodes-2.16.0/definitions/grib2/tables/11/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/11/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/11/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/12/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/12/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/12/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/12/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/12/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/12/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/12/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/12/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) @@ -24,9 +24,9 @@ 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)) +25 25 Weather (Code table 4.225) +26 26 Convective outlook (Code table 4.224) +27 27 Icing scenario (Code table 4.227) # 28-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/12/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/12/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/12/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/12/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/12/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/12/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/12/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/12/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/12/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/12/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/12/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/12/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Code table 4.2 - Parameter number by product discipline and parameter category 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/12/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/12/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/12/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/12/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/12/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/12/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/12/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/12/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/12/stepType.table eccodes-2.16.0/definitions/grib2/tables/12/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/12/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/12/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/13/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/13/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/13/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/13/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/13/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/13/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/13/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/13/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) @@ -24,9 +24,9 @@ 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)) +25 25 Weather (Code table 4.225) +26 26 Convective outlook (Code table 4.224) +27 27 Icing scenario (Code table 4.227) # 28-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/13/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/13/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/13/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/13/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/13/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/13/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/13/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/13/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/13/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/13/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/13/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/13/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Code table 4.2 - Parameter number by product discipline and parameter category 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/13/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/13/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/13/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/13/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/13/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/13/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/13/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/13/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/13/stepType.table eccodes-2.16.0/definitions/grib2/tables/13/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/13/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/13/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/14/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/14/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/14/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/14/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/14/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/14/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/14/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/14/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) @@ -24,9 +24,9 @@ 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)) +25 25 Weather (Code table 4.225) +26 26 Convective outlook (Code table 4.224) +27 27 Icing scenario (Code table 4.227) # 28-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/14/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/14/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/14/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/14/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/14/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/14/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/14/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/14/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/14/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/14/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/14/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/14/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Code table 4.2 - Parameter number by product discipline and parameter category 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/14/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/14/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/14/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/14/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/14/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/14/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/14/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/14/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/14/stepType.table eccodes-2.16.0/definitions/grib2/tables/14/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/14/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/14/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/15/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/15/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/15/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/15/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/15/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/15/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/15/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/15/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) @@ -24,9 +24,9 @@ 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)) +25 25 Weather (Code table 4.225) +26 26 Convective outlook (Code table 4.224) +27 27 Icing scenario (Code table 4.227) # 28-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/15/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/15/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/15/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/15/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/15/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/15/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/15/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/15/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/15/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/15/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/15/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/15/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Code table 4.2 - Parameter number by product discipline and parameter category 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/15/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/15/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/15/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/15/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/15/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/15/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/15/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/15/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/15/stepType.table eccodes-2.16.0/definitions/grib2/tables/15/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/15/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/15/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/16/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/16/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/16/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/16/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/16/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/16/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/16/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/16/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) @@ -24,9 +24,9 @@ 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)) +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-191 Reserved # 192-254 Reserved for local use diff -Nru eccodes-2.15.0/definitions/grib2/tables/16/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/16/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/16/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/16/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/16/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/16/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/16/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/16/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/16/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/16/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/16/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/16/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Code table 4.2 - Parameter number by product discipline and parameter category 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/16/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/16/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/16/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/16/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/16/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/16/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/16/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/16/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/16/stepType.table eccodes-2.16.0/definitions/grib2/tables/16/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/16/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/16/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/17/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/17/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/17/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/17/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/17/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/17/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/17/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/17/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) @@ -24,9 +24,9 @@ 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/17/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/17/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/17/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/17/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/17/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/17/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/17/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/17/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/17/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/17/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/17/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/17/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Code table 4.2 - Parameter number by product discipline and parameter category 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/17/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/17/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/17/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/17/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/17/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/17/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/17/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/17/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/17/stepType.table eccodes-2.16.0/definitions/grib2/tables/17/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/17/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/17/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/18/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/18/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/18/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/18/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/18/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/18/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/18/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/18/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) @@ -24,9 +24,9 @@ 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/18/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/18/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/18/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/18/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/18/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/18/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/18/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/18/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/18/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/18/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/18/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/18/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Code table 4.2 - Parameter number by product discipline and parameter category 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/18/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/18/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/18/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/18/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/18/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/18/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/18/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/18/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/18/stepType.table eccodes-2.16.0/definitions/grib2/tables/18/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/18/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/18/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/19/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/19/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/19/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/19/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/19/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/19/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/19/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/19/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) @@ -24,9 +24,9 @@ 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/19/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/19/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/19/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/19/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/19/4.2.0.20.table eccodes-2.16.0/definitions/grib2/tables/19/4.2.0.20.table --- eccodes-2.15.0/definitions/grib2/tables/19/4.2.0.20.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/19/4.2.0.20.table 2020-01-16 10:21:52.000000000 +0000 @@ -30,17 +30,17 @@ 62 62 Height of maximum mass density (m) 63 63 Column-averaged mass density in layer (kg m-3) # 64-99 Reserved -100 100 Surface area density (aerosol) (/m) +100 100 Surface area density (aerosol) (m-1) 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) +105 105 Aerosol extinction coefficient (m-1) +106 106 Aerosol absorption coefficient (m-1) 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) +109 109 Aerosol lidar extinction from satellite (m-1) +110 110 Aerosol lidar extinction from the ground (m-1) 111 111 Angstrom exponent (Numeric) # 112-191 Reserved # 192-254 Reserved for local use diff -Nru eccodes-2.15.0/definitions/grib2/tables/19/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/19/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/19/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/19/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/19/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/19/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/19/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/19/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Code table 4.2 - Parameter number by product discipline and parameter category 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/19/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/19/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/19/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/19/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/19/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/19/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/19/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/19/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/19/stepType.table eccodes-2.16.0/definitions/grib2/tables/19/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/19/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/19/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/2/3.7.table eccodes-2.16.0/definitions/grib2/tables/2/3.7.table --- eccodes-2.15.0/definitions/grib2/tables/2/3.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/2/3.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,11 +1,4 @@ # Code Table 3.7: Spectral data representation mode 0 0 Reserved -1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) -# 2-254 Reserved +1 1 The complex numbers Fnm 255 255 Missing -# Note: -# -#(1) Values of N(m) for common truncations cases: -# Triangular M = J = K, N(m) = J -# Rhomboidal K = J + M, N(m) = J+m -# Trapezoidal K = J, K > M, N(m) = J diff -Nru eccodes-2.15.0/definitions/grib2/tables/2/4.2.0.2.table eccodes-2.16.0/definitions/grib2/tables/2/4.2.0.2.table --- eccodes-2.15.0/definitions/grib2/tables/2/4.2.0.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/2/4.2.0.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Product Discipline 0: Meteorological products, Parameter Category 2: Momentum -0 0 Wind direction [from which blowing] (deg true) +0 0 Wind direction (from which blowing) (deg true) 1 1 Wind speed (m s-1) 2 2 u-component of wind (m s-1) 3 3 v-component of wind (m s-1) @@ -7,8 +7,8 @@ 5 5 Velocity potential (m2 s-1) 6 6 Montgomery stream function (m2 s-2) 7 7 Sigma coordinate vertical velocity (s-1) -8 8 Vertical velocity [pressure] (Pa s-1) -9 9 Vertical velocity [geometric] (m s-1) +8 8 Vertical velocity (pressure) (Pa s-1) +9 9 Vertical velocity (geometric) (m s-1) 10 10 Absolute vorticity (s-1) 11 11 Absolute divergence (s-1) 12 12 Relative vorticity (s-1) @@ -21,7 +21,7 @@ 19 19 Wind mixing energy (J) 20 20 Boundary layer dissipation (W m-2) 21 21 Maximum wind speed (m s-1) -22 22 Wind speed [gust] (m s-1) +22 22 Wind speed (gust) (m s-1) 23 23 u-component of wind (gust) (m s-1) 24 24 v-component of wind (gust) (m s-1) 25 25 Vertical speed shear (s-1) diff -Nru eccodes-2.15.0/definitions/grib2/tables/2/4.2.table eccodes-2.16.0/definitions/grib2/tables/2/4.2.table --- eccodes-2.15.0/definitions/grib2/tables/2/4.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/2/4.2.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -# CODE TABLE 4.2, Parameter number by product discipline and parameter category -# 4 4 unknown -# 151 151 unknown -# 192 192 unknown -# 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/2/stepType.table eccodes-2.16.0/definitions/grib2/tables/2/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/2/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/2/stepType.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -# CODE TABLE Step Type - -0 instant Instant -1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/20/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/20/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/20/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/20/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/20/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/20/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/20/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/20/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) @@ -24,9 +24,9 @@ 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/20/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/20/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/20/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/20/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/20/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/20/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/20/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/20/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/20/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/20/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/20/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/20/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Code table 4.2 - Parameter number by product discipline and parameter category 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/20/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/20/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/20/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/20/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/20/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/20/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/20/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/20/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/20/stepType.table eccodes-2.16.0/definitions/grib2/tables/20/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/20/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/20/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/21/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/21/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/21/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/21/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/21/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/21/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/21/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/21/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) @@ -24,9 +24,9 @@ 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/21/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/21/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/21/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/21/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/21/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/21/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/21/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/21/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/21/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/21/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/21/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/21/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Code table 4.2 - Parameter number by product discipline and parameter category 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/21/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/21/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/21/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/21/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/21/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/21/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/21/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/21/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/21/stepType.table eccodes-2.16.0/definitions/grib2/tables/21/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/21/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/21/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/22/4.5.table eccodes-2.16.0/definitions/grib2/tables/22/4.5.table --- eccodes-2.15.0/definitions/grib2/tables/22/4.5.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/22/4.5.table 2020-01-16 10:21:52.000000000 +0000 @@ -10,18 +10,18 @@ 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] (%) +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-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) +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-99 Reserved 100 pl Isobaric surface (Pa) 101 sfc Mean sea level @@ -30,7 +30,7 @@ 104 104 Sigma level (sigma value) 105 ml Hybrid level (-) 106 sfc Depth below land surface (m) -107 pt Isentropic [theta] level (K) +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 diff -Nru eccodes-2.15.0/definitions/grib2/tables/23/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/23/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/23/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/23/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/23/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/23/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/23/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/23/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) @@ -24,9 +24,9 @@ 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/23/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/23/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/23/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/23/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/23/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/23/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/23/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/23/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/23/4.2.10.4.table eccodes-2.16.0/definitions/grib2/tables/23/4.2.10.4.table --- eccodes-2.15.0/definitions/grib2/tables/23/4.2.10.4.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/23/4.2.10.4.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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 (psu (numeric)) +21 21 Practical salinity (Numeric) # 22-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/23/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/23/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/23/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/23/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Code table 4.2 - Parameter number by product discipline and parameter category 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/23/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/23/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/23/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/23/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/23/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/23/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/23/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/23/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/23/stepType.table eccodes-2.16.0/definitions/grib2/tables/23/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/23/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/23/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/24/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/24/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/24/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/24/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/24/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/24/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/24/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/24/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) @@ -24,9 +24,9 @@ 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)) +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) @@ -35,7 +35,7 @@ 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)) +36 36 Presence of snow squalls (Code table 4.222) # 37-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/24/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/24/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/24/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/24/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 (%) @@ -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 -Nru eccodes-2.15.0/definitions/grib2/tables/24/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/24/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/24/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/24/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/24/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/24/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/24/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/24/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Code table 4.2 - Parameter number by product discipline and parameter category 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/24/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/24/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/24/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/24/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/24/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/24/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/24/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/24/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Code table 4.2 - Parameter number by product discipline and parameter category -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/24/stepType.table eccodes-2.16.0/definitions/grib2/tables/24/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/24/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/24/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/3/3.7.table eccodes-2.16.0/definitions/grib2/tables/3/3.7.table --- eccodes-2.15.0/definitions/grib2/tables/3/3.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/3/3.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,9 +3,3 @@ 1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) # 2-254 Reserved 255 255 Missing -# Note: -# -#(1) Values of N(m) for common truncations cases: -# Triangular M = J = K, N(m) = J -# Rhomboidal K = J + M, N(m) = J+m -# Trapezoidal K = J, K > M, N(m) = J diff -Nru eccodes-2.15.0/definitions/grib2/tables/3/4.2.0.2.table eccodes-2.16.0/definitions/grib2/tables/3/4.2.0.2.table --- eccodes-2.15.0/definitions/grib2/tables/3/4.2.0.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/3/4.2.0.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Product Discipline 0: Meteorological products, Parameter Category 2: Momentum -0 0 Wind direction [from which blowing] (deg true) +0 0 Wind direction (from which blowing) (deg true) 1 1 Wind speed (m s-1) 2 2 u-component of wind (m s-1) 3 3 v-component of wind (m s-1) @@ -7,8 +7,8 @@ 5 5 Velocity potential (m2 s-1) 6 6 Montgomery stream function (m2 s-2) 7 7 Sigma coordinate vertical velocity (s-1) -8 8 Vertical velocity [pressure] (Pa s-1) -9 9 Vertical velocity [geometric] (m s-1) +8 8 Vertical velocity (pressure) (Pa s-1) +9 9 Vertical velocity (geometric) (m s-1) 10 10 Absolute vorticity (s-1) 11 11 Absolute divergence (s-1) 12 12 Relative vorticity (s-1) @@ -21,7 +21,7 @@ 19 19 Wind mixing energy (J) 20 20 Boundary layer dissipation (W m-2) 21 21 Maximum wind speed (m s-1) -22 22 Wind speed [gust] (m s-1) +22 22 Wind speed (gust) (m s-1) 23 23 u-component of wind (gust) (m s-1) 24 24 v-component of wind (gust) (m s-1) 25 25 Vertical speed shear (s-1) diff -Nru eccodes-2.15.0/definitions/grib2/tables/3/4.2.table eccodes-2.16.0/definitions/grib2/tables/3/4.2.table --- eccodes-2.15.0/definitions/grib2/tables/3/4.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/3/4.2.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -# CODE TABLE 4.2, Parameter number by product discipline and parameter category -# 4 4 unknown -# 151 151 unknown -# 192 192 unknown -# 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/3/stepType.table eccodes-2.16.0/definitions/grib2/tables/3/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/3/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/3/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/4/3.7.table eccodes-2.16.0/definitions/grib2/tables/4/3.7.table --- eccodes-2.15.0/definitions/grib2/tables/4/3.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/4/3.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,9 +3,3 @@ 1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) # 2-254 Reserved 255 255 Missing -# Note: -# -#(1) Values of N(m) for common truncations cases: -# Triangular M = J = K, N(m) = J -# Rhomboidal K = J + M, N(m) = J+m -# Trapezoidal K = J, K > M, N(m) = J diff -Nru eccodes-2.15.0/definitions/grib2/tables/4/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/4/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/4/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/4/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 16 16 Snow melt (kg m-2) 17 17 Snow age (day) 18 18 Absolute humidity (kg m-3) -19 19 Precipitation type (code table (4.201) +19 19 Precipitation type (Code table 4.201) 20 20 Integrated liquid water (kg m-2) 21 21 Condensate (kg kg-1) 22 22 Cloud mixing ratio (kg kg-1) @@ -29,9 +29,9 @@ 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) +30 30 Precipitable water category (Code table 4.202) 31 31 Hail (m) -32 32 Graupel (snow pellets) (kg kg-1) +32 32 Graupel (snow pellets) (kg kg-1) 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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/4/4.2.0.20.table eccodes-2.16.0/definitions/grib2/tables/4/4.2.0.20.table --- eccodes-2.15.0/definitions/grib2/tables/4/4.2.0.20.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/4/4.2.0.20.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,13 +1,13 @@ -0 0 Mass density (concentration) kg.m-3 -1 1 Total column (integrated mass density) kg.m-2 -2 2 Volume mixing ratio (mole fraction in air) mole.mole-1 -3 3 Mass mixing ratio (mass fraction in air) kg.kg-1 -4 4 Surface dry deposition mass flux kg.m-2.s-1 -5 5 Surface wet deposition mass flux kg.m-2.s-1 -6 6 Atmosphere emission mass flux kg.m-2.s-1 -7 7 Chemical gross production rate of mole concentration mole.m-3.s-1 -8 8 Chemical gross destruction rate of mole concentration mole.m-3.s-1 -9 9 Surface dry deposition mass flux into stomata kg.m-2.s-1 +0 0 Mass density (concentration) (kg.m-3) +1 1 Total column (integrated mass density) (kg.m-2) +2 2 Volume mixing ratio (mole fraction in air) (mole.mole-1) +3 3 Mass mixing ratio (mass fraction in air) (kg.kg-1) +4 4 Surface dry deposition mass flux (kg.m-2.s-1) +5 5 Surface wet deposition mass flux (kg.m-2.s-1) +6 6 Atmosphere emission mass flux (kg.m-2.s-1) +7 7 Chemical gross production rate of mole concentration (mole.m-3.s-1) +8 8 Chemical gross destruction rate of mole concentration (mole.m-3.s-1) +9 9 Surface dry deposition mass flux into stomata (kg.m-2.s-1) #10-191 Reserved #192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/4/4.2.0.2.table eccodes-2.16.0/definitions/grib2/tables/4/4.2.0.2.table --- eccodes-2.15.0/definitions/grib2/tables/4/4.2.0.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/4/4.2.0.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Product Discipline 0: Meteorological products, Parameter Category 2: Momentum -0 0 Wind direction [from which blowing] (deg true) +0 0 Wind direction (from which blowing) (deg true) 1 1 Wind speed (m s-1) 2 2 u-component of wind (m s-1) 3 3 v-component of wind (m s-1) @@ -7,8 +7,8 @@ 5 5 Velocity potential (m2 s-1) 6 6 Montgomery stream function (m2 s-2) 7 7 Sigma coordinate vertical velocity (s-1) -8 8 Vertical velocity [pressure] (Pa s-1) -9 9 Vertical velocity [geometric] (m s-1) +8 8 Vertical velocity (pressure) (Pa s-1) +9 9 Vertical velocity (geometric) (m s-1) 10 10 Absolute vorticity (s-1) 11 11 Absolute divergence (s-1) 12 12 Relative vorticity (s-1) @@ -21,7 +21,7 @@ 19 19 Wind mixing energy (J) 20 20 Boundary layer dissipation (W m-2) 21 21 Maximum wind speed (m s-1) -22 22 Wind speed [gust] (m s-1) +22 22 Wind speed (gust) (m s-1) 23 23 u-component of wind (gust) (m s-1) 24 24 v-component of wind (gust) (m s-1) 25 25 Vertical speed shear (s-1) diff -Nru eccodes-2.15.0/definitions/grib2/tables/4/4.2.table eccodes-2.16.0/definitions/grib2/tables/4/4.2.table --- eccodes-2.15.0/definitions/grib2/tables/4/4.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/4/4.2.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -# CODE TABLE 4.2, Parameter number by product discipline and parameter category -# 4 4 unknown -# 151 151 unknown -# 192 192 unknown -# 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/4/stepType.table eccodes-2.16.0/definitions/grib2/tables/4/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/4/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/4/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/5/3.7.table eccodes-2.16.0/definitions/grib2/tables/5/3.7.table --- eccodes-2.15.0/definitions/grib2/tables/5/3.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/5/3.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,9 +3,3 @@ 1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) # 2-254 Reserved 255 255 Missing -# Note: -# -#(1) Values of N(m) for common truncations cases: -# Triangular M = J = K, N(m) = J -# Rhomboidal K = J + M, N(m) = J+m -# Trapezoidal K = J, K > M, N(m) = J diff -Nru eccodes-2.15.0/definitions/grib2/tables/5/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/5/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/5/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/5/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,3 +1,3 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Aerosol type (code table (4.205)) +0 0 Aerosol type (code table (4.205) 255 255 Missing (-) diff -Nru eccodes-2.15.0/definitions/grib2/tables/5/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/5/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/5/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/5/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 mixed layer depth (m) -4 4 Volcanic ash (code table (4.206)) +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)) +7 7 Icing (code table (4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence (code table (4.208)) +10 10 Turbulence (code table (4.208) 11 11 Turbulent kinetic energy (J kg-1) -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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/5/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/5/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/5/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/5/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 16 16 Snow melt (kg m-2) 17 17 Snow age (day) 18 18 Absolute humidity (kg m-3) -19 19 Precipitation type (code table (4.201)) +19 19 Precipitation type (Code table 4.201) 20 20 Integrated liquid water (kg m-2) 21 21 Condensate (kg kg-1) 22 22 Cloud mixing ratio (kg kg-1) @@ -29,13 +29,13 @@ 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)) +30 30 Precipitable water category (Code table 4.202) 31 31 Hail (m) 32 32 Graupel (snow pellets) (kg kg-1) -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)) +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 Percent frozen precipitation (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/5/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/5/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/5/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/5/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type (code table (4.203)) +8 8 Cloud type (code table (4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage (code table (4.204)) +10 10 Thunderstorm coverage (code table (4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/5/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/5/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/5/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/5/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit 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)) +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 percent of normal (%) 5 5 Baseflow-groundwater runoff (kg m-2) 6 6 Storm surface runoff (kg m-2) diff -Nru eccodes-2.15.0/definitions/grib2/tables/5/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/5/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/5/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/5/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/5/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/5/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/5/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/5/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Soil type (code table (4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/5/4.2.table eccodes-2.16.0/definitions/grib2/tables/5/4.2.table --- eccodes-2.15.0/definitions/grib2/tables/5/4.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/5/4.2.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -# CODE TABLE 4.2, Parameter number by product discipline and parameter category -# 4 4 unknown -# 151 151 unknown -# 192 192 unknown -# 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/5/stepType.table eccodes-2.16.0/definitions/grib2/tables/5/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/5/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/5/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/6/3.7.table eccodes-2.16.0/definitions/grib2/tables/6/3.7.table --- eccodes-2.15.0/definitions/grib2/tables/6/3.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/6/3.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,11 +1,4 @@ # Code Table 3.7: Spectral data representation mode 0 0 Reserved 1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) -# 2-254 Reserved 255 255 Missing -# Note: -# -#(1) Values of N(m) for common truncations cases: -# Triangular M = J = K, N(m) = J -# Rhomboidal K = J + M, N(m) = J+m -# Trapezoidal K = J, K > M, N(m) = J diff -Nru eccodes-2.15.0/definitions/grib2/tables/6/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/6/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/6/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/6/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,3 +1,3 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Aerosol type (code table (4.205)) +0 0 Aerosol type (code table (4.205) 255 255 Missing (-) diff -Nru eccodes-2.15.0/definitions/grib2/tables/6/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/6/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/6/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/6/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 mixed layer depth (m) -4 4 Volcanic ash (code table (4.206)) +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)) +7 7 Icing (code table (4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence (code table (4.208)) +10 10 Turbulence (code table (4.208) 11 11 Turbulent kinetic energy (J kg-1) -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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/6/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/6/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/6/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/6/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 16 16 Snow melt (kg m-2) 17 17 Snow age day (-) 18 18 Absolute humidity (kg m-3) -19 19 Precipitation type (code table (4.201)) +19 19 Precipitation type (code table (4.201) 20 20 Integrated liquid water (kg m-2) 21 21 Condensate (kg kg-1) 22 22 Cloud mixing ratio (kg kg-1) @@ -29,7 +29,7 @@ 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)) +30 30 Precipitable water category (code table (4.202) 31 31 Hail (m) 32 32 Graupel (snow pellets) (kg kg-1) 33 33 Categorical rain (Code table 4.222) diff -Nru eccodes-2.15.0/definitions/grib2/tables/6/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/6/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/6/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/6/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type (code table (4.203)) +8 8 Cloud type (code table (4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage (code table (4.204)) +10 10 Thunderstorm coverage (code table (4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/6/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/6/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/6/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/6/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit 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)) +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 percent of normal (%) 5 5 Baseflow-groundwater runoff (kg m-2) 6 6 Storm surface runoff (kg m-2) diff -Nru eccodes-2.15.0/definitions/grib2/tables/6/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/6/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/6/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/6/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/6/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/6/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/6/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/6/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Soil type (code table (4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/6/4.2.table eccodes-2.16.0/definitions/grib2/tables/6/4.2.table --- eccodes-2.15.0/definitions/grib2/tables/6/4.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/6/4.2.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -# CODE TABLE 4.2, Parameter number by product discipline and parameter category -# 4 4 unknown -# 151 151 unknown -# 192 192 unknown -# 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/6/stepType.table eccodes-2.16.0/definitions/grib2/tables/6/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/6/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/6/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/7/3.7.table eccodes-2.16.0/definitions/grib2/tables/7/3.7.table --- eccodes-2.15.0/definitions/grib2/tables/7/3.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/7/3.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,11 +1,4 @@ # Code Table 3.7: Spectral data representation mode 0 0 Reserved 1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) -# 2-254 Reserved 255 255 Missing -# Note: -# -#(1) Values of N(m) for common truncations cases: -# Triangular M = J = K, N(m) = J -# Rhomboidal K = J + M, N(m) = J+m -# Trapezoidal K = J, K > M, N(m) = J diff -Nru eccodes-2.15.0/definitions/grib2/tables/7/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/7/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/7/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/7/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Aerosol type (code table (4.205)) +0 0 Aerosol type (code table (4.205) #1-191 1-191 Reserved (-) #192-254 192-254 Reserved for local use (-) 255 255 Missing (-) diff -Nru eccodes-2.15.0/definitions/grib2/tables/7/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/7/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/7/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/7/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 mixed layer depth (m) -4 4 Volcanic ash (code table (4.206)) +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)) +7 7 Icing (code table (4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence (code table (4.208)) +10 10 Turbulence (code table (4.208) 11 11 Turbulent kinetic energy (J kg-1) -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)) +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 (%) @@ -25,7 +25,7 @@ 23 23 Supercooled large droplet probability (see Note 4) (%) 24 24 Convective turbulent kinetic energy - validation (J kg-1) 25 25 Weather Interpretation ww (WMO) - validation -26 26 Convective outlook (code table (4.224)) +26 26 Convective outlook (code table (4.224) #27-191 26-191 Reserved #192-254 192-254 Reserved for local use (-) 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/7/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/7/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/7/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/7/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 16 16 Snow melt (kg m-2) 17 17 Snow age day (-) 18 18 Absolute humidity (kg m-3) -19 19 Precipitation type (code table (4.201)) +19 19 Precipitation type (code table (4.201) 20 20 Integrated liquid water (kg m-2) 21 21 Condensate (kg kg-1) 22 22 Cloud mixing ratio (kg kg-1) @@ -29,7 +29,7 @@ 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)) +30 30 Precipitable water category (code table (4.202) 31 31 Hail (m) 32 32 Graupel (snow pellets) (kg kg-1) 33 33 Categorical rain (Code table 4.222) diff -Nru eccodes-2.15.0/definitions/grib2/tables/7/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/7/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/7/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/7/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type (code table (4.203)) +8 8 Cloud type (code table (4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage (code table (4.204)) +10 10 Thunderstorm coverage (code table (4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/7/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/7/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/7/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/7/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit 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)) +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 percent of normal (%) 5 5 Baseflow-groundwater runoff (kg m-2) 6 6 Storm surface runoff (kg m-2) diff -Nru eccodes-2.15.0/definitions/grib2/tables/7/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/7/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/7/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/7/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/7/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/7/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/7/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/7/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Soil type (code table (4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/7/4.2.2.4.table eccodes-2.16.0/definitions/grib2/tables/7/4.2.2.4.table --- eccodes-2.15.0/definitions/grib2/tables/7/4.2.2.4.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/7/4.2.2.4.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,3 +1,3 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Fire outlook (code table (4.224)) -1 1 Fire outlook due to dry thunderstorm (code table (4.224)) +0 0 Fire outlook (code table (4.224) +1 1 Fire outlook due to dry thunderstorm (code table (4.224) diff -Nru eccodes-2.15.0/definitions/grib2/tables/7/4.2.table eccodes-2.16.0/definitions/grib2/tables/7/4.2.table --- eccodes-2.15.0/definitions/grib2/tables/7/4.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/7/4.2.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -# CODE TABLE 4.2, Parameter number by product discipline and parameter category -# 4 4 unknown -# 151 151 unknown -# 192 192 unknown -# 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/7/stepType.table eccodes-2.16.0/definitions/grib2/tables/7/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/7/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/7/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/8/3.7.table eccodes-2.16.0/definitions/grib2/tables/8/3.7.table --- eccodes-2.15.0/definitions/grib2/tables/8/3.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/8/3.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,11 +1,5 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Reserved +0 0 Reserved 1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m>=0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) # 2-254 Reserved -255 255 Missing -# Note: -# -#(1) Values of N(m) for common truncations cases: -# Triangular M = J = K, N(m) = J -# Rhomboidal K = J + M, N(m) = J+m -# Trapezoidal K = J, K > M, N(m) = J +255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/8/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/8/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/8/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/8/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/8/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/8/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/8/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/8/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/8/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/8/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/8/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/8/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 Percent frozen precipitation (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/8/4.2.0.2.table eccodes-2.16.0/definitions/grib2/tables/8/4.2.0.2.table --- eccodes-2.15.0/definitions/grib2/tables/8/4.2.0.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/8/4.2.0.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Wind direction (from which blowing) (degree true) (deg) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/8/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/8/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/8/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/8/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/8/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/8/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/8/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/8/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/8/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/8/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/8/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/8/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/8/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/8/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/8/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/8/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/8/4.2.table eccodes-2.16.0/definitions/grib2/tables/8/4.2.table --- eccodes-2.15.0/definitions/grib2/tables/8/4.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/8/4.2.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -# CODE TABLE 4.2, Parameter number by product discipline and parameter category -# 4 4 unknown -# 151 151 unknown -# 192 192 unknown -# 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/8/stepType.table eccodes-2.16.0/definitions/grib2/tables/8/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/8/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/8/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/tables/9/3.7.table eccodes-2.16.0/definitions/grib2/tables/9/3.7.table --- eccodes-2.15.0/definitions/grib2/tables/9/3.7.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/9/3.7.table 2020-01-16 10:21:52.000000000 +0000 @@ -2,10 +2,4 @@ 0 0 Reserved 1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m>=0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) # 2-254 Reserved -255 255 Missing -# Note: -# -#(1) Values of N(m) for common truncations cases: -# Triangular M = J = K, N(m) = J -# Rhomboidal K = J + M, N(m) = J+m -# Trapezoidal K = J, K > M, N(m) = J +255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/9/4.2.0.13.table eccodes-2.16.0/definitions/grib2/tables/9/4.2.0.13.table --- eccodes-2.15.0/definitions/grib2/tables/9/4.2.0.13.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/9/4.2.0.13.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Aerosol type ((Code table 4.205)) +0 0 Aerosol type (Code table 4.205) # 1-191 Reserved # 192-254 Reserved for local use 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/9/4.2.0.19.table eccodes-2.16.0/definitions/grib2/tables/9/4.2.0.19.table --- eccodes-2.15.0/definitions/grib2/tables/9/4.2.0.19.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/9/4.2.0.19.table 2020-01-16 10:21:52.000000000 +0000 @@ -3,17 +3,17 @@ 1 1 Albedo (%) 2 2 Thunderstorm probability (%) 3 3 Mixed layer depth (m) -4 4 Volcanic ash ((Code table 4.206)) +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)) +7 7 Icing (Code table 4.207) 8 8 Turbulence top (m) 9 9 Turbulence base (m) -10 10 Turbulence ((Code table 4.208)) +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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/9/4.2.0.1.table eccodes-2.16.0/definitions/grib2/tables/9/4.2.0.1.table --- eccodes-2.15.0/definitions/grib2/tables/9/4.2.0.1.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/9/4.2.0.1.table 2020-01-16 10:21:52.000000000 +0000 @@ -18,7 +18,7 @@ 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)) +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) @@ -29,13 +29,13 @@ 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)) +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)) +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 Percent frozen precipitation (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/9/4.2.0.2.table eccodes-2.16.0/definitions/grib2/tables/9/4.2.0.2.table --- eccodes-2.15.0/definitions/grib2/tables/9/4.2.0.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/9/4.2.0.2.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Wind direction (from which blowing) (degree true) (deg) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/9/4.2.0.6.table eccodes-2.16.0/definitions/grib2/tables/9/4.2.0.6.table --- eccodes-2.15.0/definitions/grib2/tables/9/4.2.0.6.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/9/4.2.0.6.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,9 +7,9 @@ 5 5 High cloud cover (%) 6 6 Cloud water (kg m-2) 7 7 Cloud amount (%) -8 8 Cloud type ((Code table 4.203)) +8 8 Cloud type (Code table 4.203) 9 9 Thunderstorm maximum tops (m) -10 10 Thunderstorm coverage ((Code table 4.204)) +10 10 Thunderstorm coverage (Code table 4.204) 11 11 Cloud base (m) 12 12 Cloud top (m) 13 13 Ceiling (m) diff -Nru eccodes-2.15.0/definitions/grib2/tables/9/4.2.1.0.table eccodes-2.16.0/definitions/grib2/tables/9/4.2.1.0.table --- eccodes-2.15.0/definitions/grib2/tables/9/4.2.1.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/9/4.2.1.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,8 +1,8 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit 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)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/9/4.2.2.0.table eccodes-2.16.0/definitions/grib2/tables/9/4.2.2.0.table --- eccodes-2.15.0/definitions/grib2/tables/9/4.2.2.0.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/9/4.2.2.0.table 2020-01-16 10:21:52.000000000 +0000 @@ -7,7 +7,7 @@ 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)) +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 (%) diff -Nru eccodes-2.15.0/definitions/grib2/tables/9/4.2.2.3.table eccodes-2.16.0/definitions/grib2/tables/9/4.2.2.3.table --- eccodes-2.15.0/definitions/grib2/tables/9/4.2.2.3.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/9/4.2.2.3.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,5 +1,5 @@ # Automatically generated by ./create_tables.pl from database fm92_grib2@grib-param-db-prod.ecmwf.int, do not edit -0 0 Soil type ((Code table 4.213)) +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) diff -Nru eccodes-2.15.0/definitions/grib2/tables/9/4.2.table eccodes-2.16.0/definitions/grib2/tables/9/4.2.table --- eccodes-2.15.0/definitions/grib2/tables/9/4.2.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/9/4.2.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -# CODE TABLE 4.2, Parameter number by product discipline and parameter category -# 4 4 unknown -# 151 151 unknown -# 192 192 unknown -# 255 255 Missing diff -Nru eccodes-2.15.0/definitions/grib2/tables/9/stepType.table eccodes-2.16.0/definitions/grib2/tables/9/stepType.table --- eccodes-2.15.0/definitions/grib2/tables/9/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/tables/9/stepType.table 2020-01-16 10:21:52.000000000 +0000 @@ -1,4 +1,2 @@ -# CODE TABLE Step Type - 0 instant Instant 1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib2/template.4.30.def eccodes-2.16.0/definitions/grib2/template.4.30.def --- eccodes-2.15.0/definitions/grib2/template.4.30.def 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/template.4.30.def 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,6 @@ # Copyright 2005-2019 ECMWF. -# For grib2 to grib1 convertion +# For grib2 to grib1 conversion constant dataRepresentationType = 90; # TEMPLATE 4.30, Satellite Product diff -Nru eccodes-2.15.0/definitions/grib2/template.4.311.def eccodes-2.16.0/definitions/grib2/template.4.311.def --- eccodes-2.15.0/definitions/grib2/template.4.311.def 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/template.4.311.def 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,6 @@ # Copyright 2005-2019 ECMWF. -# For grib2 to grib1 convertion +# For grib2 to grib1 conversion constant dataRepresentationType = 90; # TEMPLATE 4.311, Satellite Product Auxiliary Information diff -Nru eccodes-2.15.0/definitions/grib2/template.4.31.def eccodes-2.16.0/definitions/grib2/template.4.31.def --- eccodes-2.15.0/definitions/grib2/template.4.31.def 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/template.4.31.def 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,6 @@ # Copyright 2005-2019 ECMWF. -# For grib2 to grib1 convertion +# For grib2 to grib1 conversion constant dataRepresentationType = 90; # TEMPLATE 4.31, Satellite Product diff -Nru eccodes-2.15.0/definitions/grib2/template.4.32.def eccodes-2.16.0/definitions/grib2/template.4.32.def --- eccodes-2.15.0/definitions/grib2/template.4.32.def 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/template.4.32.def 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,6 @@ # Copyright 2005-2019 ECMWF. -# For grib2 to grib1 convertion +# For grib2 to grib1 conversion constant dataRepresentationType = 90; # TEMPLATE 4.32, Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data diff -Nru eccodes-2.15.0/definitions/grib2/template.4.35.def eccodes-2.16.0/definitions/grib2/template.4.35.def --- eccodes-2.15.0/definitions/grib2/template.4.35.def 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib2/template.4.35.def 2020-01-16 10:21:52.000000000 +0000 @@ -1,6 +1,6 @@ # Copyright 2005-2019 ECMWF. -# For grib2 to grib1 convertion +# For grib2 to grib1 conversion constant dataRepresentationType = 90; # TEMPLATE 4.35, satellite product with or without associated quality values diff -Nru eccodes-2.15.0/definitions/grib3/tables/0/stepType.table eccodes-2.16.0/definitions/grib3/tables/0/stepType.table --- eccodes-2.15.0/definitions/grib3/tables/0/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib3/tables/0/stepType.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -# CODE TABLE Step Type - -0 instant Instant -1 interval Interval diff -Nru eccodes-2.15.0/definitions/grib3/tables/1/stepType.table eccodes-2.16.0/definitions/grib3/tables/1/stepType.table --- eccodes-2.15.0/definitions/grib3/tables/1/stepType.table 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/grib3/tables/1/stepType.table 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -# CODE TABLE Step Type - -0 instant Instant -1 interval Interval diff -Nru eccodes-2.15.0/definitions/Makefile.am eccodes-2.16.0/definitions/Makefile.am --- eccodes-2.15.0/definitions/Makefile.am 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/definitions/Makefile.am 2020-01-16 10:21:52.000000000 +0000 @@ -13392,6 +13392,12 @@ common/statistics_grid.def\ common/statistics_spectral.def +definitionsdiagdir = @ECCODES_DEFINITION_PATH@/diag +dist_definitionsdiag_DATA = \ + diag/boot.def\ + diag/section.1.def\ + diag/section.4.def + definitionsgrib1dir = @ECCODES_DEFINITION_PATH@/grib1 dist_definitionsgrib1_DATA = \ grib1/0.ecmf.table\ @@ -13672,6 +13678,7 @@ grib1/localConcepts/edzw/paramId.def\ grib1/localConcepts/edzw/shortName.def\ grib1/localConcepts/edzw/stepType.def\ + grib1/localConcepts/edzw/typeOfLevel.def\ grib1/localConcepts/edzw/units.def definitionsgrib1_localConcepts_efkldir = @ECCODES_DEFINITION_PATH@/grib1/localConcepts/efkl @@ -13767,6 +13774,8 @@ grib2/boot_multifield.def\ grib2/cfName.def\ grib2/cfVarName.def\ + grib2/crraLocalVersion.table\ + grib2/crra_suiteName.table\ grib2/dimension.0.table\ grib2/dimensionTableNumber.table\ grib2/dimensionType.table\ @@ -13785,6 +13794,7 @@ grib2/local.98.0.def\ grib2/local.98.1.def\ grib2/local.98.11.def\ + grib2/local.98.12.def\ grib2/local.98.14.def\ grib2/local.98.15.def\ grib2/local.98.16.def\ @@ -13808,6 +13818,7 @@ grib2/local.98.7.def\ grib2/local.98.9.def\ grib2/local.98.def\ + grib2/local.crra.1.def\ grib2/local.tigge.1.def\ grib2/ls.def\ grib2/ls_labeling.82.def\ @@ -13820,6 +13831,8 @@ grib2/parameters.def\ grib2/products_0.def\ grib2/products_1.def\ + grib2/products_10.def\ + grib2/products_11.def\ grib2/products_2.def\ grib2/products_3.def\ grib2/products_4.def\ @@ -13828,6 +13841,7 @@ grib2/products_7.def\ grib2/products_8.def\ grib2/products_9.def\ + grib2/products_crra.def\ grib2/products_s2s.def\ grib2/products_tigge.def\ grib2/products_uerra.def\ @@ -13952,7 +13966,15 @@ grib2/template.4.71.def\ grib2/template.4.72.def\ grib2/template.4.73.def\ + grib2/template.4.76.def\ + grib2/template.4.77.def\ + grib2/template.4.78.def\ + grib2/template.4.79.def\ grib2/template.4.8.def\ + grib2/template.4.80.def\ + grib2/template.4.81.def\ + grib2/template.4.82.def\ + grib2/template.4.83.def\ grib2/template.4.9.def\ grib2/template.4.91.def\ grib2/template.4.categorical.def\ @@ -13964,8 +13986,11 @@ grib2/template.4.parameter_aerosol.def\ grib2/template.4.parameter_aerosol_44.def\ grib2/template.4.parameter_aerosol_optical.def\ + grib2/template.4.parameter_aerosol_optical_source.def\ + grib2/template.4.parameter_aerosol_source.def\ grib2/template.4.parameter_chemical.def\ grib2/template.4.parameter_chemical_distribution.def\ + grib2/template.4.parameter_chemical_source.def\ grib2/template.4.parameter_partition.def\ grib2/template.4.parameter_postproc.def\ grib2/template.4.parameter_tile.def\ @@ -14186,7 +14211,6 @@ grib2/tables/0/4.2.2.3.table\ grib2/tables/0/4.2.3.0.table\ grib2/tables/0/4.2.3.1.table\ - grib2/tables/0/4.2.table\ grib2/tables/0/4.201.table\ grib2/tables/0/4.202.table\ grib2/tables/0/4.203.table\ @@ -14226,8 +14250,7 @@ grib2/tables/0/5.7.table\ grib2/tables/0/5.8.table\ grib2/tables/0/5.9.table\ - grib2/tables/0/6.0.table\ - grib2/tables/0/stepType.table + grib2/tables/0/6.0.table definitionsgrib2_tables_1dir = @ECCODES_DEFINITION_PATH@/grib2/tables/1 dist_definitionsgrib2_tables_1_DATA = \ @@ -14293,7 +14316,6 @@ grib2/tables/1/4.2.2.3.table\ grib2/tables/1/4.2.3.0.table\ grib2/tables/1/4.2.3.1.table\ - grib2/tables/1/4.2.table\ grib2/tables/1/4.201.table\ grib2/tables/1/4.202.table\ grib2/tables/1/4.203.table\ @@ -14333,8 +14355,7 @@ grib2/tables/1/5.7.table\ grib2/tables/1/5.8.table\ grib2/tables/1/5.9.table\ - grib2/tables/1/6.0.table\ - grib2/tables/1/stepType.table + grib2/tables/1/6.0.table definitionsgrib2_tables_10dir = @ECCODES_DEFINITION_PATH@/grib2/tables/10 dist_definitionsgrib2_tables_10_DATA = \ @@ -14406,7 +14427,6 @@ grib2/tables/10/4.2.2.4.table\ grib2/tables/10/4.2.3.0.table\ grib2/tables/10/4.2.3.1.table\ - grib2/tables/10/4.2.table\ grib2/tables/10/4.201.table\ grib2/tables/10/4.202.table\ grib2/tables/10/4.203.table\ @@ -15674,7 +15694,6 @@ grib2/tables/2/4.2.2.3.table\ grib2/tables/2/4.2.3.0.table\ grib2/tables/2/4.2.3.1.table\ - grib2/tables/2/4.2.table\ grib2/tables/2/4.201.table\ grib2/tables/2/4.202.table\ grib2/tables/2/4.203.table\ @@ -15714,8 +15733,7 @@ grib2/tables/2/5.7.table\ grib2/tables/2/5.8.table\ grib2/tables/2/5.9.table\ - grib2/tables/2/6.0.table\ - grib2/tables/2/stepType.table + grib2/tables/2/6.0.table definitionsgrib2_tables_20dir = @ECCODES_DEFINITION_PATH@/grib2/tables/20 dist_definitionsgrib2_tables_20_DATA = \ @@ -15956,6 +15974,7 @@ grib2/tables/21/4.233.table\ grib2/tables/21/4.234.table\ grib2/tables/21/4.236.table\ + grib2/tables/21/4.238.table\ grib2/tables/21/4.240.table\ grib2/tables/21/4.241.table\ grib2/tables/21/4.242.table\ @@ -16047,7 +16066,6 @@ grib2/tables/3/4.2.2.3.table\ grib2/tables/3/4.2.3.0.table\ grib2/tables/3/4.2.3.1.table\ - grib2/tables/3/4.2.table\ grib2/tables/3/4.201.table\ grib2/tables/3/4.202.table\ grib2/tables/3/4.203.table\ @@ -16412,7 +16430,6 @@ grib2/tables/4/4.2.2.3.table\ grib2/tables/4/4.2.3.0.table\ grib2/tables/4/4.2.3.1.table\ - grib2/tables/4/4.2.table\ grib2/tables/4/4.201.table\ grib2/tables/4/4.202.table\ grib2/tables/4/4.203.table\ @@ -16779,7 +16796,6 @@ grib2/tables/5/4.2.2.3.table\ grib2/tables/5/4.2.3.0.table\ grib2/tables/5/4.2.3.1.table\ - grib2/tables/5/4.2.table\ grib2/tables/5/4.201.table\ grib2/tables/5/4.202.table\ grib2/tables/5/4.203.table\ @@ -17152,7 +17168,6 @@ grib2/tables/6/4.2.2.4.table\ grib2/tables/6/4.2.3.0.table\ grib2/tables/6/4.2.3.1.table\ - grib2/tables/6/4.2.table\ grib2/tables/6/4.201.table\ grib2/tables/6/4.202.table\ grib2/tables/6/4.203.table\ @@ -17525,7 +17540,6 @@ grib2/tables/7/4.2.2.4.table\ grib2/tables/7/4.2.3.0.table\ grib2/tables/7/4.2.3.1.table\ - grib2/tables/7/4.2.table\ grib2/tables/7/4.201.table\ grib2/tables/7/4.202.table\ grib2/tables/7/4.203.table\ @@ -17900,7 +17914,6 @@ grib2/tables/8/4.2.2.4.table\ grib2/tables/8/4.2.3.0.table\ grib2/tables/8/4.2.3.1.table\ - grib2/tables/8/4.2.table\ grib2/tables/8/4.201.table\ grib2/tables/8/4.202.table\ grib2/tables/8/4.203.table\ @@ -18276,7 +18289,6 @@ grib2/tables/9/4.2.2.4.table\ grib2/tables/9/4.2.3.0.table\ grib2/tables/9/4.2.3.1.table\ - grib2/tables/9/4.2.table\ grib2/tables/9/4.201.table\ grib2/tables/9/4.202.table\ grib2/tables/9/4.203.table\ @@ -18331,6 +18343,7 @@ definitionsgrib2_tables_local_ecmfdir = @ECCODES_DEFINITION_PATH@/grib2/tables/local/ecmf dist_definitionsgrib2_tables_local_ecmf_DATA = \ + grib2/tables/local/ecmf/1.1.table\ grib2/tables/local/ecmf/obstat.1.0.table\ grib2/tables/local/ecmf/obstat.10.0.table\ grib2/tables/local/ecmf/obstat.11.0.table\ @@ -18345,12 +18358,33 @@ grib2/tables/local/ecmf/obstat.reporttype.table\ grib2/tables/local/ecmf/obstat.varno.table +definitionsgrib2_tables_local_ecmf_1dir = @ECCODES_DEFINITION_PATH@/grib2/tables/local/ecmf/1 +dist_definitionsgrib2_tables_local_ecmf_1_DATA = \ + grib2/tables/local/ecmf/1/4.2.0.20.table\ + grib2/tables/local/ecmf/1/4.2.2.0.table\ + grib2/tables/local/ecmf/1/4.230.table\ + grib2/tables/local/ecmf/1/4.233.table + definitionsgrib2_tables_local_ecmf_4dir = @ECCODES_DEFINITION_PATH@/grib2/tables/local/ecmf/4 dist_definitionsgrib2_tables_local_ecmf_4_DATA = \ grib2/tables/local/ecmf/4/1.2.table definitionsgrib2_tables_local_edzw_1dir = @ECCODES_DEFINITION_PATH@/grib2/tables/local/edzw/1 dist_definitionsgrib2_tables_local_edzw_1_DATA = \ + grib2/tables/local/edzw/1/1.4.table\ + grib2/tables/local/edzw/1/4.0.table\ + grib2/tables/local/edzw/1/4.1.0.table\ + grib2/tables/local/edzw/1/4.11.table\ + grib2/tables/local/edzw/1/4.2.0.0.table\ + grib2/tables/local/edzw/1/4.2.0.1.table\ + grib2/tables/local/edzw/1/4.2.0.13.table\ + grib2/tables/local/edzw/1/4.2.0.14.table\ + grib2/tables/local/edzw/1/4.2.0.15.table\ + grib2/tables/local/edzw/1/4.2.0.16.table\ + grib2/tables/local/edzw/1/4.2.0.17.table\ + grib2/tables/local/edzw/1/4.2.0.18.table\ + grib2/tables/local/edzw/1/4.2.0.19.table\ + grib2/tables/local/edzw/1/4.2.0.191.table\ grib2/tables/local/edzw/1/4.2.0.192.table\ grib2/tables/local/edzw/1/4.2.0.193.table\ grib2/tables/local/edzw/1/4.2.0.194.table\ @@ -18359,11 +18393,32 @@ grib2/tables/local/edzw/1/4.2.0.197.table\ grib2/tables/local/edzw/1/4.2.0.198.table\ grib2/tables/local/edzw/1/4.2.0.199.table\ + grib2/tables/local/edzw/1/4.2.0.2.table\ + grib2/tables/local/edzw/1/4.2.0.20.table\ grib2/tables/local/edzw/1/4.2.0.254.table\ + grib2/tables/local/edzw/1/4.2.0.3.table\ + grib2/tables/local/edzw/1/4.2.0.4.table\ + grib2/tables/local/edzw/1/4.2.0.5.table\ + grib2/tables/local/edzw/1/4.2.0.6.table\ + grib2/tables/local/edzw/1/4.2.0.7.table\ + grib2/tables/local/edzw/1/4.2.1.0.table\ + grib2/tables/local/edzw/1/4.2.10.0.table\ + grib2/tables/local/edzw/1/4.2.10.3.table\ + grib2/tables/local/edzw/1/4.2.2.0.table\ + grib2/tables/local/edzw/1/4.2.2.3.table\ grib2/tables/local/edzw/1/4.2.215.19.table\ grib2/tables/local/edzw/1/4.2.215.2.table\ grib2/tables/local/edzw/1/4.2.215.5.table\ - grib2/tables/local/edzw/1/4.2.215.7.table + grib2/tables/local/edzw/1/4.2.215.7.table\ + grib2/tables/local/edzw/1/4.2.3.0.table\ + grib2/tables/local/edzw/1/4.2.3.1.table\ + grib2/tables/local/edzw/1/4.3.table\ + grib2/tables/local/edzw/1/4.5.table\ + grib2/tables/local/edzw/1/4.6.table\ + grib2/tables/local/edzw/1/4.7.table\ + grib2/tables/local/edzw/1/4.9.table\ + grib2/tables/local/edzw/1/backgroundProcess.table\ + grib2/tables/local/edzw/1/generatingProcessIdentifier.table definitionsgrib2_tables_local_kwbc_1dir = @ECCODES_DEFINITION_PATH@/grib2/tables/local/kwbc/1 dist_definitionsgrib2_tables_local_kwbc_1_DATA = \ @@ -18641,8 +18696,7 @@ grib3/tables/0/5.7.table\ grib3/tables/0/5.8.table\ grib3/tables/0/5.9.table\ - grib3/tables/0/6.0.table\ - grib3/tables/0/stepType.table + grib3/tables/0/6.0.table definitionsgrib3_tables_1dir = @ECCODES_DEFINITION_PATH@/grib3/tables/1 dist_definitionsgrib3_tables_1_DATA = \ @@ -18766,8 +18820,7 @@ grib3/tables/1/7.3.0.7.table\ grib3/tables/1/7.3.1.0.table\ grib3/tables/1/7.3.1.1.table\ - grib3/tables/1/7.3.1.2.table\ - grib3/tables/1/stepType.table + grib3/tables/1/7.3.1.2.table definitionsgrib3_tables_local_ecmfdir = @ECCODES_DEFINITION_PATH@/grib3/tables/local/ecmf dist_definitionsgrib3_tables_local_ecmf_DATA = \ @@ -19053,6 +19106,7 @@ mars/grib.oper.fa.def\ mars/grib.oper.fc.def\ mars/grib.oper.fg.def\ + mars/grib.oper.gai.def\ mars/grib.oper.go.def\ mars/grib.oper.ia.def\ mars/grib.oper.im.def\ @@ -19063,6 +19117,7 @@ mars/grib.oper.ssd.def\ mars/grib.scda.4i.def\ mars/grib.scda.me.def\ + mars/grib.scda.ssd.def\ mars/grib.seap.an.def\ mars/grib.seap.ef.def\ mars/grib.seap.es.def\ @@ -19120,6 +19175,15 @@ mars/grib.wehs.em.def\ mars/grib.wehs.es.def\ mars/grib.weov.pf.def\ + mars/grib.wfas.cf.def\ + mars/grib.wfas.fc.def\ + mars/grib.wfas.fu.def\ + mars/grib.wfas.pf.def\ + mars/grib.wfas.sfo.def\ + mars/grib.wfcl.cf.def\ + mars/grib.wfcl.fc.def\ + mars/grib.wfcl.pf.def\ + mars/grib.wfcl.sfo.def\ mars/grib.wmfm.fcmax.def\ mars/grib.wmfm.fcmean.def\ mars/grib.wmfm.fcmin.def\ diff -Nru eccodes-2.15.0/definitions/param_limits.def eccodes-2.16.0/definitions/param_limits.def --- eccodes-2.15.0/definitions/param_limits.def 1970-01-01 00:00:00.000000000 +0000 +++ eccodes-2.16.0/definitions/param_limits.def 2020-01-16 10:21:52.000000000 +0000 @@ -0,0 +1,9 @@ +constant default_min_val = -1e9 : long_type, hidden; +constant default_max_val = +1e9 : long_type, hidden; + +concept param_value_min(default_min_val) { + 0 = { paramId=167; } +} : long_type, hidden; +concept param_value_max(default_max_val) { + 373 = { paramId=167; } +} : long_type, hidden; diff -Nru eccodes-2.15.0/examples/C/grib_nearest.c eccodes-2.16.0/examples/C/grib_nearest.c --- eccodes-2.15.0/examples/C/grib_nearest.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/examples/C/grib_nearest.c 2020-01-16 10:21:52.000000000 +0000 @@ -11,7 +11,8 @@ /* * C Implementation: nearest * - * Description: how to get nearest point(s) + * Description: How to get nearest point(s). + * Assumes all input GRIB messages have the same grid geometry */ #include diff -Nru eccodes-2.15.0/examples/C/grib_nearest_multiple.c eccodes-2.16.0/examples/C/grib_nearest_multiple.c --- eccodes-2.15.0/examples/C/grib_nearest_multiple.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/examples/C/grib_nearest_multiple.c 2020-01-16 10:21:52.000000000 +0000 @@ -49,7 +49,7 @@ * number latitude longitude */ fname=argv[1]; - fin=fopen(fname,"r"); + fin=fopen(fname,"r"); /* Open in text mode */ if(!fin) { perror(fname); exit(1); } npoints=0; while (fscanf(fin,"%ld %g %g",&iid,&lat,&lon) != EOF) npoints++; @@ -75,7 +75,7 @@ if (!indexes) {printf("unable to allocate %ld bytes\n",(long)(npoints*sizeof(double)));exit(1);} fname=argv[1]; - fin=fopen(fname,"r"); + fin=fopen(fname,"r"); /* Open in text mode */ if(!fin) { perror(fname); exit(1); } i=0; while (fscanf(fin,"%ld %g %g",&iid,&lat,&lon) != EOF) { @@ -88,7 +88,7 @@ /* The first GRIB file on the arguments is treated as the land-sea mask file */ fname=argv[2]; - fin=fopen(fname,"rb"); + fin=fopen(fname,"rb"); /* Open GRIB in binary mode */ if(!fin) { perror(fname); exit(1); } h=codes_handle_new_from_file(0,fin,PRODUCT_GRIB, &ret); if (!h || ret!=CODES_SUCCESS) {printf(" unable to create handle\n");exit(1);} diff -Nru eccodes-2.15.0/examples/C/grib_precipitation.c eccodes-2.16.0/examples/C/grib_precipitation.c --- eccodes-2.15.0/examples/C/grib_precipitation.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/examples/C/grib_precipitation.c 2020-01-16 10:21:52.000000000 +0000 @@ -44,14 +44,14 @@ if (argc<2) usage(argv[0]); filename=argv[1]; - in = fopen(filename,"r"); + in = fopen(filename,"rb"); if(!in) { printf("ERROR: unable to open file %s\n",filename); return 1; } /* create new handle from a message in a file*/ - while((h = codes_handle_new_from_file(0,f,&err)) != NULL) { + while((h = codes_handle_new_from_file(0,in,&err)) != NULL) { /* get the size of the values array*/ CODES_CHECK(codes_get_size(h,"values",&values_len),0); diff -Nru eccodes-2.15.0/examples/C/include.ctest.sh.in eccodes-2.16.0/examples/C/include.ctest.sh.in --- eccodes-2.15.0/examples/C/include.ctest.sh.in 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/examples/C/include.ctest.sh.in 2020-01-16 10:21:52.000000000 +0000 @@ -24,3 +24,5 @@ samp_dir="@CMAKE_BINARY_DIR@/@ECCODES_SAMPLES_SUFF@" ECCODES_SAMPLES_PATH=${samp_dir} export ECCODES_SAMPLES_PATH + +ECCODES_ON_WINDOWS=@ECCODES_ON_WINDOWS@ diff -Nru eccodes-2.15.0/examples/python/grib_count_messages.c eccodes-2.16.0/examples/python/grib_count_messages.c --- eccodes-2.15.0/examples/python/grib_count_messages.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/examples/python/grib_count_messages.c 2020-01-16 10:21:52.000000000 +0000 @@ -55,7 +55,7 @@ if (argc<2) usage(argv[0]); filename=argv[1]; - in = fopen(filename,"r"); + in = fopen(filename,"rb"); if(!in) { printf("ERROR: unable to open file %s\n",filename); return 1; diff -Nru eccodes-2.15.0/examples/python/grib_iterator.c eccodes-2.16.0/examples/python/grib_iterator.c --- eccodes-2.15.0/examples/python/grib_iterator.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/examples/python/grib_iterator.c 2020-01-16 10:21:52.000000000 +0000 @@ -43,7 +43,7 @@ filename=strdup(argv[1]); - in = fopen(filename,"r"); + in = fopen(filename,"rb"); if(!in) { printf("ERROR: unable to open file %s\n",filename); return 1; diff -Nru eccodes-2.15.0/examples/python/grib_print_data.c eccodes-2.16.0/examples/python/grib_print_data.c --- eccodes-2.15.0/examples/python/grib_print_data.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/examples/python/grib_print_data.c 2020-01-16 10:21:52.000000000 +0000 @@ -38,7 +38,7 @@ if (argc<2) usage(argv[0]); filename=argv[1]; - in = fopen(filename,"r"); + in = fopen(filename,"rb"); if(!in) { printf("ERROR: unable to open file %s\n",filename); return 1; Binary files /tmp/tmpLaEK2D/bjUsH9llwQ/eccodes-2.15.0/samples/diag.tmpl and /tmp/tmpLaEK2D/oVXeiPlpsw/eccodes-2.16.0/samples/diag.tmpl differ diff -Nru eccodes-2.15.0/src/action_class_concept.c eccodes-2.16.0/src/action_class_concept.c --- eccodes-2.15.0/src/action_class_concept.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/action_class_concept.c 2020-01-16 10:21:52.000000000 +0000 @@ -305,3 +305,97 @@ GRIB_MUTEX_UNLOCK(&mutex); return result; } + +static int concept_condition_expression_true(grib_handle* h, grib_concept_condition* c, char* exprVal) +{ + long lval; + long lres=0; + int ok = 0; + int err=0; + const int type = grib_expression_native_type(h,c->expression); + + switch(type) + { + case GRIB_TYPE_LONG: + grib_expression_evaluate_long(h,c->expression,&lres); + ok = (grib_get_long(h,c->name,&lval) == GRIB_SUCCESS) && + (lval == lres); + if (ok) sprintf(exprVal, "%ld", lres); + break; + + case GRIB_TYPE_DOUBLE: { + double dval; + double dres=0.0; + grib_expression_evaluate_double(h,c->expression,&dres); + ok = (grib_get_double(h,c->name,&dval) == GRIB_SUCCESS) && + (dval == dres); + if (ok) sprintf(exprVal, "%g", dres); + break; + } + + case GRIB_TYPE_STRING: { + const char *cval; + char buf[80]; + char tmp[80]; + 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); + break; + } + + default: + /* TODO: */ + break; + } + return ok; +} + +/* Caller has to allocate space for the result. + * INPUTS: h, key and value (can be NULL) + * OUTPUT: result + * Example: key='typeOfLevel' whose value is 'mixedLayerDepth', + * result='typeOfFirstFixedSurface=169,typeOfSecondFixedSurface=255' + */ +int get_concept_condition_string(grib_handle* h, const char* key, const char* value, char* result) +{ + int err = 0; + int length = 0; + char strVal[64]={0,}; + char exprVal[256]={0,}; + const char* pValue = value; + size_t len = sizeof(strVal); + grib_concept_value* concept_value = NULL; + grib_accessor* acc = grib_find_accessor(h, key); + if (!acc) return GRIB_NOT_FOUND; + + if (!value) { + err = grib_get_string(h, key, strVal,&len); + if (err) return GRIB_INTERNAL_ERROR; + pValue = strVal; + } + + concept_value = action_concept_get_concept(acc); + while (concept_value) { + grib_concept_condition* concept_condition = concept_value->conditions; + + if (strcmp(pValue, concept_value->name)==0) { + while (concept_condition) { + grib_expression* expression = concept_condition->expression; + Assert(expression); + if (concept_condition_expression_true(h, concept_condition, exprVal)) { + length += sprintf(result+length, "%s%s=%s", + (length==0?"":","),concept_condition->name, exprVal); + } + concept_condition = concept_condition->next; + } + } + + concept_value = concept_value->next; + } + if (length == 0) return GRIB_CONCEPT_NO_MATCH; + return GRIB_SUCCESS; +} diff -Nru eccodes-2.15.0/src/bufr_util.c eccodes-2.16.0/src/bufr_util.c --- eccodes-2.15.0/src/bufr_util.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/bufr_util.c 2020-01-16 10:21:52.000000000 +0000 @@ -806,7 +806,7 @@ else if (strcmp(key, "rdbType")==0) { if (isEcmwfLocal) *len = sprintf(val, "%ld", bh->rdbType); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "oldSubtype")==0) { if (isEcmwfLocal) *len = sprintf(val, "%ld", bh->oldSubtype); else strcpy(val, NOT_FOUND); } else if (strcmp(key, "ident")==0) { - if (!isEcmwfLocal || bh->ident == NULL || strlen(bh->ident)==0) strcpy(val, NOT_FOUND); + if (!isEcmwfLocal || strlen(bh->ident)==0) strcpy(val, NOT_FOUND); else *len = sprintf(val, "%s", bh->ident); } else if (strcmp(key, "localYear")==0) { if (isEcmwfLocal) *len = sprintf(val, "%ld", bh->localYear); else strcpy(val, NOT_FOUND); } diff -Nru eccodes-2.15.0/src/CMakeLists.txt eccodes-2.16.0/src/CMakeLists.txt --- eccodes-2.15.0/src/CMakeLists.txt 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/CMakeLists.txt 2020-01-16 10:21:52.000000000 +0000 @@ -358,6 +358,7 @@ grib_iterator_class_regular.c grib_iterator_class_space_view.c grib_expression.c + codes_util.c grib_util.c bufr_util.c string_util.c diff -Nru eccodes-2.15.0/src/codes_util.c eccodes-2.16.0/src/codes_util.c --- eccodes-2.15.0/src/codes_util.c 1970-01-01 00:00:00.000000000 +0000 +++ eccodes-2.16.0/src/codes_util.c 2020-01-16 10:21:52.000000000 +0000 @@ -0,0 +1,92 @@ +/* + * Copyright 2005-2019 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" + + +#ifdef ECCODES_ON_WINDOWS + /* Replace C99/Unix rint() for Windows Visual C++ (only before VC++ 2013 versions) */ + #if defined _MSC_VER && _MSC_VER < 1800 + double rint(double x) + { + char * buf = 0; + int decimal=0, sign=0, err = 0; + double result = 0; + buf = (char*) malloc(_CVTBUFSIZE); + err = _fcvt_s(buf, _CVTBUFSIZE, x, 0, &decimal, &sign); + Assert(err == 0); + result = atof(buf); + if(sign == 1) { + result = result * -1; + } + free(buf); + return result; + } + #endif +#endif + + +char get_dir_separator_char(void) +{ +#ifdef ECCODES_ON_WINDOWS +# define DIR_SEPARATOR_CHAR '\\' +#else +# define DIR_SEPARATOR_CHAR '/' +#endif + return DIR_SEPARATOR_CHAR; +} + +/* Return 1 if the filepath is a directory, 0 otherwise */ +int path_is_directory(const char* filename) +{ + struct stat s; + int stat_val = stat(filename, &s); + if ( stat_val == 0 ) { + if (S_ISDIR(s.st_mode)) { + return 1; + } + } + return 0; +} + +char* codes_getenv(const char* name) +{ + /* Look for the new ecCodes environment variable names */ + /* if not found, then look for old grib_api ones for backward compatibility */ + char* result = getenv(name); + if (result == NULL) { + const char* old_name = name; + + /* Test the most commonly used variables first */ + if (STR_EQ(name, "ECCODES_SAMPLES_PATH")) old_name="GRIB_SAMPLES_PATH"; + else if (STR_EQ(name, "ECCODES_DEFINITION_PATH")) old_name="GRIB_DEFINITION_PATH"; + else if (STR_EQ(name, "ECCODES_DEBUG")) old_name="GRIB_API_DEBUG"; + + else if (STR_EQ(name, "ECCODES_FAIL_IF_LOG_MESSAGE")) old_name="GRIB_API_FAIL_IF_LOG_MESSAGE"; + else if (STR_EQ(name, "ECCODES_GRIB_WRITE_ON_FAIL")) old_name="GRIB_API_WRITE_ON_FAIL"; + else if (STR_EQ(name, "ECCODES_GRIB_LARGE_CONSTANT_FIELDS")) old_name="GRIB_API_LARGE_CONSTANT_FIELDS"; + else if (STR_EQ(name, "ECCODES_NO_ABORT")) old_name="GRIB_API_NO_ABORT"; + else if (STR_EQ(name, "ECCODES_GRIBEX_MODE_ON")) old_name="GRIB_GRIBEX_MODE_ON"; + else if (STR_EQ(name, "ECCODES_GRIB_IEEE_PACKING")) old_name="GRIB_IEEE_PACKING"; + else if (STR_EQ(name, "ECCODES_IO_BUFFER_SIZE")) old_name="GRIB_API_IO_BUFFER_SIZE"; + else if (STR_EQ(name, "ECCODES_LOG_STREAM")) old_name="GRIB_API_LOG_STREAM"; + else if (STR_EQ(name, "ECCODES_GRIB_NO_BIG_GROUP_SPLIT")) old_name="GRIB_API_NO_BIG_GROUP_SPLIT"; + else if (STR_EQ(name, "ECCODES_GRIB_NO_SPD")) old_name="GRIB_API_NO_SPD"; + else if (STR_EQ(name, "ECCODES_GRIB_KEEP_MATRIX")) old_name="GRIB_API_KEEP_MATRIX"; + else if (STR_EQ(name, "_ECCODES_ECMWF_TEST_DEFINITION_PATH")) old_name="_GRIB_API_ECMWF_TEST_DEFINITION_PATH"; + else if (STR_EQ(name, "_ECCODES_ECMWF_TEST_SAMPLES_PATH")) old_name="_GRIB_API_ECMWF_TEST_SAMPLES_PATH"; + else if (STR_EQ(name, "ECCODES_GRIB_JPEG")) old_name="GRIB_JPEG"; + else if (STR_EQ(name, "ECCODES_GRIB_DUMP_JPG_FILE")) old_name="GRIB_DUMP_JPG_FILE"; + else if (STR_EQ(name, "ECCODES_PRINT_MISSING")) old_name="GRIB_PRINT_MISSING"; + + result = getenv(old_name); + } + return result; +} diff -Nru eccodes-2.15.0/src/eccodes.h eccodes-2.16.0/src/eccodes.h --- eccodes-2.15.0/src/eccodes.h 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/eccodes.h 2020-01-16 10:21:52.000000000 +0000 @@ -1237,7 +1237,7 @@ #define CODES_UTIL_GRID_SPEC_POLAR_STEREOGRAPHIC GRIB_UTIL_GRID_SPEC_POLAR_STEREOGRAPHIC #define CODES_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA #define CODES_UTIL_GRID_SPEC_LAMBERT_CONFORMAL GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL - +#define CODES_UTIL_GRID_SPEC_UNSTRUCTURED GRIB_UTIL_GRID_SPEC_UNSTRUCTURED #define CODES_UTIL_PACKING_TYPE_SPECTRAL_COMPLEX GRIB_UTIL_PACKING_TYPE_SPECTRAL_COMPLEX #define CODES_UTIL_PACKING_TYPE_SPECTRAL_SIMPLE GRIB_UTIL_PACKING_TYPE_SPECTRAL_SIMPLE diff -Nru eccodes-2.15.0/src/grib_accessor_class_bits.c eccodes-2.16.0/src/grib_accessor_class_bits.c --- eccodes-2.15.0/src/grib_accessor_class_bits.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_bits.c 2020-01-16 10:21:52.000000000 +0000 @@ -150,10 +150,6 @@ /* END_CLASS_IMP */ -#ifdef ECCODES_ON_WINDOWS -#define round(a) ( (a) >=0 ? ((a)+0.5) : ((a)-0.5) ) -#endif - static void init(grib_accessor* a,const long l, grib_arguments* c) { grib_accessor_bits* self = (grib_accessor_bits*)a; diff -Nru eccodes-2.15.0/src/grib_accessor_class_bits_per_value.c eccodes-2.16.0/src/grib_accessor_class_bits_per_value.c --- eccodes-2.15.0/src/grib_accessor_class_bits_per_value.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_bits_per_value.c 2020-01-16 10:21:52.000000000 +0000 @@ -178,11 +178,15 @@ return ret; } - if((ret = grib_set_long_internal(h, self->bits_per_value,*val)) - != GRIB_SUCCESS) return ret; + if ((ret = grib_set_long_internal(h, self->bits_per_value,*val)) != GRIB_SUCCESS) { + grib_context_free(c,values); + return ret; + } - if((ret = grib_set_double_array_internal(h, self->values,values,size)) - != GRIB_SUCCESS) return ret; + if ((ret = grib_set_double_array_internal(h, self->values,values,size)) != GRIB_SUCCESS) { + grib_context_free(c,values); + return ret; + } grib_context_free(c,values); diff -Nru eccodes-2.15.0/src/grib_accessor_class_box.c eccodes-2.16.0/src/grib_accessor_class_box.c --- eccodes-2.15.0/src/grib_accessor_class_box.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_box.c 2020-01-16 10:21:52.000000000 +0000 @@ -131,31 +131,30 @@ static void init(grib_accessor* a,const long l, grib_arguments* args) { - grib_accessor_box* self = (grib_accessor_box*)a; - self->args = args; + grib_accessor_box* self = (grib_accessor_box*)a; + self->args = args; } static void dump(grib_accessor* a,grib_dumper* dumper) { - /* TODO: pass args */ - grib_dump_label(dumper,a,NULL); + /* TODO: pass args */ + grib_dump_label(dumper,a,NULL); } grib_box* grib_box_new(grib_handle* h,int* error) { - grib_accessor* a = NULL; - grib_accessor_box* na =NULL; - grib_box* n =NULL; - *error=GRIB_NOT_IMPLEMENTED; - a = grib_find_accessor(h,"BOX"); - na = (grib_accessor_box*)a; + grib_accessor* a = NULL; + grib_accessor_box* na =NULL; + grib_box* n =NULL; + *error=GRIB_NOT_IMPLEMENTED; + a = grib_find_accessor(h,"BOX"); + na = (grib_accessor_box*)a; - if (!a) return NULL; + if (!a) return NULL; - n = grib_box_factory(h,na->args); + n = grib_box_factory(h,na->args); - if (n) *error=GRIB_SUCCESS; + if (n) *error=GRIB_SUCCESS; - return n; + return n; } - diff -Nru eccodes-2.15.0/src/grib_accessor_class_bufr_data_array.c eccodes-2.16.0/src/grib_accessor_class_bufr_data_array.c --- eccodes-2.15.0/src/grib_accessor_class_bufr_data_array.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_bufr_data_array.c 2020-01-16 10:21:52.000000000 +0000 @@ -236,10 +236,6 @@ #define OVERRIDDEN_REFERENCE_VALUES_KEY "inputOverriddenReferenceValues" -#ifdef ECCODES_ON_WINDOWS -#define round(a) ( (a) >=0 ? ((a)+0.5) : ((a)-0.5) ) -#endif - /* Set the error code, if it is bad and we should fail (default case), return */ /* variable 'err' is assumed to be pointer to int */ /* If BUFRDC mode is enabled, then we tolerate problems like wrong data section length */ @@ -606,7 +602,7 @@ { grib_darray* ret=NULL; int j; - unsigned long lval; + size_t lval; int localReference,localWidth,modifiedWidth,modifiedReference; double modifiedFactor,dval; int bufr_multi_element_constant_arrays = c->bufr_multi_element_constant_arrays; @@ -627,7 +623,7 @@ *err=0; return ret; } - lval=grib_decode_unsigned_long(data,pos,modifiedWidth); + lval=grib_decode_size_t(data,pos,modifiedWidth); localReference=(long)lval+modifiedReference; localWidth=grib_decode_unsigned_long(data,pos,6); grib_context_log(c, GRIB_LOG_DEBUG,"BUFR data decoding: \tlocalWidth=%ld",localWidth); @@ -644,7 +640,7 @@ return ret; } for (j=0;jnumberOfSubsets;j++) { - lval=grib_decode_unsigned_long(data,pos,localWidth); + lval=grib_decode_size_t(data,pos,localWidth); if (grib_is_all_bits_one(lval,localWidth) && canBeMissing) { dval=GRIB_MISSING_DOUBLE; } else { @@ -748,7 +744,7 @@ { int err=0; int j,i; - unsigned long lval; + size_t lval; long localReference=0,localWidth=0,modifiedWidth,modifiedReference; long reference,allone; double localRange,modifiedFactor,inverseFactor; @@ -791,7 +787,7 @@ } else { if (*v > maxAllowed || *v < minAllowed) { if (dont_fail_if_out_of_range) { - grib_context_log(c, GRIB_LOG_ERROR, "encode_double_array: %s. Value (%g) out of range (minAllowed=%g, maxAllowed=%g)." + fprintf(stderr, "ECCODES WARNING : encode_double_array: %s. Value (%g) out of range (minAllowed=%g, maxAllowed=%g)." " Setting it to missing value\n", bd->shortName, *v, minAllowed, maxAllowed); grib_set_bits_on(buff->data,pos,modifiedWidth); } else { @@ -801,7 +797,7 @@ } } else { lval=round(*v * inverseFactor)-modifiedReference; - grib_encode_unsigned_longb(buff->data,lval,pos,modifiedWidth); + grib_encode_size_tb(buff->data,lval,pos,modifiedWidth); } } grib_buffer_set_ulength_bits(c,buff,buff->ulength_bits+6); @@ -827,7 +823,7 @@ grib_set_bits_on(buff->data,pos,modifiedWidth); } else { lval=round(*v * inverseFactor)-modifiedReference; - grib_encode_unsigned_longb(buff->data,lval,pos,modifiedWidth); + grib_encode_size_tb(buff->data,lval,pos,modifiedWidth); } grib_buffer_set_ulength_bits(c,buff,buff->ulength_bits+6); grib_encode_unsigned_longb(buff->data,localWidth,pos,6); @@ -845,7 +841,7 @@ while (ii maxAllowed)) { - grib_context_log(c, GRIB_LOG_ERROR, "encode_double_array: %s. Value at index %ld (%g) out of range (minAllowed=%g, maxAllowed=%g)." + fprintf(stderr, "ECCODES WARNING : encode_double_array: %s. Value at index %ld (%g) out of range (minAllowed=%g, maxAllowed=%g)." " Setting it to missing value\n", bd->shortName, (long)ii, *v, minAllowed, maxAllowed); *v = GRIB_MISSING_DOUBLE; @@ -908,7 +904,7 @@ grib_set_bits_on(buff->data,pos,modifiedWidth); } else { lval=localReference-modifiedReference; - grib_encode_unsigned_longb(buff->data,lval,pos,modifiedWidth); + grib_encode_size_tb(buff->data,lval,pos,modifiedWidth); } } grib_buffer_set_ulength_bits(c,buff,buff->ulength_bits+6); @@ -921,7 +917,7 @@ grib_set_bits_on(buff->data,pos,localWidth); } else { lval=round(values[j]*inverseFactor)-reference; - grib_encode_unsigned_longb(buff->data,lval,pos,localWidth); + grib_encode_size_tb(buff->data,lval,pos,localWidth); } } } @@ -934,7 +930,7 @@ static int encode_double_value(grib_context* c,grib_buffer* buff,long* pos,bufr_descriptor* bd, grib_accessor_bufr_data_array* self,double value) { - unsigned long lval; + size_t lval; double maxAllowed,minAllowed; int err=0; int modifiedWidth,modifiedReference; @@ -954,7 +950,7 @@ } else if (value>maxAllowed || valueshortName, value, minAllowed, maxAllowed); value = GRIB_MISSING_DOUBLE; /* Ignore the bad value and instead use 'missing' */ @@ -968,7 +964,7 @@ else { lval=round(value/modifiedFactor)-modifiedReference; if (c->debug) grib_context_log(c, GRIB_LOG_DEBUG, "encode_double_value %s: value=%.15f lval=%lu\n", bd->shortName,value,lval); - grib_encode_unsigned_longb(buff->data,lval,pos,modifiedWidth); + grib_encode_size_tb(buff->data,lval,pos,modifiedWidth); } return err; @@ -1012,7 +1008,7 @@ bufr_descriptor* bd,int canBeMissing, grib_accessor_bufr_data_array* self,int* err) { - unsigned long lval; + size_t lval; int modifiedWidth,modifiedReference; double modifiedFactor; double dval=0; @@ -1026,7 +1022,7 @@ CHECK_END_DATA_RETURN(c, self, modifiedWidth, 0); if (*err) {*err=0; return GRIB_MISSING_DOUBLE;} - lval=grib_decode_unsigned_long(data,pos,modifiedWidth); + lval=grib_decode_size_t(data,pos,modifiedWidth); if (grib_is_all_bits_one(lval,modifiedWidth) && canBeMissing) { dval=GRIB_MISSING_DOUBLE; } else { diff -Nru eccodes-2.15.0/src/grib_accessor_class_bufr_extract_datetime_subsets.c eccodes-2.16.0/src/grib_accessor_class_bufr_extract_datetime_subsets.c --- eccodes-2.15.0/src/grib_accessor_class_bufr_extract_datetime_subsets.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_bufr_extract_datetime_subsets.c 2020-01-16 10:21:52.000000000 +0000 @@ -133,10 +133,6 @@ /* END_CLASS_IMP */ -#ifdef ECCODES_ON_WINDOWS -#define round(a) ( (a) >=0 ? ((a)+0.5) : ((a)-0.5) ) -#endif - static void init(grib_accessor* a, const long len , grib_arguments* arg ) { int n=0; diff -Nru eccodes-2.15.0/src/grib_accessor_class_codetable.c eccodes-2.16.0/src/grib_accessor_class_codetable.c --- eccodes-2.15.0/src/grib_accessor_class_codetable.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_codetable.c 2020-01-16 10:21:52.000000000 +0000 @@ -419,6 +419,9 @@ char* r = title; char* units=0; char unknown[]="unknown"; + char* last_open_paren = NULL; + char* last_clos_paren = NULL; + ++lineNumber; line[strlen(line)-1] = 0; @@ -428,6 +431,8 @@ if(*p == '#') continue; + last_open_paren = strrchr(line, '('); + while(*p != '\0' && isspace(*p)) p++; if( *p =='\0' ) continue; @@ -463,21 +468,25 @@ *q = 0; while(*p != '\0' && isspace(*p)) p++; + /* The title goes as far as the last open paren */ while(*p != '\0') { - if(*p == '(' ) break; + if( last_open_paren && p >= last_open_paren && *p == '(' ) break; *r++ = *p++; } *r = 0; - while(*p != '\0' && isspace(*p)) p++; - if (*p != '\0') { - units=++p; - while(*p != '\0' && *p != ')' ) p++; - *p='\0'; - } else { - units=unknown; + /* units at the end */ + if (last_open_paren) { + last_clos_paren = strrchr(line, ')'); + if (last_clos_paren && last_open_paren!=last_clos_paren) { + units = last_open_paren+1; + p = units; + p += (last_clos_paren - last_open_paren - 1); + *p='\0'; + } } + if (!units) units=unknown; Assert(*abbreviation); Assert(*title); diff -Nru eccodes-2.15.0/src/grib_accessor_class_concept.c eccodes-2.16.0/src/grib_accessor_class_concept.c --- eccodes-2.15.0/src/grib_accessor_class_concept.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_concept.c 2020-01-16 10:21:52.000000000 +0000 @@ -615,6 +615,14 @@ } strcpy(val,p); *len = slen; +#if 0 + if (a->context->debug==1) { + int err = 0; + char result[1024] = {0,}; + err = get_concept_condition_string(grib_handle_of_accessor(a), a->name, val, result); + if (!err) fprintf(stderr, "ECCODES DEBUG concept name=%s, value=%s, conditions=%s\n", a->name, val, result); + } +#endif return GRIB_SUCCESS; } diff -Nru eccodes-2.15.0/src/grib_accessor_class_constant.c eccodes-2.16.0/src/grib_accessor_class_constant.c --- eccodes-2.15.0/src/grib_accessor_class_constant.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_constant.c 2020-01-16 10:21:52.000000000 +0000 @@ -136,40 +136,39 @@ /* END_CLASS_IMP */ - -void accessor_constant_set_type(grib_accessor* a,int type) { - grib_accessor_constant* self = (grib_accessor_constant*)a; - self->type=type; +void accessor_constant_set_type(grib_accessor* a,int type) +{ + grib_accessor_constant* self = (grib_accessor_constant*)a; + self->type=type; } -void accessor_constant_set_dval(grib_accessor* a,double dval) { - grib_accessor_constant* self = (grib_accessor_constant*)a; - self->dval=dval; +void accessor_constant_set_dval(grib_accessor* a,double dval) +{ + grib_accessor_constant* self = (grib_accessor_constant*)a; + self->dval=dval; } - -static void init(grib_accessor* a, const long len , grib_arguments* arg ) +static void init(grib_accessor* a, const long len , grib_arguments* arg) { - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; } static int pack_bytes(grib_accessor* a,const unsigned char* val, size_t *len) { - return GRIB_READ_ONLY; + return GRIB_READ_ONLY; } static int pack_double(grib_accessor* a, const double* val,size_t *len) { - return GRIB_READ_ONLY; + return GRIB_READ_ONLY; } static int pack_long(grib_accessor* a, const long* val,size_t *len) { - return GRIB_READ_ONLY; + return GRIB_READ_ONLY; } static int pack_string(grib_accessor* a, const char* val, size_t *len) { - return GRIB_READ_ONLY; + return GRIB_READ_ONLY; } - diff -Nru eccodes-2.15.0/src/grib_accessor_class_count_missing.c eccodes-2.16.0/src/grib_accessor_class_count_missing.c --- eccodes-2.15.0/src/grib_accessor_class_count_missing.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_count_missing.c 2020-01-16 10:21:52.000000000 +0000 @@ -173,7 +173,6 @@ 8 }; */ - static void init(grib_accessor* a, const long len , grib_arguments* arg ) { int n=0; @@ -185,7 +184,7 @@ self->numberOfDataPoints = grib_arguments_get_name(grib_handle_of_accessor(a),arg,n++); } -static const int used[] ={ 0,1,3,7,15,31,63,127,255}; +static const int used[] = { 0,1,3,7,15,31,63,127,255}; static int unpack_long(grib_accessor* a, long* val, size_t *len) { @@ -197,7 +196,7 @@ long unusedBitsInBitmap=0; long numberOfDataPoints=0; grib_handle* h=grib_handle_of_accessor(a); - grib_accessor* bitmap=grib_find_accessor(grib_handle_of_accessor(a),self->bitmap); + grib_accessor* bitmap=grib_find_accessor(h, self->bitmap); *val=0; *len=1; @@ -214,14 +213,14 @@ unusedBitsInBitmap=size*8-numberOfDataPoints; } - p=grib_handle_of_accessor(a)->buffer->data+offset; + p = h->buffer->data+offset; - size-=unusedBitsInBitmap/8; - unusedBitsInBitmap= unusedBitsInBitmap % 8; + size -= unusedBitsInBitmap/8; + unusedBitsInBitmap = unusedBitsInBitmap % 8; for (i=0;icontext,GRIB_LOG_ERROR,"GRIB1 simple packing: unable to set values"); + grib_context_log(a->context,GRIB_LOG_ERROR,"GRIB1 simple packing: unable to set values (%s)", grib_get_error_message(ret)); return ret; } diff -Nru eccodes-2.15.0/src/grib_accessor_class_data_g22order_packing.c eccodes-2.16.0/src/grib_accessor_class_data_g22order_packing.c --- eccodes-2.15.0/src/grib_accessor_class_data_g22order_packing.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_data_g22order_packing.c 2020-01-16 10:21:52.000000000 +0000 @@ -707,21 +707,35 @@ long lengthIncrementForTheGroupLengths; long trueLengthOfLastGroup; long numberOfBitsUsedForTheScaledGroupLengths; + long orderOfSpatialDifferencing; + long numberOfOctetsExtraDescriptors; long maxgrw ; long maxgrl ; + char packingType[254]={0,}; + size_t slen=254; if (*len ==0) return GRIB_NO_VALUES; - if((err = grib_get_long_internal(gh,self->bits_per_value,&bits_per_value )) != GRIB_SUCCESS) return err; - if((err = grib_get_long_internal(gh,self->decimal_scale_factor,&decimal_scale_factor )) != GRIB_SUCCESS) return err; - if((err = grib_get_long_internal(gh,self->typeOfOriginalFieldValues,&typeOfOriginalFieldValues )) != GRIB_SUCCESS) return err; - if((err = grib_get_long_internal(gh,self->groupSplittingMethodUsed,&groupSplittingMethodUsed )) != GRIB_SUCCESS) return err; - if((err = grib_get_long_internal(gh,self->missingValueManagementUsed,&missingValueManagementUsed )) != GRIB_SUCCESS) return err; - if((err = grib_get_long_internal(gh,self->primaryMissingValueSubstitute,&primaryMissingValueSubstitute )) != GRIB_SUCCESS) return err; - if((err = grib_get_long_internal(gh,self->secondaryMissingValueSubstitute,&secondaryMissingValueSubstitute )) != GRIB_SUCCESS) return err; - if((err = grib_get_long_internal(gh,self->numberOfBitsUsedForTheGroupWidths,&numberOfBitsUsedForTheGroupWidths )) != GRIB_SUCCESS) return err; - if((err = grib_get_long_internal(gh,self->numberOfBitsUsedForTheScaledGroupLengths,&numberOfBitsUsedForTheScaledGroupLengths )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(gh,self->bits_per_value,&bits_per_value )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(gh,self->decimal_scale_factor,&decimal_scale_factor )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(gh,self->typeOfOriginalFieldValues,&typeOfOriginalFieldValues )) != GRIB_SUCCESS) return err; + + /*if((err = grib_get_long_internal(gh,self->groupSplittingMethodUsed,&groupSplittingMethodUsed )) != GRIB_SUCCESS) return err;*/ + /* Key groupSplittingMethodUsed uses Code table 5.4 which has two entries: + * 0 Row by row splitting + * 1 General group splitting + * We only support General group splitting + */ + groupSplittingMethodUsed = 1; + + if((err = grib_get_long_internal(gh,self->missingValueManagementUsed,&missingValueManagementUsed )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(gh,self->primaryMissingValueSubstitute,&primaryMissingValueSubstitute )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(gh,self->secondaryMissingValueSubstitute,&secondaryMissingValueSubstitute )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(gh,self->numberOfBitsUsedForTheGroupWidths,&numberOfBitsUsedForTheGroupWidths )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(gh,self->numberOfBitsUsedForTheScaledGroupLengths,&numberOfBitsUsedForTheScaledGroupLengths )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(gh,self->orderOfSpatialDifferencing,&orderOfSpatialDifferencing)) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(gh,self->numberOfOctetsExtraDescriptors,&numberOfOctetsExtraDescriptors)) != GRIB_SUCCESS) return err; self->dirty=1; @@ -811,8 +825,7 @@ nv-=nvals_per_group; } - /* fprintf(stdout," %d bytes %d marked\n", (ref_p+7)/8 + (width_p+7)/8 + (length_p+7)/8 + (vals_p+7)/8,buf_size); - */ + /*fprintf(stdout,"spatial pack_double:: %ld bytes %lu marked\n", (ref_p+7)/8 + (width_p+7)/8 + (length_p+7)/8 + (vals_p+7)/8, buf_size);*/ grib_buffer_replace(a, buf,buf_size,1,1); grib_context_free (a->context,buf); @@ -841,8 +854,12 @@ if((err = grib_set_long_internal(gh,self->trueLengthOfLastGroup,trueLengthOfLastGroup )) != GRIB_SUCCESS) return err; if((err = grib_set_long_internal(gh,self->numberOfBitsUsedForTheScaledGroupLengths,numberOfBitsUsedForTheScaledGroupLengths )) != GRIB_SUCCESS) return err; - if((err = grib_set_long_internal(gh,self->orderOfSpatialDifferencing,0 )) != GRIB_SUCCESS) return err; - if((err = grib_set_long_internal(gh,self->numberOfOctetsExtraDescriptors,0 )) != GRIB_SUCCESS) return err; + err = grib_get_string(gh, "packingType", packingType, &slen); + if (!err && strcmp(packingType, "grid_complex_spatial_differencing")==0) { + if((err = grib_set_long_internal(gh,self->orderOfSpatialDifferencing,0 )) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(gh,self->numberOfOctetsExtraDescriptors,0 )) != GRIB_SUCCESS) return err; + } + /* ECC-259: Set correct number of values */ if((err = grib_set_long_internal(gh,self->numberOfValues,*len )) != GRIB_SUCCESS) return err; diff -Nru eccodes-2.15.0/src/grib_accessor_class_data_g2bifourier_packing.c eccodes-2.16.0/src/grib_accessor_class_data_g2bifourier_packing.c --- eccodes-2.15.0/src/grib_accessor_class_data_g2bifourier_packing.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_data_g2bifourier_packing.c 2020-01-16 10:21:52.000000000 +0000 @@ -408,8 +408,8 @@ if (! insub) { - int k = i*i+j*j; - itab1[k] = 1; + const int kk = i*i+j*j; + itab1[kk] = 1; } } @@ -450,9 +450,9 @@ } else { - int m, l = itab1[i*i+j*j]; + int m, ll = itab1[i*i+j*j]; for (m = 0; m < 4; m++, isp++) - znorm[l] = MAX (znorm[l], fabs (val[isp])); + znorm[ll] = MAX (znorm[ll], fabs (val[isp])); } } diff -Nru eccodes-2.15.0/src/grib_accessor_class_data_g2simple_packing.c eccodes-2.16.0/src/grib_accessor_class_data_g2simple_packing.c --- eccodes-2.15.0/src/grib_accessor_class_data_g2simple_packing.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_data_g2simple_packing.c 2020-01-16 10:21:52.000000000 +0000 @@ -218,7 +218,7 @@ case GRIB_SUCCESS: break; default: - grib_context_log(a->context,GRIB_LOG_ERROR,"GRIB2 simple packing: unable to set values"); + grib_context_log(a->context,GRIB_LOG_ERROR,"GRIB2 simple packing: unable to set values (%s)", grib_get_error_message(ret)); return ret; } diff -Nru eccodes-2.15.0/src/grib_accessor_class_data_png_packing.c eccodes-2.16.0/src/grib_accessor_class_data_png_packing.c --- eccodes-2.15.0/src/grib_accessor_class_data_png_packing.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_data_png_packing.c 2020-01-16 10:21:52.000000000 +0000 @@ -374,7 +374,7 @@ int err = GRIB_SUCCESS; int i,j; - size_t buflen = grib_byte_count(a); + size_t buflen = 0; unsigned char* buf = NULL; unsigned char* encoded = NULL; diff -Nru eccodes-2.15.0/src/grib_accessor_class_data_simple_packing.c eccodes-2.16.0/src/grib_accessor_class_data_simple_packing.c --- eccodes-2.15.0/src/grib_accessor_class_data_simple_packing.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_data_simple_packing.c 2020-01-16 10:21:52.000000000 +0000 @@ -505,12 +505,26 @@ } #endif -static int check_range(const double val) +static int check_range(grib_handle* h, const double min_val, const double max_val) { - if (val < DBL_MAX && val > -DBL_MAX) - return GRIB_SUCCESS; - else + int result = GRIB_SUCCESS; + grib_context* ctx = h->context; + + if ( !(min_val < DBL_MAX && min_val > -DBL_MAX) ) { + grib_context_log(ctx, GRIB_LOG_ERROR, "Minimum value out of range: %g", min_val); return GRIB_ENCODING_ERROR; + } + if ( !(max_val < DBL_MAX && max_val > -DBL_MAX) ) { + grib_context_log(ctx, GRIB_LOG_ERROR, "Maximum value out of range: %g", max_val); + return GRIB_ENCODING_ERROR; + } + + /* Data Quality checks */ + if (ctx->grib_data_quality_checks) { + result = grib_util_grib_data_quality_check(h, min_val, max_val); + } + + return result; } static int pack_double(grib_accessor* a, const double* val, size_t *len) @@ -577,12 +591,7 @@ else if (val[i] < min ) min = val[i]; } #endif - if ((err = check_range(max)) != GRIB_SUCCESS) { - grib_context_log(a->context,GRIB_LOG_ERROR,"Maximum value out of range: %g", max); - return err; - } - if ((err = check_range(min)) != GRIB_SUCCESS) { - grib_context_log(a->context,GRIB_LOG_ERROR,"Minimum value out of range: %g", min); + if ((err = check_range(gh, min, max)) != GRIB_SUCCESS) { return err; } diff -Nru eccodes-2.15.0/src/grib_accessor_class_double.c eccodes-2.16.0/src/grib_accessor_class_double.c --- eccodes-2.15.0/src/grib_accessor_class_double.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_double.c 2020-01-16 10:21:52.000000000 +0000 @@ -219,18 +219,17 @@ return grib_pack_double(a,&value,&one); return GRIB_VALUE_CANNOT_BE_MISSING; } - /* static int is_missing(grib_accessor* a){ - size_t one = 1; - double value = GRIB_MISSING_DOUBLE; + size_t one = 1; + double value = GRIB_MISSING_DOUBLE; - if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) - { - int e=grib_unpack_double(a,&value,&one); - Assert(e == 0); - return value == GRIB_MISSING_DOUBLE; - } - return 0; + if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) + { + int e=grib_unpack_double(a,&value,&one); + Assert(e == 0); + return value == GRIB_MISSING_DOUBLE; + } + return 0; } */ diff -Nru eccodes-2.15.0/src/grib_accessor_class_evaluate.c eccodes-2.16.0/src/grib_accessor_class_evaluate.c --- eccodes-2.15.0/src/grib_accessor_class_evaluate.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_evaluate.c 2020-01-16 10:21:52.000000000 +0000 @@ -132,28 +132,24 @@ static void init(grib_accessor* a,const long l, grib_arguments* c) { - grib_accessor_evaluate* self = (grib_accessor_evaluate*)a; - self->arg = c; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + grib_accessor_evaluate* self = (grib_accessor_evaluate*)a; + self->arg = c; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -static int pack_long(grib_accessor* a, const long* val, size_t *len){ - - return GRIB_NOT_IMPLEMENTED; - +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + return GRIB_NOT_IMPLEMENTED; } - static int unpack_long(grib_accessor* a, long* val, size_t *len) { - int ret=0; - grib_accessor_evaluate* self = (grib_accessor_evaluate*)a; - grib_expression* e = grib_arguments_get_expression(grib_handle_of_accessor(a),self->arg,0); - + int ret=0; + grib_accessor_evaluate* self = (grib_accessor_evaluate*)a; + grib_expression* e = grib_arguments_get_expression(grib_handle_of_accessor(a),self->arg,0); - ret = grib_expression_evaluate_long(grib_handle_of_accessor(a),e,val); - *len = 1; + ret = grib_expression_evaluate_long(grib_handle_of_accessor(a),e,val); + *len = 1; - return ret; + return ret; } - diff -Nru eccodes-2.15.0/src/grib_accessor_class_expanded_descriptors.c eccodes-2.16.0/src/grib_accessor_class_expanded_descriptors.c --- eccodes-2.15.0/src/grib_accessor_class_expanded_descriptors.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_expanded_descriptors.c 2020-01-16 10:21:52.000000000 +0000 @@ -173,7 +173,7 @@ /* Handy macro to catch errors. * Arguments: array is a pointer to 'bufr_descriptors_array', result is pointer to 'bufr_descriptor' */ #define DESCRIPTORS_POP_FRONT_OR_RETURN(array,result) {\ - if(array->n == 0) { *err=GRIB_INTERNAL_ERROR; return 0; } \ + if(array->n == 0) { *err=GRIB_INTERNAL_ERROR; return; } \ result=grib_bufr_descriptors_array_pop_front(array); \ } @@ -210,7 +210,7 @@ #define BUFR_DESCRIPTORS_ARRAY_USED_SIZE(v) ((v)->n) -static size_t __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_descriptors_array* expanded, +static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_descriptors_array* expanded, change_coding_params* ccp, int* err) { int k,j,i; @@ -227,11 +227,12 @@ bufr_descriptor* us=NULL; bufr_descriptors_array* inner_expanded=NULL; bufr_descriptors_array* inner_unexpanded=NULL; + grib_handle* hand = grib_handle_of_accessor(a); #if MYDEBUG int idepth; #endif - if (BUFR_DESCRIPTORS_ARRAY_USED_SIZE(unexpanded)==0) return 0; + if (BUFR_DESCRIPTORS_ARRAY_USED_SIZE(unexpanded)==0) return; us=grib_bufr_descriptor_clone(grib_bufr_descriptors_array_get(unexpanded,0)); us->context = c; @@ -250,13 +251,13 @@ printf("+++ pop %06ld\n",u->code); #endif /*this is to get the sequence elements of the sequence unexpanded[i] */ - *err=grib_set_long(grib_handle_of_accessor(a),self->sequence,u->code); - *err=grib_get_size(grib_handle_of_accessor(a),self->sequence,&size); + *err=grib_set_long(hand,self->sequence,u->code); + *err=grib_get_size(hand,self->sequence,&size); grib_bufr_descriptor_delete(u); - if (*err) return 0; + if (*err) return; v=(long*)grib_context_malloc_clear(c,sizeof(long)*size); - *err=grib_get_long_array(grib_handle_of_accessor(a),self->sequence,v,&size); - if (*err) return 0; + *err=grib_get_long_array(hand,self->sequence,v,&size); + if (*err) return; inner_unexpanded=grib_bufr_descriptors_array_new(c,DESC_SIZE_INIT,DESC_SIZE_INCR); for (i=0;in;i++) { @@ -299,7 +300,7 @@ "Delayed replication: %06ld: expected %d but only found %lu elements", u->code, us->X, unexpanded->n - 1); *err = GRIB_DECODING_ERROR; - return 0; + return; } for (j=0;jX+1;j++) { DESCRIPTORS_POP_FRONT_OR_RETURN(unexpanded, u0); @@ -310,7 +311,7 @@ #endif } inner_expanded=do_expand(a,inner_unexpanded,ccp,err); - if (*err) return 0; + if (*err) return; grib_bufr_descriptors_array_delete(inner_unexpanded); size=BUFR_DESCRIPTORS_ARRAY_USED_SIZE(inner_expanded); #if MYDEBUG @@ -353,7 +354,7 @@ for (i=0;iX;i++) grib_bufr_descriptor_delete(ur[i]); grib_context_free(c,ur); inner_expanded=do_expand(a,inner_unexpanded,ccp,err); - if (*err) return 0; + if (*err) return; grib_bufr_descriptors_array_delete(inner_unexpanded); #if MYDEBUG for (i=0;in;i++) { @@ -482,7 +483,6 @@ printf("expanding <== %d-%.2d-%.3d (size=%ld)\n\n",us->F,us->X,us->Y,size); #endif if (us) grib_bufr_descriptor_delete(us); - return size; } static bufr_descriptors_array* do_expand(grib_accessor* a,bufr_descriptors_array* unexpanded,change_coding_params* ccp,int *err) @@ -566,7 +566,7 @@ return err; } - err=grib_get_size(grib_handle_of_accessor(a),self->unexpandedDescriptors,&unexpandedSize); + err=grib_get_size(h,self->unexpandedDescriptors,&unexpandedSize); if (err) return err; if (unexpandedSize==0) { grib_context_log(c, GRIB_LOG_ERROR, "%s: Unexpanded size is zero!", a->name); @@ -574,7 +574,7 @@ } u=(long*)grib_context_malloc_clear(c,sizeof(long)*unexpandedSize); if (!u) {err=GRIB_OUT_OF_MEMORY; return err;} - err=grib_get_long_array(grib_handle_of_accessor(a),self->unexpandedDescriptors,u,&unexpandedSize); + err=grib_get_long_array(h,self->unexpandedDescriptors,u,&unexpandedSize); if (err) return err; err=grib_get_long(h,"bufrHeaderCentre",¢re); @@ -595,7 +595,7 @@ } if (!self->tablesAccessor) { - self->tablesAccessor=grib_find_accessor(grib_handle_of_accessor(a),self->tablesAccessorName); + self->tablesAccessor=grib_find_accessor(h,self->tablesAccessorName); Assert(self->tablesAccessor); } @@ -696,8 +696,9 @@ size_t i; ret=expand(a); - rlen=BUFR_DESCRIPTORS_ARRAY_USED_SIZE(self->expanded); if (ret) return ret; + if (!self->expanded) return GRIB_DECODING_ERROR; + rlen=BUFR_DESCRIPTORS_ARRAY_USED_SIZE(self->expanded); if(*len < rlen) { diff -Nru eccodes-2.15.0/src/grib_accessor_class_from_scale_factor_scaled_value.c eccodes-2.16.0/src/grib_accessor_class_from_scale_factor_scaled_value.c --- eccodes-2.15.0/src/grib_accessor_class_from_scale_factor_scaled_value.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_from_scale_factor_scaled_value.c 2020-01-16 10:21:52.000000000 +0000 @@ -15,6 +15,7 @@ #include "grib_api_internal.h" #include +#include /* This is used by make_class.pl @@ -167,7 +168,7 @@ return 0; } -static double eval_value_factor(long value, long factor) +static double eval_value_factor(int64_t value, int64_t factor) { return (double)value * pow(10.0, -factor); } @@ -179,8 +180,8 @@ grib_accessor_from_scale_factor_scaled_value* self = (grib_accessor_from_scale_factor_scaled_value*)a; grib_handle* hand = grib_handle_of_accessor(a); int ret = 0; - long factor=0, prev_factor=0; - long value=0, prev_value=0; + int64_t factor=0, prev_factor=0; + int64_t value=0, prev_value=0; double exact = *val; /*the input*/ const float epsilon = float_epsilon(); unsigned long maxval_value, maxval_factor; /*maximum allowable values*/ diff -Nru eccodes-2.15.0/src/grib_accessor_class_g1bitmap.c eccodes-2.16.0/src/grib_accessor_class_g1bitmap.c --- eccodes-2.15.0/src/grib_accessor_class_g1bitmap.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_g1bitmap.c 2020-01-16 10:21:52.000000000 +0000 @@ -139,19 +139,15 @@ static void grib_set_bit_on( unsigned char* p, long *bitp); -static void init(grib_accessor* a, const long len , grib_arguments* arg ) +static void init(grib_accessor* a, const long len , grib_arguments* arg) { - grib_accessor_g1bitmap* self = (grib_accessor_g1bitmap*)a; - self->unusedBits = grib_arguments_get_name(grib_handle_of_accessor(a),arg,4); - } - -static int pack_double(grib_accessor* a, const double* val,size_t *len){ +static int pack_double(grib_accessor* a, const double* val,size_t *len) +{ grib_accessor_g1bitmap* self = (grib_accessor_g1bitmap*)a; - size_t tlen; unsigned char* buf = NULL; @@ -191,7 +187,6 @@ return GRIB_SUCCESS; } - static int value_count(grib_accessor* a,long* count) { grib_accessor_g1bitmap* self = (grib_accessor_g1bitmap*)a; @@ -201,8 +196,8 @@ if ((err=grib_get_long_internal(grib_handle_of_accessor(a), self->unusedBits, &tlen)) != GRIB_SUCCESS) grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_class_bitmap.value_count : cannot get %s err=%d",self->unusedBits,err); - *count = (a->length*8)-tlen; - return err; + *count = (a->length*8)-tlen; + return err; } static int unpack_bytes(grib_accessor* a, unsigned char* val, size_t *len) @@ -232,7 +227,8 @@ return GRIB_SUCCESS; } -static void grib_set_bit_on( unsigned char* p, long *bitp){ +static void grib_set_bit_on( unsigned char* p, long *bitp) +{ unsigned char o = 1; p += (*bitp >> 3); o <<= 7-((*bitp)%8); diff -Nru eccodes-2.15.0/src/grib_accessor_class_g1fcperiod.c eccodes-2.16.0/src/grib_accessor_class_g1fcperiod.c --- eccodes-2.15.0/src/grib_accessor_class_g1fcperiod.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_g1fcperiod.c 2020-01-16 10:21:52.000000000 +0000 @@ -138,30 +138,27 @@ /* END_CLASS_IMP */ - static int unpack_string(grib_accessor* a, char* val, size_t *len) { - long start = 0, theEnd = 0; - char tmp[1024]; - int err = grib_g1_step_get_steps(a,&start,&theEnd); - size_t l = 0; - - - if(err) return err; + long start = 0, theEnd = 0; + char tmp[1024]; + 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); + /*printf("---- FCPERIOD %s [start:%g, end:%g]",tmp,start,end);*/ + + l = strlen(tmp) + 1; + if(*len < l) + { + *len = l; + return GRIB_BUFFER_TOO_SMALL; + } - sprintf(tmp,"%ld-%ld",start/24,theEnd/24); - /*printf("---- FCPERIOD %s [start:%g, end:%g]",tmp,start,end);*/ - - l = strlen(tmp) + 1; - if(*len < l) - { *len = l; - return GRIB_BUFFER_TOO_SMALL; - } - - *len = l; - strcpy(val,tmp); - + strcpy(val,tmp); - return GRIB_SUCCESS; + return GRIB_SUCCESS; } diff -Nru eccodes-2.15.0/src/grib_accessor_class_g2grid.c eccodes-2.16.0/src/grib_accessor_class_g2grid.c --- eccodes-2.15.0/src/grib_accessor_class_g2grid.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_g2grid.c 2020-01-16 10:21:52.000000000 +0000 @@ -149,10 +149,6 @@ /* END_CLASS_IMP */ -#ifdef ECCODES_ON_WINDOWS -#define round(a) ( (a) >=0 ? ((a)+0.5) : ((a)-0.5) ) -#endif - static void init(grib_accessor* a,const long l, grib_arguments* c) { grib_accessor_g2grid* self = (grib_accessor_g2grid*)a; diff -Nru eccodes-2.15.0/src/grib_accessor_class_gen.c eccodes-2.16.0/src/grib_accessor_class_gen.c --- eccodes-2.15.0/src/grib_accessor_class_gen.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_gen.c 2020-01-16 10:21:52.000000000 +0000 @@ -487,9 +487,23 @@ return GRIB_NOT_IMPLEMENTED; } -static int pack_string_array(grib_accessor*a , const char** v, size_t *len) +static int pack_string_array(grib_accessor*a , const char** v, size_t *len) { - return GRIB_NOT_IMPLEMENTED; + long i; + int err = 0; + size_t length = 0; + grib_accessor* as = 0; + + as = a; + i = (long)*len - 1; + while(as && i >= 0) { + length = strlen(v[i]); + err = grib_pack_string(as, v[i], &length); + if (err) return err; + --i; + as = as->same; + } + return GRIB_SUCCESS; } static int pack_string(grib_accessor*a , const char* v, size_t *len){ @@ -508,7 +522,7 @@ } grib_context_log(a->context,GRIB_LOG_ERROR, - " Should not grib_pack %s as string", a->name); + " Should not grib_pack %s as string", a->name); return GRIB_NOT_IMPLEMENTED; } diff -Nru eccodes-2.15.0/src/grib_accessor_class_label.c eccodes-2.16.0/src/grib_accessor_class_label.c --- eccodes-2.15.0/src/grib_accessor_class_label.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_label.c 2020-01-16 10:21:52.000000000 +0000 @@ -129,33 +129,31 @@ static void init(grib_accessor* a, const long len , grib_arguments* arg) { - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; - a->length = 0; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + a->length = 0; } - static void dump(grib_accessor* a, grib_dumper* dumper) { - grib_dump_label(dumper,a,NULL); + grib_dump_label(dumper,a,NULL); } static int get_native_type(grib_accessor* a) { - return GRIB_TYPE_LABEL; + return GRIB_TYPE_LABEL; } - -static int compare(grib_accessor* a, grib_accessor* b) { - return GRIB_SUCCESS; +static int compare(grib_accessor* a, grib_accessor* b) +{ + return GRIB_SUCCESS; } static int unpack_string(grib_accessor* a, char* val, size_t *len) { - size_t vlen=strlen(a->name); - if (vlen > *len) return GRIB_BUFFER_TOO_SMALL; - *len=vlen; - strcpy(val,a->name); - return GRIB_SUCCESS; + size_t vlen=strlen(a->name); + if (vlen > *len) return GRIB_BUFFER_TOO_SMALL; + *len=vlen; + strcpy(val,a->name); + return GRIB_SUCCESS; } - diff -Nru eccodes-2.15.0/src/grib_accessor_class_latlon_increment.c eccodes-2.16.0/src/grib_accessor_class_latlon_increment.c --- eccodes-2.15.0/src/grib_accessor_class_latlon_increment.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_latlon_increment.c 2020-01-16 10:21:52.000000000 +0000 @@ -162,7 +162,7 @@ self->isLongitude=grib_arguments_get_long(grib_handle_of_accessor(a), c,n++); } -static int unpack_double (grib_accessor* a, double* val, size_t *len) +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; @@ -315,8 +315,8 @@ } /*ret = grib_set_long_internal(grib_handle_of_accessor(a), 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); + 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); @@ -342,8 +342,8 @@ return ret; } -static int is_missing(grib_accessor* a){ - +static int is_missing(grib_accessor* a) +{ size_t len=1; double val=0; diff -Nru eccodes-2.15.0/src/grib_accessor_class_local_definition.c eccodes-2.16.0/src/grib_accessor_class_local_definition.c --- eccodes-2.15.0/src/grib_accessor_class_local_definition.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_local_definition.c 2020-01-16 10:21:52.000000000 +0000 @@ -395,7 +395,7 @@ grib_set_long(hand, self->grib2LocalSectionNumber,*val); - return 0; + return 0; } static int value_count(grib_accessor* a,long* count) @@ -403,4 +403,3 @@ *count=1; return 0; } - diff -Nru eccodes-2.15.0/src/grib_accessor_class_long.c eccodes-2.16.0/src/grib_accessor_class_long.c --- eccodes-2.15.0/src/grib_accessor_class_long.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_long.c 2020-01-16 10:21:52.000000000 +0000 @@ -186,20 +186,20 @@ /* static int is_missing(grib_accessor* a){ - size_t one = 1; - long value = GRIB_MISSING_LONG; - long ret=0; + size_t one = 1; + long value = GRIB_MISSING_LONG; + long ret=0; - if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) - { - ret = grib_unpack_long(a,&value,&one); - Assert( ret == 0); - return value == GRIB_MISSING_LONG; - } + if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) + { + ret = grib_unpack_long(a,&value,&one); + Assert( ret == 0); + return value == GRIB_MISSING_LONG; + } - return 0; + return 0; } - */ +*/ static int unpack_double(grib_accessor* a, double* val,size_t *len) { diff -Nru eccodes-2.15.0/src/grib_accessor_class_long_vector.c eccodes-2.16.0/src/grib_accessor_class_long_vector.c --- eccodes-2.15.0/src/grib_accessor_class_long_vector.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_long_vector.c 2020-01-16 10:21:52.000000000 +0000 @@ -142,90 +142,91 @@ /* END_CLASS_IMP */ typedef struct grib_accessor_abstract_long_vector { - grib_accessor att; - /* Members defined in gen */ - /* Members defined in abstract_long_vector */ - long* v; - long pack_index; - int number_of_elements; + grib_accessor att; + /* Members defined in gen */ + /* Members defined in abstract_long_vector */ + long* v; + long pack_index; + int number_of_elements; } grib_accessor_abstract_long_vector; static void init(grib_accessor* a,const long l, grib_arguments* c) { - grib_accessor_long_vector* self = (grib_accessor_long_vector*)a; - grib_accessor* va=NULL; - grib_accessor_abstract_long_vector* v =NULL; - int n = 0; + grib_accessor_long_vector* self = (grib_accessor_long_vector*)a; + grib_accessor* va=NULL; + grib_accessor_abstract_long_vector* v =NULL; + int n = 0; - self->vector = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++); + self->vector = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++); - va=(grib_accessor*)grib_find_accessor(grib_handle_of_accessor(a),self->vector); - v=(grib_accessor_abstract_long_vector*)va; + va=(grib_accessor*)grib_find_accessor(grib_handle_of_accessor(a),self->vector); + v=(grib_accessor_abstract_long_vector*)va; - self->index = grib_arguments_get_long(grib_handle_of_accessor(a),c,n++); + self->index = grib_arguments_get_long(grib_handle_of_accessor(a),c,n++); - /* check self->index on init and never change it */ - Assert(self->index < v->number_of_elements && self->index>=0); + /* check self->index on init and never change it */ + Assert(self->index < v->number_of_elements && self->index>=0); - a->length=0; + a->length=0; } -static int unpack_long(grib_accessor* a, long* val, size_t *len) { - size_t size=0; - long* vector; - grib_accessor_long_vector* self = (grib_accessor_long_vector*)a; - grib_accessor* va=NULL; - grib_accessor_abstract_long_vector* v =NULL; - - va=(grib_accessor*)grib_find_accessor(grib_handle_of_accessor(a),self->vector); - v=(grib_accessor_abstract_long_vector*)va; - - /*TODO implement the dirty mechanism to avoid to unpack every time */ - grib_get_size(grib_handle_of_accessor(a),self->vector,&size); - vector=(long*)grib_context_malloc(a->context,sizeof(long)*size); - grib_unpack_long(va,vector,&size); - grib_context_free(a->context,vector); - +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + size_t size=0; + long* vector; + grib_accessor_long_vector* self = (grib_accessor_long_vector*)a; + grib_accessor* va=NULL; + grib_accessor_abstract_long_vector* v =NULL; + + va=(grib_accessor*)grib_find_accessor(grib_handle_of_accessor(a),self->vector); + v=(grib_accessor_abstract_long_vector*)va; + + /*TODO implement the dirty mechanism to avoid to unpack every time */ + grib_get_size(grib_handle_of_accessor(a),self->vector,&size); + vector=(long*)grib_context_malloc(a->context,sizeof(long)*size); + grib_unpack_long(va,vector,&size); + grib_context_free(a->context,vector); - *val = v->v[self->index]; + *val = v->v[self->index]; - return GRIB_SUCCESS; + return GRIB_SUCCESS; } -static int unpack_double(grib_accessor* a, double* val, size_t *len) { - long lval=0; - int err=0; - grib_accessor_long_vector* self = (grib_accessor_long_vector*)a; - grib_accessor* va=NULL; - grib_accessor_abstract_long_vector* v =NULL; - va=(grib_accessor*)grib_find_accessor(grib_handle_of_accessor(a),self->vector); - v=(grib_accessor_abstract_long_vector*)va; - - err=unpack_long(a,&lval,len); +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + long lval=0; + int err=0; + grib_accessor_long_vector* self = (grib_accessor_long_vector*)a; + grib_accessor* va=NULL; + grib_accessor_abstract_long_vector* v =NULL; + va=(grib_accessor*)grib_find_accessor(grib_handle_of_accessor(a),self->vector); + v=(grib_accessor_abstract_long_vector*)va; + + err=unpack_long(a,&lval,len); - *val = (double)v->v[self->index]; + *val = (double)v->v[self->index]; - return err; + return err; } -static int pack_long (grib_accessor* a, const long* val, size_t *len) { - int err=0; - grib_accessor_long_vector* self = (grib_accessor_long_vector*)a; - grib_accessor* va=NULL; - grib_accessor_abstract_long_vector* v =NULL; - - va=(grib_accessor*)grib_find_accessor(grib_handle_of_accessor(a),self->vector); - v=(grib_accessor_abstract_long_vector*)va; +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + int err=0; + grib_accessor_long_vector* self = (grib_accessor_long_vector*)a; + grib_accessor* va=NULL; + grib_accessor_abstract_long_vector* v =NULL; + + va=(grib_accessor*)grib_find_accessor(grib_handle_of_accessor(a),self->vector); + v=(grib_accessor_abstract_long_vector*)va; - v->pack_index=self->index; + v->pack_index=self->index; - err=grib_pack_long(va,val,len); + err=grib_pack_long(va,val,len); - return err; + return err; } -static int get_native_type(grib_accessor* a){ - return GRIB_TYPE_LONG; +static int get_native_type(grib_accessor* a) +{ + return GRIB_TYPE_LONG; } - - diff -Nru eccodes-2.15.0/src/grib_accessor_class_message.c eccodes-2.16.0/src/grib_accessor_class_message.c --- eccodes-2.15.0/src/grib_accessor_class_message.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_message.c 2020-01-16 10:21:52.000000000 +0000 @@ -136,9 +136,9 @@ static void init(grib_accessor* a, const long len, grib_arguments*arg ) { - a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->length=grib_handle_of_accessor(a)->buffer->ulength-len-a->offset; + a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->length=grib_handle_of_accessor(a)->buffer->ulength-len-a->offset; } static int compare(grib_accessor* a, grib_accessor* b) @@ -149,43 +149,41 @@ static void update_size(grib_accessor* a,size_t new_size) { - /* printf("update_size: grib_accessor_class_message.c %ld %ld %s %s\n", (long)new_size,(long)a->length,a->cclass->name,a->name); */ - a->length = new_size; + /* printf("update_size: grib_accessor_class_message.c %ld %ld %s %s\n", (long)new_size,(long)a->length,a->cclass->name,a->name); */ + a->length = new_size; } static void resize(grib_accessor* a,size_t new_size) { - void* zero = grib_context_malloc_clear(a->context,new_size); - - grib_buffer_replace(a,(const unsigned char*)zero,new_size,1,0); - grib_context_free(a->context,zero); - grib_context_log(a->context,GRIB_LOG_DEBUG,"resize: grib_accessor_class_message.c %ld %ld %s %s\n",(long)new_size,(long)a->length,a->cclass->name,a->name); - Assert(new_size == a->length); + void* zero = grib_context_malloc_clear(a->context,new_size); + grib_buffer_replace(a,(const unsigned char*)zero,new_size,1,0); + grib_context_free(a->context,zero); + grib_context_log(a->context,GRIB_LOG_DEBUG,"resize: grib_accessor_class_message.c %ld %ld %s %s\n",(long)new_size,(long)a->length,a->cclass->name,a->name); + Assert(new_size == a->length); } static int value_count(grib_accessor* a,long* count){ *count=1;return 0;} static int unpack_string(grib_accessor* a, char* val, size_t *len) { + int i = 0; - int i = 0; - - if(len[0] < (a->length+1)) - { - grib_context_log(a->context, GRIB_LOG_ERROR, "unpack_string: Wrong size (%d) for %s it contains %d values ", len[0], a->name , a->length+1 ); - len[0] = 0; - return GRIB_ARRAY_TOO_SMALL; - } - - for ( i = 0; i < a->length; i++) - val[i] = grib_handle_of_accessor(a)->buffer->data[a->offset+i]; - val[i] = 0; - len[0] = i; - return GRIB_SUCCESS; + if(len[0] < (a->length+1)) + { + grib_context_log(a->context, GRIB_LOG_ERROR, "unpack_string: Wrong size (%d) for %s it contains %d values ", len[0], a->name , a->length+1 ); + len[0] = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + for ( i = 0; i < a->length; i++) + val[i] = grib_handle_of_accessor(a)->buffer->data[a->offset+i]; + val[i] = 0; + len[0] = i; + return GRIB_SUCCESS; } static size_t string_length(grib_accessor* a) { - return a->length; + return a->length; } diff -Nru eccodes-2.15.0/src/grib_accessor_class_message_copy.c eccodes-2.16.0/src/grib_accessor_class_message_copy.c --- eccodes-2.15.0/src/grib_accessor_class_message_copy.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_message_copy.c 2020-01-16 10:21:52.000000000 +0000 @@ -131,42 +131,43 @@ static void init(grib_accessor* a, const long length , grib_arguments* args ) { - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->length=0; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->length=0; } static void dump(grib_accessor* a, grib_dumper* dumper) { - grib_dump_string(dumper,a,NULL); + grib_dump_string(dumper,a,NULL); } static int get_native_type(grib_accessor* a) { - return GRIB_TYPE_STRING; + return GRIB_TYPE_STRING; } -static int unpack_string (grib_accessor* a, char* val, size_t *len){ - size_t slen=grib_handle_of_accessor(a)->buffer->ulength ; - size_t i; - unsigned char* v=0; - - if (*len < slen) { return GRIB_ARRAY_TOO_SMALL; } - v=grib_handle_of_accessor(a)->buffer->data; - /* replace unprintable characters with space */ - for (i=0;i126) v[i]=32; - memcpy(val,grib_handle_of_accessor(a)->buffer->data,slen); +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + size_t slen=grib_handle_of_accessor(a)->buffer->ulength ; + size_t i; + unsigned char* v=0; + + if (*len < slen) { return GRIB_ARRAY_TOO_SMALL; } + v=grib_handle_of_accessor(a)->buffer->data; + /* replace unprintable characters with space */ + for (i=0;i126) v[i]=32; + memcpy(val,grib_handle_of_accessor(a)->buffer->data,slen); - *len=slen; + *len=slen; - return GRIB_SUCCESS; + return GRIB_SUCCESS; } static size_t string_length(grib_accessor* a) { - return grib_handle_of_accessor(a)->buffer->ulength; + return grib_handle_of_accessor(a)->buffer->ulength; } -static long byte_count(grib_accessor* a) { - return a->length; +static long byte_count(grib_accessor* a) +{ + return a->length; } - diff -Nru eccodes-2.15.0/src/grib_accessor_class_nearest.c eccodes-2.16.0/src/grib_accessor_class_nearest.c --- eccodes-2.15.0/src/grib_accessor_class_nearest.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_nearest.c 2020-01-16 10:21:52.000000000 +0000 @@ -130,32 +130,31 @@ static void init(grib_accessor* a,const long l, grib_arguments* args) { - grib_accessor_nearest* self = (grib_accessor_nearest*)a; - self->args = args; + grib_accessor_nearest* self = (grib_accessor_nearest*)a; + self->args = args; } static void dump(grib_accessor* a,grib_dumper* dumper) { - /* TODO: pass args */ - grib_dump_label(dumper,a,NULL); + /* TODO: pass args */ + grib_dump_label(dumper,a,NULL); } grib_nearest* grib_nearest_new(const grib_handle* ch, int* error) { - grib_handle* h = (grib_handle*)ch; - grib_accessor* a = NULL; - grib_accessor_nearest* na =NULL; - grib_nearest* n =NULL; - *error=GRIB_NOT_IMPLEMENTED; - a = grib_find_accessor(h,"NEAREST"); - na = (grib_accessor_nearest*)a; + grib_handle* h = (grib_handle*)ch; + grib_accessor* a = NULL; + grib_accessor_nearest* na =NULL; + grib_nearest* n =NULL; + *error=GRIB_NOT_IMPLEMENTED; + a = grib_find_accessor(h,"NEAREST"); + na = (grib_accessor_nearest*)a; - if (!a) return NULL; + if (!a) return NULL; - n = grib_nearest_factory(h,na->args); + n = grib_nearest_factory(h,na->args); - if (n) *error=GRIB_SUCCESS; + if (n) *error=GRIB_SUCCESS; - return n; + return n; } - diff -Nru eccodes-2.15.0/src/grib_accessor_class_offset_file.c eccodes-2.16.0/src/grib_accessor_class_offset_file.c --- eccodes-2.15.0/src/grib_accessor_class_offset_file.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_offset_file.c 2020-01-16 10:21:52.000000000 +0000 @@ -134,42 +134,39 @@ static void init(grib_accessor* a,const long l, grib_arguments* c) { - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->length=0; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->length=0; } -static int unpack_double(grib_accessor* a, double* val, size_t *len) +static int unpack_double(grib_accessor* a, double* val, size_t *len) { - *val = (double)grib_handle_of_accessor(a)->offset; - *len =1; - return 0; + *val = (double)grib_handle_of_accessor(a)->offset; + *len =1; + return 0; } -static int unpack_string(grib_accessor*a , char* v, size_t *len){ +static int unpack_string(grib_accessor*a , char* v, size_t *len) +{ + double val = 0; + size_t l = 1; + char repres[1024]; - double val = 0; - size_t l = 1; - char repres[1024]; + grib_unpack_double (a , &val, &l); - grib_unpack_double (a , &val, &l); + sprintf(repres,"%.0f", val); - sprintf(repres,"%.0f", val); + l = strlen(repres)+1; - l = strlen(repres)+1; + if(l >*len ){ + grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_long : unpack_string : Buffer too small for %s ", a->name ); - if(l >*len ){ - grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_long : unpack_string : Buffer too small for %s ", a->name ); + *len = l; + return GRIB_BUFFER_TOO_SMALL; + } + grib_context_log(a->context,GRIB_LOG_DEBUG, "grib_accessor_long: Casting double %s to string ", a->name); *len = l; - return GRIB_BUFFER_TOO_SMALL; - } - grib_context_log(a->context,GRIB_LOG_DEBUG, "grib_accessor_long: Casting double %s to string ", a->name); - - *len = l; - - strcpy(v,repres); - return GRIB_SUCCESS; - + strcpy(v,repres); + return GRIB_SUCCESS; } - diff -Nru eccodes-2.15.0/src/grib_accessor_class_pack_bufr_values.c eccodes-2.16.0/src/grib_accessor_class_pack_bufr_values.c --- eccodes-2.15.0/src/grib_accessor_class_pack_bufr_values.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_pack_bufr_values.c 2020-01-16 10:21:52.000000000 +0000 @@ -134,70 +134,67 @@ /* END_CLASS_IMP */ -static void init(grib_accessor* a, const long len, grib_arguments* params) { - - char* key; - grib_accessor_pack_bufr_values* self = (grib_accessor_pack_bufr_values*)a; - key = (char*)grib_arguments_get_name(grib_handle_of_accessor(a),params,0); - self->data_accessor=grib_find_accessor(grib_handle_of_accessor(a),key); +static void init(grib_accessor* a, const long len, grib_arguments* params) +{ + char* key; + grib_accessor_pack_bufr_values* self = (grib_accessor_pack_bufr_values*)a; + key = (char*)grib_arguments_get_name(grib_handle_of_accessor(a),params,0); + self->data_accessor=grib_find_accessor(grib_handle_of_accessor(a),key); - a->length = 0; + a->length = 0; } static void dump(grib_accessor* a, grib_dumper* dumper) { - return; } -static int unpack_string_array (grib_accessor* a, char** buffer, size_t *len) +static int unpack_string_array(grib_accessor* a, char** buffer, size_t *len) { - return GRIB_NOT_IMPLEMENTED; + return GRIB_NOT_IMPLEMENTED; } -static int unpack_string (grib_accessor* a, char* buffer, size_t *len) +static int unpack_string(grib_accessor* a, char* buffer, size_t *len) { - return GRIB_NOT_IMPLEMENTED; + return GRIB_NOT_IMPLEMENTED; } -static int unpack_long (grib_accessor* a, long* val, size_t *len) +static int unpack_long(grib_accessor* a, long* val, size_t *len) { - return GRIB_NOT_IMPLEMENTED; + return GRIB_NOT_IMPLEMENTED; } -static int unpack_double (grib_accessor* a, double* val, size_t *len) +static int unpack_double(grib_accessor* a, double* val, size_t *len) { - return GRIB_NOT_IMPLEMENTED; + return GRIB_NOT_IMPLEMENTED; } static int value_count(grib_accessor* a,long* count) { - *count=1; - return 0; + *count=1; + return 0; } static void destroy(grib_context* context,grib_accessor* a) { - return; } -static int get_native_type(grib_accessor* a){ - return GRIB_TYPE_LONG; +static int get_native_type(grib_accessor* a) +{ + return GRIB_TYPE_LONG; } -static int pack_long (grib_accessor* a, const long* val, size_t *len) +static int pack_long(grib_accessor* a, const long* val, size_t *len) { - grib_accessor_pack_bufr_values* self = (grib_accessor_pack_bufr_values*)a; - grib_accessor* data=(grib_accessor*)self->data_accessor; + grib_accessor_pack_bufr_values* self = (grib_accessor_pack_bufr_values*)a; + grib_accessor* data=(grib_accessor*)self->data_accessor; - return grib_pack_double(data,0,0); + return grib_pack_double(data,0,0); } - -static int pack_double (grib_accessor* a, const double* val, size_t *len) +static int pack_double(grib_accessor* a, const double* val, size_t *len) { - grib_accessor_pack_bufr_values* self = (grib_accessor_pack_bufr_values*)a; - grib_accessor* data=(grib_accessor*)self->data_accessor; + grib_accessor_pack_bufr_values* self = (grib_accessor_pack_bufr_values*)a; + grib_accessor* data=(grib_accessor*)self->data_accessor; - return grib_pack_double(data,0,0); + return grib_pack_double(data,0,0); } - diff -Nru eccodes-2.15.0/src/grib_accessor_class_padding.c eccodes-2.16.0/src/grib_accessor_class_padding.c --- eccodes-2.15.0/src/grib_accessor_class_padding.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_padding.c 2020-01-16 10:21:52.000000000 +0000 @@ -132,33 +132,32 @@ /* END_CLASS_IMP */ - static void init(grib_accessor* a, const long len, grib_arguments*arg ) { - a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -static int compare(grib_accessor* a, grib_accessor* b) { - if (a->length != b->length) return GRIB_COUNT_MISMATCH; - return GRIB_SUCCESS; +static int compare(grib_accessor* a, grib_accessor* b) +{ + if (a->length != b->length) return GRIB_COUNT_MISMATCH; + return GRIB_SUCCESS; } static void update_size(grib_accessor* a,size_t new_size) { - /* printf("update_size: grib_accessor_class_padding.c %ld %ld %s %s\n", (long)new_size,(long)a->length,a->cclass->name,a->name); */ - a->length = new_size; + /* printf("update_size: grib_accessor_class_padding.c %ld %ld %s %s\n", (long)new_size,(long)a->length,a->cclass->name,a->name); */ + a->length = new_size; } static void resize(grib_accessor* a,size_t new_size) { - void* zero = grib_context_malloc_clear(a->context,new_size); - - grib_buffer_replace(a,(const unsigned char*)zero,new_size,1,0); - grib_context_free(a->context,zero); - grib_context_log(a->context,GRIB_LOG_DEBUG,"resize: grib_accessor_class_padding.c %ld %ld %s %s\n",(long)new_size,(long)a->length,a->cclass->name,a->name); - Assert(new_size == a->length); + void* zero = grib_context_malloc_clear(a->context,new_size); + grib_buffer_replace(a,(const unsigned char*)zero,new_size,1,0); + grib_context_free(a->context,zero); + grib_context_log(a->context,GRIB_LOG_DEBUG,"resize: grib_accessor_class_padding.c %ld %ld %s %s\n",(long)new_size,(long)a->length,a->cclass->name,a->name); + Assert(new_size == a->length); } static int value_count(grib_accessor* a,long *c){ *c=a->length; return 0;} diff -Nru eccodes-2.15.0/src/grib_accessor_class_padtoeven.c eccodes-2.16.0/src/grib_accessor_class_padtoeven.c --- eccodes-2.15.0/src/grib_accessor_class_padtoeven.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_padtoeven.c 2020-01-16 10:21:52.000000000 +0000 @@ -139,38 +139,36 @@ static size_t preferred_size(grib_accessor* a,int from_handle) { - grib_accessor_padtoeven* self = (grib_accessor_padtoeven*)a; - long offset = 0; - long length = 0; - long seclen; + grib_accessor_padtoeven* self = (grib_accessor_padtoeven*)a; + long offset = 0; + long length = 0; + long seclen; - grib_get_long_internal(grib_handle_of_accessor(a),self->section_offset,&offset); - grib_get_long_internal(grib_handle_of_accessor(a),self->section_length,&length); + grib_get_long_internal(grib_handle_of_accessor(a),self->section_offset,&offset); + grib_get_long_internal(grib_handle_of_accessor(a),self->section_length,&length); - if((length%2) && from_handle) { + if((length%2) && from_handle) { #if 0 - grib_context_log(a->context, - GRIB_LOG_ERROR,"GRIB message has an odd length section (%ld, %s)", - (long)length,a->name); + grib_context_log(a->context, + GRIB_LOG_ERROR,"GRIB message has an odd length section (%ld, %s)", + (long)length,a->name); #endif - return 0; + return 0; - } + } - /* printf("EVEN %ld %ld\n",(long) a->offset,(long) offset);*/ + /* printf("EVEN %ld %ld\n",(long) a->offset,(long) offset);*/ + seclen = a->offset - offset; - seclen = a->offset - offset; - - return seclen % 2 ? 1 : 0; + return seclen % 2 ? 1 : 0; } static void init(grib_accessor* a, const long len, grib_arguments* args) { - grib_accessor_padtoeven* self = (grib_accessor_padtoeven*)a; - - self->section_offset = grib_arguments_get_name(grib_handle_of_accessor(a),args,0); - self->section_length = grib_arguments_get_name(grib_handle_of_accessor(a),args,1); + grib_accessor_padtoeven* self = (grib_accessor_padtoeven*)a; - a->length = preferred_size(a,1); + self->section_offset = grib_arguments_get_name(grib_handle_of_accessor(a),args,0); + self->section_length = grib_arguments_get_name(grib_handle_of_accessor(a),args,1); + a->length = preferred_size(a,1); } diff -Nru eccodes-2.15.0/src/grib_accessor_class_scale_values.c eccodes-2.16.0/src/grib_accessor_class_scale_values.c --- eccodes-2.15.0/src/grib_accessor_class_scale_values.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_scale_values.c 2020-01-16 10:21:52.000000000 +0000 @@ -191,7 +191,10 @@ } } - if((ret = grib_set_double_array_internal(h, self->values,values,size)) != GRIB_SUCCESS) return ret; + if ((ret = grib_set_double_array_internal(h, self->values,values,size)) != GRIB_SUCCESS) { + grib_context_free(c,values); + return ret; + } grib_context_free(c,values); diff -Nru eccodes-2.15.0/src/grib_accessor_class_section_length.c eccodes-2.16.0/src/grib_accessor_class_section_length.c --- eccodes-2.15.0/src/grib_accessor_class_section_length.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_section_length.c 2020-01-16 10:21:52.000000000 +0000 @@ -133,20 +133,20 @@ static void init(grib_accessor* a, const long len , grib_arguments* arg ) { - a->parent->aclength = a; - a->length = len; - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; - Assert(a->length>=0); + a->parent->aclength = a; + a->length = len; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + Assert(a->length>=0); } static void dump(grib_accessor* a, grib_dumper* dumper) { - grib_dump_long(dumper,a,NULL); + grib_dump_long(dumper,a,NULL); } static int value_count(grib_accessor* a,long* c) { - *c=1; - return 0; + *c=1; + return 0; } diff -Nru eccodes-2.15.0/src/grib_accessor_class_size.c eccodes-2.16.0/src/grib_accessor_class_size.c --- eccodes-2.15.0/src/grib_accessor_class_size.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_size.c 2020-01-16 10:21:52.000000000 +0000 @@ -131,21 +131,20 @@ static void init(grib_accessor* a,const long l, grib_arguments* c) { - grib_accessor_size* self = (grib_accessor_size*)a; - self->accessor = grib_arguments_get_name(grib_handle_of_accessor(a),c,0); - a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; - a->length=0; + grib_accessor_size* self = (grib_accessor_size*)a; + self->accessor = grib_arguments_get_name(grib_handle_of_accessor(a),c,0); + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->length=0; } -static int unpack_long(grib_accessor* a, long* val, size_t *len) +static int unpack_long(grib_accessor* a, long* val, size_t *len) { - int ret=0; - size_t size=0; - grib_accessor_size* self = (grib_accessor_size*)a; - ret=grib_get_size(grib_handle_of_accessor(a),self->accessor,&size); - *val=(long)size; - *len =1; - return ret; + int ret=0; + size_t size=0; + grib_accessor_size* self = (grib_accessor_size*)a; + ret=grib_get_size(grib_handle_of_accessor(a),self->accessor,&size); + *val=(long)size; + *len =1; + return ret; } - diff -Nru eccodes-2.15.0/src/grib_accessor_class_variable.c eccodes-2.16.0/src/grib_accessor_class_variable.c --- eccodes-2.15.0/src/grib_accessor_class_variable.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_accessor_class_variable.c 2020-01-16 10:21:52.000000000 +0000 @@ -356,16 +356,16 @@ /* NOT ANY MORE static long byte_count(grib_accessor* a) { - grib_accessor_variable *self = (grib_accessor_variable*)a; - char buf[80]={0,}; + grib_accessor_variable *self = (grib_accessor_variable*)a; + char buf[80]={0,}; - if(self->type == GRIB_TYPE_STRING) { - return strlen(self->cval) +1; - } else { - sprintf(buf,"%g",self->dval); - printf("========> \"%s\"\n",buf); - return strlen(buf)+1; - } + if(self->type == GRIB_TYPE_STRING) { + return strlen(self->cval) +1; + } else { + sprintf(buf,"%g",self->dval); + printf("========> \"%s\"\n",buf); + return strlen(buf)+1; + } } */ diff -Nru eccodes-2.15.0/src/grib_api.h eccodes-2.16.0/src/grib_api.h --- eccodes-2.15.0/src/grib_api.h 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_api.h 2020-01-16 10:21:52.000000000 +0000 @@ -1399,6 +1399,7 @@ #define GRIB_UTIL_GRID_SPEC_REDUCED_ROTATED_GG 9 #define GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA 10 #define GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL 11 +#define GRIB_UTIL_GRID_SPEC_UNSTRUCTURED 12 typedef struct grib_util_grid_spec { diff -Nru eccodes-2.15.0/src/grib_api_internal.h eccodes-2.16.0/src/grib_api_internal.h --- eccodes-2.15.0/src/grib_api_internal.h 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_api_internal.h 2020-01-16 10:21:52.000000000 +0000 @@ -1056,6 +1056,7 @@ int bufrdc_mode; int bufr_set_to_missing_if_out_of_range; int bufr_multi_element_constant_arrays; + int grib_data_quality_checks; FILE* log_stream; grib_trie* classes; grib_trie* lists; diff -Nru eccodes-2.15.0/src/grib_api_prototypes.h eccodes-2.16.0/src/grib_api_prototypes.h --- eccodes-2.15.0/src/grib_api_prototypes.h 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_api_prototypes.h 2020-01-16 10:21:52.000000000 +0000 @@ -67,6 +67,7 @@ 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); +int get_concept_condition_string(grib_handle* h, const char* key, const char* value, char* result); /* action_class_hash_array.c */ grib_action *grib_action_create_hash_array(grib_context *context, const char *name, grib_hash_array_value *hash_array, const char *basename, const char *name_space, const char *defaultkey, const char *masterDir, const char *localDir, const char *ecmfDir, int flags, int nofail); @@ -1462,6 +1463,11 @@ double grib_arguments_get_double(grib_handle *h, grib_arguments *args, int n); grib_expression *grib_arguments_get_expression(grib_handle *h, grib_arguments *args, int n); +/* codes_util.c */ +char get_dir_separator_char(void); +int path_is_directory(const char* filename); +char *codes_getenv(const char *name); + /* grib_util.c */ grib_handle *grib_util_sections_copy(grib_handle *hfrom, grib_handle *hto, int what, int *err); grib_string_list *grib_util_get_param_id(const char *mars_param); @@ -1476,10 +1482,9 @@ int grib2_is_PDTN_Aerosol(long productDefinitionTemplateNumber); int grib2_is_PDTN_AerosolOptical(long productDefinitionTemplateNumber); int grib2_select_PDTN(int is_eps, int is_instant, int is_chemical, int is_chemical_distfn, int is_aerosol, int is_aerosol_optical); -int is_index_file(const char *filename); -char get_dir_separator_char(void); -char *codes_getenv(const char *name); +int is_grib_index_file(const char *filename); size_t sum_of_pl_array(const long* pl, size_t plsize); +int grib_util_grib_data_quality_check(grib_handle* h, double min_val, double max_val); /* bufr_util.c */ int compute_bufr_key_rank(grib_handle *h, grib_string_list *keys, const char *key); @@ -1550,7 +1555,10 @@ char *grib_decode_string(const unsigned char *bitStream, long *bitOffset, size_t numberOfCharacters, char *string); unsigned long grib_decode_unsigned_long(const unsigned char *p, long *bitp, long nbits); int grib_encode_unsigned_long(unsigned char *p, unsigned long val, long *bitp, long nbits); +size_t grib_decode_size_t(const unsigned char* p, long* bitp, long nbits); int grib_encode_unsigned_longb(unsigned char *p, unsigned long val, long *bitp, long nb); +int grib_encode_size_tb(unsigned char* p, size_t val ,long *bitp, long nb); + /* grib_bits_any_endian_simple.c */ int grib_decode_long_array(const unsigned char *p, long *bitp, long bitsPerValue, size_t n_vals, long *val); diff -Nru eccodes-2.15.0/src/grib_bits_any_endian.c eccodes-2.16.0/src/grib_bits_any_endian.c --- eccodes-2.15.0/src/grib_bits_any_endian.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_bits_any_endian.c 2020-01-16 10:21:52.000000000 +0000 @@ -298,6 +298,73 @@ return GRIB_SUCCESS; } +/* + * Note: On x64 Micrsoft Windows a "long" is 32 bits but "size_t" is 64 bits + */ +#define BIT_MASK_SIZE_T(x) \ + (((x) == max_nbits_size_t) ? \ + (size_t) -1UL : (1UL << (x)) - 1) + +size_t grib_decode_size_t(const unsigned char* p, long *bitp, long nbits) +{ + size_t ret = 0; + long oc = *bitp / 8; + size_t mask = 0; + long pi = 0; + int usefulBitsInByte = 0; + long bitsToRead = 0; + + if (nbits == 0) return 0; + + if (nbits > max_nbits_size_t) + { + int bits = nbits; + int mod = bits % max_nbits_size_t; + + if (mod != 0) + { + int e = grib_decode_size_t(p, bitp, mod); + Assert(e == 0); + bits -= mod; + } + + while (bits > max_nbits_size_t) + { + int e = grib_decode_size_t(p, bitp, max_nbits_size_t); + Assert(e == 0); + bits -= max_nbits_size_t; + } + + return grib_decode_size_t(p, bitp, bits); + } + + mask = BIT_MASK_SIZE_T(nbits); + /* pi: position of bitp in p[]. >>3 == /8 */ + pi = oc; + /* number of useful bits in current byte */ + usefulBitsInByte = 8 - (*bitp & 7); + /* read at least enough bits (byte by byte) from input */ + bitsToRead = nbits; + while (bitsToRead > 0) { + ret <<= 8; + /* ret += p[pi]; */ + DebugAssert((ret & p[pi]) == 0); + ret = ret | p[pi]; + pi++; + bitsToRead -= usefulBitsInByte; + usefulBitsInByte = 8; + } + *bitp += nbits; + + /* bitsToRead might now be negative (too many bits read) */ + /* remove those which are too much */ + ret >>= -1 * bitsToRead; + /* remove leading bits (from previous value) */ + ret &= mask; + + return ret; +} + int grib_encode_unsigned_longb(unsigned char* p, unsigned long val ,long *bitp, long nb) { long i = 0; @@ -314,6 +381,35 @@ Assert(0); } } +#endif + for(i=nb-1; i >= 0; i--){ + if(test(val,i)) + grib_set_bit_on (p, bitp); + else + grib_set_bit_off(p, bitp); + } + return GRIB_SUCCESS; +} + +/* + * Note: On x64 Micrsoft Windows a "long" is 32 bits but "size_t" is 64 bits + */ +int grib_encode_size_tb(unsigned char* p, size_t val ,long *bitp, long nb) +{ + long i = 0; + + if (nb > max_nbits_size_t) { + fprintf(stderr, "Number of bits (%ld) exceeds maximum number of bits (%d)\n", nb, max_nbits_size_t); + Assert(0); + } +#ifdef DEBUG + { + size_t maxV = grib_power(nb,2); + if (val > maxV) { + fprintf(stderr, "grib_encode_size_tb: Value=%lu, but number of bits=%ld!\n", val, nb); + Assert(0); + } + } #endif for(i=nb-1; i >= 0; i--){ if(test(val,i)) diff -Nru eccodes-2.15.0/src/grib_bits.c eccodes-2.16.0/src/grib_bits.c --- eccodes-2.15.0/src/grib_bits.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_bits.c 2020-01-16 10:21:52.000000000 +0000 @@ -33,6 +33,7 @@ static const unsigned long dmasks[] = { 0xFF, 0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, }; static const int max_nbits = sizeof(unsigned long)*8; +static const int max_nbits_size_t = sizeof(size_t)*8; unsigned long grib_decode_unsigned_byte_long(const unsigned char* p, long o, int l) { diff -Nru eccodes-2.15.0/src/grib_concept.c eccodes-2.16.0/src/grib_concept.c --- eccodes-2.15.0/src/grib_concept.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_concept.c 2020-01-16 10:21:52.000000000 +0000 @@ -10,41 +10,39 @@ #include "grib_api_internal.h" - grib_concept_value* grib_concept_value_new(grib_context* c, const char* name,grib_concept_condition* conditions) { - grib_concept_value* v = (grib_concept_value*)grib_context_malloc_clear_persistent(c,sizeof(grib_concept_value)); - - v->name = grib_context_strdup_persistent(c,name); - v->conditions = conditions; - return v; + grib_concept_value* v = (grib_concept_value*)grib_context_malloc_clear_persistent(c,sizeof(grib_concept_value)); + v->name = grib_context_strdup_persistent(c,name); + v->conditions = conditions; + return v; } void grib_concept_value_delete(grib_context* c,grib_concept_value* v) { - grib_concept_condition* e = v->conditions; - while(e) - { - grib_concept_condition* n = e->next; - grib_concept_condition_delete(c,e); - e = n; - } - grib_context_free_persistent(c,v->name); - grib_context_free_persistent(c,v); + grib_concept_condition* e = v->conditions; + while(e) + { + grib_concept_condition* n = e->next; + grib_concept_condition_delete(c,e); + e = n; + } + grib_context_free_persistent(c,v->name); + grib_context_free_persistent(c,v); } grib_concept_condition* grib_concept_condition_new(grib_context* c,const char* name,grib_expression* expression, grib_iarray* iarray) { - grib_concept_condition* v = (grib_concept_condition*)grib_context_malloc_clear_persistent(c,sizeof(grib_concept_condition)); - v->name = grib_context_strdup_persistent(c,name); - v->expression = expression; - v->iarray=iarray; - return v; + grib_concept_condition* v = (grib_concept_condition*)grib_context_malloc_clear_persistent(c,sizeof(grib_concept_condition)); + v->name = grib_context_strdup_persistent(c,name); + v->expression = expression; + v->iarray=iarray; + return v; } void grib_concept_condition_delete(grib_context* c,grib_concept_condition* v) { - grib_expression_free(c,v->expression); - grib_context_free_persistent(c,v->name); - grib_context_free_persistent(c,v); + grib_expression_free(c,v->expression); + grib_context_free_persistent(c,v->name); + grib_context_free_persistent(c,v); } diff -Nru eccodes-2.15.0/src/grib_context.c eccodes-2.16.0/src/grib_context.c --- eccodes-2.15.0/src/grib_context.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_context.c 2020-01-16 10:21:52.000000000 +0000 @@ -26,6 +26,16 @@ 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 directories */ +#ifdef ECCODES_ON_WINDOWS +# define DEFS_PATH_DELIMITER_CHAR ';' +# define DEFS_PATH_DELIMITER_STR ";" +#else +# define DEFS_PATH_DELIMITER_CHAR ':' +# define DEFS_PATH_DELIMITER_STR ":" +#endif + #if GRIB_PTHREADS static pthread_once_t once = PTHREAD_ONCE_INIT; @@ -308,13 +318,13 @@ &default_seek, /* lfile seek procedure */ &default_feof, /* file feof procedure */ - &default_log, /* logging_procedure */ - &default_print, /* print procedure */ - 0, /* grib_codetable* */ - 0, /* grib_smart_table* */ - 0, /* char* outfilename */ - 0, /* int multi_support_on */ - 0, /* grib_multi_support* multi_support*/ + &default_log, /* output_log */ + &default_print, /* print */ + 0, /* codetable */ + 0, /* smart_table */ + 0, /* outfilename */ + 0, /* multi_support_on */ + 0, /* multi_support */ 0, /* grib_definition_files_dir */ 0, /* handle_file_count */ 0, /* handle_total_count */ @@ -323,9 +333,9 @@ 0, /* gts_header_on */ 0, /* gribex_mode_on */ 0, /* large_constant_fields */ - 0, /* grib_itrie* keys */ + 0, /* keys */ 0, /* keys_count */ - 0, /* grib_itrie* concepts_index */ + 0, /* concepts_index */ 0, /* concepts_count */ {0,}, /* concepts */ 0, /* hash_array_index */ @@ -337,6 +347,7 @@ 0, /* bufrdc_mode */ 0, /* bufr_set_to_missing_if_out_of_range */ 0, /* bufr_multi_element_constant_arrays */ + 0, /* grib_data_quality_checks */ 0, /* log_stream */ 0, /* classes */ 0, /* lists */ @@ -371,6 +382,7 @@ const char* bufrdc_mode = NULL; const char* bufr_set_to_missing_if_out_of_range = NULL; const char* bufr_multi_element_constant_arrays = NULL; + const char* grib_data_quality_checks = NULL; const char* file_pool_max_opened_files = NULL; #ifdef ENABLE_FLOATING_POINT_EXCEPTIONS @@ -381,6 +393,7 @@ bufrdc_mode = getenv("ECCODES_BUFRDC_MODE_ON"); bufr_set_to_missing_if_out_of_range = getenv("ECCODES_BUFR_SET_TO_MISSING_IF_OUT_OF_RANGE"); bufr_multi_element_constant_arrays = getenv("ECCODES_BUFR_MULTI_ELEMENT_CONSTANT_ARRAYS"); + grib_data_quality_checks = getenv("ECCODES_GRIB_DATA_QUALITY_CHECKS"); large_constant_fields = codes_getenv("ECCODES_GRIB_LARGE_CONSTANT_FIELDS"); no_abort = codes_getenv("ECCODES_NO_ABORT"); debug = codes_getenv("ECCODES_DEBUG"); @@ -458,6 +471,16 @@ } } + /* Definitions path extra: Added at the head of (i.e. before) existing path */ + { + const char* defs_extra = getenv("ECCODES_EXTRA_DEFINITION_PATH"); + if (defs_extra) { + char buffer[DEF_PATH_MAXLEN]; + ecc_snprintf(buffer, DEF_PATH_MAXLEN, "%s%c%s", defs_extra, DEFS_PATH_DELIMITER_CHAR, default_grib_context.grib_definition_files_path); + default_grib_context.grib_definition_files_path = strdup(buffer); + } + } + grib_context_log(&default_grib_context, GRIB_LOG_DEBUG, "Definitions path: %s", default_grib_context.grib_definition_files_path); grib_context_log(&default_grib_context, GRIB_LOG_DEBUG, "Samples path: %s", @@ -479,6 +502,8 @@ atoi(bufr_set_to_missing_if_out_of_range) : 0; default_grib_context.bufr_multi_element_constant_arrays = bufr_multi_element_constant_arrays ? atoi(bufr_multi_element_constant_arrays) : 0; + default_grib_context.grib_data_quality_checks = grib_data_quality_checks ? + atoi(grib_data_quality_checks) : 0; default_grib_context.file_pool_max_opened_files = file_pool_max_opened_files ? atoi(file_pool_max_opened_files) : DEFAULT_FILE_POOL_MAX_OPENED_FILES; } @@ -551,16 +576,6 @@ return result; } -/* 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 directories */ -#ifdef ECCODES_ON_WINDOWS -# define DEFS_PATH_DELIMITER_CHAR ';' -# define DEFS_PATH_DELIMITER_STR ";" -#else -# define DEFS_PATH_DELIMITER_CHAR ':' -# define DEFS_PATH_DELIMITER_STR ":" -#endif - static int init_definition_files_dir(grib_context* c) { int err=0; diff -Nru eccodes-2.15.0/src/grib_dumper_class_bufr_encode_filter.c eccodes-2.16.0/src/grib_dumper_class_bufr_encode_filter.c --- eccodes-2.15.0/src/grib_dumper_class_bufr_encode_filter.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_dumper_class_bufr_encode_filter.c 2020-01-16 10:21:52.000000000 +0000 @@ -20,6 +20,7 @@ IMPLEMENTS = dump_bytes;dump_values IMPLEMENTS = dump_label;dump_section IMPLEMENTS = init;destroy + IMPLEMENTS = header MEMBERS = long section_offset MEMBERS = long begin MEMBERS = long empty @@ -54,6 +55,7 @@ static void dump_values (grib_dumper* d, grib_accessor* a); 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); +static void header (grib_dumper*,grib_handle*); typedef struct grib_dumper_bufr_encode_filter { grib_dumper dumper; @@ -85,7 +87,7 @@ &dump_bits, /* dump bits */ &dump_section, /* dump section */ &dump_values, /* dump values */ - 0, /* header */ + &header, /* header */ 0, /* footer */ }; @@ -720,6 +722,31 @@ a->attributes[i]->flags=flags; i++; } - self->isLeaf=0; - self->isAttribute=0; + self->isLeaf = 0; + self->isAttribute = 0; +} + +static void header(grib_dumper* d, grib_handle* h) +{ + grib_dumper_bufr_encode_filter *self = (grib_dumper_bufr_encode_filter*)d; + char sampleName[128]={0}; + long localSectionPresent, edition, bufrHeaderCentre, isSatellite; + + Assert(h->product_kind == PRODUCT_BUFR); + + grib_get_long(h, "localSectionPresent", &localSectionPresent); + grib_get_long(h, "bufrHeaderCentre", &bufrHeaderCentre); + grib_get_long(h, "edition", &edition); + + if (localSectionPresent && bufrHeaderCentre == 98) { + grib_get_long(h, "isSatellite", &isSatellite); + if (isSatellite) + sprintf(sampleName, "BUFR%ld_local_satellite", edition); + else + sprintf(sampleName, "BUFR%ld_local", edition); + } else { + sprintf(sampleName, "BUFR%ld", edition); + } + + fprintf(self->dumper.out, "# BUFR sample file: %s.tmpl\n", sampleName); } diff -Nru eccodes-2.15.0/src/grib_dumper_class_grib_encode_C.c eccodes-2.16.0/src/grib_dumper_class_grib_encode_C.c --- eccodes-2.15.0/src/grib_dumper_class_grib_encode_C.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_dumper_class_grib_encode_C.c 2020-01-16 10:21:52.000000000 +0000 @@ -86,69 +86,69 @@ static int init(grib_dumper* d) { - /* grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; */ - return GRIB_SUCCESS; + /* grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; */ + return GRIB_SUCCESS; } static int destroy (grib_dumper* d){ - return GRIB_SUCCESS; + return GRIB_SUCCESS; } static void pcomment(FILE* f,long value,const char* p) { - int cr = 0; - fprintf(f,"\n /* %ld = ",value); + int cr = 0; + fprintf(f,"\n /* %ld = ",value); - while(*p) - { - switch(*p) + while(*p) { - case ';': - fprintf(f,"\n "); - cr = 1; - break; - - case ':': - if(cr) - fprintf(f,"\n See "); - else - fprintf(f,". See "); - break; + switch(*p) + { + case ';': + fprintf(f,"\n "); + cr = 1; + break; + + case ':': + if(cr) + fprintf(f,"\n See "); + else + fprintf(f,". See "); + break; + + default: + fputc(*p,f); + break; + } - default: - fputc(*p,f); - break; + p++; } - p++; - } - - fprintf(f," */\n"); + fprintf(f," */\n"); } static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment) { - grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; - long value; size_t size = 1; - int err = grib_unpack_long(a,&value,&size); + grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; + long value; size_t size = 1; + int err = grib_unpack_long(a,&value,&size); - if((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)) - return; + if((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)) + return; #if 1 - if(comment) pcomment(self->dumper.out,value,comment); + if(comment) pcomment(self->dumper.out,value,comment); #endif - if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_LONG)) - fprintf(self->dumper.out," GRIB_CHECK(grib_set_missing(h,\"%s\"),%d);\n",a->name,0); - else - fprintf(self->dumper.out," GRIB_CHECK(grib_set_long(h,\"%s\",%ld),%d);\n",a->name,value,0); + if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_LONG)) + fprintf(self->dumper.out," GRIB_CHECK(grib_set_missing(h,\"%s\"),%d);\n",a->name,0); + else + fprintf(self->dumper.out," GRIB_CHECK(grib_set_long(h,\"%s\",%ld),%d);\n",a->name,value,0); - if(err) - fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); + if(err) + fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); - if(comment) fprintf(self->dumper.out,"\n"); + if(comment) fprintf(self->dumper.out,"\n"); } @@ -157,302 +157,301 @@ static void dump_bits(grib_dumper* d,grib_accessor* a,const char* comment) { - grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; - long value; size_t size = 1; - int err = grib_unpack_long(a,&value,&size); - int i; + grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; + long value; size_t size = 1; + int err = grib_unpack_long(a,&value,&size); + int i; - char buf[1024]; + char buf[1024]; - if(a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) - return; + if(a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + return; - if(a->length == 0) - return; + if(a->length == 0) + return; - buf[0] = 0; + buf[0] = 0; - for(i=0;i<(a->length*8);i++) { - if(test_bit(value,a->length*8-i-1)) - strcat(buf,"1"); - else - strcat(buf,"0"); - } + for(i=0;i<(a->length*8);i++) { + if(test_bit(value,a->length*8-i-1)) + strcat(buf,"1"); + else + strcat(buf,"0"); + } + + if(comment) { + strcat(buf,";"); + strcat(buf,comment); + } + + pcomment(self->dumper.out,value,buf); - if(comment) { - strcat(buf,";"); - strcat(buf,comment); - } - - pcomment(self->dumper.out,value,buf); - - if(err) - fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); - else - fprintf(self->dumper.out," GRIB_CHECK(grib_set_long(h,\"%s\",%ld),%d);\n",a->name,value,0); + if(err) + fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); + else + fprintf(self->dumper.out," GRIB_CHECK(grib_set_long(h,\"%s\",%ld),%d);\n",a->name,value,0); - fprintf(self->dumper.out,"\n"); + fprintf(self->dumper.out,"\n"); } static void dump_double(grib_dumper* d,grib_accessor* a,const char* comment) { - grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; - double value; size_t size = 1; - int err = grib_unpack_double(a,&value,&size); - if(a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) - return; + grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; + double value; size_t size = 1; + int err = grib_unpack_double(a,&value,&size); + if(a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + return; - if(a->length == 0) - return; + if(a->length == 0) + return; #if 0 - if(comment) fprintf(self->dumper.out,"/* %s */\n",comment); + if(comment) fprintf(self->dumper.out,"/* %s */\n",comment); #endif - fprintf(self->dumper.out," GRIB_CHECK(grib_set_double(h,\"%s\",%g),%d);\n",a->name,value,0); + fprintf(self->dumper.out," GRIB_CHECK(grib_set_double(h,\"%s\",%g),%d);\n",a->name,value,0); - if(err) - fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); + if(err) + fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); } static void dump_string(grib_dumper* d,grib_accessor* a,const char* comment) { - grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; - char value[1024]; size_t size = sizeof(value); - int err = grib_unpack_string(a,value,&size); + grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; + char value[1024]; size_t size = sizeof(value); + int err = grib_unpack_string(a,value,&size); - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) - return; + if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + return; - if(a->length == 0) - return; + if(a->length == 0) + return; #if 1 - if(comment) fprintf(self->dumper.out,"/* %s */\n",comment); + if(comment) fprintf(self->dumper.out,"/* %s */\n",comment); #endif - fprintf(self->dumper.out," p = \"%s\";\n",value); - fprintf(self->dumper.out," size = strlen(p);\n"); - fprintf(self->dumper.out," GRIB_CHECK(grib_set_string(h,\"%s\",p,&size),%d);\n",a->name,0); + fprintf(self->dumper.out," p = \"%s\";\n",value); + fprintf(self->dumper.out," size = strlen(p);\n"); + fprintf(self->dumper.out," GRIB_CHECK(grib_set_string(h,\"%s\",p,&size),%d);\n",a->name,0); - if(err) - fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); + if(err) + fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); } static void dump_bytes(grib_dumper* d,grib_accessor* a,const char* comment) { - grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; - int err =0; - size_t size = a->length; - unsigned char* buf; + grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; + int err =0; + size_t size = a->length; + unsigned char* buf; - if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) - return; + if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + return; - if(size == 0) - return; + if(size == 0) + return; - buf = (unsigned char*)grib_context_malloc(d->handle->context,size); + buf = (unsigned char*)grib_context_malloc(d->handle->context,size); - if(!buf) - { - fprintf(self->dumper.out,"/* %s: cannot malloc(%ld) */\n",a->name,(long)size); - return; - } + if(!buf) + { + fprintf(self->dumper.out,"/* %s: cannot malloc(%ld) */\n",a->name,(long)size); + return; + } - err = grib_unpack_bytes(a,buf,&size); - if(err){ - grib_context_free(d->handle->context,buf); - fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_grib_encode_C::dump_bytes]\n}",err,grib_get_error_message(err)); - return ; - } + err = grib_unpack_bytes(a,buf,&size); + if(err){ + grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_grib_encode_C::dump_bytes]\n}",err,grib_get_error_message(err)); + return ; + } #if 0 - if(size > 100) { - more = size - 100; - size = 100; - } - - k = 0; - /* if(size > 100) size = 100; */ - while(k < size) - { - int j; - for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); - for(j = 0; j < 16 && k < size; j++, k++) + if(size > 100) { + more = size - 100; + size = 100; + } + + k = 0; + /* if(size > 100) size = 100; */ + while(k < size) { - fprintf(self->dumper.out,"%02x",buf[k]); - if(k != size-1) - fprintf(self->dumper.out,", "); + int j; + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + for(j = 0; j < 16 && k < size; j++, k++) + { + fprintf(self->dumper.out,"%02x",buf[k]); + if(k != size-1) + fprintf(self->dumper.out,", "); + } + fprintf(self->dumper.out,"\n"); } - fprintf(self->dumper.out,"\n"); - } #endif - grib_context_free(d->handle->context,buf); + grib_context_free(d->handle->context,buf); } static void dump_values(grib_dumper* d,grib_accessor* a) { - grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; - int k,err =0; - double* buf = NULL; - int type=0; - char stype[10]; - size_t size=0; - long count=0; - - stype[0]='\0'; - - if((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) - || ((a->flags & GRIB_ACCESSOR_FLAG_DATA) - && (d->option_flags & GRIB_DUMP_FLAG_NO_DATA) ) ) - return; - - grib_value_count(a,&count); - size=count; - - if(size == 1){ - dump_double(d,a,NULL); - return ; - } - - type=grib_accessor_get_native_type(a); - switch (type) { - case GRIB_TYPE_LONG: - sprintf(stype,"%s","long"); - break; - case GRIB_TYPE_DOUBLE: - sprintf(stype,"%s","double"); - break; - default: - return; - } - - buf = (double*)grib_context_malloc(d->handle->context,size * sizeof(double)); - if(!buf) - { - fprintf(self->dumper.out,"/* %s: cannot malloc(%ld) */\n",a->name,(long)size); - return; - } + grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; + int k,err =0; + double* buf = NULL; + int type=0; + char stype[10]; + size_t size=0; + long count=0; + + stype[0]='\0'; + + if((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + || ((a->flags & GRIB_ACCESSOR_FLAG_DATA) + && (d->option_flags & GRIB_DUMP_FLAG_NO_DATA) ) ) + return; + + grib_value_count(a,&count); + size=count; + + if(size == 1){ + dump_double(d,a,NULL); + return ; + } - err = grib_unpack_double(a,buf,&size); + type=grib_accessor_get_native_type(a); + switch (type) { + case GRIB_TYPE_LONG: + sprintf(stype,"%s","long"); + break; + case GRIB_TYPE_DOUBLE: + sprintf(stype,"%s","double"); + break; + default: + return; + } - if(err){ - grib_context_free(d->handle->context,buf); - fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); - return ; - } - - fprintf(self->dumper.out," size = %ld;\n",(long)size); - fprintf(self->dumper.out," v%s = (%s*)calloc(size,sizeof(%s));\n",stype,stype,stype); - fprintf(self->dumper.out," if(!v%s) {\n",stype); - fprintf(self->dumper.out," fprintf(stderr,\"failed to allocate %%d bytes\\n\",size*sizeof(%s));\n",stype); - fprintf(self->dumper.out," exit(1);\n"); - fprintf(self->dumper.out," }\n"); - - - fprintf(self->dumper.out,"\n "); - k = 0; - while(k < size) - { - fprintf(self->dumper.out," v%s[%4d] = %7g;",stype,k,buf[k]); - k++; - if(k%4 == 0) fprintf(self->dumper.out,"\n "); - - } - if(size%4) fprintf(self->dumper.out,"\n"); - fprintf(self->dumper.out,"\n"); - fprintf(self->dumper.out," GRIB_CHECK(grib_set_%s_array(h,\"%s\",v%s,size),%d);\n",stype,a->name,stype,0); - fprintf(self->dumper.out," free(v%s);\n",stype); + buf = (double*)grib_context_malloc(d->handle->context,size * sizeof(double)); + if(!buf) + { + fprintf(self->dumper.out,"/* %s: cannot malloc(%ld) */\n",a->name,(long)size); + return; + } + + err = grib_unpack_double(a,buf,&size); + + if(err){ + grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); + return ; + } - grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," size = %ld;\n",(long)size); + fprintf(self->dumper.out," v%s = (%s*)calloc(size,sizeof(%s));\n",stype,stype,stype); + fprintf(self->dumper.out," if(!v%s) {\n",stype); + fprintf(self->dumper.out," fprintf(stderr,\"failed to allocate %%d bytes\\n\",size*sizeof(%s));\n",stype); + fprintf(self->dumper.out," exit(1);\n"); + fprintf(self->dumper.out," }\n"); + + + fprintf(self->dumper.out,"\n "); + k = 0; + while(k < size) + { + fprintf(self->dumper.out," v%s[%4d] = %7g;",stype,k,buf[k]); + k++; + if(k%4 == 0) fprintf(self->dumper.out,"\n "); + + } + if(size%4) fprintf(self->dumper.out,"\n"); + fprintf(self->dumper.out,"\n"); + fprintf(self->dumper.out," GRIB_CHECK(grib_set_%s_array(h,\"%s\",v%s,size),%d);\n",stype,a->name,stype,0); + fprintf(self->dumper.out," free(v%s);\n",stype); + + grib_context_free(d->handle->context,buf); } static void dump_label(grib_dumper* d,grib_accessor* a,const char* comment) { - grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; - fprintf(self->dumper.out,"\n /* %s */\n\n",a->name); + grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; + fprintf(self->dumper.out,"\n /* %s */\n\n",a->name); } static void dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors* block) { - /*grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d;*/ - grib_dump_accessors_block(d,block); + /*grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d;*/ + grib_dump_accessors_block(d,block); } static void header(grib_dumper* d,grib_handle* h) { - long edition=0; - int ret=0; - grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; + long edition=0; + int ret=0; + grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; ret=grib_get_long(h,"editionNumber",&edition); - if (ret != GRIB_SUCCESS) { - grib_context_log(h->context,GRIB_LOG_ERROR,"Unable to get edition number."); - Assert(0); - } - - fprintf(self->dumper.out, - "#include \n" - "\n" - "/* This code was generated automatically */\n" - "\n"); - - fprintf(self->dumper.out, - "\n" - "int main(int argc,const char** argv)\n" - "{\n" - " grib_handle *h = NULL;\n" - " size_t size = 0;\n" - " double* vdouble = NULL;\n" - " long* vlong = NULL;\n" - " FILE* f = NULL;\n" - " const char* p = NULL;\n" - " const void* buffer = NULL;\n" - "\n" - " if(argc != 2) {\n" - " fprintf(stderr,\"usage: %%s out\\n\",argv[0]);\n" - " exit(1);\n" - " }\n" - "\n" - " h = grib_handle_new_from_samples(NULL,\"GRIB%ld\");\n" - " if(!h) {\n" - " fprintf(stderr,\"Cannot create grib handle\\n\");\n" - " exit(1);\n" - " }\n" - "\n",(long)edition + if (ret != GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR,"Unable to get edition number."); + Assert(0); + } + + fprintf(self->dumper.out, + "#include \n" + "\n" + "/* This code was generated automatically */\n" + "\n"); + + fprintf(self->dumper.out, + "\n" + "int main(int argc,const char** argv)\n" + "{\n" + " grib_handle *h = NULL;\n" + " size_t size = 0;\n" + " double* vdouble = NULL;\n" + " long* vlong = NULL;\n" + " FILE* f = NULL;\n" + " const char* p = NULL;\n" + " const void* buffer = NULL;\n" + "\n" + " if(argc != 2) {\n" + " fprintf(stderr,\"usage: %%s out\\n\",argv[0]);\n" + " exit(1);\n" + " }\n" + "\n" + " h = grib_handle_new_from_samples(NULL,\"GRIB%ld\");\n" + " if(!h) {\n" + " fprintf(stderr,\"Cannot create grib handle\\n\");\n" + " exit(1);\n" + " }\n" + "\n",(long)edition ); } static void footer(grib_dumper* d,grib_handle* h) { - grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; - - fprintf(self->dumper.out, + grib_dumper_grib_encode_C *self = (grib_dumper_grib_encode_C*)d; - "/* Save the message */\n" - "\n" - " f = fopen(argv[1],\"w\");\n" - " if(!f) {\n" - " perror(argv[1]);\n" - " exit(1);\n" - " }\n" - "\n" - " GRIB_CHECK(grib_get_message(h,&buffer,&size),0);\n" - "\n" - " if(fwrite(buffer,1,size,f) != size) {\n" - " perror(argv[1]);\n" - " exit(1);\n" - " }\n" - "\n" - " if(fclose(f)) {\n" - " perror(argv[1]);\n" - " exit(1);\n" - " }\n" - "\n" - " grib_handle_delete(h);\n" - " return 0;\n" - "}\n" + fprintf(self->dumper.out, + "/* Save the message */\n" + "\n" + " f = fopen(argv[1],\"w\");\n" + " if(!f) {\n" + " perror(argv[1]);\n" + " exit(1);\n" + " }\n" + "\n" + " GRIB_CHECK(grib_get_message(h,&buffer,&size),0);\n" + "\n" + " if(fwrite(buffer,1,size,f) != size) {\n" + " perror(argv[1]);\n" + " exit(1);\n" + " }\n" + "\n" + " if(fclose(f)) {\n" + " perror(argv[1]);\n" + " exit(1);\n" + " }\n" + "\n" + " grib_handle_delete(h);\n" + " return 0;\n" + "}\n" ); } diff -Nru eccodes-2.15.0/src/grib_dumper_class_serialize.c eccodes-2.16.0/src/grib_dumper_class_serialize.c --- eccodes-2.15.0/src/grib_dumper_class_serialize.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_dumper_class_serialize.c 2020-01-16 10:21:52.000000000 +0000 @@ -87,46 +87,46 @@ static int init(grib_dumper* d) { - grib_dumper_serialize *self = (grib_dumper_serialize*)d; - self->format = (char*)d->arg; - return GRIB_SUCCESS; + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + self->format = (char*)d->arg; + return GRIB_SUCCESS; } -static int destroy (grib_dumper* d){ - return GRIB_SUCCESS; +static int destroy (grib_dumper* d) +{ + return GRIB_SUCCESS; } static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment) { - grib_dumper_serialize *self = (grib_dumper_serialize*)d; - long value=0; size_t size = 1; - int err = grib_unpack_long(a,&value,&size); - - if( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ) - return; - - if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && - (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0 && - (strcmp(a->cclass->name,"lookup") != 0) ) - return; - - if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_LONG)) - fprintf(self->dumper.out,"%s = MISSING", a->name); - else - fprintf(self->dumper.out,"%s = %ld", a->name,value); - - if ( ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) && - (strcmp(a->cclass->name,"lookup") != 0) ) - fprintf(self->dumper.out," (read_only)"); + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + long value=0; size_t size = 1; + int err = grib_unpack_long(a,&value,&size); + + if( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ) + return; + + if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0 && + (strcmp(a->cclass->name,"lookup") != 0) ) + return; + + if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_LONG)) + fprintf(self->dumper.out,"%s = MISSING", a->name); + else + fprintf(self->dumper.out,"%s = %ld", a->name,value); + + if ( ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) && + (strcmp(a->cclass->name,"lookup") != 0) ) + fprintf(self->dumper.out," (read_only)"); #if 0 - if(comment) fprintf(self->dumper.out," [%s]",comment); + if(comment) fprintf(self->dumper.out," [%s]",comment); #endif - if(err) - fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_serialize::dump_long]",err,grib_get_error_message(err)); - - fprintf(self->dumper.out,"\n"); + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_serialize::dump_long]",err,grib_get_error_message(err)); + fprintf(self->dumper.out,"\n"); } #if 0 @@ -135,299 +135,292 @@ static void dump_bits(grib_dumper* d,grib_accessor* a,const char* comment) { - grib_dumper_serialize *self = (grib_dumper_serialize*)d; - long value; size_t size = 1; - int err = grib_unpack_long(a,&value,&size); - - if( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ) - return; - - if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && - (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) - return; + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + long value; size_t size = 1; + int err = grib_unpack_long(a,&value,&size); + + if( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ) + return; + + if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) + return; - fprintf(self->dumper.out,"%s = %ld ", a->name,value); + fprintf(self->dumper.out,"%s = %ld ", a->name,value); #if 0 - fprintf(self->dumper.out,"["); - for(i=0;i<(a->length*8);i++) { - if(test_bit(value,a->length*8-i-1)) - fprintf(self->dumper.out,"1"); - else - fprintf(self->dumper.out,"0"); - } + fprintf(self->dumper.out,"["); + for(i=0;i<(a->length*8);i++) { + if(test_bit(value,a->length*8-i-1)) + fprintf(self->dumper.out,"1"); + else + fprintf(self->dumper.out,"0"); + } - if(comment) - fprintf(self->dumper.out,":%s]",comment); - else - fprintf(self->dumper.out,"]"); + if(comment) + fprintf(self->dumper.out,":%s]",comment); + else + fprintf(self->dumper.out,"]"); #endif - if(err) - fprintf(self->dumper.out," *** ERR=%d (%s)",err,grib_get_error_message(err)); - - fprintf(self->dumper.out,"\n"); + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s)",err,grib_get_error_message(err)); + fprintf(self->dumper.out,"\n"); } static void dump_double(grib_dumper* d,grib_accessor* a,const char* comment) { - grib_dumper_serialize *self = (grib_dumper_serialize*)d; - double value; size_t size = 1; - int err = grib_unpack_double(a,&value,&size); - - if( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ) - return; + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + double value; size_t size = 1; + int err = grib_unpack_double(a,&value,&size); + + if( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ) + return; + + if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) + return; - if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && - (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) - return; - - - if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_DOUBLE)) - fprintf(self->dumper.out,"%s = MISSING", a->name); - else - fprintf(self->dumper.out,"%s = %g",a->name,value); + if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_DOUBLE)) + fprintf(self->dumper.out,"%s = MISSING", a->name); + else + fprintf(self->dumper.out,"%s = %g",a->name,value); - if ( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 ) fprintf(self->dumper.out," (read_only)"); + if ( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 ) fprintf(self->dumper.out," (read_only)"); #if 0 - if(comment) fprintf(self->dumper.out," [%s]",comment); + if(comment) fprintf(self->dumper.out," [%s]",comment); #endif - if(err) - fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_serialize::dump_double]",err,grib_get_error_message(err)); - fprintf(self->dumper.out,"\n"); - + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_serialize::dump_double]",err,grib_get_error_message(err)); + fprintf(self->dumper.out,"\n"); } static void dump_string(grib_dumper* d,grib_accessor* a,const char* comment) { - grib_dumper_serialize *self = (grib_dumper_serialize*)d; - char value[1024]={0,}; size_t size = sizeof(value); - int err = grib_unpack_string(a,value,&size); - int i; - - char *p = value; - - if( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ) - return; + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + char value[1024]={0,}; size_t size = sizeof(value); + int err = grib_unpack_string(a,value,&size); + int i; - if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && - (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) - return; + char *p = value; - while(*p) { if(!isprint(*p)) *p = '.'; p++; } + if( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ) + return; - for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) + return; + while(*p) { if(!isprint(*p)) *p = '.'; p++; } + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); - fprintf(self->dumper.out,"%s = %s", a->name,value); - if ( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 ) fprintf(self->dumper.out," (read_only)"); + fprintf(self->dumper.out,"%s = %s", a->name,value); + if ( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 ) fprintf(self->dumper.out," (read_only)"); #if 0 - if(comment) fprintf(self->dumper.out," [%s]",comment); + if(comment) fprintf(self->dumper.out," [%s]",comment); #endif - if(err) - fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_serialize::dump_string]",err,grib_get_error_message(err)); - fprintf(self->dumper.out,"\n"); + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_serialize::dump_string]",err,grib_get_error_message(err)); + fprintf(self->dumper.out,"\n"); } 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 size = a->length; - unsigned char* buf = (unsigned char*)grib_context_malloc(d->handle->context,size); - - if( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ) - return; - - if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && - (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) - return; - - for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); - fprintf(self->dumper.out,"%s = (%ld) {", a->name,a->length); - - if(!buf) - { - if(size == 0) - fprintf(self->dumper.out,"}\n"); - else - fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size); - return; - } + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + int i,k,err =0; + int more = 0; + size_t size = a->length; + unsigned char* buf = (unsigned char*)grib_context_malloc(d->handle->context,size); + + if( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ) + return; + + if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) + return; - fprintf(self->dumper.out,"\n"); + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"%s = (%ld) {", a->name,a->length); - err = grib_unpack_bytes(a,buf,&size); - if(err){ - grib_context_free(d->handle->context,buf); - fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_serialize::dump_bytes]\n}",err,grib_get_error_message(err)); - return ; - } - - if(size > 100) { - more = size - 100; - size = 100; - } - - k = 0; - /* if(size > 100) size = 100; */ - while(k < size) - { - int j; - for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); - for(j = 0; j < 16 && k < size; j++, k++) + if(!buf) { - fprintf(self->dumper.out,"%02x",buf[k]); - if(k != size-1) - fprintf(self->dumper.out,", "); + if(size == 0) + fprintf(self->dumper.out,"}\n"); + else + fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size); + return; } + fprintf(self->dumper.out,"\n"); - } - if(more) - { - for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); - fprintf(self->dumper.out,"... %d more values\n",more); - } - - for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); - fprintf(self->dumper.out,"} # %s %s \n",a->creator->op, a->name); - grib_context_free(d->handle->context,buf); + err = grib_unpack_bytes(a,buf,&size); + if(err){ + grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_serialize::dump_bytes]\n}",err,grib_get_error_message(err)); + return ; + } + + if(size > 100) { + more = size - 100; + size = 100; + } + + k = 0; + /* if(size > 100) size = 100; */ + while(k < size) + { + int j; + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + for(j = 0; j < 16 && k < size; j++, k++) + { + fprintf(self->dumper.out,"%02x",buf[k]); + if(k != size-1) + fprintf(self->dumper.out,", "); + } + fprintf(self->dumper.out,"\n"); + } + + if(more) + { + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"... %d more values\n",more); + } + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"} # %s %s \n",a->creator->op, a->name); + grib_context_free(d->handle->context,buf); } 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; - int columns=4; - char* values_format=NULL; - char* default_format="%.16e"; - char* columns_str=NULL; - size_t len=0; - char* pc=NULL; - char* pcf=NULL; - size_t size=0; - long count=0; - values_format=default_format; - - if((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)) - return; - - grib_value_count(a,&count); - size=count; - - if (self->format) { - if (self->format[0]=='\"') values_format=self->format+1; - else values_format=self->format; - last=strlen(values_format)-1; - if (values_format[last]=='\"') values_format[last]='\0'; - } - - - pc = values_format; - pcf = values_format; - while( *pc!='\0' && *pc != '%') pc++; - if (strlen(pc) > 1 ) { - values_format=pc; - len=pc-pcf; - } else { + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + int k,err =0; + double* buf = NULL; + int last=0; + int columns=4; + char* values_format=NULL; + char* default_format="%.16e"; + char* columns_str=NULL; + size_t len=0; + char* pc=NULL; + char* pcf=NULL; + size_t size=0; + long count=0; values_format=default_format; - len=0; - } - if (len>0) { - columns_str=(char*)malloc((len+1)*sizeof(char)); - Assert(columns_str); - columns_str=(char*)memcpy(columns_str,pcf,len); - columns_str[len]='\0'; - columns=atoi(columns_str); - free(columns_str); - } - - if(size == 1){ - dump_double(d,a,NULL); - return ; - } - - if ((d->option_flags & GRIB_DUMP_FLAG_VALUES) == 0 ) return; - - buf = (double*)grib_context_malloc(d->handle->context,size * sizeof(double)); - - fprintf(self->dumper.out,"%s (%ld) {",a->name,(long)size); - - if(!buf) - { - if(size == 0) - fprintf(self->dumper.out,"}\n"); - else - fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size); - return; - } + if((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)) + return; - fprintf(self->dumper.out,"\n"); + grib_value_count(a,&count); + size=count; - err = grib_unpack_double(a,buf,&size); + if (self->format) { + if (self->format[0]=='\"') values_format=self->format+1; + else values_format=self->format; + last=strlen(values_format)-1; + if (values_format[last]=='\"') values_format[last]='\0'; + } - if(err){ - grib_context_free(d->handle->context,buf); - fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_serialize::dump_values]\n}",err,grib_get_error_message(err)); - return ; - } - - k = 0; - while(k < size) - { - int j; - for(j = 0; j < columns && k < size; j++, k++) + pc = values_format; + pcf = values_format; + while( *pc!='\0' && *pc != '%') pc++; + if (strlen(pc) > 1 ) { + values_format=pc; + len=pc-pcf; + } else { + values_format=default_format; + len=0; + } + + if (len>0) { + columns_str=(char*)malloc((len+1)*sizeof(char)); + Assert(columns_str); + columns_str=(char*)memcpy(columns_str,pcf,len); + columns_str[len]='\0'; + columns=atoi(columns_str); + free(columns_str); + } + + if(size == 1){ + dump_double(d,a,NULL); + return ; + } + + if ((d->option_flags & GRIB_DUMP_FLAG_VALUES) == 0 ) return; + + buf = (double*)grib_context_malloc(d->handle->context,size * sizeof(double)); + + fprintf(self->dumper.out,"%s (%ld) {",a->name,(long)size); + + if(!buf) { - fprintf(self->dumper.out,values_format,buf[k]); - if(k != size-1) - fprintf(self->dumper.out,", "); + if(size == 0) + fprintf(self->dumper.out,"}\n"); + else + fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size); + return; } + fprintf(self->dumper.out,"\n"); - } - fprintf(self->dumper.out,"}\n"); - grib_context_free(d->handle->context,buf); + + err = grib_unpack_double(a,buf,&size); + + if(err){ + grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_serialize::dump_values]\n}",err,grib_get_error_message(err)); + return ; + } + + k = 0; + while(k < size) + { + int j; + for(j = 0; j < columns && k < size; j++, k++) + { + fprintf(self->dumper.out,values_format,buf[k]); + if(k != size-1) + fprintf(self->dumper.out,", "); + } + fprintf(self->dumper.out,"\n"); + } + fprintf(self->dumper.out,"}\n"); + grib_context_free(d->handle->context,buf); } static void dump_label(grib_dumper* d,grib_accessor* a,const char* comment) { #if 0 - grib_dumper_serialize *self = (grib_dumper_serialize*)d; - int i; - for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); - fprintf(self->dumper.out,"----> %s %s %s\n",a->creator->op, a->name,comment?comment:""); + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + int i; + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"----> %s %s %s\n",a->creator->op, a->name,comment?comment:""); #endif } static void dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors* block) { - const char* secstr="section"; - int len=0; - grib_dumper_serialize *self = (grib_dumper_serialize*)d; + const char* secstr="section"; + int len=0; + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + + len=strlen(secstr); + + if(a->name[0] == '_'){ + grib_dump_accessors_block(d,block); + return; + } - len=strlen(secstr); + if (strncmp(secstr,a->name,len)==0) + fprintf(self->dumper.out,"#------ %s -------\n",a->name); - if(a->name[0] == '_'){ grib_dump_accessors_block(d,block); - return; - } - - if (strncmp(secstr,a->name,len)==0) - fprintf(self->dumper.out,"#------ %s -------\n",a->name); - - - grib_dump_accessors_block(d,block); #if 0 - fprintf(self->dumper.out,"<------ %s %s\n",a->creator->op, a->name); + fprintf(self->dumper.out,"<------ %s %s\n",a->creator->op, a->name); #endif } diff -Nru eccodes-2.15.0/src/grib_dumper_class_wmo.c eccodes-2.16.0/src/grib_dumper_class_wmo.c --- eccodes-2.15.0/src/grib_dumper_class_wmo.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_dumper_class_wmo.c 2020-01-16 10:21:52.000000000 +0000 @@ -404,6 +404,7 @@ double* buf = NULL; size_t size=0; long count=0; + int is_char = 0; if( a->length == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) @@ -420,6 +421,11 @@ set_begin_end(d,a); + /* For the DIAG pseudo GRIBs. Key charValues uses 1-byte integers to represent a character */ + if ( a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE ) { + is_char = 1; + } + /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ print_offset(self->dumper.out,self->begin,self->theEnd); if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) @@ -453,7 +459,6 @@ size = 100; } - k = 0; while(k < size) { @@ -462,14 +467,16 @@ /*for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," ");*/ for(j = 0; j < 8 && k < size; j++, k++) { - fprintf(self->dumper.out,"%.10e",buf[k]); + if (is_char) fprintf(self->dumper.out,"'%c'",(char)buf[k]); + else fprintf(self->dumper.out,"%.10e",buf[k]); if(k != size-1) fprintf(self->dumper.out,", "); } fprintf(self->dumper.out,"\n"); #else - fprintf(self->dumper.out,"%d %g\n",k,buf[k]); + if(is_char) fprintf(self->dumper.out,"%d '%c'\n",k,(char)buf[k]); + else fprintf(self->dumper.out,"%d %g\n",k,buf[k]); #endif diff -Nru eccodes-2.15.0/src/grib_expression_class_is_in_list.c eccodes-2.16.0/src/grib_expression_class_is_in_list.c --- eccodes-2.15.0/src/grib_expression_class_is_in_list.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_expression_class_is_in_list.c 2020-01-16 10:21:52.000000000 +0000 @@ -91,167 +91,164 @@ /* END_CLASS_IMP */ -static grib_trie* load_list(grib_context* c,grib_expression* e, int* err) { - - grib_expression_is_in_list* self = (grib_expression_is_in_list*)e; - - char* filename=NULL; - char line[1024]={0,}; - grib_trie* list=NULL; - FILE* f=NULL; - - *err=GRIB_SUCCESS; - - filename=grib_context_full_defs_path(c,self->list); - if (!filename) { - grib_context_log(c,GRIB_LOG_ERROR,"unable to find def file %s",self->list); - *err=GRIB_FILE_NOT_FOUND; - return NULL; - } else { - grib_context_log(c,GRIB_LOG_DEBUG,"found def file %s",filename); - } - list=(grib_trie*)grib_trie_get(c->lists,filename); - if (list) { - grib_context_log(c,GRIB_LOG_DEBUG,"using list %s from cache",self->list); - return list; - } else { - grib_context_log(c,GRIB_LOG_DEBUG,"using list %s from file %s",self->list,filename); - } - - f=codes_fopen(filename,"r"); - if (!f) {*err=GRIB_IO_PROBLEM; return NULL;} - - list=grib_trie_new(c); - - while(fgets(line,sizeof(line)-1,f)) { - unsigned char* p=(unsigned char*)line; - while (*p!=0) { - if (*p<33) {*p=0; break;} - p++; - } - grib_trie_insert(list,line,line); - } +static grib_trie* load_list(grib_context* c,grib_expression* e, int* err) +{ + grib_expression_is_in_list* self = (grib_expression_is_in_list*)e; - grib_trie_insert(c->lists,filename,list); + char* filename=NULL; + char line[1024]={0,}; + grib_trie* list=NULL; + FILE* f=NULL; + + *err=GRIB_SUCCESS; + + filename=grib_context_full_defs_path(c,self->list); + if (!filename) { + grib_context_log(c,GRIB_LOG_ERROR,"unable to find def file %s",self->list); + *err=GRIB_FILE_NOT_FOUND; + return NULL; + } else { + grib_context_log(c,GRIB_LOG_DEBUG,"found def file %s",filename); + } + list=(grib_trie*)grib_trie_get(c->lists,filename); + if (list) { + grib_context_log(c,GRIB_LOG_DEBUG,"using list %s from cache",self->list); + return list; + } else { + grib_context_log(c,GRIB_LOG_DEBUG,"using list %s from file %s",self->list,filename); + } + + f=codes_fopen(filename,"r"); + if (!f) {*err=GRIB_IO_PROBLEM; return NULL;} + + list=grib_trie_new(c); + + while(fgets(line,sizeof(line)-1,f)) { + unsigned char* p=(unsigned char*)line; + while (*p!=0) { + if (*p<33) {*p=0; break;} + p++; + } + grib_trie_insert(list,line,line); + } - fclose(f); + grib_trie_insert(c->lists,filename,list); - return list; + fclose(f); + return list; } static const char* get_name(grib_expression* g) { - grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; - return e->name; + grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; + return e->name; } static int evaluate_long(grib_expression* g,grib_handle *h,long* result) { - grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; - int err=0; - char mybuf[1024]={0,}; - size_t size=1024; + grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; + int err=0; + char mybuf[1024]={0,}; + size_t size=1024; - grib_trie* list=load_list(h->context,g,&err); + grib_trie* list=load_list(h->context,g,&err); - if((err=grib_get_string_internal(h,e->name,mybuf,&size)) != GRIB_SUCCESS) - return err; + if((err=grib_get_string_internal(h,e->name,mybuf,&size)) != GRIB_SUCCESS) + return err; - if (grib_trie_get(list,mybuf)) *result=1; - else *result=0; + if (grib_trie_get(list,mybuf)) *result=1; + else *result=0; - return err; + return err; } static int evaluate_double(grib_expression *g,grib_handle *h,double* result) { - grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; - int err=0; - char mybuf[1024]={0,}; - size_t size=1024; + grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; + int err=0; + char mybuf[1024]={0,}; + size_t size=1024; - grib_trie* list=load_list(h->context,g,&err); + grib_trie* list=load_list(h->context,g,&err); - if((err=grib_get_string_internal(h,e->name,mybuf,&size)) != GRIB_SUCCESS) - return err; + if((err=grib_get_string_internal(h,e->name,mybuf,&size)) != GRIB_SUCCESS) + return err; - if (grib_trie_get(list,mybuf)) *result=1; - else *result=0; + if (grib_trie_get(list,mybuf)) *result=1; + else *result=0; - return err; + return err; } static string evaluate_string(grib_expression* g,grib_handle* h,char* buf,size_t* size,int* err) { - grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; - char mybuf[1024]={0,}; - size_t sizebuf=1024; - long result; - - grib_trie* list=load_list(h->context,g,err); - - if((*err=grib_get_string_internal(h,e->name,mybuf,&sizebuf)) != GRIB_SUCCESS) - return NULL; - - if (grib_trie_get(list,mybuf)) result=1; - else result=0; - - sprintf(buf,"%ld",result); - *size=strlen(buf); - return buf; + grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; + char mybuf[1024]={0,}; + size_t sizebuf=1024; + long result; + + grib_trie* list=load_list(h->context,g,err); + + if((*err=grib_get_string_internal(h,e->name,mybuf,&sizebuf)) != GRIB_SUCCESS) + return NULL; + + if (grib_trie_get(list,mybuf)) result=1; + else result=0; + + sprintf(buf,"%ld",result); + *size=strlen(buf); + return buf; } static void print(grib_context* c,grib_expression* g,grib_handle* f) { - grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; - printf("access('%s",e->name); - if(f) - { - long s = 0; - grib_get_long(f,e->name,&s); - printf("=%ld",s); - } - printf("')"); + grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; + printf("access('%s",e->name); + if(f) + { + long s = 0; + grib_get_long(f,e->name,&s); + printf("=%ld",s); + } + printf("')"); } static void destroy(grib_context* c,grib_expression* g) { } +static void add_dependency(grib_expression* g, grib_accessor* observer){ + grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; + grib_accessor *observed = grib_find_accessor(grib_handle_of_accessor(observer),e->name); + + if(!observed) + { + /* grib_context_log(observer->context, GRIB_LOG_ERROR, */ + /* "Error in accessor_add_dependency: cannot find [%s]", e->name); */ + /* Assert(observed); */ + return; + } -static void add_dependency(grib_expression* g, grib_accessor* observer){ - grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; - grib_accessor *observed = grib_find_accessor(grib_handle_of_accessor(observer),e->name); - - if(!observed) - { - /* grib_context_log(observer->context, GRIB_LOG_ERROR, */ - /* "Error in accessor_add_dependency: cannot find [%s]", e->name); */ - /* Assert(observed); */ - return; - } - - grib_dependency_add(observer,observed); + grib_dependency_add(observer,observed); } grib_expression* new_is_in_list_expression(grib_context* c,const char* name,const char* list) { - grib_expression_is_in_list* e = (grib_expression_is_in_list*)grib_context_malloc_clear_persistent(c,sizeof(grib_expression_is_in_list)); - e->base.cclass = grib_expression_class_is_in_list; - e->name = grib_context_strdup_persistent(c,name); - e->list = grib_context_strdup_persistent(c,list); - return (grib_expression*)e; + grib_expression_is_in_list* e = (grib_expression_is_in_list*)grib_context_malloc_clear_persistent(c,sizeof(grib_expression_is_in_list)); + e->base.cclass = grib_expression_class_is_in_list; + e->name = grib_context_strdup_persistent(c,name); + e->list = grib_context_strdup_persistent(c,list); + return (grib_expression*)e; } static int native_type(grib_expression* g,grib_handle *h) { - grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; - int type = 0; - int err; - if((err=grib_get_native_type(h,e->name,&type)) != GRIB_SUCCESS) - grib_context_log(h->context, GRIB_LOG_ERROR, - "Error in native_type %s : %s", e->name,grib_get_error_message(err)); - return type; + grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; + int type = 0; + int err; + if((err=grib_get_native_type(h,e->name,&type)) != GRIB_SUCCESS) + grib_context_log(h->context, GRIB_LOG_ERROR, + "Error in native_type %s : %s", e->name,grib_get_error_message(err)); + return type; } - diff -Nru eccodes-2.15.0/src/grib_expression_class_is_integer.c eccodes-2.16.0/src/grib_expression_class_is_integer.c --- eccodes-2.15.0/src/grib_expression_class_is_integer.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_expression_class_is_integer.c 2020-01-16 10:21:52.000000000 +0000 @@ -94,113 +94,112 @@ static const char* get_name(grib_expression* g) { - grib_expression_is_integer* e = (grib_expression_is_integer*)g; - return e->name; + grib_expression_is_integer* e = (grib_expression_is_integer*)g; + return e->name; } static int evaluate_long(grib_expression* g,grib_handle *h,long* result) { - grib_expression_is_integer* e = (grib_expression_is_integer*)g; - int err=0; - char mybuf[1024]={0,}; - size_t size=1024; - char *p=0; - long val=0; - char* start=0; - - if((err=grib_get_string_internal(h,e->name,mybuf,&size)) != GRIB_SUCCESS) - return err; - - start=mybuf+e->start; - - if (e->length > 0 ) start[e->length]=0; - - val=strtol(start,&p,10); - - if (*p!=0) - *result=0; - else - *result=1; + grib_expression_is_integer* e = (grib_expression_is_integer*)g; + int err=0; + char mybuf[1024]={0,}; + size_t size=1024; + char *p=0; + long val=0; + char* start=0; + + if((err=grib_get_string_internal(h,e->name,mybuf,&size)) != GRIB_SUCCESS) + return err; + + start=mybuf+e->start; + + if (e->length > 0 ) start[e->length]=0; + + val=strtol(start,&p,10); + + if (*p!=0) + *result=0; + else + *result=1; - (void)val; - return err; + (void)val; + return err; } static int evaluate_double(grib_expression *g,grib_handle *h,double* result) { - int err=0; - long lresult=0; + int err=0; + long lresult=0; - err=evaluate_long(g,h,&lresult); - *result=lresult; - return err; + err=evaluate_long(g,h,&lresult); + *result=lresult; + return err; } static string evaluate_string(grib_expression* g,grib_handle* h,char* buf,size_t* size,int* err) { - long lresult=0; - double dresult=0.0; + long lresult=0; + double dresult=0.0; - switch (grib_expression_native_type(h, g)) { + switch (grib_expression_native_type(h, g)) { case GRIB_TYPE_LONG: - *err=evaluate_long(g,h,&lresult); - sprintf(buf,"%ld",lresult); - break; + *err=evaluate_long(g,h,&lresult); + sprintf(buf,"%ld",lresult); + break; case GRIB_TYPE_DOUBLE: - *err=evaluate_double(g,h,&dresult); - sprintf(buf,"%g",dresult); - break; - } - return buf; + *err=evaluate_double(g,h,&dresult); + sprintf(buf,"%g",dresult); + break; + } + return buf; } static void print(grib_context* c,grib_expression* g,grib_handle* f) { - grib_expression_is_integer* e = (grib_expression_is_integer*)g; - printf("access('%s",e->name); - if(f) - { - long s = 0; - grib_get_long(f,e->name,&s); - printf("=%ld",s); - } - printf("')"); + grib_expression_is_integer* e = (grib_expression_is_integer*)g; + printf("access('%s",e->name); + if(f) + { + long s = 0; + grib_get_long(f,e->name,&s); + printf("=%ld",s); + } + printf("')"); } static void destroy(grib_context* c,grib_expression* g) { - grib_expression_is_integer* e = (grib_expression_is_integer*)g; - grib_context_free_persistent(c,e->name); + grib_expression_is_integer* e = (grib_expression_is_integer*)g; + grib_context_free_persistent(c,e->name); } -static void add_dependency(grib_expression* g, grib_accessor* observer){ - grib_expression_is_integer* e = (grib_expression_is_integer*)g; - grib_accessor *observed = grib_find_accessor(grib_handle_of_accessor(observer),e->name); +static void add_dependency(grib_expression* g, grib_accessor* observer){ + grib_expression_is_integer* e = (grib_expression_is_integer*)g; + grib_accessor *observed = grib_find_accessor(grib_handle_of_accessor(observer),e->name); - if(!observed) - { - /* grib_context_log(observer->context, GRIB_LOG_ERROR, */ - /* "Error in accessor_add_dependency: cannot find [%s]", e->name); */ - /* Assert(observed); */ - return; - } + if(!observed) + { + /* grib_context_log(observer->context, GRIB_LOG_ERROR, */ + /* "Error in accessor_add_dependency: cannot find [%s]", e->name); */ + /* Assert(observed); */ + return; + } - grib_dependency_add(observer,observed); + grib_dependency_add(observer,observed); } grib_expression* new_is_integer_expression(grib_context* c,const char *name,int start,int length) { - grib_expression_is_integer* e = (grib_expression_is_integer*)grib_context_malloc_clear_persistent(c,sizeof(grib_expression_is_integer)); - e->base.cclass = grib_expression_class_is_integer; - e->name = grib_context_strdup_persistent(c,name); - e->start = start; - e->length = length; - return (grib_expression*)e; + grib_expression_is_integer* e = (grib_expression_is_integer*)grib_context_malloc_clear_persistent(c,sizeof(grib_expression_is_integer)); + e->base.cclass = grib_expression_class_is_integer; + e->name = grib_context_strdup_persistent(c,name); + e->start = start; + e->length = length; + return (grib_expression*)e; } static int native_type(grib_expression* g,grib_handle *h) { - return GRIB_TYPE_LONG; + return GRIB_TYPE_LONG; } - diff -Nru eccodes-2.15.0/src/grib_io.c eccodes-2.16.0/src/grib_io.c --- eccodes-2.15.0/src/grib_io.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_io.c 2020-01-16 10:21:52.000000000 +0000 @@ -104,14 +104,18 @@ memcpy(buffer,tmp,already_read); - if((r->read(r->read_data,buffer+already_read,rest,&err) != rest) || err) + 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));*/ return err; + } if(check7777 && !r->headers_only && (buffer[message_length-4] != '7' || buffer[message_length-3] != '7' || buffer[message_length-2] != '7' || - buffer[message_length-1] != '7')) { - + buffer[message_length-1] != '7')) + { + grib_context* c = grib_context_get_default(); + grib_context_log(c, GRIB_LOG_DEBUG, "read_the_rest: No final 7777 at expected location (Coded length=%lu)", message_length); return GRIB_WRONG_LENGTH; } diff -Nru eccodes-2.15.0/src/grib_jasper_encoding.c eccodes-2.16.0/src/grib_jasper_encoding.c --- eccodes-2.15.0/src/grib_jasper_encoding.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_jasper_encoding.c 2020-01-16 10:21:52.000000000 +0000 @@ -161,11 +161,7 @@ if( helper->compression != 0) { /* Lossy */ -#ifndef ECCODES_ON_WINDOWS - snprintf (opts, MAXOPTSSIZE, "mode=real\nrate=%f", 1.0/helper->compression); -#else - _snprintf(opts, MAXOPTSSIZE, "mode=real\nrate=%f", 1.0/helper->compression); -#endif + ecc_snprintf(opts, MAXOPTSSIZE, "mode=real\nrate=%f", 1.0/helper->compression); } Assert(cmpt.width_ * cmpt.height_ * cmpt.cps_ == buflen); diff -Nru eccodes-2.15.0/src/grib_nearest.c eccodes-2.16.0/src/grib_nearest.c --- eccodes-2.15.0/src/grib_nearest.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_nearest.c 2020-01-16 10:21:52.000000000 +0000 @@ -16,6 +16,9 @@ #include "grib_api_internal.h" +/* Note: The 'values' argument can be NULL in which case the data section will not be decoded + * See ECC-499 + */ int grib_nearest_find( grib_nearest *nearest, const grib_handle* ch, double inlat, double inlon, @@ -147,17 +150,22 @@ double qoutlats[4]={0,}; double qoutlons[4]={0,}; double qvalues[4]={0,}; + double* rvalues = NULL; int qindexes[4]={0,}; int ret=0; long i=0; size_t len=4; int flags=GRIB_NEAREST_SAME_GRID | GRIB_NEAREST_SAME_DATA; + if (values) rvalues = qvalues; + nearest=grib_nearest_new(h,&ret); if (ret!=GRIB_SUCCESS) return ret; if (is_lsm) { int noland=1; + /* ECC-499: In land-sea mask mode, 'values' cannot be NULL because we need to query whether >= 0.5 */ + Assert(values); for (i=0;i= qdistances[ii])) { @@ -193,7 +202,9 @@ } *poutlats=qoutlats[idx];poutlats++; *poutlons=qoutlons[idx];poutlons++; - *pvalues=qvalues[idx];pvalues++; + if (values) { + *pvalues=qvalues[idx];pvalues++; + } *pdistances=qdistances[idx];pdistances++; *pindexes=qindexes[idx];pindexes++; } diff -Nru eccodes-2.15.0/src/grib_nearest_class_latlon_reduced.c eccodes-2.16.0/src/grib_nearest_class_latlon_reduced.c --- eccodes-2.15.0/src/grib_nearest_class_latlon_reduced.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_nearest_class_latlon_reduced.c 2020-01-16 10:21:52.000000000 +0000 @@ -328,7 +328,9 @@ distances[kk]=self->distances[kk]; outlats[kk]=self->lats[self->j[jj]]; outlons[kk]=self->lons[self->k[kk]]; - grib_get_double_element_internal(h,self->values_key,self->k[kk],&(values[kk])); + if (values) { /* ECC-499 */ + grib_get_double_element_internal(h,self->values_key,self->k[kk],&(values[kk])); + } indexes[kk]=self->k[kk]; kk++; } diff -Nru eccodes-2.15.0/src/grib_nearest_class_reduced.c eccodes-2.16.0/src/grib_nearest_class_reduced.c --- eccodes-2.15.0/src/grib_nearest_class_reduced.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_nearest_class_reduced.c 2020-01-16 10:21:52.000000000 +0000 @@ -382,7 +382,9 @@ distances[kk]=self->distances[kk]; outlats[kk]=self->lats[self->j[jj]]; outlons[kk]=self->lons[self->k[kk]]; - grib_get_double_element_internal(h,self->values_key,self->k[kk],&(values[kk])); + if (values) { /* ECC-499 */ + grib_get_double_element_internal(h,self->values_key,self->k[kk],&(values[kk])); + } indexes[kk]=self->k[kk]; kk++; } diff -Nru eccodes-2.15.0/src/grib_nearest_class_regular.c eccodes-2.16.0/src/grib_nearest_class_regular.c --- eccodes-2.15.0/src/grib_nearest_class_regular.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_nearest_class_regular.c 2020-01-16 10:21:52.000000000 +0000 @@ -420,7 +420,9 @@ outlats[kk] = new_lat; outlons[kk] = new_lon; } - grib_get_double_element_internal(h,self->values_key,self->k[kk],&(values[kk])); + if (values) { /* ECC-499 */ + grib_get_double_element_internal(h,self->values_key,self->k[kk],&(values[kk])); + } /* Using the brute force approach described above */ /* Assert(self->k[kk] < nvalues); */ /* values[kk]=nearest->values[self->k[kk]]; */ diff -Nru eccodes-2.15.0/src/grib_util.c eccodes-2.16.0/src/grib_util.c --- eccodes-2.15.0/src/grib_util.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_util.c 2020-01-16 10:21:52.000000000 +0000 @@ -11,26 +11,6 @@ #include "grib_api_internal.h" #include -#ifdef ECCODES_ON_WINDOWS - /* Replace C99/Unix rint() for Windows Visual C++ (only before VC++ 2013 versions) */ - #if defined _MSC_VER && _MSC_VER < 1800 - double rint(double x) - { - char * buf = 0; - int decimal=0, sign=0, err = 0; - double result = 0; - buf = (char*) malloc(_CVTBUFSIZE); - err = _fcvt_s(buf, _CVTBUFSIZE, x, 0, &decimal, &sign); - Assert(err == 0); - result = atof(buf); - if(sign == 1) { - result = result * -1; - } - free(buf); - return result; - } - #endif -#endif typedef enum {eROUND_ANGLE_UP, eROUND_ANGLE_DOWN} RoundingPolicy; @@ -468,9 +448,6 @@ return retval; } -#ifdef ECCODES_ON_WINDOWS -#define round(a) ( (a) >=0 ? ((a)+0.5) : ((a)-0.5) ) -#endif static double adjust_angle(const double angle, const RoundingPolicy policy, const double angle_subdivisions) { double result = 0; @@ -749,6 +726,9 @@ if (spec_grid_type == GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL) return "lambert"; + if (spec_grid_type == GRIB_UTIL_GRID_SPEC_UNSTRUCTURED) + return "unstructured_grid"; + return NULL; } @@ -1067,10 +1047,11 @@ } break; case GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA: + case GRIB_UTIL_GRID_SPEC_UNSTRUCTURED: if (editionNumber==1) { /* This grid type is not available in edition 1 */ if (h->context->debug==-1) - fprintf(stderr,"ECCODES DEBUG grib_util: lambert_azimuthal_equal_area specified " - "but input is GRIB1. Output must be a higher edition!\n"); + fprintf(stderr,"ECCODES DEBUG grib_util: '%s' specified " + "but input is GRIB1. Output must be a higher edition!\n", grid_type); convertEditionEarlier=1; } sprintf(name, "GRIB%ld", editionNumber); @@ -1218,6 +1199,13 @@ */ break; + case GRIB_UTIL_GRID_SPEC_UNSTRUCTURED: + COPY_SPEC_LONG (bitmapPresent); + if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue); + /* + * TODO: Other keys + */ + break; case GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL: COPY_SPEC_LONG (bitmapPresent); if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue); @@ -2027,11 +2015,9 @@ if (is_instant) return 0; else return 8; } - - return -1; } -int is_index_file(const char* filename) +int is_grib_index_file(const char* filename) { FILE* fh; char buf[8]={0,}; @@ -2054,51 +2040,6 @@ return ret; } -char get_dir_separator_char(void) -{ -#ifdef ECCODES_ON_WINDOWS -# define DIR_SEPARATOR_CHAR '\\' -#else -# define DIR_SEPARATOR_CHAR '/' -#endif - return DIR_SEPARATOR_CHAR; -} - -char* codes_getenv(const char* name) -{ - /* Look for the new ecCodes environment variable names */ - /* if not found, then look for old grib_api ones for backward compatibility */ - char* result = getenv(name); - if (result == NULL) { - const char* old_name = name; - - /* Test the most commonly used variables first */ - if (STR_EQ(name, "ECCODES_SAMPLES_PATH")) old_name="GRIB_SAMPLES_PATH"; - else if (STR_EQ(name, "ECCODES_DEFINITION_PATH")) old_name="GRIB_DEFINITION_PATH"; - else if (STR_EQ(name, "ECCODES_DEBUG")) old_name="GRIB_API_DEBUG"; - - else if (STR_EQ(name, "ECCODES_FAIL_IF_LOG_MESSAGE")) old_name="GRIB_API_FAIL_IF_LOG_MESSAGE"; - else if (STR_EQ(name, "ECCODES_GRIB_WRITE_ON_FAIL")) old_name="GRIB_API_WRITE_ON_FAIL"; - else if (STR_EQ(name, "ECCODES_GRIB_LARGE_CONSTANT_FIELDS")) old_name="GRIB_API_LARGE_CONSTANT_FIELDS"; - else if (STR_EQ(name, "ECCODES_NO_ABORT")) old_name="GRIB_API_NO_ABORT"; - else if (STR_EQ(name, "ECCODES_GRIBEX_MODE_ON")) old_name="GRIB_GRIBEX_MODE_ON"; - else if (STR_EQ(name, "ECCODES_GRIB_IEEE_PACKING")) old_name="GRIB_IEEE_PACKING"; - else if (STR_EQ(name, "ECCODES_IO_BUFFER_SIZE")) old_name="GRIB_API_IO_BUFFER_SIZE"; - else if (STR_EQ(name, "ECCODES_LOG_STREAM")) old_name="GRIB_API_LOG_STREAM"; - else if (STR_EQ(name, "ECCODES_GRIB_NO_BIG_GROUP_SPLIT")) old_name="GRIB_API_NO_BIG_GROUP_SPLIT"; - else if (STR_EQ(name, "ECCODES_GRIB_NO_SPD")) old_name="GRIB_API_NO_SPD"; - else if (STR_EQ(name, "ECCODES_GRIB_KEEP_MATRIX")) old_name="GRIB_API_KEEP_MATRIX"; - else if (STR_EQ(name, "_ECCODES_ECMWF_TEST_DEFINITION_PATH")) old_name="_GRIB_API_ECMWF_TEST_DEFINITION_PATH"; - else if (STR_EQ(name, "_ECCODES_ECMWF_TEST_SAMPLES_PATH")) old_name="_GRIB_API_ECMWF_TEST_SAMPLES_PATH"; - else if (STR_EQ(name, "ECCODES_GRIB_JPEG")) old_name="GRIB_JPEG"; - else if (STR_EQ(name, "ECCODES_GRIB_DUMP_JPG_FILE")) old_name="GRIB_DUMP_JPG_FILE"; - else if (STR_EQ(name, "ECCODES_PRINT_MISSING")) old_name="GRIB_PRINT_MISSING"; - - result = getenv(old_name); - } - return result; -} - size_t sum_of_pl_array(const long* pl, size_t plsize) { long i, count=0; @@ -2107,3 +2048,67 @@ } return count; } + +int grib_util_grib_data_quality_check(grib_handle* h, double min_val, double max_val) +{ + int err = 0; + long min_field_value_allowed=0, max_field_value_allowed=0; + long paramId = 0; + double dmin_allowed=0, dmax_allowed=0; + grib_context* ctx = h->context; + int is_error = 1; + /* + * If grib_data_quality_checks == 1, limits failure results in an error + * If grib_data_quality_checks == 2, limits failure results in a warning + */ + Assert( ctx->grib_data_quality_checks == 1 || ctx->grib_data_quality_checks == 2 ); + is_error = (ctx->grib_data_quality_checks == 1); + + /* The limit keys must exist if we are here */ + err = grib_get_long(h, "param_value_min", &min_field_value_allowed); + if (err) { + grib_context_log(ctx, GRIB_LOG_ERROR,"grib_data_quality_check: Could not get param_value_min"); + return err; + } + err = grib_get_long(h, "param_value_max", &max_field_value_allowed); + if (err) { + grib_context_log(ctx, GRIB_LOG_ERROR,"grib_data_quality_check: Could not get param_value_max"); + return err; + } + + dmin_allowed = (double)min_field_value_allowed; + dmax_allowed = (double)max_field_value_allowed; + + if (min_val < dmin_allowed) { + char description[1024] = {0,}; + if (get_concept_condition_string(h, "param_value_min", NULL, description)==GRIB_SUCCESS) { + fprintf(stderr, "ECCODES %s : (%s): minimum (%g) is less than the allowable limit (%g)\n", + (is_error? "ERROR":"WARNING"), description, min_val, dmin_allowed); + } else { + if (grib_get_long(h, "paramId", ¶mId) == GRIB_SUCCESS) { + fprintf(stderr, "ECCODES %s : (paramId=%ld): minimum (%g) is less than the default allowable limit (%g)\n", + (is_error? "ERROR":"WARNING"), paramId, min_val, dmin_allowed); + } + } + if (is_error) { + return GRIB_OUT_OF_RANGE; /* Failure */ + } + } + if (max_val > dmax_allowed) { + char description[1024] = {0,}; + if (get_concept_condition_string(h, "param_value_max", NULL, description)==GRIB_SUCCESS) { + fprintf(stderr, "ECCODES %s : (%s): maximum (%g) is more than the allowable limit (%g)\n", + (is_error? "ERROR":"WARNING"), description, max_val, dmax_allowed); + } else { + if (grib_get_long(h, "paramId", ¶mId) == GRIB_SUCCESS) { + fprintf(stderr, "ECCODES %s : (paramId=%ld): maximum (%g) is more than the default allowable limit (%g)\n", + (is_error? "ERROR":"WARNING"), paramId, max_val, dmax_allowed); + } + } + if (is_error) { + return GRIB_OUT_OF_RANGE; /* Failure */ + } + } + + return GRIB_SUCCESS; +} diff -Nru eccodes-2.15.0/src/grib_value.c eccodes-2.16.0/src/grib_value.c --- eccodes-2.15.0/src/grib_value.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/grib_value.c 2020-01-16 10:21:52.000000000 +0000 @@ -692,10 +692,16 @@ static int __grib_set_double_array(grib_handle* h, const char* name, const double* val, size_t length, int check) { double v=0; - int constant,i; + size_t i=0; - if (h->context->debug) - fprintf(stderr, "ECCODES DEBUG grib_set_double_array key=%s %ld values\n",name,(long)length); + if (h->context->debug) { + size_t N=5; + if (length<=N) N=length; + fprintf(stderr, "ECCODES DEBUG grib_set_double_array key=%s %ld values (",name,(long)length); + for(i=0; i= length) fprintf(stderr, " )\n"); + else fprintf(stderr, " ... )\n"); + } if (length==0) { grib_accessor* a = grib_find_accessor(h, name); @@ -708,6 +714,7 @@ if (!strcmp(name,"values") || !strcmp(name,"codedValues")) { double missingValue; int ret=0; + int constant=0; ret=grib_get_double(h,"missingValue",&missingValue); if (ret) missingValue=9999; @@ -802,7 +809,13 @@ if (!a) return GRIB_NOT_FOUND ; if (h->context->debug) { - fprintf(stderr, "ECCODES DEBUG _grib_set_long_array key=%s %ld values\n",name,(long)length); + size_t i=0; + size_t N=5; + if (length<=N) N=length; + fprintf(stderr, "ECCODES DEBUG _grib_set_long_array key=%s %ld values (",name,(long)length); + for(i=0; i= length) fprintf(stderr, " )\n"); + else fprintf(stderr, " ... )\n"); } if (name[0]=='/' || name[0]=='#' ) { diff -Nru eccodes-2.15.0/src/Makefile.am eccodes-2.16.0/src/Makefile.am --- eccodes-2.15.0/src/Makefile.am 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/Makefile.am 2020-01-16 10:21:52.000000000 +0000 @@ -373,6 +373,7 @@ grib_iterator_class_regular.c \ grib_iterator_class_space_view.c \ grib_expression.c \ + codes_util.c \ grib_util.c \ bufr_util.c \ string_util.c \ diff -Nru eccodes-2.15.0/src/string_util.c eccodes-2.16.0/src/string_util.c --- eccodes-2.15.0/src/string_util.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/src/string_util.c 2020-01-16 10:21:52.000000000 +0000 @@ -42,7 +42,11 @@ /* "/tmp/" -> "" */ const char* extract_filename(const char* filepath) { - const char* s = strrchr(filepath, get_dir_separator_char()); + /* Note: Windows users could pass in fwd slashes! + * so have to check both separators + */ + const char* s = strrchr(filepath, '/'); + if (!s) s = strrchr(filepath, '\\'); if (!s) return filepath; else return s + 1; } diff -Nru eccodes-2.15.0/tests/bpv_limit.c eccodes-2.16.0/tests/bpv_limit.c --- eccodes-2.15.0/tests/bpv_limit.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/bpv_limit.c 2020-01-16 10:21:52.000000000 +0000 @@ -52,7 +52,7 @@ filename=argv[1]; for (i=0;i<255;i++) { - FILE* in = fopen(filename,"r"); assert(in); + FILE* in = fopen(filename,"rb"); assert(in); h = grib_handle_new_from_file(0,in,&err); assert(h); /* get the size of the values array*/ diff -Nru eccodes-2.15.0/tests/bufr_compare.sh eccodes-2.16.0/tests/bufr_compare.sh --- eccodes-2.15.0/tests/bufr_compare.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/bufr_compare.sh 2020-01-16 10:21:52.000000000 +0000 @@ -56,7 +56,7 @@ # Test: comparing with and without the -b switch #---------------------------------------------------- f="syno_1.bufr" -echo "Test: comparing with and witout the -b switch" >> $fLog +echo "Test: comparing with and without the -b switch" >> $fLog echo "file: $f" >> $fLog #Alter a key in the file @@ -92,6 +92,7 @@ #---------------------------------------------------- # Change subCentre and compare #---------------------------------------------------- +echo "Test: Change subCentre and compare" >> $fLog ${tools_dir}/bufr_set -s bufrHeaderSubCentre=12 aaen_55.bufr $fBufrTmp set +e ${tools_dir}/bufr_compare aaen_55.bufr $fBufrTmp > $fLog 2>&1 @@ -101,8 +102,22 @@ fgrep -q "[bufrHeaderSubCentre]: [70] != [12]" $fLog #---------------------------------------------------- +# First argument of bufr_compare is a directory (error) +#---------------------------------------------------- +echo "Test: First argument of bufr_compare is a directory (error)" >> $fLog +temp_dir=tempdir.${label} +mkdir -p $temp_dir +set +e +${tools_dir}/bufr_compare $temp_dir aaen_55.bufr >/dev/null +status=$? +set -e +[ $status -eq 1 ] +rm -fr $temp_dir + +#---------------------------------------------------- # Second argument of bufr_compare is a directory #---------------------------------------------------- +echo "Test: Second argument of bufr_compare is a directory" >> $fLog temp_dir=tempdir.${label} mkdir -p $temp_dir infile=aaen_55.bufr @@ -113,6 +128,7 @@ #---------------------------------------------------- # Compare attributes #---------------------------------------------------- +echo "Test: Compare attributes" >> $fLog set +e ${tools_dir}/bufr_compare amv2_87.bufr amv3_87.bufr > $fLog 2>&1 status=$? @@ -124,8 +140,9 @@ grep -q "#1#coldestClusterTemperature->percentConfidence" $fLog #---------------------------------------------------- -# Header only mode +# Header-only mode #---------------------------------------------------- +echo "Test: Header-only mode" >> $fLog f="syno_1.bufr" cat > $fRules <> $fLog f=$ECCODES_SAMPLES_PATH/BUFR3.tmpl # Add a local section ${tools_dir}/bufr_set -s section2Present=1 $f $fBufrTmp @@ -156,16 +174,17 @@ #---------------------------------------------------- # ECC-656: using relative comparison (-R) with 'all' #---------------------------------------------------- +echo "Test: ECC-656: using relative comparison (-R) with 'all'" >> $fLog f='airc_142.bufr' echo 'set unpack=1;set airTemperature=228; set height=1.037e+04; set pack=1; write;' |\ ${tools_dir}/codes_bufr_filter -o $fBufrTmp - $f ${tools_dir}/bufr_compare -R airTemperature=0.004,height=0.001 $f $fBufrTmp ${tools_dir}/bufr_compare -R all=0.004 $f $fBufrTmp -#---------------------------------------------------- -# ECC-658: apply relative comparison (-R) to all -# ranks of a given key -#---------------------------------------------------- +#-------------------------------------------------------------------- +# ECC-658: apply relative comparison (-R) to all ranks of a given key +#-------------------------------------------------------------------- +echo "Test: ECC-658: apply relative comparison (-R) to all ranks of a given key" >> $fLog f='PraticaTemp.bufr' ${tools_dir}/codes_bufr_filter -o $fBufrTmp - $f < $fRules ${tools_dir}/codes_bufr_filter -o $fBufrTmp $fRules $f + ${tools_dir}/bufr_compare $fBufrTmp $f TEMP_OUT1=${label}.$f.dump.out diff -Nru eccodes-2.15.0/tests/bufr_ecc-197.sh eccodes-2.16.0/tests/bufr_ecc-197.sh --- eccodes-2.15.0/tests/bufr_ecc-197.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/bufr_ecc-197.sh 2020-01-16 10:21:52.000000000 +0000 @@ -18,13 +18,20 @@ label="bufr_ecc-197-test" input=${data_dir}/bufr/vos308014_v3_26.bufr -if [ ! -f $input ]; then - echo "Data file $input not available" - exit 0 -fi TEMP=${label}.temp +LOG=${label}.log + + +# Get expanded descriptors +cat > $TEMP < $LOG 2>&1 +grep -q "ECCODES ERROR.*no match for sequences=308014" $LOG + # Create a temporary directory which holds the tables etc +# This BUFR file uses masterTablesVersionNumber 26 TEMP_DIR=${label}.temp-dir.$$ rm -rf $TEMP_DIR mkdir -p $TEMP_DIR/definitions/bufr/tables/0/wmo/26 @@ -47,4 +54,4 @@ [ $1 -gt 35700 ] rm -rf $TEMP_DIR -rm -f $TEMP +rm -f $TEMP $LOG diff -Nru eccodes-2.15.0/tests/bufr_ecc-379.sh eccodes-2.16.0/tests/bufr_ecc-379.sh --- eccodes-2.15.0/tests/bufr_ecc-379.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/bufr_ecc-379.sh 2020-01-16 10:21:52.000000000 +0000 @@ -36,13 +36,16 @@ # Expect this to fail as two values are out-of-range set +e -${tools_dir}/codes_bufr_filter -o $tempOut $tempRules $BufrFile 2>/dev/null +${tools_dir}/codes_bufr_filter -o $tempOut $tempRules $BufrFile 2>$tempText status=$? set -e [ $status -ne 0 ] +grep -q 'longitude. Maximum value (value\[0\]=500) out of range' $tempText + # Now set environment variable to turn out-of-range values into 'missing' export ECCODES_BUFR_SET_TO_MISSING_IF_OUT_OF_RANGE=1 -${tools_dir}/codes_bufr_filter -o $tempOut $tempRules $BufrFile +${tools_dir}/codes_bufr_filter -o $tempOut $tempRules $BufrFile 2>$tempText +grep -q 'WARNING.*Setting it to missing value' $tempText unset ECCODES_BUFR_SET_TO_MISSING_IF_OUT_OF_RANGE #echo 'set unpack=1;print "[longitude]";' | ${tools_dir}/bufr_filter - $BufrFile diff -Nru eccodes-2.15.0/tests/bufr_ecc-604.c eccodes-2.16.0/tests/bufr_ecc-604.c --- eccodes-2.15.0/tests/bufr_ecc-604.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/bufr_ecc-604.c 2020-01-16 10:21:52.000000000 +0000 @@ -27,10 +27,10 @@ long numSubsets = 0; assert(template_file); - in = fopen(template_file,"r"); assert(in); + in = fopen(template_file,"rb"); assert(in); if (opt_write) { assert(output_file); - out = fopen(output_file,"w"); assert(out); + out = fopen(output_file,"wb"); assert(out); } /* loop over the messages in the source BUFR and clone them */ @@ -118,7 +118,7 @@ } { - pthread_t workers[NUM_THREADS]; + pthread_t* workers = 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; @@ -139,6 +139,7 @@ pthread_join(workers[i], NULL); } } + free (workers); } return 0; diff -Nru eccodes-2.15.0/tests/bufr_ecc-765.sh eccodes-2.16.0/tests/bufr_ecc-765.sh --- eccodes-2.15.0/tests/bufr_ecc-765.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/bufr_ecc-765.sh 2020-01-16 10:21:52.000000000 +0000 @@ -39,7 +39,6 @@ aeolus_wmo_26.bufr delayed_repl_01.bufr goes16_nm.bufr - good_j2eo.bufr israel_observations_2017041010.bufr mhen_55.bufr modw_87.bufr @@ -173,10 +172,7 @@ s4kn_165.bufr sb19_206.bufr sbu8_206.bufr - ship_11.bufr - ship_12.bufr ship_13.bufr - ship_14.bufr ship_19.bufr ship_9.bufr smin_49.bufr @@ -190,11 +186,9 @@ ssbt_127.bufr stuk_7.bufr syno_1.bufr - syno_2.bufr syno_3.bufr syno_4.bufr syno_multi.bufr - synop.bufr temp-land-with-substituted-values.bufr temp_101.bufr temp_102.bufr diff -Nru eccodes-2.15.0/tests/bufr_extract_headers.c eccodes-2.16.0/tests/bufr_extract_headers.c --- eccodes-2.15.0/tests/bufr_extract_headers.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/bufr_extract_headers.c 2020-01-16 10:21:52.000000000 +0000 @@ -11,6 +11,8 @@ #include "eccodes.h" #include +#define MAX_KEYS 100 + int main(int argc, char* argv[]) { char *filename, *keys; @@ -19,7 +21,6 @@ codes_bufr_header* header_array = NULL; codes_context* c = codes_context_get_default(); const int strict_mode = 1; - const int MAX_KEYS=100; int requested_print_keys_count = MAX_KEYS; codes_values requested_print_keys[MAX_KEYS]; @@ -34,9 +35,10 @@ printf("ERROR: %s\n",grib_get_error_message(err)); return 1; } - + /* Mimic the behaviour of bufr_get -f -p keys for testing */ err = parse_keyval_string(NULL, keys, 0, GRIB_TYPE_UNDEFINED, requested_print_keys, &requested_print_keys_count); + assert(!err); assert(requested_print_keys_count > 0); for (i=0; i < num_messages; ++i) { int j; diff -Nru eccodes-2.15.0/tests/bufr_filter.sh eccodes-2.16.0/tests/bufr_filter.sh --- eccodes-2.15.0/tests/bufr_filter.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/bufr_filter.sh 2020-01-16 10:21:52.000000000 +0000 @@ -418,6 +418,7 @@ #rm -f new_*bufr #rm -f $testScript $testScript1 + #----------------------------------------------------------- # Test: packing #----------------------------------------------------------- diff -Nru eccodes-2.15.0/tests/bufr_ls.sh eccodes-2.16.0/tests/bufr_ls.sh --- eccodes-2.15.0/tests/bufr_ls.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/bufr_ls.sh 2020-01-16 10:21:52.000000000 +0000 @@ -48,15 +48,6 @@ awk NR==3 $fTmp | awk '{split($0,a," "); for (i=1; i<=8; i++) print a[i]}' > $res_ls diff $ref_ls $res_ls -#------------------------------------------- -# Test reading from stdin -#------------------------------------------- -f="aaen_55.bufr" -cat $f | ${tools_dir}/bufr_ls - -result1=`${tools_dir}/bufr_get -p numberOfSubsets $f` -result2=`cat $f | ${tools_dir}/bufr_get -p numberOfSubsets -` -[ "$result1" = "$result2" ] - rm -f $fLog $res_ls rm -f $fTmp diff -Nru eccodes-2.15.0/tests/CMakeLists.txt eccodes-2.16.0/tests/CMakeLists.txt --- eccodes-2.15.0/tests/CMakeLists.txt 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/CMakeLists.txt 2020-01-16 10:21:52.000000000 +0000 @@ -20,6 +20,7 @@ unit_tests bufr_keys_iter gauss_sub + grib_nearest_test grib_util_set_spec grib_local_MeteoFrance grib_2nd_order_numValues @@ -65,10 +66,13 @@ bufr_rdbSubTypes grib_efas grib_sh_imag + diag ) # These tests do require data downloads list( APPEND tests_data_reqd + grib_data_quality_checks bpv_limit + grib_complex grib_double_cmp grib_change_packing bufr_dump_data @@ -95,7 +99,6 @@ bufr_extract_headers bufr_ecc-673 bufr_ecc-428 - bufr_ecc-197 bufr_ecc-286 bufr_ecc-288 bufr_ecc-313 @@ -145,6 +148,7 @@ grib_ls_json grib_filter grib_multi + grib_nearest_test budg grib_gridType grib_octahedral @@ -250,6 +254,20 @@ # These ones are conditional ########################################### +ecbuild_add_test( TARGET eccodes_t_tools_data_from_stdin + TYPE SCRIPT + CONDITION NOT ECCODES_ON_WINDOWS AND ENABLE_EXTRA_TESTS + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tools_data_from_stdin.sh + TEST_DEPENDS eccodes_download_bufrs +) + +ecbuild_add_test( TARGET eccodes_t_bufr_ecc-197 + TYPE SCRIPT + CONDITION NOT ECCODES_ON_WINDOWS AND ENABLE_EXTRA_TESTS + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/bufr_ecc-197.sh + TEST_DEPENDS eccodes_download_bufrs +) + if( ENABLE_EXTRA_TESTS AND HAVE_ECCODES_THREADS ) ecbuild_add_executable( TARGET grib_encode_pthreads NOINSTALL @@ -328,4 +346,3 @@ COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/grib_ecc-386.sh TEST_DEPENDS eccodes_download_gribs ) - diff -Nru eccodes-2.15.0/tests/diag.sh eccodes-2.16.0/tests/diag.sh --- eccodes-2.15.0/tests/diag.sh 1970-01-01 00:00:00.000000000 +0000 +++ eccodes-2.16.0/tests/diag.sh 2020-01-16 10:21:52.000000000 +0000 @@ -0,0 +1,89 @@ +#!/bin/sh +# Copyright 2005-2019 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Tests for Pseudo-GRIB format "DIAG" + +. ./include.sh +label="pseudo-diag-test" +tempOut=temp.${label}.out +tempTxt=temp.${label}.txt +tempRef=temp.${label}.ref + +REDIRECT=/dev/null + +sample=$ECCODES_SAMPLES_PATH/diag.tmpl + +# Basic grib commands should not fail +# ------------------------------------ +${tools_dir}/grib_ls $sample > $REDIRECT +${tools_dir}/grib_dump $sample > $REDIRECT + +echo "Check setting integer keys..." +# ---------------------------------- +echo 'set numberOfIntegers=3; set integerValues={55, 44, 66}; write;' | ${tools_dir}/grib_filter -o $tempOut - $sample +${tools_dir}/grib_dump -p numberOfFloats,numberOfIntegers,floatValues,integerValues $tempOut | sed 1d > $tempTxt +cat > $tempRef < $tempTxt +cat > $tempRef < $tempTxt +cat > $tempRef < $tempTxt +grep -q "'E', 'C', 'M', 'W', 'F', ' '" $tempTxt + +# TODO encoding of characters not fully working. We are using one-byte integers instead +#echo 'set numberOfCharacters=4; set charValues={"J","u","m","p"}; write;'| ${tools_dir}/grib_filter -o $tempOut - $sample +#res=`${tools_dir}/grib_dump $tempOut | grep charValues | tr -d '\n' | tr -d ' '` +#[ "$res" = "charValues=J;charValues=u;charValues=m;charValues=p;" ] + + +# Clean up +rm -f $tempOut $tempRef diff -Nru eccodes-2.15.0/tests/grib_bitmap.sh eccodes-2.16.0/tests/grib_bitmap.sh --- eccodes-2.15.0/tests/grib_bitmap.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/grib_bitmap.sh 2020-01-16 10:21:52.000000000 +0000 @@ -22,27 +22,57 @@ tempData1=out.bmp.grib1.data tempData2=out.bmp.grib2.data tempRules=bitmap.rules +tempRef=grib_bitmap.ref rm -f $outfile +# Add a bitmap +# ------------- ${tools_dir}/grib_set -s bitmapPresent=1 $infile $outfile >$REDIRECT -${tools_dir}/grib_dump -O $infile | grep -v FILE > $infile.dump -${tools_dir}/grib_dump -O $outfile | grep -v FILE > $outfile.dump +${tools_dir}/grib_dump $infile | grep -v FILE > $infile.dump +${tools_dir}/grib_dump $outfile | grep -v FILE > $outfile.dump -diff $outfile.dump ${data_dir}/bitmap.diff -diff $infile.dump ${data_dir}/no_bitmap.diff +grib_check_key_equals $outfile section1Flags,section3Length '192 772' -rm -f $infile.dump $outfile.dump || true +if [ $ECCODES_ON_WINDOWS -eq 0 ]; then + # There are some minute floating point differences on Windows + # so the diff would not work there + diff $outfile.dump ${data_dir}/bitmap.diff + diff $infile.dump ${data_dir}/no_bitmap.diff +fi + +${tools_dir}/grib_dump -O -p bitmap $outfile | grep -v FILE > $outfile.dump +cat > $tempRef <$REDIRECT -${tools_dir}/grib_dump -O $outfile1 | grep -v FILE > $outfile1.dump -${tools_dir}/grib_dump -O $outfile | grep -v FILE> $outfile.dump +${tools_dir}/grib_dump $outfile1 | grep -v FILE > $outfile1.dump +${tools_dir}/grib_dump $outfile | grep -v FILE > $outfile.dump + +if [ $ECCODES_ON_WINDOWS -eq 0 ]; then + diff $outfile1.dump ${data_dir}/no_bitmap.diff +fi -diff $outfile1.dump ${data_dir}/no_bitmap.diff +rm -f $outfile1 $outfile1.dump $outfile $outfile.dump -rm -f $outfile1 $outfile1.dump $outfile $outfile.dump || true cat > $tempRules< $temp1 + ${tools_dir}/grib_get '-F%.2f' -p min,max,avg $temp > $temp2 + diff $temp1 $temp2 + + rm -f $temp $temp1 $temp2 +done diff -Nru eccodes-2.15.0/tests/grib_data_quality_checks.sh eccodes-2.16.0/tests/grib_data_quality_checks.sh --- eccodes-2.15.0/tests/grib_data_quality_checks.sh 1970-01-01 00:00:00.000000000 +0000 +++ eccodes-2.16.0/tests/grib_data_quality_checks.sh 2020-01-16 10:21:52.000000000 +0000 @@ -0,0 +1,96 @@ +#!/bin/sh +# Copyright 2005-2019 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.sh +set -u +# --------------------------------------------------------- +# Tests for data quality checks +# --------------------------------------------------------- +label="grib_data_quality" +tempOut=temp.1.${label}.out +temp2=temp.2.${label}.out +tempErr=temp.${label}.err + +# Start with clean environment +unset ECCODES_GRIB_DATA_QUALITY_CHECKS +unset ECCODES_EXTRA_DEFINITION_PATH + + +input1=${data_dir}/reduced_gaussian_surface.grib1 +input2=${data_dir}/reduced_gaussian_surface.grib2 +grib_check_key_equals $input1 paramId 167 +grib_check_key_equals $input2 paramId 167 + +# Data quality checks disabled. Create huge values for temperature +${tools_dir}/grib_set -s scaleValuesBy=100 $input1 $tempOut +${tools_dir}/grib_set -s scaleValuesBy=100 $input2 $tempOut + +# Data quality checks enabled. Repacking should fail +export ECCODES_GRIB_DATA_QUALITY_CHECKS=1 +set +e +${tools_dir}/grib_copy -r $tempOut /dev/null 2>$tempErr +status=$? +set -e +[ $status -ne 0 ] +grep -q 'more than the allowable limit' $tempErr + + +# Data quality checks enabled but only as a warning. Repacking should pass +export ECCODES_GRIB_DATA_QUALITY_CHECKS=2 +${tools_dir}/grib_copy -r $tempOut /dev/null 2>$tempErr +grep -q 'more than the allowable limit' $tempErr + + +# Data quality checks enabled. Scaling should fail +export ECCODES_GRIB_DATA_QUALITY_CHECKS=1 +set +e +${tools_dir}/grib_set -s scaleValuesBy=100 $input1 $tempOut 2>$tempErr +status=$? +set -e +[ $status -ne 0 ] +grep -q 'GRIB1 simple packing: unable to set values' $tempErr +grep -q 'allowable limit' $tempErr + +set +e +${tools_dir}/grib_set -s scaleValuesBy=100 $input2 $tempOut 2>$tempErr +status=$? +set -e +[ $status -ne 0 ] +grep -q 'GRIB2 simple packing: unable to set values' $tempErr +grep -q 'allowable limit' $tempErr + + +# Override the defaults +# ---------------------- +tempDir=tempdir.$label +rm -rf $tempDir +mkdir -p $tempDir +# Set a large limit for temperature +cat > $tempDir/param_limits.def <number = i; @@ -148,6 +148,7 @@ pthread_join(workers[i], NULL); } } + free (workers); } return 0; diff -Nru eccodes-2.15.0/tests/grib_ecc-604-encode.c eccodes-2.16.0/tests/grib_ecc-604-encode.c --- eccodes-2.15.0/tests/grib_ecc-604-encode.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/grib_ecc-604-encode.c 2020-01-16 10:21:52.000000000 +0000 @@ -79,7 +79,7 @@ } { - pthread_t workers[NUM_THREADS]; + pthread_t* workers = 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; @@ -99,6 +99,7 @@ pthread_join(workers[i], NULL); } } + free (workers); } return 0; diff -Nru eccodes-2.15.0/tests/grib_encode_pthreads.c eccodes-2.16.0/tests/grib_encode_pthreads.c --- eccodes-2.15.0/tests/grib_encode_pthreads.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/grib_encode_pthreads.c 2020-01-16 10:21:52.000000000 +0000 @@ -56,8 +56,8 @@ const void *buffer = NULL; int err = 0; - FILE* in = fopen(input_file,"r"); - FILE* out = fopen(output_file,"w"); + FILE* in = fopen(input_file,"rb"); + FILE* out = fopen(output_file,"wb"); assert(in); assert(out); diff -Nru eccodes-2.15.0/tests/gribex_perf.c eccodes-2.16.0/tests/gribex_perf.c --- eccodes-2.15.0/tests/gribex_perf.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/gribex_perf.c 2020-01-16 10:21:52.000000000 +0000 @@ -215,7 +215,7 @@ FILE* of=NULL; const void *buffer; size_t size; - of = fopen(filename,"w"); + of = fopen(filename,"wb"); if(!of) { perror(filename); exit(1); @@ -303,7 +303,7 @@ repeatsimple=atoi(argv[iarg++]); bitsPerValue=atoi(argv[iarg++]); - fin = fopen(finname,"r"); + fin = fopen(finname,"rb"); if(!fin) {perror(finname);exit(1);} c=grib_context_get_default(); @@ -313,9 +313,9 @@ if (append) - fout = fopen(ofilename,"a"); + fout = fopen(ofilename,"ab"); else - fout = fopen(ofilename,"w"); + fout = fopen(ofilename,"wb"); if(!fout) {perror(ofilename);exit(1);} diff -Nru eccodes-2.15.0/tests/grib_lam_bf.c eccodes-2.16.0/tests/grib_lam_bf.c --- eccodes-2.15.0/tests/grib_lam_bf.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/grib_lam_bf.c 2020-01-16 10:21:52.000000000 +0000 @@ -768,7 +768,7 @@ size_t size; const void *buffer = NULL; sprintf (f, "lam_bf_%s_%s.grib", grids[igrid], trunc[itrunc].name); - fp = fopen (f, "w"); + fp = fopen (f, "wb"); GRIB_CHECK (grib_get_message (h, &buffer, &size), 0); if (fwrite (buffer, 1, size, fp) != size) { perror (f); @@ -793,7 +793,7 @@ sprintf (f, "lam_bf_%s_%s.grib", grids[igrid], trunc[itrunc].name); - fp = fopen (f, "r"); + fp = fopen (f, "rb"); h = grib_handle_new_from_file (0, fp, &err); vals = (double *) malloc (sizeof (double) * trunc[itrunc].len); values_len = trunc[itrunc].len; @@ -804,7 +804,7 @@ free (vals); if (norm > 0.0001) { - fprintf (stderr, "Error too large !\n"); + fprintf (stderr, "Error too large! norm=%g\n", norm); return 1; } fclose (fp); diff -Nru eccodes-2.15.0/tests/grib_lam_bf.sh eccodes-2.16.0/tests/grib_lam_bf.sh --- eccodes-2.15.0/tests/grib_lam_bf.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/grib_lam_bf.sh 2020-01-16 10:21:52.000000000 +0000 @@ -13,6 +13,11 @@ label="grib_lam_bf" temp=temp.$label.txt +if [ $ECCODES_ON_WINDOWS -eq 1 ]; then + echo "$0: This test is currently disabled on Windows" + exit 0 +fi + dump_and_check() { input=$1 diff -Nru eccodes-2.15.0/tests/grib_lam_gp.c eccodes-2.16.0/tests/grib_lam_gp.c --- eccodes-2.15.0/tests/grib_lam_gp.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/grib_lam_gp.c 2020-01-16 10:21:52.000000000 +0000 @@ -917,7 +917,7 @@ size_t size; const void *buffer = NULL; sprintf (f, "lam_gp_%s.grib", grids[igrid]); - fp = fopen (f, "w"); + fp = fopen (f, "wb"); GRIB_CHECK (grib_get_message (h, &buffer, &size), 0); if (fwrite (buffer, 1, size, fp) != size) { @@ -941,7 +941,7 @@ char geometry[128]; sprintf (f, "lam_gp_%s.grib", grids[igrid]); - fp = fopen (f, "r"); + fp = fopen (f, "rb"); h = grib_handle_new_from_file (0, fp, &err); vals = (double *) malloc (sizeof (double) * 4096); values_len = 4096; diff -Nru eccodes-2.15.0/tests/grib_local.sh eccodes-2.16.0/tests/grib_local.sh --- eccodes-2.15.0/tests/grib_local.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/grib_local.sh 2020-01-16 10:21:52.000000000 +0000 @@ -65,6 +65,7 @@ rm -f local.log loc.grib1 loc.grib2 loc1.grib1 loc1.grib2 eps.grib1 eps.grib2 + # Delete Local Definition # ----------------------- sample_g1=$ECCODES_SAMPLES_PATH/reduced_gg_pl_640_grib1.tmpl @@ -79,6 +80,7 @@ grib_check_key_equals $temp "localUsePresent,section2Used" "0 0" rm -f $temp + # Empty local section for GRIB2 # ------------------------------ sample_g2=$ECCODES_SAMPLES_PATH/reduced_gg_pl_640_grib2.tmpl @@ -92,6 +94,7 @@ grib_check_key_equals $temp section2Length 5 rm -f $temp + # Local Definition 5 # ----------------------- sample_g1=$ECCODES_SAMPLES_PATH/GRIB1.tmpl @@ -106,13 +109,42 @@ grib_check_key_equals $temp.3 forecastProbabilityNumber,totalNumberOfForecastProbabilities "2 25" grib_check_key_equals $temp.3 probabilityType,scaledValueOfLowerLimit,scaledValueOfUpperLimit "2 54 56" +# ECC-1045 +${tools_dir}/grib_set -s localDefinitionNumber=5,lowerThreshold=missing,upperThreshold=missing \ + $sample_g1 $temp.1 +grib_check_key_equals $temp.1 'lowerThreshold,upperThreshold' 'MISSING MISSING' + + # Local Definition 42 for GRIB2 (LC-WFV) # --------------------------------------- ${tools_dir}/grib_set -s setLocalDefinition=1,localDefinitionNumber=42,lcwfvSuiteName=9 $sample_g2 $temp grib_check_key_equals $temp 'mars.origin:s' 'lops' + # Extra key in Local Definition 16 for GRIB1. ECC-679 ${tools_dir}/grib_set -s setLocalDefinition=1,localDefinitionNumber=16,numberOfForecastsInEnsemble=51 $sample_g1 $temp grib_check_key_equals $temp 'totalNumber' '51' + +# Local Definition 49 for GRIB1 +# ----------------------------- +${tools_dir}/grib_set -s localDefinitionNumber=49,type=35 $sample_g1 $temp +grib_check_key_equals $temp 'perturbationNumber,numberOfForecastsInEnsemble' '0 0' + + + +# Local Definition 18 (list of ascii keys) +# ---------------------------------------- +${tools_dir}/grib_filter -o $temp - $sample_g1 << EOF + set setLocalDefinition=1; + set localDefinitionNumber=18; + set consensusCount=3; + set ccccIdentifiers={"kwbc","ecmf","sabm"}; + write; +EOF + +result=`echo 'print "[ccccIdentifiers]";' | ${tools_dir}/grib_filter - $temp` +[ "$result" = "kwbc ecmf sabm" ] + + rm -f $temp $temp.1 $temp.2 $temp.3 diff -Nru eccodes-2.15.0/tests/grib_multi_from_message.c eccodes-2.16.0/tests/grib_multi_from_message.c --- eccodes-2.15.0/tests/grib_multi_from_message.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/grib_multi_from_message.c 2020-01-16 10:21:52.000000000 +0000 @@ -9,7 +9,7 @@ */ /* - * test: reading multi fields messages from memory + * test: reading GRIB2 multi fields messages from memory */ #include "grib_api.h" @@ -20,15 +20,17 @@ #include #endif -static void usage(const char* prog) { - printf("usage: %s [-m] file.grib\n",prog); +static void usage(const char* prog) +{ + fprintf(stderr, "usage: %s [-m] file.grib\n", prog); exit(1); } -int main(int argc,char* argv[]) { +int main(int argc,char* argv[]) +{ struct stat finfo; char shortName[20]={0,}; - size_t len=20; + size_t len; grib_handle* h=NULL; size_t fsize; unsigned char* data=NULL; @@ -49,10 +51,10 @@ else usage(argv[0]); assert(filename); - f=fopen(filename,"r"); + f=fopen(filename,"rb"); if (!f) {perror(filename);exit(1);} - fstat(fileno((FILE*)f),&finfo); + stat(filename, &finfo); fsize=finfo.st_size; data=(unsigned char*)malloc(fsize); diff -Nru eccodes-2.15.0/tests/grib_nearest_test.c eccodes-2.16.0/tests/grib_nearest_test.c --- eccodes-2.15.0/tests/grib_nearest_test.c 1970-01-01 00:00:00.000000000 +0000 +++ eccodes-2.16.0/tests/grib_nearest_test.c 2020-01-16 10:21:52.000000000 +0000 @@ -0,0 +1,109 @@ +/* + * Copyright 2005-2019 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. + */ + +/* + * C Implementation: nearest + * + * Description: How to get nearest point(s). + * Assumes all input GRIB messages have the same grid geometry + */ + +#include +#include +#include + +#include "eccodes.h" + +static void usage(const char* prog) { + printf("Usage: %s [-n] grib_file grib_file ...\n",prog); + exit(1); +} + +int main(int argc, char** argv) +{ + int err = 0; + long step=0; + size_t nfiles=0; + size_t i=0, j=0; + codes_fieldset* set=NULL; + const size_t max_numfiles = 100; + codes_handle* h=NULL; + char param[20]={0,}; + size_t len=20; + double lats[4]={0,}; + double lons[4]={0,}; + double values[4]={0,}; + double distances[4]={0,}; + int indexes[4]={0,}; + char* order_by="param,step"; + double* pValues = values; /* Default: decode the values */ + + size_t size=4; + double lat=-40,lon=15; + int mode=0; + int count; + char** filenames; + codes_nearest* nearest=NULL; + + if (argc < 2) usage(argv[0]); + + filenames=(char**)malloc(sizeof(char*)*max_numfiles); + + for(i=1; i= max_numfiles) + break; + filenames[j++]=(char*)strdup(argv[i]); + } + } + nfiles = j; + + set=codes_fieldset_new_from_files(0,filenames,nfiles,0,0,0,order_by,&err); + CODES_CHECK(err,0); + + printf("ordering by %s\n",order_by); + printf("%d fields in the fieldset\n",codes_fieldset_count(set)); + printf("n,step,param\n"); + + mode=CODES_NEAREST_SAME_GRID | CODES_NEAREST_SAME_POINT; + count=1; + + while ((h=codes_fieldset_next_handle(set,&err))!=NULL) { + CODES_CHECK(codes_get_long(h,"step",&step),0); + len=20; + CODES_CHECK(codes_get_string(h,"shortName",param,&len),0); + + printf("%d %ld %s ",count,step,param); + if (!nearest) nearest=codes_grib_nearest_new(h,&err); + CODES_CHECK(err,0); + CODES_CHECK(codes_grib_nearest_find(nearest,h,lat,lon,mode,lats,lons,pValues,distances,indexes,&size),0); + if (!pValues) { + printf("\nIdx\tlat\tlon\tdist\n"); + for (i=0;i<4;i++) printf("%d\t%.2f\t%.2f\t%g\n", + (int)indexes[i],lats[i],lons[i],distances[i]); + } else { + printf("\nIdx\tlat\tlon\tdist\tval\n"); + for (i=0;i<4;i++) printf("%d\t%.2f\t%.2f\t%g\t%g\n", + (int)indexes[i],lats[i],lons[i],distances[i],pValues[i]); + } + printf("\n"); + + codes_handle_delete(h); + count++; + } + + if (nearest) codes_grib_nearest_delete(nearest); + + if (set) codes_fieldset_delete(set); + + return 0; +} diff -Nru eccodes-2.15.0/tests/grib_nearest_test.sh eccodes-2.16.0/tests/grib_nearest_test.sh --- eccodes-2.15.0/tests/grib_nearest_test.sh 1970-01-01 00:00:00.000000000 +0000 +++ eccodes-2.16.0/tests/grib_nearest_test.sh 2020-01-16 10:21:52.000000000 +0000 @@ -0,0 +1,53 @@ +#!/bin/sh +# Copyright 2005-2019 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.sh + +label="grib_nearest_test" +temp=$label.temp +tempRef=$label.ref +input_grb=${data_dir}/reduced_gaussian_pressure_level.grib1 + +# Nearest with decoding the data values +# -------------------------------------- +$EXEC ${test_dir}/grib_nearest_test $input_grb > $temp +cat > $tempRef < $temp +cat > $tempRef < 2.00)) + if ((ratio < 1.90) || (ratio > 2.00)) { - printf ("Packing error too big: optimizeScaleFactor appears to be broken\n"); + printf ("Packing error too big: optimizeScaleFactor appears to be broken (zerr[0]/zerr[1]=%g)\n", ratio); return 1; } diff -Nru eccodes-2.15.0/tests/grib_optimize_scaling.sh eccodes-2.16.0/tests/grib_optimize_scaling.sh --- eccodes-2.15.0/tests/grib_optimize_scaling.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/grib_optimize_scaling.sh 2020-01-16 10:21:52.000000000 +0000 @@ -10,4 +10,9 @@ . ./include.sh +if [ $ECCODES_ON_WINDOWS -eq 1 ]; then + echo "$0: This test is currently disabled on Windows" + exit 0 +fi + exec $test_dir/grib_optimize_scaling diff -Nru eccodes-2.15.0/tests/grib_sh_ieee64.sh eccodes-2.16.0/tests/grib_sh_ieee64.sh --- eccodes-2.15.0/tests/grib_sh_ieee64.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/grib_sh_ieee64.sh 2020-01-16 10:21:52.000000000 +0000 @@ -10,4 +10,9 @@ . ./include.sh +if [ $ECCODES_ON_WINDOWS -eq 1 ]; then + echo "$0: This test is currently disabled on Windows" + exit 0 +fi + exec $test_dir/grib_sh_ieee64 diff -Nru eccodes-2.15.0/tests/grib_to_netcdf.sh eccodes-2.16.0/tests/grib_to_netcdf.sh --- eccodes-2.15.0/tests/grib_to_netcdf.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/grib_to_netcdf.sh 2020-01-16 10:21:52.000000000 +0000 @@ -3,19 +3,54 @@ # # 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.sh -#set -x + +if [ $ECCODES_ON_WINDOWS -eq 1 ]; then + # m2-bash messes with the system path. + # %CONDA_PREFIX%\Library\usr\bin is converted to /usr/bin. + # %CONDA_PREFIX%\Library\bin is converted to /bin. + # However the contents of /bin and /usr/bin are identical. + # They both point to %CONDA_PREFIX%\Library\usr\bin! + # This means we're unable to access important dlls (like netcdf.dll) which live in + # %CONDA_PREFIX%\Library\bin. + # It is not obvious why this behaviour exists. + # We add this directory back to the path manually. + export PATH=$PATH:$CONDA_PREFIX/Library/bin +fi # Disable if autotools being used src_config=${src_dir}/config.h if [ -f ${src_config} ]; then - exit 0 + exit 0 +fi + +label="grib_to_netcdf_test" +tempGrib=temp.${label}.grib +tempNetcdf=temp.${label}.nc +tempText=temp.${label}.txt + +# Do we have ncdump? +NC_DUMPER="" +if command -v "ncdump" >/dev/null 2>&1; then + NC_DUMPER="ncdump" fi +# ECC-1041: One parameter with different expvers +# This has 5 messages, all 'tp'. Change the first message to have a different expver +input=${data_dir}/tp_ecmwf.grib +${tools_dir}/grib_set -w stepRange=12 -s experimentVersionNumber=0005 $input $tempGrib +${tools_dir}/grib_to_netcdf -o $tempNetcdf $tempGrib +if test "x$NC_DUMPER" != "x"; then + $NC_DUMPER -h $tempNetcdf > $tempText + grep -q "short tp_0005" $tempText + grep -q "short tp_0001" $tempText +fi + + grib_files="\ regular_latlon_surface.grib2 \ regular_latlon_surface.grib1 \ @@ -26,26 +61,23 @@ ncf_types="NC_SHORT NC_INT NC_FLOAT NC_DOUBLE" -tmp_netcdf=tmp.ncf - # Go thru all the specified GRIB files and convert them to NetCDF -for dt in $ncf_types -do - for f in $grib_files - do - rm -f $tmp_netcdf - [ -f ${data_dir}/$f ] - ${tools_dir}/grib_to_netcdf -D $dt -o $tmp_netcdf ${data_dir}/$f >/dev/null - ${tools_dir}/grib_to_netcdf -T -o $tmp_netcdf ${data_dir}/$f >/dev/null - done +for dt in $ncf_types; do + for f in $grib_files; do + rm -f $tempNetcdf + [ -f ${data_dir}/$f ] + ${tools_dir}/grib_to_netcdf -D $dt -o $tempNetcdf ${data_dir}/$f >/dev/null + ${tools_dir}/grib_to_netcdf -T -o $tempNetcdf ${data_dir}/$f >/dev/null + done done # Try creating different kinds; netcdf3 classic and large # TODO: enable tests for netcdf4 formats too input=${data_dir}/regular_latlon_surface.grib2 -${tools_dir}/grib_to_netcdf -k 1 -o $tmp_netcdf $input >/dev/null -${tools_dir}/grib_to_netcdf -k 2 -o $tmp_netcdf $input >/dev/null -#${tools_dir}/grib_to_netcdf -k 3 -o $tmp_netcdf $input >/dev/null -#${tools_dir}/grib_to_netcdf -k 4 -o $tmp_netcdf $input >/dev/null +${tools_dir}/grib_to_netcdf -k 1 -o $tempNetcdf $input >/dev/null +${tools_dir}/grib_to_netcdf -k 2 -o $tempNetcdf $input >/dev/null +#${tools_dir}/grib_to_netcdf -k 3 -o $tempNetcdf $input >/dev/null +#${tools_dir}/grib_to_netcdf -k 4 -o $tempNetcdf $input >/dev/null + -rm -f $tmp_netcdf +rm -f $tempNetcdf $tempGrib $tempText diff -Nru eccodes-2.15.0/tests/gts_compare.sh eccodes-2.16.0/tests/gts_compare.sh --- eccodes-2.15.0/tests/gts_compare.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/gts_compare.sh 2020-01-16 10:21:52.000000000 +0000 @@ -55,7 +55,7 @@ fi #---------------------------------------------------- -# Test: comparing with and witout the -b switch +# Test: comparing with and without the -b switch #---------------------------------------------------- ${tools_dir}//gts_compare -b GG $gts_file $fGtsTmp >> $fLog diff -Nru eccodes-2.15.0/tests/include.ctest.sh.in eccodes-2.16.0/tests/include.ctest.sh.in --- eccodes-2.15.0/tests/include.ctest.sh.in 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/include.ctest.sh.in 2020-01-16 10:21:52.000000000 +0000 @@ -40,5 +40,6 @@ HAVE_AEC=@HAVE_AEC@ HAVE_EXTRA_TESTS=@HAVE_EXTRA_TESTS@ HAVE_MEMFS=@HAVE_MEMFS@ +ECCODES_ON_WINDOWS=@ECCODES_ON_WINDOWS@ echo "Current directory: `pwd`" diff -Nru eccodes-2.15.0/tests/include.sh eccodes-2.16.0/tests/include.sh --- eccodes-2.15.0/tests/include.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/include.sh 2020-01-16 10:21:52.000000000 +0000 @@ -20,6 +20,9 @@ echo echo "TEST: $0" + # Only Unix supported + ECCODES_ON_WINDOWS=0 + data_dir="" # save current working dir save=`pwd` diff -Nru eccodes-2.15.0/tests/jpeg_perf.c eccodes-2.16.0/tests/jpeg_perf.c --- eccodes-2.15.0/tests/jpeg_perf.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/jpeg_perf.c 2020-01-16 10:21:52.000000000 +0000 @@ -21,7 +21,7 @@ FILE* of=NULL; const void *buffer; size_t size; - of = fopen(filename,"w"); + of = fopen(filename,"wb"); if(!of) { perror(filename); exit(1); @@ -99,13 +99,13 @@ repeatsimple=atoi(argv[iarg++]); bitsPerValue=atoi(argv[iarg++]); - fin = fopen(finname,"r"); + fin = fopen(finname,"rb"); if(!fin) {perror(finname);exit(1);} if (append) - fout = fopen(ofilename,"a"); + fout = fopen(ofilename,"ab"); else - fout = fopen(ofilename,"w"); + fout = fopen(ofilename,"wb"); if(!fout) {perror(ofilename);exit(1);} diff -Nru eccodes-2.15.0/tests/laplacian.c eccodes-2.16.0/tests/laplacian.c --- eccodes-2.15.0/tests/laplacian.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/laplacian.c 2020-01-16 10:21:52.000000000 +0000 @@ -230,7 +230,7 @@ char finname[]="sh.grib"; - fin = fopen(finname,"r"); + fin = fopen(finname,"rb"); if(!fin) {perror(finname);exit(1);} c=grib_context_get_default(); @@ -268,7 +268,7 @@ ksec4,gvalues,nvalues, buf,&gribex_msg_len,"C")); - fout=fopen("out_gribex.grib","w"); + fout=fopen("out_gribex.grib","wb"); if (!fout) {perror("out_gribex.grib");exit(1);} if (fwrite(buf,1,gribex_msg_len,fout)!=gribex_msg_len) { perror("out_gribex.grib"); exit(1); diff -Nru eccodes-2.15.0/tests/Makefile.am eccodes-2.16.0/tests/Makefile.am --- eccodes-2.15.0/tests/Makefile.am 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/Makefile.am 2020-01-16 10:21:52.000000000 +0000 @@ -43,7 +43,6 @@ grib_compare.sh \ grib_level.sh \ index.sh \ - grib_bitmap.sh \ grib_list.sh \ grib_second_order.sh \ grib_change_scanning.sh \ @@ -61,7 +60,6 @@ grib_ccsds.sh \ md5.sh \ grib_neg_fctime.sh \ - bufr_ecc-197.sh \ bufr_ecc-286.sh \ bufr_ecc-288.sh diff -Nru eccodes-2.15.0/tests/metar_compare.sh eccodes-2.16.0/tests/metar_compare.sh --- eccodes-2.15.0/tests/metar_compare.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/metar_compare.sh 2020-01-16 10:21:52.000000000 +0000 @@ -48,7 +48,7 @@ fi #---------------------------------------------------- -# Test: comparing with and witout the -b switch +# Test: comparing with and without the -b switch #---------------------------------------------------- # ${tools_dir}/metar_compare -b GG $metar_file $fMetarTmp >> $fLog diff -Nru eccodes-2.15.0/tests/packing.c eccodes-2.16.0/tests/packing.c --- eccodes-2.15.0/tests/packing.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/packing.c 2020-01-16 10:21:52.000000000 +0000 @@ -407,7 +407,7 @@ err_threshold=atof(argv[++argi]); finname=argv[++argi]; - fin = fopen(finname,"r"); + fin = fopen(finname,"rb"); if(!fin) {perror(finname);exit(1);} c=grib_context_get_default(); @@ -483,7 +483,7 @@ /* writing the output grib files if required */ if (write_grib == 1) { if (!foutgribex) { - foutgribex=fopen(foutnamegribex,"w"); + foutgribex=fopen(foutnamegribex,"wb"); if (!foutgribex) { perror(foutnamegribex); exit(1); @@ -502,7 +502,7 @@ if (write_grib == 2) { GRIB_CHECK(grib_get_message(h,&msg,&msg_len),0); if (!foutgrib) { - foutgrib=fopen(foutnamegrib,"w"); + foutgrib=fopen(foutnamegrib,"wb"); if (!foutgrib) { perror(foutnamegrib); exit(1); diff -Nru eccodes-2.15.0/tests/packing_check.c eccodes-2.16.0/tests/packing_check.c --- eccodes-2.15.0/tests/packing_check.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/packing_check.c 2020-01-16 10:21:52.000000000 +0000 @@ -235,7 +235,7 @@ if (argc != 2 ) usage(argv[0]); finname=argv[1]; - fin = fopen(finname,"r"); + fin = fopen(finname,"rb"); if(!fin) {perror(finname);exit(1);} c=grib_context_get_default(); diff -Nru eccodes-2.15.0/tests/pack_unpack.c eccodes-2.16.0/tests/pack_unpack.c --- eccodes-2.15.0/tests/pack_unpack.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/pack_unpack.c 2020-01-16 10:21:52.000000000 +0000 @@ -229,7 +229,7 @@ if (argc != 2) usage(argv[0]); finname=argv[1]; - fin = fopen(finname,"r"); + fin = fopen(finname,"rb"); if(!fin) {perror(finname);exit(1);} c=grib_context_get_default(); diff -Nru eccodes-2.15.0/tests/png_perf.c eccodes-2.16.0/tests/png_perf.c --- eccodes-2.15.0/tests/png_perf.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/png_perf.c 2020-01-16 10:21:52.000000000 +0000 @@ -21,7 +21,7 @@ FILE* of=NULL; const void *buffer; size_t size; - of = fopen(filename,"w"); + of = fopen(filename,"wb"); if(!of) { perror(filename); exit(1); @@ -99,13 +99,13 @@ repeatsimple=atoi(argv[iarg++]); bitsPerValue=atoi(argv[iarg++]); - fin = fopen(finname,"r"); + fin = fopen(finname,"rb"); if(!fin) {perror(finname);exit(1);} if (append) - fout = fopen(ofilename,"a"); + fout = fopen(ofilename,"ab"); else - fout = fopen(ofilename,"w"); + fout = fopen(ofilename,"wb"); if(!fout) {perror(ofilename);exit(1);} diff -Nru eccodes-2.15.0/tests/so_perf.c eccodes-2.16.0/tests/so_perf.c --- eccodes-2.15.0/tests/so_perf.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/so_perf.c 2020-01-16 10:21:52.000000000 +0000 @@ -215,7 +215,7 @@ FILE* of=NULL; const void *buffer; size_t size; - of = fopen(filename,"w"); + of = fopen(filename,"wb"); if(!of) { perror(filename); exit(1); @@ -312,7 +312,7 @@ repeatsimple=atoi(argv[iarg++]); bitsPerValue=atoi(argv[iarg++]); - fin = fopen(finname,"r"); + fin = fopen(finname,"rb"); if(!fin) {perror(finname);exit(1);} c=grib_context_get_default(); @@ -322,9 +322,9 @@ if (append) - fout = fopen(ofilename,"a"); + fout = fopen(ofilename,"ab"); else - fout = fopen(ofilename,"w"); + fout = fopen(ofilename,"wb"); if(!fout) {perror(ofilename);exit(1);} diff -Nru eccodes-2.15.0/tests/timing.c eccodes-2.16.0/tests/timing.c --- eccodes-2.15.0/tests/timing.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/timing.c 2020-01-16 10:21:52.000000000 +0000 @@ -238,7 +238,7 @@ if (argc != 2) usage(argv[0]); finname=argv[1]; - fin = fopen(finname,"r"); + fin = fopen(finname,"rb"); if(!fin) {perror(finname);exit(1);} c=grib_context_get_default(); diff -Nru eccodes-2.15.0/tests/tools_data_from_stdin.sh eccodes-2.16.0/tests/tools_data_from_stdin.sh --- eccodes-2.15.0/tests/tools_data_from_stdin.sh 1970-01-01 00:00:00.000000000 +0000 +++ eccodes-2.16.0/tests/tools_data_from_stdin.sh 2020-01-16 10:21:52.000000000 +0000 @@ -0,0 +1,27 @@ +#!/bin/sh +# Copyright 2005-2019 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.sh + +input=${data_dir}/bufr/syno_multi.bufr + +# Test bufr_count +# --------------- +count=`cat $input | ${tools_dir}/bufr_count -` +[ $count -eq 3 ] + +# Test bufr_ls +#-------------- +input=${data_dir}/bufr/aaen_55.bufr +cat $input | ${tools_dir}/bufr_ls - +result1=`${tools_dir}/bufr_get -p numberOfSubsets $input` +result2=`cat $input | ${tools_dir}/bufr_get -p numberOfSubsets -` +[ "$result1" = "$result2" ] + diff -Nru eccodes-2.15.0/tests/unit_tests.c eccodes-2.16.0/tests/unit_tests.c --- eccodes-2.15.0/tests/unit_tests.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/unit_tests.c 2020-01-16 10:21:52.000000000 +0000 @@ -1425,10 +1425,37 @@ assertion_caught = 0; } +static void test_concept_condition_strings() +{ + int err = 0; + char result[1024] = {0,}; + grib_handle* h = grib_handle_new_from_samples(0, "GRIB2"); + + err = get_concept_condition_string(h, "typeOfLevel", NULL, result); + assert ( !err ); + assert( strcmp(result, "typeOfFirstFixedSurface=1,typeOfSecondFixedSurface=255")==0 ); + + err = get_concept_condition_string(h, "paramId", NULL, result); + assert ( !err ); + assert( strcmp(result, "discipline=0,parameterCategory=0,parameterNumber=0")==0 ); + + err = get_concept_condition_string(h, "gridType", NULL, result); + assert ( !err ); + /*printf("%s\n", result);*/ + assert( strcmp(result, "gridDefinitionTemplateNumber=0,PLPresent=0")==0 ); + + err = get_concept_condition_string(h, "stepType", NULL, result); + assert ( !err ); + assert( strcmp(result, "selectStepTemplateInstant=1,stepTypeInternal=instant")==0 ); + +} + int main(int argc, char** argv) { /*printf("Doing unit tests. ecCodes version = %ld\n", grib_get_api_version());*/ + test_concept_condition_strings(); + test_assertion_catching(); test_gaussian_latitude_640(); diff -Nru eccodes-2.15.0/tests/values_to_ascii.c eccodes-2.16.0/tests/values_to_ascii.c --- eccodes-2.15.0/tests/values_to_ascii.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/values_to_ascii.c 2020-01-16 10:21:52.000000000 +0000 @@ -34,7 +34,7 @@ if(argc > 1) - in = fopen(argv[1],"r"); + in = fopen(argv[1],"rb"); else{ printf("usage : gribvals filename [format]\n"); exit(1); diff -Nru eccodes-2.15.0/tests/windows_testing.bashrc eccodes-2.16.0/tests/windows_testing.bashrc --- eccodes-2.15.0/tests/windows_testing.bashrc 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tests/windows_testing.bashrc 2020-01-16 10:21:52.000000000 +0000 @@ -9,3 +9,15 @@ command diff --strip-trailing-cr "$@" } export -f diff + +# We occasionally cat text files and use the lines as arguments. +# Carriage returns here cause issues and need to be removed. +function cat { + if [[ $# -eq 1 && "$1" =~ ".txt" ]] + then + command cat "$@" | sed 's/\r$//' + else + command cat "$@" + fi +} +export -f cat diff -Nru eccodes-2.15.0/tigge/tigge_accumulations.c eccodes-2.16.0/tigge/tigge_accumulations.c --- eccodes-2.15.0/tigge/tigge_accumulations.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tigge/tigge_accumulations.c 2020-01-16 10:21:52.000000000 +0000 @@ -185,7 +185,7 @@ for(i = 1; i < argc-1; i++) { - in = fopen(argv[i],"r"); + in = fopen(argv[i],"rb"); if(!in) { perror(argv[i]); exit(1); diff -Nru eccodes-2.15.0/tigge/tigge_check.c eccodes-2.16.0/tigge/tigge_check.c --- eccodes-2.15.0/tigge/tigge_check.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tigge/tigge_check.c 2020-01-16 10:21:52.000000000 +0000 @@ -1388,7 +1388,7 @@ void validate(const char* path) { - FILE *f = fopen(path,"r"); + FILE *f = fopen(path,"rb"); grib_handle *h = 0; int err; int count = 0; diff -Nru eccodes-2.15.0/tigge/tigge_check.h eccodes-2.16.0/tigge/tigge_check.h --- eccodes-2.15.0/tigge/tigge_check.h 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tigge/tigge_check.h 2020-01-16 10:21:52.000000000 +0000 @@ -3869,10 +3869,12 @@ {"parameterNumber", GRIB_TYPE_LONG, 2}, {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 160}, + {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0}, + {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 0}, {NULL, }, }, - {&daily_average, &predefined_level, &has_bitmap}, + {&daily_average, &given_level, &has_bitmap}, }, { "northward_sea_water_velocity_o2d.s2", @@ -3889,10 +3891,12 @@ {"parameterNumber", GRIB_TYPE_LONG, 3}, {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 160}, + {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0}, + {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 0}, {NULL, }, }, - {&daily_average, &predefined_level, &has_bitmap}, + {&daily_average, &given_level, &has_bitmap}, }, { "sea-ice_thickness_o2d.s2", diff -Nru eccodes-2.15.0/tigge/tigge_name.c eccodes-2.16.0/tigge/tigge_name.c --- eccodes-2.15.0/tigge/tigge_name.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tigge/tigge_name.c 2020-01-16 10:21:52.000000000 +0000 @@ -116,7 +116,7 @@ void validate(const char* path) { - FILE *f = fopen(path,"r"); + FILE *f = fopen(path,"rb"); grib_handle *h = 0; int err; int count = 0; diff -Nru eccodes-2.15.0/tigge/tigge_split.c eccodes-2.16.0/tigge/tigge_split.c --- eccodes-2.15.0/tigge/tigge_split.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tigge/tigge_split.c 2020-01-16 10:21:52.000000000 +0000 @@ -185,7 +185,7 @@ static void validate(const char* path) { - FILE *f = fopen(path,"r"); + FILE *f = fopen(path,"rb"); grib_handle *h = 0; int err; int count = 0; diff -Nru eccodes-2.15.0/tools/bufr_compare.c eccodes-2.16.0/tools/bufr_compare.c --- eccodes-2.15.0/tools/bufr_compare.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tools/bufr_compare.c 2020-01-16 10:21:52.000000000 +0000 @@ -301,6 +301,9 @@ context->blacklist=blacklist; } + /* Check 1st file is not a directory */ + exit_if_input_is_directory(grib_tool_name, options->infile_extra->name); + if (grib_options_on("r")) { char* filename[1]; filename[0]=options->infile_extra->name; @@ -369,11 +372,9 @@ { /* Check for 2nd file being a directory. If so, we assume user is comparing to a file */ /* with the same name as first file in that directory */ - struct stat s; grib_tools_file* infile = options->infile; /* the 2nd file in comparison */ if (infile) { - int stat_val = stat(infile->name, &s); - if ( stat_val == 0 && S_ISDIR(s.st_mode)) { + if (path_is_directory(infile->name)) { /* Take the filename of the 1st file and append to dir */ char bufr[2048] = {0,}; /* options->infile_extra->name is the 1st file */ diff -Nru eccodes-2.15.0/tools/bufr_split_by_rdbSubtype.c eccodes-2.16.0/tools/bufr_split_by_rdbSubtype.c --- eccodes-2.15.0/tools/bufr_split_by_rdbSubtype.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tools/bufr_split_by_rdbSubtype.c 2020-01-16 10:21:52.000000000 +0000 @@ -162,7 +162,6 @@ FILE* infh = NULL; char* filename; int i, status=0; - struct stat s; int err=0; unsigned long count=0; @@ -176,11 +175,9 @@ } filename=argv[i]; - if (stat(filename, &s)==0) { - if (S_ISDIR(s.st_mode)) { - fprintf(stderr, "ERROR: %s: Is a directory\n", filename); - return 1; - } + if (path_is_directory(filename)) { + fprintf(stderr, "ERROR: %s: Is a directory\n", filename); + return 1; } infh=fopen(filename,"rb"); if (!infh) { diff -Nru eccodes-2.15.0/tools/codes_count.c eccodes-2.16.0/tools/codes_count.c --- eccodes-2.15.0/tools/codes_count.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tools/codes_count.c 2020-01-16 10:21:52.000000000 +0000 @@ -66,18 +66,6 @@ return err; } -static int is_a_directory(const char* filename) -{ - struct stat s; - int stat_val = stat(filename, &s); - if ( stat_val == 0 ) { - if (S_ISDIR(s.st_mode)) { - return 1; - } - } - return 0; -} - int main(int argc,char* argv[]) { FILE* infh = NULL; @@ -105,7 +93,7 @@ continue; } filename=argv[i]; - if (is_a_directory(filename)) { + if (path_is_directory(filename)) { fprintf(stderr, "%s: ERROR: \"%s\": Is a directory\n", tool_name, filename); continue; } diff -Nru eccodes-2.15.0/tools/codes_info.c eccodes-2.16.0/tools/codes_info.c --- eccodes-2.15.0/tools/codes_info.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tools/codes_info.c 2020-01-16 10:21:52.000000000 +0000 @@ -35,6 +35,7 @@ int major=ECCODES_MAJOR_VERSION; int minor=ECCODES_MINOR_VERSION; int revision=ECCODES_REVISION_VERSION; + grib_context* context = grib_context_get_default(); while (1) { int c = getopt (argc, argv, "vds"); @@ -61,7 +62,6 @@ if (nfiles != 0) usage_and_exit(argv[0]); if (print_flags == INFO_PRINT_ALL) { - grib_context* context = grib_context_get_default(); printf("\n"); printf("%s Version %d.%d.%d", grib_get_package_name(), major,minor,revision); @@ -90,7 +90,7 @@ printf("(This is for backward compatibility. " "It is recommended you use ECCODES_DEFINITION_PATH instead!)\n"); } else { - printf("Default definition files path is used: %s\n",ECCODES_DEFINITION_PATH); + printf("Default definition files path is used: %s\n",context->grib_definition_files_path); printf("Definition files path can be changed by setting ECCODES_DEFINITION_PATH environment variable\n"); } printf("\n"); @@ -118,7 +118,7 @@ if ((path=codes_getenv("ECCODES_DEFINITION_PATH")) != NULL) { printf("%s",path); } else { - printf("%s",ECCODES_DEFINITION_PATH); + printf("%s",context->grib_definition_files_path); } } diff -Nru eccodes-2.15.0/tools/codes_split_file.c eccodes-2.16.0/tools/codes_split_file.c --- eccodes-2.15.0/tools/codes_split_file.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tools/codes_split_file.c 2020-01-16 10:21:52.000000000 +0000 @@ -111,7 +111,6 @@ FILE* infh = NULL; char* filename; int i, status=0; - struct stat s; int err=0,nchunks=0; unsigned long count=0; @@ -133,11 +132,9 @@ i++; filename=argv[i]; - if (stat(filename, &s)==0) { - if (S_ISDIR(s.st_mode)) { - fprintf(stderr, "ERROR: %s: Is a directory\n", filename); - return 1; - } + if (path_is_directory(filename)) { + fprintf(stderr, "ERROR: %s: Is a directory\n", filename); + return 1; } infh=fopen(filename,"rb"); if (!infh) { diff -Nru eccodes-2.15.0/tools/grib_compare.c eccodes-2.16.0/tools/grib_compare.c --- eccodes-2.15.0/tools/grib_compare.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tools/grib_compare.c 2020-01-16 10:21:52.000000000 +0000 @@ -308,11 +308,9 @@ { /* Check for 2nd file being a directory. If so, we assume user is comparing to a file */ /* with the same name as first file in that directory */ - struct stat s; grib_tools_file* infile = options->infile; /* the 2nd file in comparison */ if (infile) { - int stat_val = stat(infile->name, &s); - if ( stat_val == 0 && S_ISDIR(s.st_mode)) { + if (path_is_directory(infile->name)) { /* Take the filename of the 1st file and append to dir */ char bufr[2048] = {0,}; /* options->infile_extra->name is the 1st file */ diff -Nru eccodes-2.15.0/tools/grib_dump.c eccodes-2.16.0/tools/grib_dump.c --- eccodes-2.15.0/tools/grib_dump.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tools/grib_dump.c 2020-01-16 10:21:52.000000000 +0000 @@ -142,7 +142,7 @@ */ if (strcmp(options->dump_mode, "debug")==0) { - if (is_index_file(options->current_infile->name)) + if (is_grib_index_file(options->current_infile->name)) { int err = 0; grib_context* c = grib_context_get_default(); diff -Nru eccodes-2.15.0/tools/grib_to_netcdf.c eccodes-2.16.0/tools/grib_to_netcdf.c --- eccodes-2.15.0/tools/grib_to_netcdf.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tools/grib_to_netcdf.c 2020-01-16 10:21:52.000000000 +0000 @@ -3573,7 +3573,8 @@ if(!isalpha(att->name[0])) { char buf[1048]; - sprintf(buf,"p%s",att->name); + const char *val = get_value(subset_r, "param", 0); + sprintf(buf,"%s_%s", (val ? val : "p"), att->name); strcpy(att->name,buf); } } diff -Nru eccodes-2.15.0/tools/grib_tools.c eccodes-2.16.0/tools/grib_tools.c --- eccodes-2.15.0/tools/grib_tools.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tools/grib_tools.c 2020-01-16 10:21:52.000000000 +0000 @@ -169,8 +169,8 @@ /* ECC-926: Currently only GRIB indexing works. Disable the through_index if BUFR, GTS etc */ if (global_options.mode == MODE_GRIB && - is_index_file(global_options.infile->name) && - ( global_options.infile_extra && is_index_file(global_options.infile_extra->name))) { + is_grib_index_file(global_options.infile->name) && + ( global_options.infile_extra && is_grib_index_file(global_options.infile_extra->name))) { global_options.through_index=1; return grib_tool_index(&global_options); } @@ -1272,13 +1272,9 @@ } int exit_if_input_is_directory(const char* tool_name, const char* filename) { - struct stat s; - int stat_val = stat(filename, &s); - if ( stat_val == 0 ) { - if (S_ISDIR(s.st_mode)) { - fprintf(stderr, "%s: ERROR: \"%s\": Is a directory\n", tool_name, filename); - exit(1); - } + if ( path_is_directory(filename) ) { + fprintf(stderr, "%s: ERROR: \"%s\": Is a directory\n", tool_name, filename); + exit(1); } return 0; } diff -Nru eccodes-2.15.0/tools/gts_compare.c eccodes-2.16.0/tools/gts_compare.c --- eccodes-2.15.0/tools/gts_compare.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tools/gts_compare.c 2020-01-16 10:21:52.000000000 +0000 @@ -228,11 +228,9 @@ { /* Check for 2nd file being a directory. If so, we assume user is comparing to a file */ /* with the same name as first file in that directory */ - struct stat s; grib_tools_file* infile = options->infile; /* the 2nd file in comparison */ if (infile) { - int stat_val = stat(infile->name, &s); - if ( stat_val == 0 && S_ISDIR(s.st_mode)) { + if (path_is_directory(infile->name)) { /* Take the filename of the 1st file and append to dir */ char bufr[2048] = {0,}; /* options->infile_extra->name is the 1st file */ diff -Nru eccodes-2.15.0/tools/metar_compare.c eccodes-2.16.0/tools/metar_compare.c --- eccodes-2.15.0/tools/metar_compare.c 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/tools/metar_compare.c 2020-01-16 10:21:52.000000000 +0000 @@ -313,11 +313,9 @@ { /* Check for 2nd file being a directory. If so, we assume user is comparing to a file */ /* with the same name as first file in that directory */ - struct stat s; grib_tools_file* infile = options->infile; /* the 2nd file in comparison */ if (infile) { - int stat_val = stat(infile->name, &s); - if ( stat_val == 0 && S_ISDIR(s.st_mode)) { + if (path_is_directory(infile->name)) { /* Take the filename of the 1st file and append to dir */ char bufr[2048] = {0,}; /* options->infile_extra->name is the 1st file */ diff -Nru eccodes-2.15.0/VERSION.cmake eccodes-2.16.0/VERSION.cmake --- eccodes-2.15.0/VERSION.cmake 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/VERSION.cmake 2020-01-16 10:21:52.000000000 +0000 @@ -1 +1 @@ -set( ${PROJECT_NAME}_VERSION_STR "2.15.0" ) +set( ${PROJECT_NAME}_VERSION_STR "2.16.0" ) diff -Nru eccodes-2.15.0/version.sh eccodes-2.16.0/version.sh --- eccodes-2.15.0/version.sh 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/version.sh 2020-01-16 10:21:52.000000000 +0000 @@ -3,7 +3,7 @@ # Package version ECCODES_MAJOR_VERSION=2 -ECCODES_MINOR_VERSION=15 +ECCODES_MINOR_VERSION=16 ECCODES_REVISION_VERSION=0 ECCODES_CURRENT=1 diff -Nru eccodes-2.15.0/windows/msvc/bufr_filter/bufr_filter.vcproj eccodes-2.16.0/windows/msvc/bufr_filter/bufr_filter.vcproj --- eccodes-2.15.0/windows/msvc/bufr_filter/bufr_filter.vcproj 1970-01-01 00:00:00.000000000 +0000 +++ eccodes-2.16.0/windows/msvc/bufr_filter/bufr_filter.vcproj 2020-01-16 10:21:52.000000000 +0000 @@ -0,0 +1,375 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru eccodes-2.15.0/windows/msvc/bufr_filter/bufr_filter.vcxproj eccodes-2.16.0/windows/msvc/bufr_filter/bufr_filter.vcxproj --- eccodes-2.15.0/windows/msvc/bufr_filter/bufr_filter.vcxproj 1970-01-01 00:00:00.000000000 +0000 +++ eccodes-2.16.0/windows/msvc/bufr_filter/bufr_filter.vcxproj 2020-01-16 10:21:52.000000000 +0000 @@ -0,0 +1,209 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {12E795DB-41D6-495E-8529-35B4FB0EDF8B} + bufr_filter + Win32Proj + 10.0.17763.0 + + + + Application + v141 + Unicode + true + + + Application + v141 + Unicode + + + Application + v141 + Unicode + true + + + Application + v141 + Unicode + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>15.0.27625.0 + + + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + + + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + + + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + ..\..\..\src;..\..\..\tools;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;HAVE_STRING_H;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + $(IntDir)$(ProjectName).pch + $(IntDir) + true + $(IntDir) + Level3 + EditAndContinue + + + true + $(OutDir)$(ProjectName).pdb + true + $(OutDir)$(ProjectName).map + Console + MachineX86 + + + + + X64 + + + Disabled + ..\..\..\src;..\..\..\tools;%(AdditionalIncludeDirectories) + WIN32;_WIN64;_DEBUG;_CONSOLE;HAVE_STRING_H;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + $(IntDir)$(ProjectName).pch + $(IntDir) + true + $(IntDir) + Level3 + ProgramDatabase + + + true + $(OutDir)$(ProjectName).pdb + true + $(OutDir)$(ProjectName).map + Console + MachineX64 + + + + + MaxSpeed + true + ..\..\..\src;..\..\..\tools;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;HAVE_STRING_H;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + $(IntDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + Level3 + ProgramDatabase + + + false + $(OutDir)$(ProjectName).pdb + true + $(OutDir)$(ProjectName).map + Console + true + true + MachineX86 + + + + + X64 + + + MaxSpeed + true + ..\..\..\src;..\..\..\tools;%(AdditionalIncludeDirectories) + WIN32;_WIN64;NDEBUG;_CONSOLE;HAVE_STRING_H;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + $(IntDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + Level3 + ProgramDatabase + + + false + $(OutDir)$(ProjectName).pdb + true + $(OutDir)$(ProjectName).map + Console + true + true + MachineX64 + + + + + + + + {3de8b13f-7dfe-48ed-9158-b34d774500ec} + false + + + + + + \ No newline at end of file diff -Nru eccodes-2.15.0/windows/msvc/bufr_filter/bufr_filter.vcxproj.filters eccodes-2.16.0/windows/msvc/bufr_filter/bufr_filter.vcxproj.filters --- eccodes-2.15.0/windows/msvc/bufr_filter/bufr_filter.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 +++ eccodes-2.16.0/windows/msvc/bufr_filter/bufr_filter.vcxproj.filters 2020-01-16 10:21:52.000000000 +0000 @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + + + Source Files + + + diff -Nru eccodes-2.15.0/windows/msvc/grib_api_lib/grib_api_lib.vcxproj eccodes-2.16.0/windows/msvc/grib_api_lib/grib_api_lib.vcxproj --- eccodes-2.15.0/windows/msvc/grib_api_lib/grib_api_lib.vcxproj 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/windows/msvc/grib_api_lib/grib_api_lib.vcxproj 2020-01-16 10:21:52.000000000 +0000 @@ -194,6 +194,7 @@ + diff -Nru eccodes-2.15.0/windows/msvc/grib_api.sln eccodes-2.16.0/windows/msvc/grib_api.sln --- eccodes-2.15.0/windows/msvc/grib_api.sln 2019-11-29 12:13:51.000000000 +0000 +++ eccodes-2.16.0/windows/msvc/grib_api.sln 2020-01-16 10:21:52.000000000 +0000 @@ -23,6 +23,8 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bufr_dump", "bufr_dump\bufr_dump.vcxproj", "{A785A1F1-2AE8-4CD8-B484-9035D1961D42}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bufr_filter", "bufr_filter\bufr_filter.vcxproj", "{12E795DB-41D6-495E-8529-35B4FB0EDF8B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -111,6 +113,14 @@ {A785A1F1-2AE8-4CD8-B484-9035D1961D42}.Release|Win32.Build.0 = Release|Win32 {A785A1F1-2AE8-4CD8-B484-9035D1961D42}.Release|x64.ActiveCfg = Release|x64 {A785A1F1-2AE8-4CD8-B484-9035D1961D42}.Release|x64.Build.0 = Release|x64 + {12E795DB-41D6-495E-8529-35B4FB0EDF8B}.Debug|Win32.ActiveCfg = Debug|Win32 + {12E795DB-41D6-495E-8529-35B4FB0EDF8B}.Debug|Win32.Build.0 = Debug|Win32 + {12E795DB-41D6-495E-8529-35B4FB0EDF8B}.Debug|x64.ActiveCfg = Debug|x64 + {12E795DB-41D6-495E-8529-35B4FB0EDF8B}.Debug|x64.Build.0 = Debug|x64 + {12E795DB-41D6-495E-8529-35B4FB0EDF8B}.Release|Win32.ActiveCfg = Release|Win32 + {12E795DB-41D6-495E-8529-35B4FB0EDF8B}.Release|Win32.Build.0 = Release|Win32 + {12E795DB-41D6-495E-8529-35B4FB0EDF8B}.Release|x64.ActiveCfg = Release|x64 + {12E795DB-41D6-495E-8529-35B4FB0EDF8B}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE