[eccodes] 60/106: New upstream release 2.0.2

Alastair McKinstry mckinstry at moszumanska.debian.org
Fri Jul 28 09:05:16 UTC 2017


This is an automated email from the git hooks/post-receive script.

mckinstry pushed a commit to branch debian/master
in repository eccodes.

commit 90db749fe04d93df7be730d37c9f60f357d944e4
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Mon Nov 28 14:57:23 2016 +0000

    New upstream release 2.0.2
---
 VERSION.cmake                                      |   2 +-
 bin/ecbuild                                        |   4 +-
 cmake/CheckFortranCompilerFlag.cmake               |  37 --
 cmake/CheckFortranSourceCompiles.cmake             |  94 -----
 cmake/{contrib => }/FindFFTW.cmake                 |   6 -
 cmake/FindGeoTIFF.cmake                            |  64 +--
 cmake/FindOpenJPEG.cmake                           |  60 +--
 cmake/VERSION.cmake                                |   4 +-
 .../CMakeCheckCompilerFlagCommonPatterns.cmake     |  33 ++
 cmake/contrib/CheckFortranCompilerFlag.cmake       |  72 +++-
 cmake/contrib/CheckFortranSourceCompiles.cmake     | 133 ++++--
 cmake/contrib/FindNetCDF4.cmake                    |   4 +-
 cmake/ecbuild-config-version.cmake                 |   2 +-
 cmake/ecbuild-config.cmake                         |   6 +-
 cmake/ecbuild_add_library.cmake                    |  38 +-
 cmake/ecbuild_add_option.cmake                     |  21 +-
 cmake/ecbuild_add_test.cmake                       |  61 ++-
 cmake/ecbuild_check_cxx11.cmake                    | 147 +++----
 cmake/ecbuild_define_paths.cmake                   |  23 +-
 cmake/ecbuild_find_omp.cmake                       |   4 +-
 cmake/ecbuild_get_test_data.cmake                  |  14 +-
 cmake/ecbuild_log.cmake                            |   2 +-
 definitions/grib2/boot.def                         |   9 +-
 definitions/grib2/products_uerra.def               |   4 +
 definitions/grib2/tables/1.0.table                 |   5 +-
 definitions/grib2/tables/17/4.5.table              |   2 +-
 definitions/grib2/tables/18/0.0.table              |  10 +
 definitions/grib2/tables/18/1.0.table              |  23 ++
 definitions/grib2/tables/18/1.1.table              |   4 +
 definitions/grib2/tables/18/1.2.table              |   8 +
 definitions/grib2/tables/18/1.3.table              |  14 +
 definitions/grib2/tables/18/1.4.table              |  13 +
 definitions/grib2/tables/18/1.5.table              |   7 +
 definitions/grib2/tables/18/1.6.table              |   8 +
 definitions/grib2/tables/18/3.0.table              |   6 +
 definitions/grib2/tables/18/3.1.table              |  47 +++
 definitions/grib2/tables/18/3.10.table             |   8 +
 definitions/grib2/tables/18/3.11.table             |   7 +
 definitions/grib2/tables/18/3.15.table             |  23 ++
 definitions/grib2/tables/18/3.2.table              |  14 +
 definitions/grib2/tables/18/3.20.table             |   6 +
 definitions/grib2/tables/18/3.21.table             |   8 +
 definitions/grib2/tables/18/3.3.table              |   9 +
 definitions/grib2/tables/18/3.4.table              |  17 +
 definitions/grib2/tables/18/3.5.table              |   5 +
 definitions/grib2/tables/18/3.6.table              |   2 +
 definitions/grib2/tables/18/3.7.table              |   5 +
 definitions/grib2/tables/18/3.8.table              |   7 +
 definitions/grib2/tables/18/3.9.table              |   4 +
 definitions/grib2/tables/18/4.0.table              |  72 ++++
 definitions/grib2/tables/18/4.1.0.table            |  27 ++
 definitions/grib2/tables/18/4.1.1.table            |   7 +
 definitions/grib2/tables/18/4.1.10.table           |  10 +
 definitions/grib2/tables/18/4.1.192.table          |   4 +
 definitions/grib2/tables/18/4.1.2.table            |   9 +
 definitions/grib2/tables/18/4.1.3.table            |  11 +
 definitions/grib2/tables/18/4.10.table             |  16 +
 definitions/grib2/tables/18/4.11.table             |  10 +
 definitions/grib2/tables/18/4.12.table             |   7 +
 definitions/grib2/tables/18/4.13.table             |   6 +
 definitions/grib2/tables/18/4.14.table             |   6 +
 definitions/grib2/tables/18/4.15.table             |  11 +
 definitions/grib2/tables/18/4.192.table            |   4 +
 definitions/grib2/tables/18/4.2.0.0.table          |  34 ++
 definitions/grib2/tables/18/4.2.0.1.table          | 123 ++++++
 definitions/grib2/tables/18/4.2.0.13.table         |   5 +
 definitions/grib2/tables/18/4.2.0.14.table         |   7 +
 definitions/grib2/tables/18/4.2.0.15.table         |  21 +
 definitions/grib2/tables/18/4.2.0.16.table         |  10 +
 definitions/grib2/tables/18/4.2.0.17.table         |   3 +
 definitions/grib2/tables/18/4.2.0.18.table         |  23 ++
 definitions/grib2/tables/18/4.2.0.19.table         |  36 ++
 definitions/grib2/tables/18/4.2.0.190.table        |   5 +
 definitions/grib2/tables/18/4.2.0.191.table        |   8 +
 definitions/grib2/tables/18/4.2.0.2.table          |  51 +++
 definitions/grib2/tables/18/4.2.0.20.table         |  47 +++
 definitions/grib2/tables/18/4.2.0.3.table          |  36 ++
 definitions/grib2/tables/18/4.2.0.4.table          |  24 ++
 definitions/grib2/tables/18/4.2.0.5.table          |  13 +
 definitions/grib2/tables/18/4.2.0.6.table          |  49 +++
 definitions/grib2/tables/18/4.2.0.7.table          |  23 ++
 definitions/grib2/tables/18/4.2.1.0.table          |  21 +
 definitions/grib2/tables/18/4.2.1.1.table          |   7 +
 definitions/grib2/tables/18/4.2.1.2.table          |  15 +
 definitions/grib2/tables/18/4.2.10.0.table         |  50 +++
 definitions/grib2/tables/18/4.2.10.1.table         |   8 +
 definitions/grib2/tables/18/4.2.10.191.table       |   8 +
 definitions/grib2/tables/18/4.2.10.2.table         |  17 +
 definitions/grib2/tables/18/4.2.10.3.table         |   7 +
 definitions/grib2/tables/18/4.2.10.4.table         |  18 +
 definitions/grib2/tables/18/4.2.2.0.table          |  43 ++
 definitions/grib2/tables/18/4.2.2.3.table          |  32 ++
 definitions/grib2/tables/18/4.2.2.4.table          |  16 +
 definitions/grib2/tables/18/4.2.2.5.table          |   2 +
 definitions/grib2/tables/18/4.2.3.0.table          |  14 +
 definitions/grib2/tables/18/4.2.3.1.table          |  32 ++
 definitions/grib2/tables/18/4.2.3.2.table          |  13 +
 definitions/grib2/tables/18/4.2.3.3.table          |   4 +
 definitions/grib2/tables/18/4.2.3.4.table          |  10 +
 definitions/grib2/tables/18/4.2.3.5.table          |   7 +
 definitions/grib2/tables/18/4.2.3.6.table          |   7 +
 definitions/grib2/tables/18/4.201.table            |  15 +
 definitions/grib2/tables/18/4.202.table            |   4 +
 definitions/grib2/tables/18/4.203.table            |  26 ++
 definitions/grib2/tables/18/4.204.table            |   9 +
 definitions/grib2/tables/18/4.205.table            |   6 +
 definitions/grib2/tables/18/4.206.table            |   6 +
 definitions/grib2/tables/18/4.207.table            |  10 +
 definitions/grib2/tables/18/4.208.table            |   9 +
 definitions/grib2/tables/18/4.209.table            |   9 +
 definitions/grib2/tables/18/4.210.table            |   6 +
 definitions/grib2/tables/18/4.211.table            |   7 +
 definitions/grib2/tables/18/4.212.table            |  18 +
 definitions/grib2/tables/18/4.213.table            |  16 +
 definitions/grib2/tables/18/4.215.table            |   9 +
 definitions/grib2/tables/18/4.216.table            |  96 +++++
 definitions/grib2/tables/18/4.217.table            |   8 +
 definitions/grib2/tables/18/4.218.table            |  44 ++
 definitions/grib2/tables/18/4.219.table            |   8 +
 definitions/grib2/tables/18/4.220.table            |   6 +
 definitions/grib2/tables/18/4.221.table            |   6 +
 definitions/grib2/tables/18/4.222.table            |   6 +
 definitions/grib2/tables/18/4.223.table            |   5 +
 definitions/grib2/tables/18/4.224.table            |  18 +
 definitions/grib2/tables/18/4.225.table            | 267 ++++++++++++
 definitions/grib2/tables/18/4.227.table            |   9 +
 definitions/grib2/tables/18/4.230.table            | 449 +++++++++++++++++++++
 definitions/grib2/tables/18/4.233.table            | 449 +++++++++++++++++++++
 definitions/grib2/tables/18/4.234.table            |  21 +
 definitions/grib2/tables/18/4.236.table            |   8 +
 definitions/grib2/tables/18/4.240.table            |  12 +
 definitions/grib2/tables/18/4.241.table            |   9 +
 definitions/grib2/tables/18/4.242.table            |   7 +
 definitions/grib2/tables/18/4.243.table            |  43 ++
 definitions/grib2/tables/18/4.3.table              |  23 ++
 definitions/grib2/tables/18/4.4.table              |  17 +
 definitions/grib2/tables/{17 => 18}/4.5.table      |  11 +-
 definitions/grib2/tables/18/4.6.table              |   9 +
 definitions/grib2/tables/18/4.7.table              |  14 +
 definitions/grib2/tables/18/4.8.table              |   6 +
 definitions/grib2/tables/18/4.9.table              |   9 +
 definitions/grib2/tables/18/4.91.table             |  16 +
 definitions/grib2/tables/18/5.0.table              |  25 ++
 definitions/grib2/tables/18/5.1.table              |   6 +
 definitions/grib2/tables/18/5.2.table              |   8 +
 definitions/grib2/tables/18/5.3.table              |   7 +
 definitions/grib2/tables/18/5.4.table              |   6 +
 definitions/grib2/tables/18/5.40.table             |   5 +
 definitions/grib2/tables/18/5.40000.table          |   5 +
 definitions/grib2/tables/18/5.5.table              |   7 +
 definitions/grib2/tables/18/5.50002.table          |  19 +
 definitions/grib2/tables/18/5.6.table              |   7 +
 definitions/grib2/tables/18/5.7.table              |   7 +
 definitions/grib2/tables/18/6.0.table              |   6 +
 definitions/grib2/tables/18/stepType.table         |   4 +
 definitions/grib2/template.3.4.def                 |   2 +-
 definitions/grib2/template.3.5.def                 |   2 +-
 definitions/grib2/template.4.30.def                |   3 +
 definitions/grib2/template.4.32.def                |   2 +-
 .../grib2/{template.4.57.def => template.4.49.def} |   6 +-
 definitions/grib2/template.4.55.def                |   2 +-
 definitions/grib2/template.4.56.def                |   5 +-
 definitions/grib2/template.4.57.def                |   2 +-
 .../grib2/{template.4.55.def => template.4.59.def} |   5 +-
 .../grib2/{template.4.57.def => template.4.70.def} |   5 +-
 .../grib2/{template.4.55.def => template.4.71.def} |   7 +-
 .../grib2/{template.4.55.def => template.4.72.def} |   6 +-
 .../grib2/{template.4.55.def => template.4.73.def} |   7 +-
 definitions/grib2/template.4.parameter.def         |   3 -
 .../grib2/template.4.parameter_partition.def       |   6 +-
 ...ition.def => template.4.parameter_postproc.def} |  28 +-
 definitions/grib2/template.5.42.def                |   4 +-
 share/ecbuild/toolchains/ecmwf-XC30-Cray.cmake     |  14 +-
 share/ecbuild/toolchains/ecmwf-XC30-GNU.cmake      |  14 +-
 share/ecbuild/toolchains/ecmwf-XC30-Intel.cmake    |  14 +-
 src/grib_accessor_class_bufr_data_array.c          |  26 +-
 src/grib_api_prototypes.h                          |   2 +
 src/grib_darray.c                                  |  12 +
 src/grib_iarray.c                                  |  13 +
 src/grib_query.c                                   |  13 +
 tests/bufr_filter.sh                               |  43 ++
 version.sh                                         |   2 +-
 182 files changed, 3759 insertions(+), 482 deletions(-)

diff --git a/VERSION.cmake b/VERSION.cmake
index 5d3bef4..fe3d06a 100644
--- a/VERSION.cmake
+++ b/VERSION.cmake
@@ -1 +1 @@
-set( ${PROJECT_NAME}_VERSION_STR  "2.0.0" )
+set( ${PROJECT_NAME}_VERSION_STR  "2.0.2" )
diff --git a/bin/ecbuild b/bin/ecbuild
index 0ee4b13..da2d7b9 100755
--- a/bin/ecbuild
+++ b/bin/ecbuild
@@ -368,9 +368,9 @@ cmake_version_sufficient=""
 
 # Check that version $1 satisfies $2
 # CMake versions have no more than 4 fields
-# (adapted from http://stackoverflow.com/a/25731924/396967)
+# Version sort (sort -V) is not available on all platforms
 version_gte() {
-    [  "$2" = "$(echo -e "$1\n$2" | sort -t '.' -k 1,1 -k 2,2 -k 3,3 -k 4,4 -g | head -n1)" ]
+  [ "$2" = "$(echo -e "$1\n$2" | sort -t '.' -k 1,1 -k 2,2 -k 3,3 -k 4,4 -g | head -n1)" ]
 }
 
 # Use already built CMake if any
diff --git a/cmake/CheckFortranCompilerFlag.cmake b/cmake/CheckFortranCompilerFlag.cmake
deleted file mode 100644
index 5408691..0000000
--- a/cmake/CheckFortranCompilerFlag.cmake
+++ /dev/null
@@ -1,37 +0,0 @@
-# - Check whether the CXX compiler supports a given flag.
-# CHECK_CXX_COMPILER_FLAG(FLAG VARIABLE)
-#
-#  FLAG - the compiler flag
-#  VARIABLE - variable to store the result
-
-# Copyright (c) 2006, Alexander Neundorf, <neundorf at kde.org>
-#
-# Redistribution and use is allowed according to the terms of the BSD license.
-# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
-
-
-INCLUDE(CheckFortranSourceCompiles)
-
-MACRO (CHECK_FORTRAN_COMPILER_FLAG _FLAG _RESULT)
-   SET(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}")
-   SET(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}")
-   CHECK_FORTRAN_SOURCE_COMPILES("program main\nend program\n" ${_RESULT}
-     # Some compilers do not fail with a bad flag
-     FAIL_REGEX "command line option .* is valid for .* but not for C\\\\+\\\\+" # GNU
-     FAIL_REGEX "unrecognized .*option"                     # GNU
-     FAIL_REGEX "unknown .*option"                          # Clang
-     FAIL_REGEX "invalid value"                             # Clang
-     FAIL_REGEX "ignoring unknown option"                   # MSVC
-     FAIL_REGEX "warning D9002"                             # MSVC, any lang
-     FAIL_REGEX "option.*not supported"                     # Intel
-     FAIL_REGEX "invalid argument .*option"                 # Intel
-     FAIL_REGEX "ignoring option .*argument required"       # Intel
-     FAIL_REGEX "[Uu]nknown option"                         # HP
-     FAIL_REGEX "[Ww]arning: [Oo]ption"                     # SunPro
-     FAIL_REGEX "command option .* is not recognized"       # XL
-     FAIL_REGEX "not supported in this configuration; ignored"       # AIX
-     FAIL_REGEX "File with unknown suffix passed to linker" # PGI
-     FAIL_REGEX "WARNING: unknown flag:"                    # Open64
-     )
-   SET (CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}")
-ENDMACRO (CHECK_FORTRAN_COMPILER_FLAG)
diff --git a/cmake/CheckFortranSourceCompiles.cmake b/cmake/CheckFortranSourceCompiles.cmake
deleted file mode 100644
index d3dc968..0000000
--- a/cmake/CheckFortranSourceCompiles.cmake
+++ /dev/null
@@ -1,94 +0,0 @@
-# - Check if given Fortran source compiles and links into an executable
-# CHECK_FORTRAN_SOURCE_COMPILES(<code> <var> [FAIL_REGEX <fail-regex>])
-#  <code>       - source code to try to compile, must define 'main'
-#  <var>        - variable to store whether the source code compiled
-#  <fail-regex> - fail if test output matches this regex
-# The following variables may be set before calling this macro to
-# modify the way the check is run:
-#
-#  CMAKE_REQUIRED_FLAGS = string of compile command line flags
-#  CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
-#  CMAKE_REQUIRED_INCLUDES = list of include directories
-#  CMAKE_REQUIRED_LIBRARIES = list of libraries to link
-
-#=============================================================================
-# Copyright 2005-2009 Kitware, Inc.
-# Fortran version, 2013, James Tappin
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-#  License text for the above reference.)
-
-
-
-macro(CHECK_FORTRAN_SOURCE_COMPILES SOURCE VAR)
-
-if( ${VAR} MATCHES "^${VAR}$" )
-    set(_FAIL_REGEX)
-    set(_key)
-    foreach(arg ${ARGN})
-      if("${arg}" MATCHES "^(FAIL_REGEX)$")
-        set(_key "${arg}")
-      elseif(_key)
-        list(APPEND _${_key} "${arg}")
-      else()
-        ecbuild_critical("Unknown argument:\n  ${arg}\n")
-      endif()
-    endforeach()
-    set(MACRO_CHECK_FUNCTION_DEFINITIONS
-      "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_FORTRAN_SOURCE_COMPILES_ADD_LIBRARIES
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_FORTRAN_SOURCE_COMPILES_ADD_LIBRARIES)
-    endif()
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CHECK_FORTRAN_SOURCE_COMPILES_ADD_INCLUDES
-        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CHECK_FORTRAN_SOURCE_COMPILES_ADD_INCLUDES)
-    endif()
-    file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.f90"
-      "${SOURCE}\n")
-
-    ecbuild_debug("Performing Test ${VAR}")
-    try_compile(${VAR}
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.f90
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_FORTRAN_SOURCE_COMPILES_ADD_LIBRARIES}
-      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-      "${CHECK_FORTRAN_SOURCE_COMPILES_ADD_INCLUDES}"
-      OUTPUT_VARIABLE OUTPUT)
-
-    foreach(_regex ${_FAIL_REGEX})
-      if("${OUTPUT}" MATCHES "${_regex}")
-        set(${VAR} 0)
-      endif()
-    endforeach()
-
-    if(${VAR})
-      set(${VAR} 1 CACHE INTERNAL "Test ${VAR}")
-      ecbuild_debug("Performing Test ${VAR} - Success")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Performing Fortran SOURCE FILE Test ${VAR} succeded with the following output:\n"
-        "${OUTPUT}\n"
-        "Source file was:\n${SOURCE}\n")
-    else()
-      ecbuild_debug("Performing Test ${VAR} - Failed")
-      set(${VAR} "" CACHE INTERNAL "Test ${VAR}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Performing Fortran SOURCE FILE Test ${VAR} failed with the following output:\n"
-        "${OUTPUT}\n"
-        "Source file was:\n${SOURCE}\n")
-    endif()
-  endif()
-endmacro()
-
diff --git a/cmake/contrib/FindFFTW.cmake b/cmake/FindFFTW.cmake
similarity index 96%
rename from cmake/contrib/FindFFTW.cmake
rename to cmake/FindFFTW.cmake
index 5ef46df..b76afa5 100644
--- a/cmake/contrib/FindFFTW.cmake
+++ b/cmake/FindFFTW.cmake
@@ -56,12 +56,6 @@
 #
 ##############################################################################
 
-#============================================#
-#                                            #
-#    From Eigen3, modified by W Deconinck    #
-#                                            #
-#============================================#
-
 if( (NOT FFTW_ROOT) AND EXISTS $ENV{FFTW_ROOT} )
   set( FFTW_ROOT ${FFTW_ROOT} )
 endif()
diff --git a/cmake/FindGeoTIFF.cmake b/cmake/FindGeoTIFF.cmake
index 83c868c..126bc46 100644
--- a/cmake/FindGeoTIFF.cmake
+++ b/cmake/FindGeoTIFF.cmake
@@ -1,38 +1,46 @@
-###############################################################################
+# (C) Copyright 1996-2016 ECMWF.
 #
-# CMake module to search for GeoTIFF library
-#
-# On success, the macro sets the following variables:
-# GEOTIFF_FOUND       = if the library found
-# GEOTIFF_LIBRARIES   = full path to the library
-# GEOTIFF_INCLUDE_DIR = where to find the library headers 
-# also defined, but not for general use are
-# GEOTIFF_LIBRARY, where to find the PROJ.4 library.
-#
-# Copyright (c) 2009 Mateusz Loskot <mateusz at loskot.net>
+# 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.
+
+# - Try to find the GeoTIFF includes and library
+# This module defines
 #
-# Module source: http://github.com/mloskot/workshop/tree/master/cmake/
+#  GEOTIFF_FOUND         - System has GeoTIFF
+#  GEOTIFF_INCLUDE_DIRS  - the GeoTIFF include directories
+#  GEOTIFF_LIBRARIES     - the libraries needed to use GeoTIFF
 #
-# Redistribution and use is allowed according to the terms of the BSD license.
-# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+# The following paths will be searched with priority if set in CMake or env
 #
-###############################################################################
+#  GEOTIFF_DIR   - root folder of the GeoTIFF installation
+#  GEOTIFF_PATH  - root folder of the GeoTIFF installation
 
-SET(GEOTIFF_NAMES geotiff)
+find_path( GEOTIFF_INCLUDE_DIR geotiff.h
+           PATHS ${GEOTIFF_PATH} ENV GEOTIFF_PATH
+                 ${GEOTIFF_DIR}  ENV GEOTIFF_DIR
+           PATH_SUFFIXES include include/libgeotiff
+           NO_DEFAULT_PATH )
+find_path( GEOTIFF_INCLUDE_DIR  openjpeg.h
+           PATH_SUFFIXES include include/libgeotiff )
 
+find_library( GEOTIFF_LIBRARY NAMES geotiff
+              PATHS ${GEOTIFF_PATH} ENV GEOTIFF_PATH
+                    ${GEOTIFF_DIR}  ENV GEOTIFF_DIR
+              PATH_SUFFIXES lib lib64
+              NO_DEFAULT_PATH )
+find_library( GEOTIFF_LIBRARY NAMES geotiff )
 
-    FIND_PATH(GEOTIFF_INCLUDE_DIR geotiff.h PATH_PREFIXES geotiff 
-         PATHS /usr/local/include/libgeotiff /usr/include/libgeotiff)
+set( GEOTIFF_LIBRARIES    ${GEOTIFF_LIBRARY} )
+set( GEOTIFF_INCLUDE_DIRS ${GEOTIFF_INCLUDE_DIR} )
 
-    FIND_LIBRARY(GEOTIFF_LIBRARY NAMES ${GEOTIFF_NAMES})
+include(FindPackageHandleStandardArgs)
 
-
-IF(GEOTIFF_FOUND)
-  SET(GEOTIFF_LIBRARIES ${GEOTIFF_LIBRARY})
-ENDIF()
-
-# Handle the QUIET and REQUIRED arguments and set GEOTIFF_FOUND to TRUE
+# handle the QUIETLY and REQUIRED arguments and set GEOTIFF_FOUND to TRUE
 # if all listed variables are TRUE
-# Note: capitalisation of the package name must be the same as in the file name
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GEOTiff DEFAULT_MSG GEOTIFF_LIBRARY GEOTIFF_INCLUDE_DIR)
+find_package_handle_standard_args( GeoTIFF DEFAULT_MSG
+                                   GEOTIFF_LIBRARY GEOTIFF_INCLUDE_DIR )
+
+mark_as_advanced( GEOTIFF_INCLUDE_DIR GEOTIFF_LIBRARY )
diff --git a/cmake/FindOpenJPEG.cmake b/cmake/FindOpenJPEG.cmake
index b54ecce..c660238 100644
--- a/cmake/FindOpenJPEG.cmake
+++ b/cmake/FindOpenJPEG.cmake
@@ -1,39 +1,45 @@
 # (C) Copyright 1996-2016 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 
+# 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.
 
-# - Try to find the OpenJPEG includes and library
+# - Try to find the OpenJPEG includes and library (version 1.5.x or 2.1.x)
 # This module defines
+#
 #  OPENJPEG_FOUND         - System has OpenJPEG
 #  OPENJPEG_INCLUDE_DIRS  - the OpenJPEG include directories
 #  OPENJPEG_LIBRARIES     - the libraries needed to use OpenJPEG
 #
-# also defined internally:
-#  OPENJPEG_LIBRARY, where to find the OpenJPEG library.
-#  OPENJPEG_INCLUDE_DIR, where to find the openjpeg.h header
-
-IF( NOT DEFINED OPENJPEG_PATH AND NOT "$ENV{OPENJPEG_PATH}" STREQUAL "" )
-  SET( OPENJPEG_PATH "$ENV{OPENJPEG_PATH}" )
-ENDIF()
-
-# Note: OpenJPEG version 2.x.y onwards has a variable-name sub-dir in the include
-# e.g. include/openjpeg-2.0 or include/openjpeg-2.1
-# We only support version 2.1.x
-# Also the name of the library is different. In v1.x it was libopenjpeg and now it's libopenjp2
-if( DEFINED OPENJPEG_PATH )
-  find_path(OPENJPEG_INCLUDE_DIR openjpeg.h PATHS ${OPENJPEG_PATH}/include PATH_SUFFIXES openjpeg openjpeg-2.1 NO_DEFAULT_PATH)
-
-  find_library( OPENJPEG_LIBRARY NAMES openjpeg openjp2 PATHS ${OPENJPEG_PATH}/lib
-                PATH_SUFFIXES openjpeg  NO_DEFAULT_PATH )
-endif()
-
-find_path(OPENJPEG_INCLUDE_DIR  openjpeg.h PATH_SUFFIXES openjpeg openjpeg-2.1)
-
-find_library( OPENJPEG_LIBRARY NAMES openjpeg openjp2 PATH_SUFFIXES openjpeg )
+# The following paths will be searched with priority if set in CMake or env
+#
+#  OPENJPEG_DIR   - root folder of the OpenJPEG installation
+#  OPENJPEG_PATH  - root folder of the OpenJPEG installation
+
+# 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.
+# 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 )
+find_path( OPENJPEG_INCLUDE_DIR openjpeg.h
+           PATHS ${OPENJPEG_PATH} ENV OPENJPEG_PATH
+                 ${OPENJPEG_DIR}  ENV OPENJPEG_DIR
+           PATH_SUFFIXES ${_suff}
+           NO_DEFAULT_PATH )
+find_path( OPENJPEG_INCLUDE_DIR  openjpeg.h
+           PATH_SUFFIXES ${_suff} )
+unset( _suff )
+
+find_library( OPENJPEG_LIBRARY NAMES openjpeg openjp2
+              PATHS ${OPENJPEG_PATH} ENV OPENJPEG_PATH
+                    ${OPENJPEG_DIR}  ENV OPENJPEG_DIR
+              PATH_SUFFIXES lib lib/openjpeg
+              NO_DEFAULT_PATH )
+find_library( OPENJPEG_LIBRARY NAMES openjpeg openjp2
+              PATH_SUFFIXES lib lib/openjpeg )
 
 set( OPENJPEG_LIBRARIES    ${OPENJPEG_LIBRARY} )
 set( OPENJPEG_INCLUDE_DIRS ${OPENJPEG_INCLUDE_DIR} )
@@ -45,4 +51,4 @@ include(FindPackageHandleStandardArgs)
 find_package_handle_standard_args(OpenJPEG  DEFAULT_MSG
                                   OPENJPEG_LIBRARY OPENJPEG_INCLUDE_DIR)
 
-mark_as_advanced(OPENJPEG_INCLUDE_DIR OPENJPEG_LIBRARY )
+mark_as_advanced( OPENJPEG_INCLUDE_DIR OPENJPEG_LIBRARY )
diff --git a/cmake/VERSION.cmake b/cmake/VERSION.cmake
index b4c65ee..d9d8705 100644
--- a/cmake/VERSION.cmake
+++ b/cmake/VERSION.cmake
@@ -1,7 +1,7 @@
 set( ECBUILD_MAJOR_VERSION "2" )
-set( ECBUILD_MINOR_VERSION "4" )
+set( ECBUILD_MINOR_VERSION "5" )
 set( ECBUILD_PATCH_VERSION "0" )
 
-set( ECBUILD_VERSION_STR  "2.4.0" )
+set( ECBUILD_VERSION_STR  "2.5.0" )
 
 set( ECBUILD_MACRO_VERSION "${ECBUILD_MAJOR_VERSION}.${ECBUILD_MINOR_VERSION}" )
diff --git a/cmake/contrib/CMakeCheckCompilerFlagCommonPatterns.cmake b/cmake/contrib/CMakeCheckCompilerFlagCommonPatterns.cmake
new file mode 100644
index 0000000..1b5178d
--- /dev/null
+++ b/cmake/contrib/CMakeCheckCompilerFlagCommonPatterns.cmake
@@ -0,0 +1,33 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# Do NOT include this module directly into any of your code. It is meant as
+# a library for Check*CompilerFlag.cmake modules. It's content may change in
+# any way between releases.
+
+macro (CHECK_COMPILER_FLAG_COMMON_PATTERNS _VAR)
+   set(${_VAR}
+     FAIL_REGEX "[Uu]nrecogni[sz]ed .*option"               # GNU, NAG
+     FAIL_REGEX "unknown .*option"                          # Clang
+     FAIL_REGEX "optimization flag .* not supported"        # Clang
+     FAIL_REGEX "unknown argument ignored"                  # Clang (cl)
+     FAIL_REGEX "ignoring unknown option"                   # MSVC, Intel
+     FAIL_REGEX "warning D9002"                             # MSVC, any lang
+     FAIL_REGEX "option.*not supported"                     # Intel
+     FAIL_REGEX "invalid argument .*option"                 # Intel
+     FAIL_REGEX "ignoring option .*argument required"       # Intel
+     FAIL_REGEX "ignoring option .*argument is of wrong type" # Intel
+     FAIL_REGEX "[Uu]nknown option"                         # HP
+     FAIL_REGEX "[Ww]arning: [Oo]ption"                     # SunPro
+     FAIL_REGEX "command option .* is not recognized"       # XL
+     FAIL_REGEX "command option .* contains an incorrect subargument" # XL
+     FAIL_REGEX "not supported in this configuration. ignored"       # AIX
+     FAIL_REGEX "File with unknown suffix passed to linker" # PGI
+     FAIL_REGEX "[Uu]nknown switch"                         # PGI
+     FAIL_REGEX "WARNING: unknown flag:"                    # Open64
+     FAIL_REGEX "Incorrect command line option:"            # Borland
+     FAIL_REGEX "Warning: illegal option"                   # SunStudio 12
+     FAIL_REGEX "[Ww]arning: Invalid suboption"             # Fujitsu
+   )
+endmacro ()
diff --git a/cmake/contrib/CheckFortranCompilerFlag.cmake b/cmake/contrib/CheckFortranCompilerFlag.cmake
index 6a35c8e..8519fcc 100644
--- a/cmake/contrib/CheckFortranCompilerFlag.cmake
+++ b/cmake/contrib/CheckFortranCompilerFlag.cmake
@@ -1,25 +1,53 @@
-# File taken from CMake Bug Report: http://public.kitware.com/Bug/print_bug_page.php?bug_id=12459
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
 
-# - Check whether the Fortan compiler supports a given flag.
-# CHECK_FORTRAN_COMPILER_FLAG(<flag> <var>)
-#  <flag> - the compiler flag
-#  <var>  - variable to store the result
-# This internally calls the check_fortran_source_compiles macro.  See help
-# for CheckFortranSourceCompiles for a listing of variables that can
-# modify the build.
+#.rst:
+# CheckFortranCompilerFlag
+# ------------------------
+#
+# Check whether the Fortran compiler supports a given flag.
+#
+# CHECK_Fortran_COMPILER_FLAG(<flag> <var>)
+#
+# ::
+#
+#   <flag> - the compiler flag
+#   <var>  - variable to store the result
+#            Will be created as an internal cache variable.
+#
+# This internally calls the check_fortran_source_compiles macro and
+# sets CMAKE_REQUIRED_DEFINITIONS to <flag>.  See help for
+# CheckFortranSourceCompiles for a listing of variables that can
+# otherwise modify the build.  The result only tells that the compiler
+# does not give an error message when it encounters the flag.  If the
+# flag has any effect or even a specific one is beyond the scope of
+# this module.
 
-INCLUDE(CheckFortranSourceCompiles)
+include(CheckFortranSourceCompiles)
+include(CMakeCheckCompilerFlagCommonPatterns)
 
-MACRO (CHECK_FORTRAN_COMPILER_FLAG _FLAG _RESULT)
-   SET(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}")
-   SET(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}")
-   CHECK_FORTRAN_SOURCE_COMPILES("end" ${_RESULT}
-     # Some compilers do not fail with a bad flag
-     FAIL_REGEX "unrecognized .*option"                     # GNU
-     FAIL_REGEX "ignoring unknown option"                   # MSVC
-     FAIL_REGEX "[Uu]nknown option"                         # HP
-     FAIL_REGEX "[Ww]arning: [Oo]ption"                     # SunPro
-     FAIL_REGEX "command option .* is not recognized"       # XL
-     )
-   SET (CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}")
-ENDMACRO (CHECK_FORTRAN_COMPILER_FLAG)
+macro (CHECK_Fortran_COMPILER_FLAG _FLAG _RESULT)
+  set(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}")
+  set(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}")
+
+  # Normalize locale during test compilation.
+  set(_CheckFortranCompilerFlag_LOCALE_VARS LC_ALL LC_MESSAGES LANG)
+  foreach(v ${_CheckFortranCompilerFlag_LOCALE_VARS})
+    set(_CheckFortranCompilerFlag_SAVED_${v} "$ENV{${v}}")
+    set(ENV{${v}} C)
+  endforeach()
+  CHECK_COMPILER_FLAG_COMMON_PATTERNS(_CheckFortranCompilerFlag_COMMON_PATTERNS)
+  CHECK_Fortran_SOURCE_COMPILES("       program test\n       stop\n       end program" ${_RESULT}
+    # Some compilers do not fail with a bad flag
+    FAIL_REGEX "command line option .* is valid for .* but not for Fortran" # GNU
+    ${_CheckFortranCompilerFlag_COMMON_PATTERNS}
+    )
+  foreach(v ${_CheckFortranCompilerFlag_LOCALE_VARS})
+    set(ENV{${v}} ${_CheckFortranCompilerFlag_SAVED_${v}})
+    unset(_CheckFortranCompilerFlag_SAVED_${v})
+  endforeach()
+  unset(_CheckFortranCompilerFlag_LOCALE_VARS)
+  unset(_CheckFortranCompilerFlag_COMMON_PATTERNS)
+
+  set (CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}")
+endmacro ()
diff --git a/cmake/contrib/CheckFortranSourceCompiles.cmake b/cmake/contrib/CheckFortranSourceCompiles.cmake
index 500aee6..c42254c 100644
--- a/cmake/contrib/CheckFortranSourceCompiles.cmake
+++ b/cmake/contrib/CheckFortranSourceCompiles.cmake
@@ -1,61 +1,106 @@
-# File taken from CMake Bug Report: http://public.kitware.com/Bug/print_bug_page.php?bug_id=12459
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
 
-# - Check if the source code provided in the SOURCE argument compiles.
-# CHECK_FORTRAN_SOURCE_COMPILES(SOURCE VAR)
-# - macro which checks if the source code compiles
-#  SOURCE   - source code to try to compile
-#  VAR      - variable to store whether the source code compiled
+#.rst:
+# CheckFortranSourceCompiles
+# --------------------------
 #
-# The following variables may be set before calling this macro to
-# modify the way the check is run:
+# Check if given Fortran source compiles and links into an executable::
 #
-#  CMAKE_REQUIRED_FLAGS = string of compile command line flags
-#  CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
-#  CMAKE_REQUIRED_INCLUDES = list of include directories
-#  CMAKE_REQUIRED_LIBRARIES = list of libraries to link
+#   CHECK_Fortran_SOURCE_COMPILES(<code> <var> [FAIL_REGEX <fail-regex>]
+#                                 [SRC_EXT <ext>])
+#
+# The arguments are:
+#
+# ``<code>``
+#   Source code to try to compile.  It must define a PROGRAM entry point.
+# ``<var>``
+#   Variable to store whether the source code compiled.
+#   Will be created as an internal cache variable.
+# ``FAIL_REGEX <fail-regex>``
+#   Fail if test output matches this regex.
+# ``SRC_EXT <ext>``
+#   Use source extension ``.<ext>`` instead of the default ``.F``.
+#
+# The following variables may be set before calling this macro to modify
+# the way the check is run::
+#
+#   CMAKE_REQUIRED_FLAGS = string of compile command line flags
+#   CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
+#   CMAKE_REQUIRED_INCLUDES = list of include directories
+#   CMAKE_REQUIRED_LIBRARIES = list of libraries to link
+#   CMAKE_REQUIRED_QUIET = execute quietly without messages
 
-MACRO(CHECK_FORTRAN_SOURCE_COMPILES SOURCE VAR)
-  IF("${VAR}" MATCHES "^${VAR}$")
-    SET(MACRO_CHECK_FUNCTION_DEFINITIONS
+macro(CHECK_Fortran_SOURCE_COMPILES SOURCE VAR)
+  if(NOT DEFINED "${VAR}")
+    set(_FAIL_REGEX)
+    set(_SRC_EXT)
+    set(_key)
+    foreach(arg ${ARGN})
+      if("${arg}" MATCHES "^(FAIL_REGEX|SRC_EXT)$")
+        set(_key "${arg}")
+      elseif(_key)
+        list(APPEND _${_key} "${arg}")
+      else()
+        message(FATAL_ERROR "Unknown argument:\n  ${arg}\n")
+      endif()
+    endforeach()
+    if(NOT _SRC_EXT)
+      set(_SRC_EXT F)
+    endif()
+    set(MACRO_CHECK_FUNCTION_DEFINITIONS
       "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
-    IF(CMAKE_REQUIRED_LIBRARIES)
-      SET(CHECK_FORTRAN_SOURCE_COMPILES_ADD_LIBRARIES
-        "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
-    ELSE(CMAKE_REQUIRED_LIBRARIES)
-      SET(CHECK_FORTRAN_SOURCE_COMPILES_ADD_LIBRARIES)
-    ENDIF(CMAKE_REQUIRED_LIBRARIES)
-    IF(CMAKE_REQUIRED_INCLUDES)
-      SET(CHECK_FORTRAN_SOURCE_COMPILES_ADD_INCLUDES
+    if(CMAKE_REQUIRED_LIBRARIES)
+      set(CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES
+        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+    else()
+      set(CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES)
+    endif()
+    if(CMAKE_REQUIRED_INCLUDES)
+      set(CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES
         "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
-    ELSE(CMAKE_REQUIRED_INCLUDES)
-      SET(CHECK_FORTRAN_SOURCE_COMPILES_ADD_INCLUDES)
-    ENDIF(CMAKE_REQUIRED_INCLUDES)
-    FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.f90"
+    else()
+      set(CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES)
+    endif()
+    file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.${_SRC_EXT}"
       "${SOURCE}\n")
 
-    MESSAGE(STATUS "Performing Test ${VAR}")
-    TRY_COMPILE(${VAR}
+    if(NOT CMAKE_REQUIRED_QUIET)
+      message(STATUS "Performing Test ${VAR}")
+    endif()
+    try_compile(${VAR}
       ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.f90
+      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.${_SRC_EXT}
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-      "${CHECK_FORTRAN_SOURCE_COMPILES_ADD_LIBRARIES}"
-      "${CHECK_FORTRAN_SOURCE_COMPILES_ADD_INCLUDES}"
+      "${CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES}"
       OUTPUT_VARIABLE OUTPUT)
-    IF(${VAR})
-      SET(${VAR} 1 CACHE INTERNAL "Test ${VAR}")
-      MESSAGE(STATUS "Performing Test ${VAR} - Success")
-      FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Performing Fortran SOURCE FILE Test ${VAR} succeded with the following output:\n"
+
+    foreach(_regex ${_FAIL_REGEX})
+      if("${OUTPUT}" MATCHES "${_regex}")
+        set(${VAR} 0)
+      endif()
+    endforeach()
+
+    if(${VAR})
+      set(${VAR} 1 CACHE INTERNAL "Test ${VAR}")
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(STATUS "Performing Test ${VAR} - Success")
+      endif()
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Performing Fortran SOURCE FILE Test ${VAR} succeeded with the following output:\n"
         "${OUTPUT}\n"
         "Source file was:\n${SOURCE}\n")
-    ELSE(${VAR})
-      MESSAGE(STATUS "Performing Test ${VAR} - Failed")
-      SET(${VAR} 0 CACHE INTERNAL "Test ${VAR}")
-      FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+    else()
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(STATUS "Performing Test ${VAR} - Failed")
+      endif()
+      set(${VAR} "" CACHE INTERNAL "Test ${VAR}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
         "Performing Fortran SOURCE FILE Test ${VAR} failed with the following output:\n"
         "${OUTPUT}\n"
         "Source file was:\n${SOURCE}\n")
-    ENDIF(${VAR})
-  ENDIF("${VAR}" MATCHES "^${VAR}$")
-ENDMACRO(CHECK_FORTRAN_SOURCE_COMPILES)
+    endif()
+  endif()
+endmacro()
diff --git a/cmake/contrib/FindNetCDF4.cmake b/cmake/contrib/FindNetCDF4.cmake
index 6bba4e0..70e54af 100644
--- a/cmake/contrib/FindNetCDF4.cmake
+++ b/cmake/contrib/FindNetCDF4.cmake
@@ -149,11 +149,11 @@ else()
     set( NETCDF_F90_INCLUDE_NAMES netcdf.mod typesizes.mod ${NETCDF_C_INCLUDE_NAMES} )
 
     set( NETCDF_C_LIBRARY_NAMES netcdf)
-    set( NETCDF_CXX_LIBRARY_NAMES netcdf_c++ ${NETCDF_C_LIBRARY_NAMES} )
+    set( NETCDF_CXX_LIBRARY_NAMES netcdf_c++ netcdf_c++4 ${NETCDF_C_LIBRARY_NAMES} )
     set( NETCDF_FORTRAN_LIBRARY_NAMES netcdff ${NETCDF_C_LIBRARY_NAMES})
     set( NETCDF_F90_LIBRARY_NAMES ${NETCDF_FORTRAN_LIBRARY_NAMES} )
 
-    set( NETCDF_REQUIRED netcdf.h netcdfcpp.h netcdf.mod typesizes.mod netcdf netcdff netcdf_c++)
+    set( NETCDF_REQUIRED netcdf.h netcdfcpp.h netcdf.mod typesizes.mod netcdf netcdff netcdf_c++ netcdf_c++4)
 
     foreach( LANGUAGE ${NETCDF_LANGUAGE_BINDINGS} )
         ecbuild_debug("FindNetCDF4: looking for ${LANGUAGE} language bindings")
diff --git a/cmake/ecbuild-config-version.cmake b/cmake/ecbuild-config-version.cmake
index cb62c4d..735aaf1 100644
--- a/cmake/ecbuild-config-version.cmake
+++ b/cmake/ecbuild-config-version.cmake
@@ -1,4 +1,4 @@
-set(PACKAGE_VERSION "2.4.0")
+set(PACKAGE_VERSION "2.5.0")
 
 # check whether the requested PACKAGE_FIND_VERSION is compatible
 
diff --git a/cmake/ecbuild-config.cmake b/cmake/ecbuild-config.cmake
index ebc0934..260664d 100644
--- a/cmake/ecbuild-config.cmake
+++ b/cmake/ecbuild-config.cmake
@@ -28,9 +28,9 @@ set( ECBUILD_TPL_INCLUDE_DIRS  "" )
 set( ECBUILD_TPL_DEFINITIONS   "" )
 set( ECBUILD_TPL_LIBRARIES     "" )
 
-set( ECBUILD_VERSION           "2.4.0" )
-set( ECBUILD_GIT_SHA1          "3f07644f712f9219706dbd63c87c6d017a99f8f0" )
-set( ECBUILD_GIT_SHA1_SHORT    "3f07644" )
+set( ECBUILD_VERSION           "2.5.0" )
+set( ECBUILD_GIT_SHA1          "7ec05b00ab6843a69d6dff1f0c0450ca894b409b" )
+set( ECBUILD_GIT_SHA1_SHORT    "7ec05b0" )
 
 ### export include paths as absolute paths
 
diff --git a/cmake/ecbuild_add_library.cmake b/cmake/ecbuild_add_library.cmake
index 2c59200..a7f8001 100644
--- a/cmake/ecbuild_add_library.cmake
+++ b/cmake/ecbuild_add_library.cmake
@@ -36,6 +36,7 @@
 #                        [ INSTALL_HEADERS_LIST <header1> [<header2> ...] ]
 #                        [ INSTALL_HEADERS_REGEX <pattern> ]
 #                        [ VERSION <version> | AUTO_VERSION ]
+#                        [ SOVERSION <soversion> | AUTO_SOVERSION ]
 #                        [ CFLAGS <flag1> [<flag2> ...] ]
 #                        [ CXXFLAGS <flag1> [<flag2> ...] ]
 #                        [ FFLAGS <flag1> [<flag2> ...] ]
@@ -123,10 +124,16 @@
 #   regular expression to match extra headers to install
 #
 # VERSION : optional, AUTO_VERSION or LIBS_VERSION is used if not specified
-#   version to use as library version
+#   build version of the library
 #
 # AUTO_VERSION : optional, ignored if VERSION is specified
-#   automatically version the library with the package version
+#   use MAJOR.MINOR package version as build version of the library
+#
+# SOVERSION : optional, AUTO_SOVERSION or LIBS_SOVERSION is used if not specified
+#   ABI version of the library
+#
+# AUTO_SOVERSION : optional, ignored if SOVERSION is specified
+#   use MAJOR package version as ABI version of the library
 #
 # CFLAGS : optional
 #   list of C compiler flags to use for all C source files
@@ -147,8 +154,8 @@
 
 function( ecbuild_add_library_impl )
 
-  set( options NOINSTALL AUTO_VERSION )
-  set( single_value_args TARGET TYPE COMPONENT INSTALL_HEADERS INSTALL_HEADERS_REGEX LINKER_LANGUAGE HEADER_DESTINATION VERSION OUTPUT_NAME )
+  set( options NOINSTALL AUTO_VERSION AUTO_SOVERSION )
+  set( single_value_args TARGET TYPE COMPONENT INSTALL_HEADERS INSTALL_HEADERS_REGEX LINKER_LANGUAGE HEADER_DESTINATION VERSION SOVERSION OUTPUT_NAME )
   set( multi_value_args  SOURCES SOURCES_GLOB SOURCES_EXCLUDE_REGEX OBJECTS TEMPLATES LIBS INCLUDES PRIVATE_INCLUDES PUBLIC_INCLUDES DEPENDS PERSISTENT DEFINITIONS INSTALL_HEADERS_LIST CFLAGS CXXFLAGS FFLAGS GENERATED CONDITION )
 
   cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
@@ -330,19 +337,32 @@ function( ecbuild_add_library_impl )
 
     # define VERSION if requested
     if( DEFINED _PAR_VERSION )
-      ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): set version to ${_PAR_VERSION}")
+      ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): set build version to ${_PAR_VERSION}")
       set_target_properties( ${_PAR_TARGET} PROPERTIES VERSION "${_PAR_VERSION}" )
     else()
       if( _PAR_AUTO_VERSION OR LIBS_VERSION MATCHES "[Aa][Uu][Tt][Oo]")
-        ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): set version to ${${PNAME}_MAJOR_VERSION}.${${PNAME}_MINOR_VERSION} (auto)")
+        ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): set build version to ${${PNAME}_MAJOR_VERSION}.${${PNAME}_MINOR_VERSION} (auto)")
         set_target_properties( ${_PAR_TARGET} PROPERTIES VERSION "${${PNAME}_MAJOR_VERSION}.${${PNAME}_MINOR_VERSION}" )
-      endif()
-      if( LIBS_VERSION AND NOT LIBS_VERSION MATCHES "[Aa][Uu][Tt][Oo]" )
-        ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): set version to ${LIBS_VERSION}")
+      elseif( DEFINED LIBS_VERSION )
+        ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): set build version to ${LIBS_VERSION}")
         set_target_properties( ${_PAR_TARGET} PROPERTIES VERSION "${LIBS_VERSION}" )
       endif()
     endif()
 
+    # define SOVERSION if requested
+    if( DEFINED _PAR_SOVERSION )
+      ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): set ABI version to ${_PAR_SOVERSION}")
+      set_target_properties( ${_PAR_TARGET} PROPERTIES SOVERSION "${_PAR_SOVERSION}" )
+    else()
+      if( _PAR_AUTO_SOVERSION OR LIBS_SOVERSION MATCHES "[Aa][Uu][Tt][Oo]")
+        ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): set ABI version to ${${PNAME}_MAJOR_VERSION} (auto)")
+        set_target_properties( ${_PAR_TARGET} PROPERTIES SOVERSION "${${PNAME}_MAJOR_VERSION}" )
+      elseif( DEFINED LIBS_SOVERSION )
+        ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): set ABI version to ${LIBS_SOVERSION}")
+        set_target_properties( ${_PAR_TARGET} PROPERTIES SOVERSION "${LIBS_SOVERSION}" )
+      endif()
+    endif()
+
     # filter sources
 
     if( _PAR_SOURCES )
diff --git a/cmake/ecbuild_add_option.cmake b/cmake/ecbuild_add_option.cmake
index ed262d5..fd8076e 100644
--- a/cmake/ecbuild_add_option.cmake
+++ b/cmake/ecbuild_add_option.cmake
@@ -132,17 +132,16 @@ macro( ecbuild_add_option )
     set( _${_p_FEATURE}_condition TRUE )
   endif()
 
-  # check if user provided value
-
-  get_property( _in_cache CACHE ENABLE_${_p_FEATURE} PROPERTY VALUE )
+  # Check if user explicitly enabled/disabled the feature in cache
+  get_property( _in_cache CACHE ENABLE_${_p_FEATURE} PROPERTY VALUE SET )
 
   # A feature set to REQUIRE is always treated as explicitly enabled
   if( ENABLE_${_p_FEATURE} MATCHES "REQUIRE" )
     set( ENABLE_${_p_FEATURE} ON CACHE BOOL "" FORCE )
     ecbuild_debug("ecbuild_add_option(${_p_FEATURE}): ENABLE_${_p_FEATURE} was required")
     set( ${_p_FEATURE}_user_provided_input 1 CACHE BOOL "" FORCE )
-  elseif( NOT "${ENABLE_${_p_FEATURE}}" STREQUAL "" AND _in_cache )
-    ecbuild_debug("ecbuild_add_option(${_p_FEATURE}): ENABLE_${_p_FEATURE} was found in cache")
+  elseif( NOT ENABLE_${_p_FEATURE} STREQUAL "" AND _in_cache )
+    ecbuild_debug("ecbuild_add_option(${_p_FEATURE}): ENABLE_${_p_FEATURE}=${ENABLE_${_p_FEATURE}} was found in cache")
     set( ${_p_FEATURE}_user_provided_input 1 CACHE BOOL "" )
   else()
     ecbuild_debug("ecbuild_add_option(${_p_FEATURE}): ENABLE_${_p_FEATURE} not found in cache")
@@ -162,13 +161,9 @@ macro( ecbuild_add_option )
                           TYPE ${_p_TYPE}
                           PURPOSE "${_p_PURPOSE}" )
 
-  ecbuild_debug("ecbuild_add_option(${_p_FEATURE}): ENABLE_${_p_FEATURE} = ${ENABLE_${_p_FEATURE}}")
-  set( _do_search ${ENABLE_${_p_FEATURE}} )
-  if( _p_FEATURE STREQUAL "OMP" )
-    set( _do_search TRUE )
-  endif()
+  ecbuild_debug("ecbuild_add_option(${_p_FEATURE}): ENABLE_${_p_FEATURE}=${ENABLE_${_p_FEATURE}}")
 
-  if( _do_search  )
+  if( ENABLE_${_p_FEATURE} )
     ecbuild_debug("ecbuild_add_option(${_p_FEATURE}): feature enabled")
 
     set( HAVE_${_p_FEATURE} 1 )
@@ -304,13 +299,13 @@ macro( ecbuild_add_option )
 
     endif()
 
-  else( _do_search )
+  else()
 
     ecbuild_debug("ecbuild_add_option(${_p_FEATURE}): feature disabled")
     set( HAVE_${_p_FEATURE} 0 )
     ecbuild_set_feature( ${_p_FEATURE} ENABLED OFF )
 
-  endif( _do_search )
+  endif()
 
 
   if( ${_p_ADVANCED} )
diff --git a/cmake/ecbuild_add_test.cmake b/cmake/ecbuild_add_test.cmake
index c8c9864..1dcf2c6 100644
--- a/cmake/ecbuild_add_test.cmake
+++ b/cmake/ecbuild_add_test.cmake
@@ -19,6 +19,7 @@
 #                     [ OBJECTS <obj1> [<obj2> ...] ]
 #                     [ COMMAND <executable> ]
 #                     [ TYPE EXE|SCRIPT|PYTHON ]
+#                     [ LABELS <label1> [<label2> ...] ]
 #                     [ ARGS <argument1> [<argument2> ...] ]
 #                     [ RESOURCES <file1> [<file2> ...] ]
 #                     [ TEST_DATA <file1> [<file2> ...] ]
@@ -63,6 +64,22 @@
 #   :SCRIPT: run command or script, default if COMMAND is provided
 #   :PYTHON: run a Python script (requires the Python interpreter to be found)
 #
+# LABELS : optional
+#   list of labels to assign to the test
+#
+#   The project name in lower case is always added as a label. Additional
+#   labels are assigned depending on the type of test:
+#
+#   :executable: for type ``EXE``
+#   :script:     for type ``SCRIPT``
+#   :python:     for type ``PYTHON``
+#   :boost:      uses Boost unit test
+#   :mpi:        if ``MPI`` is set
+#   :openmp:     if ``OMP`` is set
+#
+#   This allows selecting tests to run via ``ctest -L <regex>`` or tests
+#   to exclude via ``ctest -LE <regex>``.
+#
 # ARGS : optional
 #   list of arguments to pass to TARGET or COMMAND when running the test
 #
@@ -76,9 +93,9 @@
 #   use the Boost Unit Test Framework
 #
 # MPI : optional
-#   number of MPI tasks to use.
+#   Run with MPI using the given number of MPI tasks.
 #
-#   If greater than 1, and MPI is not available, the test is disabled.
+#   If greater than 1, and ``MPIEXEC`` is not available, the test is disabled.
 #
 # OMP : optional
 #   number of OpenMP threads per MPI task to use.
@@ -138,7 +155,7 @@ macro( ecbuild_add_test )
 
   set( options           BOOST )
   set( single_value_args TARGET ENABLED COMMAND TYPE LINKER_LANGUAGE MPI OMP WORKING_DIRECTORY )
-  set( multi_value_args  SOURCES OBJECTS LIBS INCLUDES TEST_DEPENDS DEPENDS ARGS
+  set( multi_value_args  SOURCES OBJECTS LIBS INCLUDES TEST_DEPENDS DEPENDS LABELS ARGS
                          PERSISTENT DEFINITIONS RESOURCES TEST_DATA CFLAGS
                          CXXFLAGS FFLAGS GENERATED CONDITION ENVIRONMENT )
 
@@ -150,21 +167,31 @@ macro( ecbuild_add_test )
 
   set( _TEST_DIR ${CMAKE_CURRENT_BINARY_DIR} )
 
-  # Check for MPI
-  if(_PAR_MPI)
-    if( (_PAR_MPI GREATER 1) AND ( (NOT MPI_FOUND) OR (NOT MPIEXEC) ) )
-      ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): ${_PAR_MPI} MPI ranks requested but MPI not available - disabling test")
+  # Undocumented flag for disabling all MPI tests for test environment without suitable MPI(EXEC)
+  if( _PAR_MPI AND ECBUILD_DISABLE_MPI_TESTS )
+    ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): ECBUILD_DISABLE_MPI_TESTS set - disabling test")
+    set( _PAR_ENABLED 0 )
+  elseif( _PAR_MPI )
+    # Check for MPIEXEC if it not set
+    find_program( MPIEXEC NAMES mpiexec mpirun lamexec srun
+                  DOC "Executable for running MPI programs." )
+    if( MPIEXEC )
+      set(MPIEXEC_NUMPROC_FLAG "-np" CACHE STRING "Flag used by MPI to specify the number of processes for MPIEXEC")
+      ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): Running using ${MPIEXEC} on ${_PAR_MPI} MPI rank(s)")
+      set( _PAR_LABELS mpi ${_PAR_LABELS} )
+    elseif( _PAR_MPI GREATER 1 )
+      ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): ${_PAR_MPI} MPI ranks requested but MPIEXEC not available - disabling test")
       set( _PAR_ENABLED 0 )
-    elseif( (_PAR_MPI EQUAL 1) AND (NOT MPI_FOUND) )
-      ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): 1 MPI rank requested but MPI not available - disabling MPI")
-      set( _PAR_MPI 0 )
     else()
-      ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): Running using ${_PAR_MPI} MPI rank(s)")
+      ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): 1 MPI rank requested but MPIEXEC not available - running sequentially")
+      set( _PAR_MPI 0 )
     endif()
   endif()
 
   # Check for OMP
-  if( NOT DEFINED _PAR_OMP )
+  if( DEFINED _PAR_OMP )
+    set( _PAR_LABELS openmp ${_PAR_LABELS} )
+  else()
     set( _PAR_OMP 1 )
   endif()
   list( APPEND _PAR_ENVIRONMENT "OMP_NUM_THREADS=${_PAR_OMP}" )
@@ -181,11 +208,13 @@ macro( ecbuild_add_test )
   # command implies script
   if( DEFINED _PAR_COMMAND )
     set( _PAR_TYPE "SCRIPT" )
+    set( _PAR_LABELS script ${_PAR_LABELS} )
   endif()
 
   # default of TYPE
   if( NOT _PAR_TYPE AND DEFINED _PAR_TARGET )
     set( _PAR_TYPE "EXE" )
+    set( _PAR_LABELS executable ${_PAR_LABELS} )
     if( NOT _PAR_SOURCES )
       ecbuild_critical("The call to ecbuild_add_test() defines a TARGET without SOURCES.")
     endif()
@@ -194,6 +223,7 @@ macro( ecbuild_add_test )
   if( _PAR_TYPE MATCHES "PYTHON" )
     if( PYTHONINTERP_FOUND )
       set( _PAR_COMMAND ${PYTHON_EXECUTABLE} )
+      set( _PAR_LABELS python ${_PAR_LABELS} )
     else()
       ecbuild_warn( "Requested a python test but python interpreter not found - disabling test\nPYTHON_EXECUTABLE: [${PYTHON_EXECUTABLE}]" )
       set( _PAR_ENABLED 0 )
@@ -233,6 +263,7 @@ macro( ecbuild_add_test )
   if( _PAR_BOOST AND ENABLE_TESTS AND _${_PAR_TARGET}_condition )
 
     if( HAVE_BOOST_UNIT_TEST )
+      set( _PAR_LABELS boost ${_PAR_LABELS} )
       if( BOOST_UNIT_TEST_FRAMEWORK_HEADER_ONLY )
         include_directories( ${ECBUILD_BOOST_HEADER_DIRS} )
         include_directories( ${Boost_INCLUDE_DIRS}  ) # temporary until we ship Boost Unit Test with ecBuild
@@ -431,6 +462,12 @@ macro( ecbuild_add_test )
 
       endif()
 
+      # Add lower case project name to custom test labels
+      set( _PAR_LABELS ${PROJECT_NAME_LOWCASE} ${_PAR_LABELS} )
+      list( REMOVE_DUPLICATES _PAR_LABELS )
+      ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): assign labels ${_PAR_LABELS}")
+      set_property( TEST ${_PAR_TARGET} APPEND PROPERTY LABELS "${_PAR_LABELS}" )
+
       if( DEFINED _PAR_ENVIRONMENT )
         set_property( TEST ${_PAR_TARGET} APPEND PROPERTY ENVIRONMENT "${_PAR_ENVIRONMENT}" )
       endif()
diff --git a/cmake/ecbuild_check_cxx11.cmake b/cmake/ecbuild_check_cxx11.cmake
index 1639a6a..9552389 100644
--- a/cmake/ecbuild_check_cxx11.cmake
+++ b/cmake/ecbuild_check_cxx11.cmake
@@ -41,97 +41,98 @@
 
 function( ecbuild_check_cxx11 )
 
-	# parse parameters
+  # parse parameters
 
-	set( options PRINT )
-	set( single_value_args )
-	set( multi_value_args   FEATURES REQUIRED )
+  set( options PRINT )
+  set( single_value_args )
+  set( multi_value_args   FEATURES REQUIRED )
 
-	cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
+  cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
-	if(_PAR_UNPARSED_ARGUMENTS)
-		ecbuild_critical("Unknown keywords given to ecbuild_check_cxx11(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
-	endif()
+  if(_PAR_UNPARSED_ARGUMENTS)
+    ecbuild_critical("Unknown keywords given to ecbuild_check_cxx11(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+  endif()
 
-	include( ${ECBUILD_MACROS_DIR}/contrib/GreatCMakeCookOff/CheckCXX11Features.cmake )
+  include( ${ECBUILD_MACROS_DIR}/contrib/GreatCMakeCookOff/CheckCXX11Features.cmake )
 
-	cxx11_find_all_features( ALL_FEATURES ) # list all available features to check
+  cxx11_find_all_features( ALL_FEATURES ) # list all available features to check
 
-	# Save CXX flags
-	set( CXX_FLAGS_SNASHOT ${CMAKE_CXX_FLAGS} )
+  # Save CXX flags
+  set( CXX_FLAGS_SNASHOT ${CMAKE_CXX_FLAGS} )
 
-	# Add C++11 flags
-	include( ${ECBUILD_MACROS_DIR}/ecbuild_get_cxx11_flags.cmake )
-	ecbuild_get_cxx11_flags( CXX11_FLAGS )
-	set( CMAKE_CXX_FLAGS "${CXX11_FLAGS} ${CMAKE_CXX_FLAGS}" )
+  # Add C++11 flags
+  include( ${ECBUILD_MACROS_DIR}/ecbuild_get_cxx11_flags.cmake )
+  ecbuild_get_cxx11_flags( CXX11_FLAGS )
+  ecbuild_debug( "ecbuild_check_cxx11: detected C++11 flag as ${CXX11_FLAGS}" )
+  set( CMAKE_CXX_FLAGS "${CXX11_FLAGS} ${CMAKE_CXX_FLAGS}" )
 
-	if( NOT _p_FEATURES AND NOT _p_REQUIRED ) # no input, then search for all features
+  if( NOT _p_FEATURES AND NOT _p_REQUIRED ) # no input, then search for all features
 
-		cxx11_feature_check()
+    cxx11_feature_check()
 
-	else()
+  else()
 
-		foreach( _f ${_p_FEATURES} )
-			cxx11_feature_check( ${_f} )
-		endforeach()
+    foreach( _f ${_p_FEATURES} )
+      cxx11_feature_check( ${_f} )
+    endforeach()
 
-		foreach( _f ${_p_REQUIRED} )
-			cxx11_feature_check( REQUIRED ${_f} )
-		endforeach()
+    foreach( _f ${_p_REQUIRED} )
+      cxx11_feature_check( REQUIRED ${_f} )
+    endforeach()
 
-	endif()
+  endif()
 
-	# Restore CXX flags
-	set( CMAKE_CXX_FLAGS ${CXX_FLAGS_SNAPSHOT} )
+  # Restore CXX flags
+  set( CMAKE_CXX_FLAGS ${CXX_FLAGS_SNAPSHOT} )
 
-	if( _p_FEATURES OR _p_REQUIRED )
-		set( CXX11_CHECKED_FEATURES ${_p_FEATURES} ${_p_REQUIRED} )
-	else()
-		set( CXX11_CHECKED_FEATURES ${ALL_FEATURES} )
-	endif()
+  if( _p_FEATURES OR _p_REQUIRED )
+    set( CXX11_CHECKED_FEATURES ${_p_FEATURES} ${_p_REQUIRED} )
+  else()
+    set( CXX11_CHECKED_FEATURES ${ALL_FEATURES} )
+  endif()
 
-	foreach( f ${CXX11_CHECKED_FEATURES} )
-		string( TOUPPER ${f} FEAT )
-		if( HAS_CXX11_${FEAT} )
-		   list( APPEND CXX11_SUPPORTED_FEATURES ${f} )
-		else()
-		   list( APPEND CXX11_NOT_SUPPORTED_FEATURES ${f} )
-		endif()
-	endforeach()
+  foreach( f ${CXX11_CHECKED_FEATURES} )
+    string( TOUPPER ${f} FEAT )
+    if( HAS_CXX11_${FEAT} )
+       list( APPEND CXX11_SUPPORTED_FEATURES ${f} )
+    else()
+       list( APPEND CXX11_NOT_SUPPORTED_FEATURES ${f} )
+    endif()
+  endforeach()
 
   if( CXX11_CHECKED_FEATURES )
     list( SORT CXX11_CHECKED_FEATURES )
-	endif()
-	if( CXX11_SUPPORTED_FEATURES )
-		list( SORT CXX11_SUPPORTED_FEATURES )
-	endif()
-	if( CXX11_NOT_SUPPORTED_FEATURES )
-		list( SORT CXX11_NOT_SUPPORTED_FEATURES )
-	endif()
-
-	set( CXX11_CHECKED_FEATURES       ${CXX11_CHECKED_FEATURES}       PARENT_SCOPE )
-	set( CXX11_SUPPORTED_FEATURES     ${CXX11_SUPPORTED_FEATURES}     PARENT_SCOPE )
-	set( CXX11_NOT_SUPPORTED_FEATURES ${CXX11_NOT_SUPPORTED_FEATURES} PARENT_SCOPE )
-
-	if( _p_PRINT )
-		if( CXX11_CHECKED_FEATURES )
-			join( CXX11_CHECKED_FEATURES " " CXX11_CHECKED_FEATURES_STR )
-			ecbuild_info( "Checked C++11 features: ${CXX11_CHECKED_FEATURES_STR}" )
-		else()
-			ecbuild_info( "Checked no C++11 features" )
-		endif()
-		if( CXX11_SUPPORTED_FEATURES )
-			join( CXX11_SUPPORTED_FEATURES " " CXX11_SUPPORTED_FEATURES_STR )
-			ecbuild_info( "Found C++11 features: ${CXX11_SUPPORTED_FEATURES_STR}" )
-		else()
-			ecbuild_info( "Found no C++11 features" )
-		endif()
-		if( CXX11_NOT_SUPPORTED_FEATURES )
-			join( CXX11_NOT_SUPPORTED_FEATURES " " CXX11_NOT_SUPPORTED_FEATURES_STR )
-			ecbuild_info( "Not found C++11 features: ${CXX11_NOT_SUPPORTED_FEATURES_STR}" )
-		else()
-			ecbuild_info( "Found all checked C++11 features" )
-		endif()
-	endif()
+  endif()
+  if( CXX11_SUPPORTED_FEATURES )
+    list( SORT CXX11_SUPPORTED_FEATURES )
+  endif()
+  if( CXX11_NOT_SUPPORTED_FEATURES )
+    list( SORT CXX11_NOT_SUPPORTED_FEATURES )
+  endif()
+
+  set( CXX11_CHECKED_FEATURES       ${CXX11_CHECKED_FEATURES}       PARENT_SCOPE )
+  set( CXX11_SUPPORTED_FEATURES     ${CXX11_SUPPORTED_FEATURES}     PARENT_SCOPE )
+  set( CXX11_NOT_SUPPORTED_FEATURES ${CXX11_NOT_SUPPORTED_FEATURES} PARENT_SCOPE )
+
+  if( _p_PRINT )
+    if( CXX11_CHECKED_FEATURES )
+      join( CXX11_CHECKED_FEATURES " " CXX11_CHECKED_FEATURES_STR )
+      ecbuild_info( "Checked C++11 features: ${CXX11_CHECKED_FEATURES_STR}" )
+    else()
+      ecbuild_info( "Checked no C++11 features" )
+    endif()
+    if( CXX11_SUPPORTED_FEATURES )
+      join( CXX11_SUPPORTED_FEATURES " " CXX11_SUPPORTED_FEATURES_STR )
+      ecbuild_info( "Found C++11 features: ${CXX11_SUPPORTED_FEATURES_STR}" )
+    else()
+      ecbuild_info( "Found no C++11 features" )
+    endif()
+    if( CXX11_NOT_SUPPORTED_FEATURES )
+      join( CXX11_NOT_SUPPORTED_FEATURES " " CXX11_NOT_SUPPORTED_FEATURES_STR )
+      ecbuild_info( "Not found C++11 features: ${CXX11_NOT_SUPPORTED_FEATURES_STR}" )
+    else()
+      ecbuild_info( "Found all checked C++11 features" )
+    endif()
+  endif()
 
 endfunction( ecbuild_check_cxx11 )
diff --git a/cmake/ecbuild_define_paths.cmake b/cmake/ecbuild_define_paths.cmake
index 856903d..6584b26 100644
--- a/cmake/ecbuild_define_paths.cmake
+++ b/cmake/ecbuild_define_paths.cmake
@@ -1,8 +1,8 @@
 # (C) Copyright 1996-2016 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 
+# 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.
 
@@ -15,17 +15,22 @@ file( MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/lib )
 
 # setup library building rpaths (both in build dir and then when installed)
 
-set( CMAKE_INSTALL_RPATH_USE_LINK_PATH   TRUE  ) # add the automatic parts to RPATH which point to dirs outside build tree
+# add the automatic parts to RPATH which point to dirs outside build tree
+set( CMAKE_INSTALL_RPATH_USE_LINK_PATH   TRUE  )
 
 # use RPATHs for the build tree
 set( CMAKE_SKIP_BUILD_RPATH              FALSE  )
 
-if( ENABLE_RELATIVE_RPATHS )
-    # when building, use the install RPATH immedietly
-	set( CMAKE_BUILD_WITH_INSTALL_RPATH      TRUE  )
+# If INSTALL_LIB_DIR is set to anything other than lib, the relative install
+# RPATH is wrong in the build tree
+if( ENABLE_RELATIVE_RPATHS AND (NOT INSTALL_LIB_DIR OR INSTALL_LIB_DIR STREQUAL "lib") )
+  # when building, use the install RPATH immediately (we don't want to relink)
+  set( CMAKE_BUILD_WITH_INSTALL_RPATH      TRUE  )
+  ecbuild_debug( "Building with install RPATH" )
 else()
-    # when building, don't use the install RPATH yet, but later on when installing
-    set( CMAKE_BUILD_WITH_INSTALL_RPATH      FALSE  ) 
+  # when building, don't use the install RPATH yet, but later on when installing
+  set( CMAKE_BUILD_WITH_INSTALL_RPATH      FALSE  )
+  ecbuild_debug( "Not building with install RPATH, need to relink when installing" )
 endif()
 
 # Always include srcdir and builddir in include path
diff --git a/cmake/ecbuild_find_omp.cmake b/cmake/ecbuild_find_omp.cmake
index 47c05c2..914da24 100644
--- a/cmake/ecbuild_find_omp.cmake
+++ b/cmake/ecbuild_find_omp.cmake
@@ -30,7 +30,7 @@ macro( lookup_omp_flags )
   #ifdef _OPENMP
     #pragma omp parallel
     {
-      int id = omp_get_thread_num();
+      (void)omp_get_thread_num();
     }
     return 0;
   #else
@@ -53,7 +53,7 @@ macro( lookup_omp_flags )
     #pragma omp parallel
     {
       // This pragma should have passed compilation
-      int id = 0;
+      (void)0;
     }
     return 0;
   #endif
diff --git a/cmake/ecbuild_get_test_data.cmake b/cmake/ecbuild_get_test_data.cmake
index d908399..42185f1 100644
--- a/cmake/ecbuild_get_test_data.cmake
+++ b/cmake/ecbuild_get_test_data.cmake
@@ -241,6 +241,7 @@ endfunction(ecbuild_get_test_data)
 #   ecbuild_get_test_multidata( NAMES <name1> [ <name2> ... ]
 #                               TARGET <target>
 #                               [ DIRNAME <dir> ]
+#                               [ LABELS <label1> [<label2> ...] ]
 #                               [ EXTRACT ]
 #                               [ NOCHECK ] )
 #
@@ -258,6 +259,14 @@ endfunction(ecbuild_get_test_data)
 # DIRNAME : optional, defaults to <project>/<relative path to current dir>
 #   directory in which the test data resides
 #
+# LABELS : optional
+#   list of labels to assign to the test
+#
+#   Lower case project name and ``download_data`` are always added as labels.
+#
+#   This allows selecting tests to run via ``ctest -L <regex>`` or tests
+#   to exclude via ``ctest -LE <regex>``.
+#
 # EXTRACT : optional
 #   extract downloaded files (supported archives: tar, zip, tar.gz, tar.bz2)
 #
@@ -303,7 +312,7 @@ function( ecbuild_get_test_multidata )
 
     set( options EXTRACT NOCHECK )
     set( single_value_args TARGET DIRNAME )
-    set( multi_value_args  NAMES )
+    set( multi_value_args  NAMES LABELS )
 
     cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
@@ -386,6 +395,9 @@ endfunction()\n\n" )
 
     if( ENABLE_TESTS )
       add_test(  NAME ${_p_TARGET} COMMAND ${CMAKE_COMMAND} -P ${_script} )
+      set( _p_LABELS ${PROJECT_NAME_LOWCASE} download_data ${_p_LABELS} )
+      list( REMOVE_DUPLICATES _p_LABELS )
+      set_property( TEST ${_p_TARGET} APPEND PROPERTY LABELS "${_p_LABELS}" )
     endif()
 
 endfunction(ecbuild_get_test_multidata)
diff --git a/cmake/ecbuild_log.cmake b/cmake/ecbuild_log.cmake
index f982d07..32a1398 100644
--- a/cmake/ecbuild_log.cmake
+++ b/cmake/ecbuild_log.cmake
@@ -62,7 +62,7 @@
 #
 ##############################################################################
 
-# Define colour escape sequences (https://stackoverflow.com/a/19578320/396967)
+# Define colour escape sequences (not available on Windows)
 if(NOT (WIN32 OR ECBUILD_NO_COLOUR))
   string(ASCII 27 Esc)
   set(ColourReset "${Esc}[m")
diff --git a/definitions/grib2/boot.def b/definitions/grib2/boot.def
index da0bd03..6ff0941 100644
--- a/definitions/grib2/boot.def
+++ b/definitions/grib2/boot.def
@@ -7,6 +7,10 @@
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
 
+# This gets updated twice a year by WMO.
+# See http://www.wmo.int/pages/prog/www/WMOCodes/WMO306_vI2/LatestVERSION/LatestVERSION.html
+constant tablesVersionLatest = 18 : edition_specific;
+
 constant one = 1 : hidden ;
 constant million = 1000000 : hidden;
 constant grib2divider   = 1000000;
@@ -20,7 +24,6 @@ meta gts_TTAAii gts_header(20,6) : no_copy,hidden,read_only;
 meta gts_CCCC gts_header(27,4) : no_copy,hidden,read_only;
 meta gts_ddhh00 gts_header(32,6) : no_copy,hidden,read_only;
 
-
 transient  missingValue   = 9999;
 constant ieeeFloats   = 1 : edition_specific;
 constant isHindcast = 0;
@@ -29,7 +32,6 @@ include "grib2/section.0.def";
 
 template core "grib2/sections.def";
 
-
 #if(!new())
 #{
   #lookup[4] endOfProduct(0);
@@ -40,5 +42,4 @@ template core "grib2/sections.def";
   #}
 #}
 
-template     section_8 "grib2/section.8.def";
-
+template section_8 "grib2/section.8.def";
diff --git a/definitions/grib2/products_uerra.def b/definitions/grib2/products_uerra.def
index 5fb37c3..a0c6383 100644
--- a/definitions/grib2/products_uerra.def
+++ b/definitions/grib2/products_uerra.def
@@ -30,6 +30,10 @@ if(typeOfFirstFixedSurface == 103) {
         alias mars.levelist = level;
     }
 }
+if(typeOfFirstFixedSurface == 118) {
+    constant levTypeName = 'ml';
+    alias mars.levtype = levTypeName;
+}
 
 if(typeOfFirstFixedSurface == 151 && typeOfSecondFixedSurface == 151) {
     alias level = bottomLevel;
diff --git a/definitions/grib2/tables/1.0.table b/definitions/grib2/tables/1.0.table
index 126d78e..0e6f26f 100644
--- a/definitions/grib2/tables/1.0.table
+++ b/definitions/grib2/tables/1.0.table
@@ -17,6 +17,7 @@
 15 15 Version implemented on 6 May 2015
 16 16 Version implemented on 11 November 2015
 17 17 Version implemented on 4 May 2016
-18 18 Pre-operational to be implemented by next amendment
-# 19-254 Future versions 
+18 18 Version implemented on 2 November 2016
+19 19 Pre-operational to be implemented by next amendment
+# 20-254 Future versions
 255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used.
diff --git a/definitions/grib2/tables/17/4.5.table b/definitions/grib2/tables/17/4.5.table
index 1387725..2e2695a 100644
--- a/definitions/grib2/tables/17/4.5.table
+++ b/definitions/grib2/tables/17/4.5.table
@@ -55,7 +55,7 @@
 175 175 Top surface of ice, under snow cover, on sea, lake or river
 176 176 Bottom surface (underside) ice on sea, lake or river
 177 sfc Deep soil (of indefinite depth)
-178 178 Reserved
+# 178 Reserved
 179 179 Top surface of glacier ice and inland ice
 180 180 Deep inland or glacier ice (of indefinite depth)
 181 181 Grid tile land fraction as a model surface
diff --git a/definitions/grib2/tables/18/0.0.table b/definitions/grib2/tables/18/0.0.table
new file mode 100644
index 0000000..b24c505
--- /dev/null
+++ b/definitions/grib2/tables/18/0.0.table
@@ -0,0 +1,10 @@
+# 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 --git a/definitions/grib2/tables/18/1.0.table b/definitions/grib2/tables/18/1.0.table
new file mode 100644
index 0000000..8829485
--- /dev/null
+++ b/definitions/grib2/tables/18/1.0.table
@@ -0,0 +1,23 @@
+# Code table 1.0 - GRIB master tables version number
+0 0 Experimental 
+1 1 Version implemented on 7 November 2001 
+2 2 Version implemented on 4 November 2003 
+3 3 Version implemented on 2 November 2005 
+4 4 Version implemented on 7 November 2007 
+5 5 Version implemented on 4 November 2009 
+6 6 Version implemented on 15 September 2010 
+7 7 Version implemented on 4 May 2011 
+8 8 Version implemented on 2 November 2011 
+9 9 Version implemented on 2 May 2012 
+10 10 Version implemented on 7 November 2012 
+11 11 Version implemented on 8 May 2013 
+12 12 Version implemented on 14 November 2013 
+13 13 Version implemented on 7 May 2014 
+14 14 Version implemented on 5 November 2014 
+15 15 Version implemented on 6 May 2015 
+16 16 Version implemented on 11 November 2015 
+17 17 Version implemented on 4 May 2016 
+18 18 Version implemented on 2 November 2016
+19 19 Pre-operational to be implemented by next amendment
+# 20-254 Future versions
+255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used.
diff --git a/definitions/grib2/tables/18/1.1.table b/definitions/grib2/tables/18/1.1.table
new file mode 100644
index 0000000..d50f8fd
--- /dev/null
+++ b/definitions/grib2/tables/18/1.1.table
@@ -0,0 +1,4 @@
+# Code table 1.1 - GRIB local tables version number
+0 0 Local tables not used. Only table entries and templates from the current master table are valid 
+# 1-254 Number of local tables version used 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/1.2.table b/definitions/grib2/tables/18/1.2.table
new file mode 100644
index 0000000..934b704
--- /dev/null
+++ b/definitions/grib2/tables/18/1.2.table
@@ -0,0 +1,8 @@
+# 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 --git a/definitions/grib2/tables/18/1.3.table b/definitions/grib2/tables/18/1.3.table
new file mode 100644
index 0000000..0c95269
--- /dev/null
+++ b/definitions/grib2/tables/18/1.3.table
@@ -0,0 +1,14 @@
+# Code table 1.3 - Production status of data
+0 0 Operational products 
+1 1 Operational test products 
+2 2 Research products 
+3 3 Re-analysis products 
+4 4 THORPEX Interactive Grand Global Ensemble (TIGGE) 
+5 5 THORPEX Interactive Grand Global Ensemble test (TIGGE)
+6 6 S2S operational products 
+7 7 S2S test products 
+8 8 Uncertainties in Ensembles of Regional ReAnalyses project (UERRA)
+9 9 Uncertainties in Ensembles of Regional ReAnalyses project test (UERRA)
+# 10-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/1.4.table b/definitions/grib2/tables/18/1.4.table
new file mode 100644
index 0000000..03203d8
--- /dev/null
+++ b/definitions/grib2/tables/18/1.4.table
@@ -0,0 +1,13 @@
+# Code table 1.4 - Type of data
+0 an Analysis products 
+1 fc Forecast products 
+2 af Analysis and forecast products 
+3 cf Control forecast products 
+4 pf Perturbed forecast products 
+5 cp Control and perturbed forecast products 
+6 sa Processed satellite observations 
+7 ra Processed radar observations 
+8 ep Event probability 
+# 9-191 Reserved 
+# 192-254 Reserved for local use 
+255 missing Missing 
diff --git a/definitions/grib2/tables/18/1.5.table b/definitions/grib2/tables/18/1.5.table
new file mode 100644
index 0000000..b2cf9f0
--- /dev/null
+++ b/definitions/grib2/tables/18/1.5.table
@@ -0,0 +1,7 @@
+# Code table 1.5 - Identification template number
+0 0 Calendar definition 
+1 1 Paleontological offset 
+2 2 Calendar definition and paleontological offset 
+# 3-32767 Reserved 
+# 32768-65534 Reserved for local use 
+65535 65535 Missing 
diff --git a/definitions/grib2/tables/18/1.6.table b/definitions/grib2/tables/18/1.6.table
new file mode 100644
index 0000000..5db9219
--- /dev/null
+++ b/definitions/grib2/tables/18/1.6.table
@@ -0,0 +1,8 @@
+# Code table 1.6 - Type of calendar
+0 0 Gregorian 
+1 1 360-day 
+2 2 365-day 
+3 3 Proleptic Gregorian 
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/3.0.table b/definitions/grib2/tables/18/3.0.table
new file mode 100644
index 0000000..45187b8
--- /dev/null
+++ b/definitions/grib2/tables/18/3.0.table
@@ -0,0 +1,6 @@
+# Code table 3.0 - Source of grid definition
+0 0 Specified in Code table 3.1 
+1 1 Predetermined grid definition (Defined by originating centre)
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 A grid definition does not apply to this product 
diff --git a/definitions/grib2/tables/18/3.1.table b/definitions/grib2/tables/18/3.1.table
new file mode 100644
index 0000000..aa8d987
--- /dev/null
+++ b/definitions/grib2/tables/18/3.1.table
@@ -0,0 +1,47 @@
+# Code table 3.1 - Grid definition template number
+0 0 Latitude/longitude (Also called equidistant cylindrical, or Plate Carree)
+1 1 Rotated latitude/longitude
+2 2 Stretched latitude/longitude
+3 3 Stretched and rotated latitude/longitude
+4 4 Variable resolution latitude/longitude 
+5 5 Variable resolution rotated latitude/longitude 
+# 6-9 Reserved
+10 10 Mercator
+12 12 Transverse Mercator
+# 13-19 Reserved
+20 20 Polar stereographic projection (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 or orthographic 
+# 91-99 Reserved 
+100 100 Triangular grid based on an icosahedron 
+101 101 General unstructured grid 
+# 102-109 Reserved 
+110 110 Equatorial azimuthal equidistant projection 
+# 111-119 Reserved 
+120 120 Azimuth-range projection 
+# 121-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 --git a/definitions/grib2/tables/18/3.10.table b/definitions/grib2/tables/18/3.10.table
new file mode 100644
index 0000000..afa8843
--- /dev/null
+++ b/definitions/grib2/tables/18/3.10.table
@@ -0,0 +1,8 @@
+# Flag table 3.10 - Scanning mode for one diamond
+1 0 Points scan in +i direction, i.e. from pole to Equator 
+1 1 Points scan in -i direction, i.e. from Equator to pole 
+2 0 Points scan in +j direction, i.e. from west to east 
+2 1 Points scan in -j direction, i.e. from east to west 
+3 0 Adjacent points in i direction are consecutive 
+3 1 Adjacent points in j direction are consecutive 
+# 4-8 Reserved 
diff --git a/definitions/grib2/tables/18/3.11.table b/definitions/grib2/tables/18/3.11.table
new file mode 100644
index 0000000..e516a2a
--- /dev/null
+++ b/definitions/grib2/tables/18/3.11.table
@@ -0,0 +1,7 @@
+# Code table 3.11 - Interpretation of list of numbers at end of section 3
+0 0 There is no appended list 
+1 1 Numbers define number of points corresponding to full coordinate circles (i.e. parallels), coordinate values on each circle are multiple of the circle mesh, and extreme coordinate values given in grid definition (i.e. extreme longitudes) may not be reached in all rows 
+2 2 Numbers define number of points corresponding to coordinate lines delimited by extreme coordinate values given in grid definition (i.e. extreme longitudes) which are present in each row 
+3 3 Numbers define the actual latitudes for each row in the grid. The list of numbers are integer values of the valid latitudes in microdegrees (scaled by 10-6) or in unit equal to the ratio of the basic angle and the subdivisions number for each row, in the same order as specified in the scanning mode flag (bit no. 2) 
+# 4-254 Reserved 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/3.15.table b/definitions/grib2/tables/18/3.15.table
new file mode 100644
index 0000000..331217e
--- /dev/null
+++ b/definitions/grib2/tables/18/3.15.table
@@ -0,0 +1,23 @@
+# Code table 3.15 - Physical meaning of vertical coordinate
+# 0-19 Reserved 
+20 20 Temperature (K)
+# 21-99 Reserved 
+100 100 Pressure (Pa)
+101 101 Pressure deviation from mean sea level (Pa)
+102 102 Altitude above mean sea level (m)
+103 103 Height above ground (m)
+104 104 Sigma coordinate 
+105 105 Hybrid coordinate 
+106 106 Depth below land surface (m)
+107 pt Potential temperature (theta) (K)
+108 108 Pressure deviation from ground to level (Pa)
+109 pv Potential vorticity (K m-2 kg-1 s-1)
+110 110 Geometrical height (m)
+111 111 Eta coordinate 
+112 112 Geopotential height (gpm)
+113 113 Logarithmic hybrid coordinate 
+# 114-159 Reserved 
+160 160 Depth below sea level (m)
+# 161-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/3.2.table b/definitions/grib2/tables/18/3.2.table
new file mode 100644
index 0000000..9238dc2
--- /dev/null
+++ b/definitions/grib2/tables/18/3.2.table
@@ -0,0 +1,14 @@
+# 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 (in m) by data producer 
+2 2 Earth assumed oblate spheroid with size as determined by IAU in 1965 (major axis = 6 378 160.0 m, minor axis = 6 356 775.0 m, f = 1/297.0) 
+3 3 Earth assumed oblate spheroid with major and minor axes specified (in km) by data producer 
+4 4 Earth assumed oblate spheroid as defined in IAG-GRS80 model (major axis = 6 378 137.0 m, minor axis = 6 356 752.314 m, f = 1/298.257 222 101) 
+5 5 Earth assumed represented by WGS84 (as used by ICAO since 1998) 
+6 6 Earth assumed spherical with radius of 6 371 229.0 m 
+7 7 Earth assumed oblate spheroid with major or minor axes specified (in m) by data producer 
+8 8 Earth model assumed spherical with radius of 6 371 200 m, but the horizontal datum of the resulting latitude/longitude field is the WGS84 reference frame 
+9 9 Earth represented by the Ordnance Survey Great Britain 1936 Datum, using the Airy 1830 Spheroid, the Greenwich meridian as 0 longitude, and the Newlyn datum as mean sea level, 0 height 
+# 10-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/3.20.table b/definitions/grib2/tables/18/3.20.table
new file mode 100644
index 0000000..efbf08d
--- /dev/null
+++ b/definitions/grib2/tables/18/3.20.table
@@ -0,0 +1,6 @@
+# Code table 3.20 - Type of horizontal line
+0 0 Rhumb 
+1 1 Great circle 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/3.21.table b/definitions/grib2/tables/18/3.21.table
new file mode 100644
index 0000000..88dbb90
--- /dev/null
+++ b/definitions/grib2/tables/18/3.21.table
@@ -0,0 +1,8 @@
+# Code table 3.21 - Vertical dimension coordinate values definition
+0 0 Explicit coordinate values set 
+1 1 Linear coordinates f(1) = C1, f(n) = f(n-1) + C2 
+# 2-10 Reserved 
+11 11 Geometric coordinates f(1) = C1, f(n) = C2 * f(n-1) 
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/3.3.table b/definitions/grib2/tables/18/3.3.table
new file mode 100644
index 0000000..5dd7c70
--- /dev/null
+++ b/definitions/grib2/tables/18/3.3.table
@@ -0,0 +1,9 @@
+# Flag table 3.3 - Resolution and component flags
+# 1-2 Reserved 
+3 0 i direction increments not given 
+3 1 i direction increments given 
+4 0 j direction increments not given 
+4 1 j direction increments given 
+5 0 Resolved u- and v- components of vector quantities relative to easterly and northerly directions 
+5 1 Resolved u- and v- components of vector quantities relative to the defined grid in the direction of increasing x and y (or i and j) coordinates, respectively 
+# 6-8 Reserved - set to zero 
diff --git a/definitions/grib2/tables/18/3.4.table b/definitions/grib2/tables/18/3.4.table
new file mode 100644
index 0000000..897b813
--- /dev/null
+++ b/definitions/grib2/tables/18/3.4.table
@@ -0,0 +1,17 @@
+# Flag table 3.4 - Scanning mode
+1 0 Points of first row or column scan in the +i (+x) direction 
+1 1 Points of first row or column scan in the -i (-x) direction 
+2 0 Points of first row or column scan in the -j (-y) direction 
+2 1 Points of first row or column scan in the +j (+y) direction 
+3 0 Adjacent points in i (x) direction are consecutive 
+3 1 Adjacent points in j (y) direction is consecutive 
+4 0 All rows scan in the same direction 
+4 1 Adjacent rows scans in the opposite direction 
+5 0 Points within odd rows are not offset in i (x) direction 
+5 1 Points within odd rows are offset by Di/2 in i (x) direction 
+6 0 Points within even rows are not offset in i (x) direction 
+6 1 Points within even rows are offset by Di/2 in i (x) direction 
+7 0 Points are not offset in j (y) direction 
+7 1 Points are offset by Dj/2 in j (y) direction 
+8 0 Rows have Ni grid points and columns have Nj grid points 
+8 1 Rows have Ni grid points if points are not offset in i direction  Rows have Ni-1 grid points if points are offset by Di/2 in i direction  Columns have Nj grid points if points are not offset in j direction  Columns have Nj-1 grid points if points are offset by Dj/2 in j direction 
diff --git a/definitions/grib2/tables/18/3.5.table b/definitions/grib2/tables/18/3.5.table
new file mode 100644
index 0000000..eabdde8
--- /dev/null
+++ b/definitions/grib2/tables/18/3.5.table
@@ -0,0 +1,5 @@
+# Flag table 3.5 - Projection centre
+1 0 North Pole is on the projection plane 
+1 1 South Pole is on the projection plane 
+2 0 Only one projection centre is used 
+2 1 Projection is bipolar and symmetric 
diff --git a/definitions/grib2/tables/18/3.6.table b/definitions/grib2/tables/18/3.6.table
new file mode 100644
index 0000000..d381959
--- /dev/null
+++ b/definitions/grib2/tables/18/3.6.table
@@ -0,0 +1,2 @@
+# Code table 3.6 - Spectral data representation type
+1 1 see separate doc or pdf file
diff --git a/definitions/grib2/tables/18/3.7.table b/definitions/grib2/tables/18/3.7.table
new file mode 100644
index 0000000..0a7d6ef
--- /dev/null
+++ b/definitions/grib2/tables/18/3.7.table
@@ -0,0 +1,5 @@
+# Code table 3.7 - Spectral data representation mode
+0 0 Reserved 
+1 1 see separate doc or pdf file
+# 2-254 Reserved 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/3.8.table b/definitions/grib2/tables/18/3.8.table
new file mode 100644
index 0000000..844e742
--- /dev/null
+++ b/definitions/grib2/tables/18/3.8.table
@@ -0,0 +1,7 @@
+# Code table 3.8 - Grid point position
+0 0 Grid points at triangle vertices 
+1 1 Grid points at centres of triangles 
+2 2 Grid points at midpoints of triangle sides 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/3.9.table b/definitions/grib2/tables/18/3.9.table
new file mode 100644
index 0000000..fd730bc
--- /dev/null
+++ b/definitions/grib2/tables/18/3.9.table
@@ -0,0 +1,4 @@
+# Flag table 3.9 - Numbering order of diamonds as seen from the corresponding pole
+1 0 Clockwise orientation 
+1 1 Anti-clockwise (i.e. counter-clockwise) orientation 
+# 2-8 Reserved 
diff --git a/definitions/grib2/tables/18/4.0.table b/definitions/grib2/tables/18/4.0.table
new file mode 100644
index 0000000..63ffa4a
--- /dev/null
+++ b/definitions/grib2/tables/18/4.0.table
@@ -0,0 +1,72 @@
+# Code table 4.0 - Product definition template number
+0 0 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time 
+1 1 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time 
+2 2 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer at a point in time 
+3 3 Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time 
+4 4 Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time 
+5 5 Probability forecasts at a horizontal level or in a horizontal layer at a point in time 
+6 6 Percentile forecasts at a horizontal level or in a horizontal layer at a point in time 
+7 7 Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time 
+8 8 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval 
+9 9 Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval 
+10 10 Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval 
+11 11 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval 
+12 12 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval 
+13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval 
+14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval 
+15 15 Average, accumulation, extreme values, or other statistically processed values over a spatial area at a horizontal level or in a horizontal layer at a point in time 
+# 16-19 Reserved
+20 20 Radar product 
+# 21-29 Reserved 
+30 30 Satellite product (deprecated) 
+31 31 Satellite product 
+32 32 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data 
+33 33 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data 
+34 34 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for simulated (synthetic) satellite data 
+# 35-39 Reserved
+311 311 Satellite product auxiliary information
+40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents 
+41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents 
+42 42 Average, accumulation and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents 
+43 43 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents 
+44 44 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for aerosol 
+45 45 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for aerosol 
+46 46 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol 
+47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol 
+48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol 
+49 49 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol
+# 50 Reserved 
+51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time 
+# 52 Reserved
+53 53 Partitioned parameters at a horizontal level or in a horizontal layer at a point in time 
+54 54 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for partitioned parameters 
+55 55 Spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time 
+56 56 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters (deprecated)
+57 57 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function 
+58 58 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function
+59 59 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters (corrected version of template 4.56)
+60 60 Individual ensemble reforecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time 
+61 61 Individual ensemble reforecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval 
+# 62-69 Reserved
+70 70 Post-processing analysis or forecast at a horizontal level or in a horizontal layer at a point in time
+71 71 Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time
+72 72 Post-processing average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval
+73 73 Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or n a horizontal layer, in a continuous or non-continuous time interval
+# 74-90 Reserved
+91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval 
+# 92-253 Reserved
+254 254 CCITT IA5 character string 
+# 255-999 Reserved 
+1000 1000 Cross-section of analysis and forecast at a point in time 
+1001 1001 Cross-section of averaged or otherwise statistically processed analysis or forecast over a range of time 
+1002 1002 Cross-section of analysis and forecast, averaged or otherwise statistically processed over latitude or longitude 
+# 1003-1099 Reserved 
+1100 1100 Hovmoller-type grid with no averaging or other statistical processing 
+1101 1101 Hovmoller-type grid with averaging or other statistical processing 
+50001 50001 Forecasting Systems with Variable Resolution in a point in time
+50011 50011 Forecasting Systems with Variable Resolution in a continous or non countinous time interval
+# 1102-32767 Reserved 
+# 32768-65534 Reserved for local use 
+40033 40033 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data
+40034 40034 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for simulated (synthetic) satellite data
+65535 65535 Missing 
diff --git a/definitions/grib2/tables/18/4.1.0.table b/definitions/grib2/tables/18/4.1.0.table
new file mode 100644
index 0000000..04cfd78
--- /dev/null
+++ b/definitions/grib2/tables/18/4.1.0.table
@@ -0,0 +1,27 @@
+# Code table 4.1 - Parameter category by product discipline
+0 0 Temperature 
+1 1 Moisture 
+2 2 Momentum 
+3 3 Mass 
+4 4 Short-wave radiation 
+5 5 Long-wave radiation 
+6 6 Cloud 
+7 7 Thermodynamic stability indices 
+8 8 Kinematic stability indices 
+9 9 Temperature probabilities 
+10 10 Moisture probabilities 
+11 11 Momentum probabilities 
+12 12 Mass probabilities 
+13 13 Aerosols 
+14 14 Trace gases (e.g. ozone, CO2) 
+15 15 Radar 
+16 16 Forecast radar imagery 
+17 17 Electrodynamics 
+18 18 Nuclear/radiology 
+19 19 Physical atmospheric properties 
+20 20 Atmospheric chemical constituents 
+# 21-189 Reserved 
+190 190 CCITT IA5 string 
+191 191 Miscellaneous 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.1.1.table b/definitions/grib2/tables/18/4.1.1.table
new file mode 100644
index 0000000..7b22b6f
--- /dev/null
+++ b/definitions/grib2/tables/18/4.1.1.table
@@ -0,0 +1,7 @@
+# Code table 4.1 - Parameter category by product discipline
+0 0 Hydrology basic products 
+1 1 Hydrology probabilities 
+2 2 Inland water and sediment properties 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.1.10.table b/definitions/grib2/tables/18/4.1.10.table
new file mode 100644
index 0000000..a9b20eb
--- /dev/null
+++ b/definitions/grib2/tables/18/4.1.10.table
@@ -0,0 +1,10 @@
+# Code table 4.1 - Parameter category by product discipline
+0 0 Waves 
+1 1 Currents 
+2 2 Ice 
+3 3 Surface properties 
+4 4 Subsurface properties 
+# 5-190 Reserved 
+191 191 Miscellaneous 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.1.192.table b/definitions/grib2/tables/18/4.1.192.table
new file mode 100644
index 0000000..c428aca
--- /dev/null
+++ b/definitions/grib2/tables/18/4.1.192.table
@@ -0,0 +1,4 @@
+#Discipline 192: ECMWF local parameters
+255 255 Missing
+
+
diff --git a/definitions/grib2/tables/18/4.1.2.table b/definitions/grib2/tables/18/4.1.2.table
new file mode 100644
index 0000000..5b488fe
--- /dev/null
+++ b/definitions/grib2/tables/18/4.1.2.table
@@ -0,0 +1,9 @@
+# Code table 4.1 - Parameter category by product discipline
+0 0 Vegetation/biomass 
+1 1 Agri-/aquacultural special products 
+2 2 Transportation-related products 
+3 3 Soil products 
+4 4 Fire weather products 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.1.3.table b/definitions/grib2/tables/18/4.1.3.table
new file mode 100644
index 0000000..7bf60d4
--- /dev/null
+++ b/definitions/grib2/tables/18/4.1.3.table
@@ -0,0 +1,11 @@
+# Code table 4.1 - Parameter category by product discipline
+0 0 Image format products 
+1 1 Quantitative products 
+2 2 Cloud properties 
+3 3 Flight rule conditions 
+4 4 Volcanic ash 
+5 5 Sea-surface temperature 
+6 6 Solar radiation 
+# 7-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.10.table b/definitions/grib2/tables/18/4.10.table
new file mode 100644
index 0000000..1a92baa
--- /dev/null
+++ b/definitions/grib2/tables/18/4.10.table
@@ -0,0 +1,16 @@
+# Code table 4.10 - Type of statistical processing
+0 avg Average 
+1 accum Accumulation 
+2 max Maximum 
+3 min Minimum 
+4 diff Difference (value at the end of time range minus value at the beginning) 
+5 rms Root mean square 
+6 sd Standard deviation 
+7 cov Covariance (temporal variance) 
+8 8 Difference (value at the start of time range minus value at the end) 
+9 ratio Ratio 
+10 10 Standardized anomaly 
+11 11 Summation 
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 missing Missing 
diff --git a/definitions/grib2/tables/18/4.11.table b/definitions/grib2/tables/18/4.11.table
new file mode 100644
index 0000000..7f404c8
--- /dev/null
+++ b/definitions/grib2/tables/18/4.11.table
@@ -0,0 +1,10 @@
+# Code table 4.11 - Type of time intervals
+0 0 Reserved 
+1 1 Successive times processed have same forecast time, start time of forecast is incremented 
+2 2 Successive times processed have same start time of forecast, forecast time is incremented 
+3 3 Successive times processed have start time of forecast incremented and forecast time decremented so that valid time remains constant 
+4 4 Successive times processed have start time of forecast decremented and forecast time incremented so that valid time remains constant 
+5 5 Floating subinterval of time between forecast time and end of overall time interval 
+# 6-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.12.table b/definitions/grib2/tables/18/4.12.table
new file mode 100644
index 0000000..03fd89b
--- /dev/null
+++ b/definitions/grib2/tables/18/4.12.table
@@ -0,0 +1,7 @@
+# Code table 4.12 - Operating mode
+0 0 Maintenance mode 
+1 1 Clear air 
+2 2 Precipitation 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.13.table b/definitions/grib2/tables/18/4.13.table
new file mode 100644
index 0000000..c92854e
--- /dev/null
+++ b/definitions/grib2/tables/18/4.13.table
@@ -0,0 +1,6 @@
+# Code table 4.13 - Quality control indicator
+0 0 No quality control applied 
+1 1 Quality control applied 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.14.table b/definitions/grib2/tables/18/4.14.table
new file mode 100644
index 0000000..a88cb93
--- /dev/null
+++ b/definitions/grib2/tables/18/4.14.table
@@ -0,0 +1,6 @@
+# Code table 4.14 - Clutter filter indicator
+0 0 No clutter filter used 
+1 1 Clutter filter used 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.15.table b/definitions/grib2/tables/18/4.15.table
new file mode 100644
index 0000000..2e5f3de
--- /dev/null
+++ b/definitions/grib2/tables/18/4.15.table
@@ -0,0 +1,11 @@
+# Code table 4.15 - Type of spatial processing used to arrive at given data value from the source data
+0 0 Data is calculated directly from the source grid with no interpolation 
+1 1 Bilinear interpolation using the 4 source grid grid-point values surrounding the nominal grid-point 
+2 2 Bicubic interpolation using the 4 source grid grid-point values surrounding the nominal grid-point 
+3 3 Using the value from the source grid grid-point which is nearest to the nominal grid-point 
+4 4 Budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point 
+5 5 Spectral interpolation using the 4 source grid grid-point values surrounding the nominal grid-point 
+6 6 Neighbor-budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point 
+# 7-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.192.table b/definitions/grib2/tables/18/4.192.table
new file mode 100644
index 0000000..e1fd915
--- /dev/null
+++ b/definitions/grib2/tables/18/4.192.table
@@ -0,0 +1,4 @@
+1 1 first
+2 2 second
+3 3 third
+4 4 fourth
diff --git a/definitions/grib2/tables/18/4.2.0.0.table b/definitions/grib2/tables/18/4.2.0.0.table
new file mode 100644
index 0000000..7201a86
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.0.table
@@ -0,0 +1,34 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Temperature (K)
+1 1 Virtual temperature (K)
+2 2 Potential temperature (K)
+3 3 Pseudo-adiabatic potential temperature or equivalent potential temperature (K)
+4 4 Maximum temperature (K)
+5 5 Minimum temperature (K)
+6 6 Dewpoint temperature (K)
+7 7 Dewpoint depression (or deficit) (K)
+8 8 Lapse rate (K/m)
+9 9 Temperature anomaly (K)
+10 10 Latent heat net flux (W m-2)
+11 11 Sensible heat net flux (W m-2)
+12 12 Heat index (K)
+13 13 Wind chill factor (K)
+14 14 Minimum dewpoint depression (K)
+15 15 Virtual potential temperature (K)
+16 16 Snow phase change heat flux (W m-2)
+17 17 Skin temperature (K)
+18 18 Snow temperature (top of snow) (K)
+19 19 Turbulent transfer coefficient for heat (Numeric)
+20 20 Turbulent diffusion coefficient for heat (m2/s)
+21 21 Apparent temperature (K)
+22 22 Temperature tendency due to short-wave radiation (K s-1)
+23 23 Temperature tendency due to long-wave radiation (K s-1)
+24 24 Temperature tendency due to short-wave radiation, clear sky (K s-1)
+25 25 Temperature tendency due to long-wave radiation, clear sky (K s-1)
+26 26 Temperature tendency due to parameterization (K s-1)
+27 27 Wet-bulb temperature (K)
+28 28 Unbalanced component of temperature (K)
+29 29 Temperature advection (K s-1)
+# 30-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.1.table b/definitions/grib2/tables/18/4.2.0.1.table
new file mode 100644
index 0000000..8f96bcd
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.1.table
@@ -0,0 +1,123 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Specific humidity (kg/kg)
+1 1 Relative humidity (%)
+2 2 Humidity mixing ratio (kg/kg)
+3 3 Precipitable water (kg m-2)
+4 4 Vapour pressure (Pa)
+5 5 Saturation deficit (Pa)
+6 6 Evaporation (kg m-2)
+7 7 Precipitation rate (kg m-2 s-1)
+8 8 Total precipitation (kg m-2)
+9 9 Large-scale precipitation (non-convective) (kg m-2)
+10 10 Convective precipitation (kg m-2)
+11 11 Snow depth (m)
+12 12 Snowfall rate water equivalent (kg m-2 s-1)
+13 13 Water equivalent of accumulated snow depth (kg m-2)
+14 14 Convective snow (kg m-2)
+15 15 Large-scale snow (kg m-2)
+16 16 Snow melt (kg m-2)
+17 17 Snow age (d)
+18 18 Absolute humidity (kg m-3)
+19 19 Precipitation type ((Code table 4.201))
+20 20 Integrated liquid water (kg m-2)
+21 21 Condensate (kg/kg)
+22 22 Cloud mixing ratio (kg/kg)
+23 23 Ice water mixing ratio (kg/kg)
+24 24 Rain mixing ratio (kg/kg)
+25 25 Snow mixing ratio (kg/kg)
+26 26 Horizontal moisture convergence (kg kg-1 s-1)
+27 27 Maximum relative humidity (%)
+28 28 Maximum absolute humidity (kg m-3)
+29 29 Total snowfall (m)
+30 30 Precipitable water category ((Code table 4.202))
+31 31 Hail (m)
+32 32 Graupel (snow pellets) (kg/kg)
+33 33 Categorical rain ((Code table 4.222))
+34 34 Categorical freezing rain ((Code table 4.222))
+35 35 Categorical ice pellets ((Code table 4.222))
+36 36 Categorical snow ((Code table 4.222))
+37 37 Convective precipitation rate (kg m-2 s-1)
+38 38 Horizontal moisture divergence (kg kg-1 s-1)
+39 39 Per cent frozen precipitation (%)
+40 40 Potential evaporation (kg m-2)
+41 41 Potential evaporation rate (W m-2)
+42 42 Snow cover (%)
+43 43 Rain fraction of total cloud water (Proportion)
+44 44 Rime factor (Numeric)
+45 45 Total column integrated rain (kg m-2)
+46 46 Total column integrated snow (kg m-2)
+47 47 Large scale water precipitation (non-convective) (kg m-2)
+48 48 Convective water precipitation (kg m-2)
+49 49 Total water precipitation (kg m-2)
+50 50 Total snow precipitation (kg m-2)
+51 51 Total column water (Vertically integrated total water (vapour + cloud water/ice)) (kg m-2)
+52 52 Total precipitation rate (kg m-2 s-1)
+53 53 Total snowfall rate water equivalent (kg m-2 s-1)
+54 54 Large scale precipitation rate (kg m-2 s-1)
+55 55 Convective snowfall rate water equivalent (kg m-2 s-1)
+56 56 Large scale snowfall rate water equivalent (kg m-2 s-1)
+57 57 Total snowfall rate (m/s)
+58 58 Convective snowfall rate (m/s)
+59 59 Large scale snowfall rate (m/s)
+60 60 Snow depth water equivalent (kg m-2)
+61 61 Snow density (kg m-3)
+62 62 Snow evaporation (kg m-2)
+63 63 Reserved 
+64 64 Total column integrated water vapour (kg m-2)
+65 65 Rain precipitation rate (kg m-2 s-1)
+66 66 Snow precipitation rate (kg m-2 s-1)
+67 67 Freezing rain precipitation rate (kg m-2 s-1)
+68 68 Ice pellets precipitation rate (kg m-2 s-1)
+69 69 Total column integrated cloud water (kg m-2)
+70 70 Total column integrated cloud ice (kg m-2)
+71 71 Hail mixing ratio (kg/kg)
+72 72 Total column integrated hail (kg m-2)
+73 73 Hail precipitation rate (kg m-2 s-1)
+74 74 Total column integrated graupel (kg m-2)
+75 75 Graupel (snow pellets) precipitation rate (kg m-2 s-1)
+76 76 Convective rain rate (kg m-2 s-1)
+77 77 Large scale rain rate (kg m-2 s-1)
+78 78 Total column integrated water (all components including precipitation) (kg m-2)
+79 79 Evaporation rate (kg m-2 s-1)
+80 80 Total condensate (kg/kg)
+81 81 Total column-integrated condensate (kg m-2)
+82 82 Cloud ice mixing-ratio (kg/kg)
+83 83 Specific cloud liquid water content (kg/kg)
+84 84 Specific cloud ice water content (kg/kg)
+85 85 Specific rainwater content (kg/kg)
+86 86 Specific snow water content (kg/kg)
+# 87-89 Reserved 
+90 90 Total kinematic moisture flux (kg kg-1 m s-1)
+91 91 u-component (zonal) kinematic moisture flux (kg kg-1 m s-1)
+92 92 v-component (meridional) kinematic moisture flux (kg kg-1 m s-1)
+93 93 Relative humidity with respect to water (%)
+94 94 Relative humidity with respect to ice (%)
+95 95 Freezing or frozen precipitation rate (kg m-2 s-1)
+96 96 Mass density of rain (kg m-3)
+97 97 Mass density of snow (kg m-3)
+98 98 Mass density of graupel (kg m-3)
+99 99 Mass density of hail (kg m-3)
+100 100 Specific number concentration of rain (kg-1)
+101 101 Specific number concentration of snow (kg-1)
+102 102 Specific number concentration of graupel (kg-1)
+103 103 Specific number concentration of hail (kg-1)
+104 104 Number density of rain (m-3)
+105 105 Number density of snow (m-3)
+106 106 Number density of graupel (m-3)
+107 107 Number density of hail (m-3)
+108 108 Specific humidity tendency due to parameterization (kg kg-1 s-1)
+109 109 Mass density of liquid water coating on hail expressed as mass of liquid water per unit volume of air (kg m-3)
+110 110 Specific mass of liquid water coating on hail expressed as mass of liquid water per unit mass of moist air (kg kg-1)
+111 111 Mass mixing ratio of liquid water coating on hail expressed as mass of liquid water per unit mass of dry air (kg kg-1)
+112 112 Mass density of liquid water coating on graupel expressed as mass of liquid water per unit volume of air (kg m-3)
+113 113 Specific mass of liquid water coating on graupel expressed as mass of liquid water per unit mass of moist air (kg kg-1)
+114 114 Mass mixing ratio of liquid water coating on graupel expressed as mass of liquid water per unit mass of dry air (kg kg-1)
+115 115 Mass density of liquid water coating on snow expressed as mass of liquid water per unit volume of air (kg m-3)
+116 116 Specific mass of liquid water coating on snow expressed as mass of liquid water per unit mass of moist air (kg kg-1)
+117 117 Mass mixing ratio of liquid water coating on snow expressed as mass of liquid water per unit mass of dry air (kg kg-1)
+118 118 Unbalanced component of specific humidity (kg kg-1)
+119 119 Unbalanced component of specific cloud liquid water content (kg kg-1)
+120 120 Unbalanced component of specific cloud ice water content (kg kg-1)
+# 121-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.13.table b/definitions/grib2/tables/18/4.2.0.13.table
new file mode 100644
index 0000000..e9feb09
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.13.table
@@ -0,0 +1,5 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Aerosol type ((Code table 4.205))
+# 1-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.14.table b/definitions/grib2/tables/18/4.2.0.14.table
new file mode 100644
index 0000000..2158847
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.14.table
@@ -0,0 +1,7 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Total ozone (DU)
+1 1 Ozone mixing ratio (kg/kg)
+2 2 Total column integrated ozone (DU)
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.15.table b/definitions/grib2/tables/18/4.2.0.15.table
new file mode 100644
index 0000000..dfbc4d1
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.15.table
@@ -0,0 +1,21 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Base spectrum width (m/s)
+1 1 Base reflectivity (dB)
+2 2 Base radial velocity (m/s)
+3 3 Vertically integrated liquid water (VIL) (kg m-2)
+4 4 Layer-maximum base reflectivity (dB)
+5 5 Precipitation (kg m-2)
+6 6 Radar spectra (1) (-)
+7 7 Radar spectra (2) (-)
+8 8 Radar spectra (3) (-)
+9 9 Reflectivity of cloud droplets (dB)
+10 10 Reflectivity of cloud ice (dB)
+11 11 Reflectivity of snow (dB)
+12 12 Reflectivity of rain (dB)
+13 13 Reflectivity of graupel (dB)
+14 14 Reflectivity of hail (dB)
+15 15 Hybrid scan reflectivity (dB)
+16 16 Hybrid scan reflectivity height (m)
+# 17-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.16.table b/definitions/grib2/tables/18/4.2.0.16.table
new file mode 100644
index 0000000..0c240a8
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.16.table
@@ -0,0 +1,10 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Equivalent radar reflectivity factor for rain (mm6 m-3)
+1 1 Equivalent radar reflectivity factor for snow (mm6 m-3)
+2 2 Equivalent radar reflectivity factor for parameterized convection (mm6 m-3)
+3 3 Echo top (m)
+4 4 Reflectivity (dB)
+5 5 Composite reflectivity (dB)
+# 6-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.17.table b/definitions/grib2/tables/18/4.2.0.17.table
new file mode 100644
index 0000000..a679963
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.17.table
@@ -0,0 +1,3 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Lightning strike density (m-2 s-1)
+1 1 Lightning potential index (LPI) (J kg-1)
diff --git a/definitions/grib2/tables/18/4.2.0.18.table b/definitions/grib2/tables/18/4.2.0.18.table
new file mode 100644
index 0000000..9d106f4
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.18.table
@@ -0,0 +1,23 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Air concentration of caesium 137 (Bq m-3)
+1 1 Air concentration of iodine 131 (Bq m-3)
+2 2 Air concentration of radioactive pollutant (Bq m-3)
+3 3 Ground deposition of caesium 137 (Bq m-2)
+4 4 Ground deposition of iodine 131 (Bq m-2)
+5 5 Ground deposition of radioactive pollutant (Bq m-2)
+6 6 Time-integrated air concentration of caesium pollutant (Bq s m-3)
+7 7 Time-integrated air concentration of iodine pollutant (Bq s m-3)
+8 8 Time-integrated air concentration of radioactive pollutant (Bq s m-3)
+9 9 Reserved 
+10 10 Air concentration (Bq m-3)
+11 11 Wet deposition (Bq m-2)
+12 12 Dry deposition (Bq m-2)
+13 13 Total deposition (wet + dry) (Bq m-2)
+14 14 Specific activity concentration (Bq kg-1)
+15 15 Maximum of air concentration in layer (Bq m-3)
+16 16 Height of maximum air concentration (m)
+17 17 Column-integrated air concentration (Bq m-2)
+18 18 Column-averaged air concentration in layer (Bq m-3)
+# 19-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.19.table b/definitions/grib2/tables/18/4.2.0.19.table
new file mode 100644
index 0000000..d2a4338
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.19.table
@@ -0,0 +1,36 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Visibility (m)
+1 1 Albedo (%)
+2 2 Thunderstorm probability (%)
+3 3 Mixed layer depth (m)
+4 4 Volcanic ash ((Code table 4.206))
+5 5 Icing top (m)
+6 6 Icing base (m)
+7 7 Icing ((Code table 4.207))
+8 8 Turbulence top (m)
+9 9 Turbulence base (m)
+10 10 Turbulence ((Code table 4.208))
+11 11 Turbulent kinetic energy (J/kg)
+12 12 Planetary boundary-layer regime ((Code table 4.209))
+13 13 Contrail intensity ((Code table 4.210))
+14 14 Contrail engine type ((Code table 4.211))
+15 15 Contrail top (m)
+16 16 Contrail base (m)
+17 17 Maximum snow albedo (%)
+18 18 Snow free albedo (%)
+19 19 Snow albedo (%)
+20 20 Icing (%)
+21 21 In-cloud turbulence (%)
+22 22 Clear air turbulence (CAT) (%)
+23 23 Supercooled large droplet probability (%)
+24 24 Convective turbulent kinetic energy (J/kg)
+25 25 Weather ((Code table 4.225))
+26 26 Convective outlook ((Code table 4.224))
+27 27 Icing scenario ((Code table 4.227))
+28 28 Mountain wave turbulence (eddy dissipation rate) (m2/3 s-1)
+29 29 Clear air turbulence (CAT) (m2/3 s-1)
+30 30 Eddy dissipation parameter (m2/3 s-1)
+31 31 Maximum of Eddy dissipation parameter in layer (m2/3 s-1)
+# 32-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.190.table b/definitions/grib2/tables/18/4.2.0.190.table
new file mode 100644
index 0000000..de621a9
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.190.table
@@ -0,0 +1,5 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Arbitrary text string (CCITT IA5)
+# 1-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.191.table b/definitions/grib2/tables/18/4.2.0.191.table
new file mode 100644
index 0000000..e3bba0e
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.191.table
@@ -0,0 +1,8 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Seconds prior to initial reference time (defined in Section 1) (s)
+1 1 Geographical latitude (deg N)
+2 2 Geographical longitude (deg E)
+3 3 Days since last observation (d)
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.2.table b/definitions/grib2/tables/18/4.2.0.2.table
new file mode 100644
index 0000000..5446262
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.2.table
@@ -0,0 +1,51 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Wind direction (from which blowing) (degree true)
+1 1 Wind speed (m/s)
+2 2 u-component of wind (m/s)
+3 3 v-component of wind (m/s)
+4 4 Stream function (m2/s)
+5 5 Velocity potential (m2/s)
+6 6 Montgomery stream function (m2 s-2)
+7 7 Sigma coordinate vertical velocity (/s)
+8 8 Vertical velocity (pressure) (Pa/s)
+9 9 Vertical velocity (geometric) (m/s)
+10 10 Absolute vorticity (/s)
+11 11 Absolute divergence (/s)
+12 12 Relative vorticity (/s)
+13 13 Relative divergence (/s)
+14 14 Potential vorticity (K m2 kg-1 s-1)
+15 15 Vertical u-component shear (/s)
+16 16 Vertical v-component shear (/s)
+17 17 Momentum flux, u-component (N m-2)
+18 18 Momentum flux, v-component (N m-2)
+19 19 Wind mixing energy (J)
+20 20 Boundary layer dissipation (W m-2)
+21 21 Maximum wind speed (m/s)
+22 22 Wind speed (gust) (m/s)
+23 23 u-component of wind (gust) (m/s)
+24 24 v-component of wind (gust) (m/s)
+25 25 Vertical speed shear (/s)
+26 26 Horizontal momentum flux (N m-2)
+27 27 u-component storm motion (m/s)
+28 28 v-component storm motion (m/s)
+29 29 Drag coefficient (Numeric)
+30 30 Frictional velocity (m/s)
+31 31 Turbulent diffusion coefficient for momentum (m2/s)
+32 32 Eta coordinate vertical velocity (/s)
+33 33 Wind fetch (m)
+34 34 Normal wind component (m/s)
+35 35 Tangential wind component (m/s)
+36 36 Amplitude function for Rossby wave envelope for meridional wind (m/s)
+37 37 Northward turbulent surface stress (N m-2 s)
+38 38 Eastward turbulent surface stress (N m-2 s)
+39 39 Eastward wind tendency due to parameterization (m s-2)
+40 40 Northward wind tendency due to parameterization (m s-2)
+41 41 u-component of geostrophic wind (m s-1)
+42 42 v-component of geostrophic wind (m s-1)
+43 43 Geostrophic wind direction (degree true)
+44 44 Geostrophic wind speed (m s-1)
+45 45 Unbalanced component of divergence (s-1)
+46 46 Vorticity advection (s-2)
+# 47-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.20.table b/definitions/grib2/tables/18/4.2.0.20.table
new file mode 100644
index 0000000..efc427a
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.20.table
@@ -0,0 +1,47 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Mass density (concentration) (kg m-3)
+1 1 Column-integrated mass density (kg m-2)
+2 2 Mass mixing ratio (mass fraction in air) (kg/kg)
+3 3 Atmosphere emission mass flux (kg m-2 s-1)
+4 4 Atmosphere net production mass flux (kg m-2 s-1)
+5 5 Atmosphere net production and emission mass flux (kg m-2 s-1)
+6 6 Surface dry deposition mass flux (kg m-2 s-1)
+7 7 Surface wet deposition mass flux (kg m-2 s-1)
+8 8 Atmosphere re-emission mass flux (kg m-2 s-1)
+9 9 Wet deposition by large-scale precipitation mass flux (kg m-2 s-1)
+10 10 Wet deposition by convective precipitation mass flux (kg m-2 s-1)
+11 11 Sedimentation mass flux (kg m-2 s-1)
+12 12 Dry deposition mass flux (kg m-2 s-1)
+13 13 Transfer from hydrophobic to hydrophilic (kg kg-1 s-1)
+14 14 Transfer from SO2 (sulphur dioxide) to SO4 (sulphate) (kg kg-1 s-1)
+# 15-49 Reserved 
+50 50 Amount in atmosphere (mol)
+51 51 Concentration in air (mol m-3)
+52 52 Volume mixing ratio (fraction in air) (mol/mol)
+53 53 Chemical gross production rate of concentration (mol m-3 s-1)
+54 54 Chemical gross destruction rate of concentration (mol m-3 s-1)
+55 55 Surface flux (mol m-2 s-1)
+56 56 Changes of amount in atmosphere (mol/s)
+57 57 Total yearly average burden of the atmosphere (mol)
+58 58 Total yearly averaged atmospheric loss (mol/s)
+59 59 Aerosol number concentration (m-3)
+60 60 Aerosol specific number concentration (kg-1)
+61 61 Maximum of mass density in layer (kg m-3)
+62 62 Height of maximum mass density (m)
+63 63 Column-averaged mass density in layer (kg m-3)
+# 64-99 Reserved 
+100 100 Surface area density (aerosol) (/m)
+101 101 Vertical visual range (m)
+102 102 Aerosol optical thickness (Numeric)
+103 103 Single scattering albedo (Numeric)
+104 104 Asymmetry factor (Numeric)
+105 105 Aerosol extinction coefficient (/m)
+106 106 Aerosol absorption coefficient (/m)
+107 107 Aerosol lidar backscatter from satellite (m-1 sr-1)
+108 108 Aerosol lidar backscatter from the ground (m-1 sr-1)
+109 109 Aerosol lidar extinction from satellite (/m)
+110 110 Aerosol lidar extinction from the ground (/m)
+111 111 Angstrom exponent (Numeric)
+# 112-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.3.table b/definitions/grib2/tables/18/4.2.0.3.table
new file mode 100644
index 0000000..34941dc
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.3.table
@@ -0,0 +1,36 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Pressure (Pa)
+1 1 Pressure reduced to MSL (Pa)
+2 2 Pressure tendency (Pa/s)
+3 3 ICAO Standard Atmosphere Reference Height (m)
+4 4 Geopotential (m2 s-2)
+5 5 Geopotential height (gpm)
+6 6 Geometric height (m)
+7 7 Standard deviation of height (m)
+8 8 Pressure anomaly (Pa)
+9 9 Geopotential height anomaly (gpm)
+10 10 Density (kg m-3)
+11 11 Altimeter setting (Pa)
+12 12 Thickness (m)
+13 13 Pressure altitude (m)
+14 14 Density altitude (m)
+15 15 5-wave geopotential height (gpm)
+16 16 Zonal flux of gravity wave stress (N m-2)
+17 17 Meridional flux of gravity wave stress (N m-2)
+18 18 Planetary boundary layer height (m)
+19 19 5-wave geopotential height anomaly (gpm)
+20 20 Standard deviation of sub-grid scale orography (m)
+21 21 Angle of sub-gridscale orography (rad)
+22 22 Slope of sub-gridscale orography (Numeric)
+23 23 Gravity wave dissipation (W m-2)
+24 24 Anisotropy of sub-gridscale orography (Numeric)
+25 25 Natural logarithm of pressure in Pa (Numeric)
+26 26 Exner pressure (Numeric)
+27 27 Updraught mass flux (kg m-2 s-1)
+28 28 Downdraught mass flux (kg m-2 s-1)
+29 29 Updraught detrainment rate (kg m-3 s-1)
+30 30 Downdraught detrainment rate (kg m-3 s-1)
+31 31 Unbalanced component of logarithm of surface pressure (-)
+# 32-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.4.table b/definitions/grib2/tables/18/4.2.0.4.table
new file mode 100644
index 0000000..0a5ded2
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.4.table
@@ -0,0 +1,24 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Net short-wave radiation flux (surface) (W m-2)
+1 1 Net short-wave radiation flux (top of atmosphere) (W m-2)
+2 2 Short-wave radiation flux (W m-2)
+3 3 Global radiation flux (W m-2)
+4 4 Brightness temperature (K)
+5 5 Radiance (with respect to wave number) (W m-1 sr-1)
+6 6 Radiance (with respect to wavelength) (W m-3 sr-1)
+7 7 Downward short-wave radiation flux (W m-2)
+8 8 Upward short-wave radiation flux (W m-2)
+9 9 Net short wave radiation flux (W m-2)
+10 10 Photosynthetically active radiation (W m-2)
+11 11 Net short-wave radiation flux, clear sky (W m-2)
+12 12 Downward UV radiation (W m-2)
+13 13 Direct short-wave radiation flux (W m-2)
+14 14 Diffuse short-wave radiation flux (W m-2)
+# 15-49 Reserved 
+50 50 UV index (under clear sky) (Numeric)
+51 51 UV index (Numeric)
+52 52 Downward short-wave radiation flux, clear sky (W m-2)
+53 53 Upward short-wave radiation flux, clear sky (W m-2)
+# 54-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.5.table b/definitions/grib2/tables/18/4.2.0.5.table
new file mode 100644
index 0000000..4550220
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.5.table
@@ -0,0 +1,13 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Net long-wave radiation flux (surface) (W m-2)
+1 1 Net long-wave radiation flux (top of atmosphere) (W m-2)
+2 2 Long-wave radiation flux (W m-2)
+3 3 Downward long-wave radiation flux (W m-2)
+4 4 Upward long-wave radiation flux (W m-2)
+5 5 Net long-wave radiation flux (W m-2)
+6 6 Net long-wave radiation flux, clear sky (W m-2)
+7 7 Brightness temperature (K)
+8 8 Downward long-wave radiation flux, clear sky (W m-2)
+# 9-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.6.table b/definitions/grib2/tables/18/4.2.0.6.table
new file mode 100644
index 0000000..1483d8c
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.6.table
@@ -0,0 +1,49 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Cloud ice (kg m-2)
+1 1 Total cloud cover (%)
+2 2 Convective cloud cover (%)
+3 3 Low cloud cover (%)
+4 4 Medium cloud cover (%)
+5 5 High cloud cover (%)
+6 6 Cloud water (kg m-2)
+7 7 Cloud amount (%)
+8 8 Cloud type ((Code table 4.203))
+9 9 Thunderstorm maximum tops (m)
+10 10 Thunderstorm coverage ((Code table 4.204))
+11 11 Cloud base (m)
+12 12 Cloud top (m)
+13 13 Ceiling (m)
+14 14 Non-convective cloud cover (%)
+15 15 Cloud work function (J/kg)
+16 16 Convective cloud efficiency (Proportion)
+17 17 Total condensate (kg/kg)
+18 18 Total column-integrated cloud water (kg m-2)
+19 19 Total column-integrated cloud ice (kg m-2)
+20 20 Total column-integrated condensate (kg m-2)
+21 21 Ice fraction of total condensate (Proportion)
+22 22 Cloud cover (%)
+23 23 Cloud ice mixing ratio (kg/kg)
+24 24 Sunshine (Numeric)
+25 25 Horizontal extent of cumulonimbus (CB) (%)
+26 26 Height of convective cloud base (m)
+27 27 Height of convective cloud top (m)
+28 28 Number of cloud droplets per unit mass of air (/kg)
+29 29 Number of cloud ice particles per unit mass of air (/kg)
+30 30 Number density of cloud droplets (m-3)
+31 31 Number density of cloud ice particles (m-3)
+32 32 Fraction of cloud cover (Numeric)
+33 33 Sunshine duration (s)
+34 34 Surface long-wave effective total cloudiness (Numeric)
+35 35 Surface short-wave effective total cloudiness (Numeric)
+36 36 Fraction of stratiform precipitation cover (Proportion)
+37 37 Fraction of convective precipitation cover (Proportion)
+38 38 Mass density of cloud droplets (kg m-3)
+39 39 Mass density of cloud ice (kg m-3)
+40 40 Mass density of convective cloud water droplets (kg m-3)
+# 41-46 Reserved 
+47 47 Volume fraction of cloud water droplets (Numeric)
+48 48 Volume fraction of cloud ice particles (Numeric)
+49 49 Volume fraction of cloud (ice and/or water) (Numeric)
+# 50-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.0.7.table b/definitions/grib2/tables/18/4.2.0.7.table
new file mode 100644
index 0000000..6d0d87a
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.0.7.table
@@ -0,0 +1,23 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Parcel lifted index (to 500 hPa) (K)
+1 1 Best lifted index (to 500 hPa) (K)
+2 2 K index (K)
+3 3 KO index (K)
+4 4 Total totals index (K)
+5 5 Sweat index (Numeric)
+6 6 Convective available potential energy (J/kg)
+7 7 Convective inhibition (J/kg)
+8 8 Storm relative helicity (J/kg)
+9 9 Energy helicity index (Numeric)
+10 10 Surface lifted index (K)
+11 11 Best (4-layer) lifted index (K)
+12 12 Richardson number (Numeric)
+13 13 Showalter index (K)
+14 14 Reserved 
+15 15 Updraught helicity (m2 s-2)
+16 16 Bulk Richardson number (Numeric)
+17 17 Gradient Richardson number (Numeric)
+18 18 Flux Richardson number (Numeric)
+# 19-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.1.0.table b/definitions/grib2/tables/18/4.2.1.0.table
new file mode 100644
index 0000000..e906af7
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.1.0.table
@@ -0,0 +1,21 @@
+# 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))
+4 4 Snow water equivalent per cent of normal (%)
+5 5 Baseflow-groundwater runoff (kg m-2)
+6 6 Storm surface runoff (kg m-2)
+7 7 Discharge from rivers or streams (m3/s)
+8 8 Groundwater upper storage (kg m-2)
+9 9 Groundwater lower storage (kg m-2)
+10 10 Side flow into river channel (m3 s-1 m-1)
+11 11 River storage of water (m3)
+12 12 Floodplain storage of water (m3)
+13 13 Depth of water on soil surface (kg m-2)
+14 14 Upstream accumulated precipitation (kg m-2)
+15 15 Upstream accumulated snow melt (kg m-2)
+16 16 Percolation rate (kg m-2 s-1)
+# 17-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.1.1.table b/definitions/grib2/tables/18/4.2.1.1.table
new file mode 100644
index 0000000..b488eb0
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.1.1.table
@@ -0,0 +1,7 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Conditional per cent precipitation amount fractile for an overall period (Encoded as an accumulation) (kg m-2)
+1 1 Per cent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over the sub-period) (%)
+2 2 Probability of 0.01 inch of precipitation (POP) (%)
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.1.2.table b/definitions/grib2/tables/18/4.2.1.2.table
new file mode 100644
index 0000000..ec9b11d
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.1.2.table
@@ -0,0 +1,15 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Water depth (m)
+1 1 Water temperature (K)
+2 2 Water fraction (Proportion)
+3 3 Sediment thickness (m)
+4 4 Sediment temperature (K)
+5 5 Ice thickness (m)
+6 6 Ice temperature (K)
+7 7 Ice cover (Proportion)
+8 8 Land cover (0 = water, 1 = land) (Proportion)
+9 9 Shape factor with respect to salinity profile (-)
+10 10 Shape factor with respect to temperature profile in thermocline (-)
+11 11 Attenuation coefficient of water with respect to solar radiation (/m)
+12 12 Salinity (kg/kg)
+13 13 Cross-sectional area of flow in channel (m2)
diff --git a/definitions/grib2/tables/18/4.2.10.0.table b/definitions/grib2/tables/18/4.2.10.0.table
new file mode 100644
index 0000000..095f51b
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.10.0.table
@@ -0,0 +1,50 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Wave spectra (1) (-)
+1 1 Wave spectra (2) (-)
+2 2 Wave spectra (3) (-)
+3 3 Significant height of combined wind waves and swell (m)
+4 4 Direction of wind waves (degree true)
+5 5 Significant height of wind waves (m)
+6 6 Mean period of wind waves (s)
+7 7 Direction of swell waves (degree true)
+8 8 Significant height of swell waves (m)
+9 9 Mean period of swell waves (s)
+10 10 Primary wave direction (degree true)
+11 11 Primary wave mean period (s)
+12 12 Secondary wave direction (degree true)
+13 13 Secondary wave mean period (s)
+14 14 Direction of combined wind waves and swell (degree true)
+15 15 Mean period of combined wind waves and swell (s)
+16 16 Coefficient of drag with waves (-)
+17 17 Friction velocity (m/s)
+18 18 Wave stress (N m-2)
+19 19 Normalized wave stress (-)
+20 20 Mean square slope of waves (-)
+21 21 u-component surface Stokes drift (m/s)
+22 22 v-component surface Stokes drift (m/s)
+23 23 Period of maximum individual wave height (s)
+24 24 Maximum individual wave height (m)
+25 25 Inverse mean wave frequency (s)
+26 26 Inverse mean frequency of wind waves (s)
+27 27 Inverse mean frequency of total swell (s)
+28 28 Mean zero-crossing wave period (s)
+29 29 Mean zero-crossing period of wind waves (s)
+30 30 Mean zero-crossing period of total swell (s)
+31 31 Wave directional width (-)
+32 32 Directional width of wind waves (-)
+33 33 Directional width of total swell (-)
+34 34 Peak wave period (s)
+35 35 Peak period of wind waves (s)
+36 36 Peak period of total swell (s)
+37 37 Altimeter wave height (m)
+38 38 Altimeter corrected wave height (m)
+39 39 Altimeter range relative correction (-)
+40 40 10-metre neutral wind speed over waves (m/s)
+41 41 10-metre wind direction over waves (deg)
+42 42 Wave energy spectrum (m2 s rad-1)
+43 43 Kurtosis of the sea-surface elevation due to waves (-)
+44 44 Benjamin-Feir index (-)
+45 45 Spectral peakedness factor (/s)
+# 46-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.10.1.table b/definitions/grib2/tables/18/4.2.10.1.table
new file mode 100644
index 0000000..5959bfa
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.10.1.table
@@ -0,0 +1,8 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Current direction (degree true)
+1 1 Current speed (m/s)
+2 2 u-component of current (m/s)
+3 3 v-component of current (m/s)
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.10.191.table b/definitions/grib2/tables/18/4.2.10.191.table
new file mode 100644
index 0000000..524929e
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.10.191.table
@@ -0,0 +1,8 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Seconds prior to initial reference time (defined in Section 1) (s)
+1 1 Meridional overturning stream function (m3/s)
+2 2 Reserved 
+3 3 Days since last observation (d)
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.10.2.table b/definitions/grib2/tables/18/4.2.10.2.table
new file mode 100644
index 0000000..6797062
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.10.2.table
@@ -0,0 +1,17 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Ice cover (Proportion)
+1 1 Ice thickness (m)
+2 2 Direction of ice drift (degree true)
+3 3 Speed of ice drift (m/s)
+4 4 u-component of ice drift (m/s)
+5 5 v-component of ice drift (m/s)
+6 6 Ice growth rate (m/s)
+7 7 Ice divergence (/s)
+8 8 Ice temperature (K)
+9 9 Module of ice internal pressure (Pa m)
+10 10 Zonal vector component of vertically integrated ice internal pressure (Pa m)
+11 11 Meridional vector component of vertically integrated ice internal pressure (Pa m)
+12 12 Compressive ice strength (N/m)
+# 13-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.10.3.table b/definitions/grib2/tables/18/4.2.10.3.table
new file mode 100644
index 0000000..de7afd6
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.10.3.table
@@ -0,0 +1,7 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Water temperature (K)
+1 1 Deviation of sea level from mean (m)
+2 2 Heat exchange coefficient (-)
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.10.4.table b/definitions/grib2/tables/18/4.2.10.4.table
new file mode 100644
index 0000000..54774f1
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.10.4.table
@@ -0,0 +1,18 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Main thermocline depth (m)
+1 1 Main thermocline anomaly (m)
+2 2 Transient thermocline depth (m)
+3 3 Salinity (kg/kg)
+4 4 Ocean vertical heat diffusivity (m2/s)
+5 5 Ocean vertical salt diffusivity (m2/s)
+6 6 Ocean vertical momentum diffusivity (m2/s)
+7 7 Bathymetry (m)
+# 8-10 Reserved 
+11 11 Shape factor with respect to salinity profile (-)
+12 12 Shape factor with respect to temperature profile in thermocline (-)
+13 13 Attenuation coefficient of water with respect to solar radiation (/m)
+14 14 Water depth (m)
+15 15 Water temperature (K)
+# 16-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.2.0.table b/definitions/grib2/tables/18/4.2.2.0.table
new file mode 100644
index 0000000..f11616d
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.2.0.table
@@ -0,0 +1,43 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Land cover (0 = sea, 1 = land) (Proportion)
+1 1 Surface roughness (m)
+2 2 Soil temperature (K)
+3 3 Soil moisture content (kg m-2)
+4 4 Vegetation (%)
+5 5 Water runoff (kg m-2)
+6 6 Evapotranspiration (kg-2 s-1)
+7 7 Model terrain height (m)
+8 8 Land use ((Code table 4.212))
+9 9 Volumetric soil moisture content (Proportion)
+10 10 Ground heat flux (W m-2)
+11 11 Moisture availability (%)
+12 12 Exchange coefficient (kg m-2 s-1)
+13 13 Plant canopy surface water (kg m-2)
+14 14 Blackadar's mixing length scale (m)
+15 15 Canopy conductance (m/s)
+16 16 Minimal stomatal resistance (s/m)
+17 17 Wilting point (Proportion)
+18 18 Solar parameter in canopy conductance (Proportion)
+19 19 Temperature parameter in canopy (Proportion)
+20 20 Humidity parameter in canopy conductance (Proportion)
+21 21 Soil moisture parameter in canopy conductance (Proportion)
+22 22 Soil moisture (kg m-3)
+23 23 Column-integrated soil water (kg m-2)
+24 24 Heat flux (W m-2)
+25 25 Volumetric soil moisture (m3 m-3)
+26 26 Wilting point (kg m-3)
+27 27 Volumetric wilting point (m3 m-3)
+28 28 Leaf area index (Numeric)
+29 29 Evergreen forest cover (Proportion)
+30 30 Deciduous forest cover (Proportion)
+31 31 Normalized differential vegetation index (NDVI) (Numeric)
+32 32 Root depth of vegetation (m)
+33 33 Water runoff and drainage (kg m-2)
+34 34 Surface water runoff (kg m-2)
+35 35 Tile class (Code table 4.243)
+36 36 Tile fraction (Proportion)
+37 37 Tile percentage (%)
+38 38 Soil volumetric ice content (water equivalent) (m3 m-3)
+# 39-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.2.3.table b/definitions/grib2/tables/18/4.2.2.3.table
new file mode 100644
index 0000000..447e4f9
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.2.3.table
@@ -0,0 +1,32 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Soil type ((Code table 4.213))
+1 1 Upper layer soil temperature (K)
+2 2 Upper layer soil moisture (kg m-3)
+3 3 Lower layer soil moisture (kg m-3)
+4 4 Bottom layer soil temperature (K)
+5 5 Liquid volumetric soil moisture (non-frozen) (Proportion)
+6 6 Number of soil layers in root zone (Numeric)
+7 7 Transpiration stress-onset (soil moisture) (Proportion)
+8 8 Direct evaporation cease (soil moisture) (Proportion)
+9 9 Soil porosity (Proportion)
+10 10 Liquid volumetric soil moisture (non-frozen) (m3 m-3)
+11 11 Volumetric transpiration stress-onset (soil moisture) (m3 m-3)
+12 12 Transpiration stress-onset (soil moisture) (kg m-3)
+13 13 Volumetric direct evaporation cease (soil moisture) (m3 m-3)
+14 14 Direct evaporation cease (soil moisture) (kg m-3)
+15 15 Soil porosity (m3 m-3)
+16 16 Volumetric saturation of soil moisture (m3 m-3)
+17 17 Saturation of soil moisture (kg m-3)
+18 18 Soil temperature (K)
+19 19 Soil moisture (kg m-3)
+20 20 Column-integrated soil moisture (kg m-2)
+21 21 Soil ice (kg m-3)
+22 22 Column-integrated soil ice (kg m-2)
+23 23 Liquid water in snow pack (kg m-2)
+24 24 Frost index (K day-1)
+25 25 Snow depth at elevation bands (kg m-2)
+26 26 Soil heat flux (W m-2)
+27 27 Soil depth (m)
+# 28-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.2.4.table b/definitions/grib2/tables/18/4.2.2.4.table
new file mode 100644
index 0000000..bb54fac
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.2.4.table
@@ -0,0 +1,16 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Fire outlook (Code table 4.224)
+1 1 Fire outlook due to dry thunderstorm (Code table 4.224)
+2 2 Haines index (Numeric)
+3 3 Fire burned area (%)
+4 4 Fosberg index (Numeric)
+5 5 Forest Fire Weather Index (Canadian Forest Service) (Numeric)
+6 6 Fine Fuel Moisture Code (Canadian Forest Service) (Numeric)
+7 7 Duff Moisture Code (Canadian Forest Service) (Numeric)
+8 8 Drought Code (Canadian Forest Service) (Numeric)
+9 9 Initial Fire Spread Index (Canadian Forest Service) (Numeric)
+10 10 Fire Buildup Index (Canadian Forest Service) (Numeric)
+11 11 Fire Daily Severity Rating (Canadian Forest Service) (Numeric)
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.2.5.table b/definitions/grib2/tables/18/4.2.2.5.table
new file mode 100644
index 0000000..10fb689
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.2.5.table
@@ -0,0 +1,2 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+1 1 Glacier temperature (K)
diff --git a/definitions/grib2/tables/18/4.2.3.0.table b/definitions/grib2/tables/18/4.2.3.0.table
new file mode 100644
index 0000000..c0ffa29
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.3.0.table
@@ -0,0 +1,14 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Scaled radiance (Numeric)
+1 1 Scaled albedo (Numeric)
+2 2 Scaled brightness temperature (Numeric)
+3 3 Scaled precipitable water (Numeric)
+4 4 Scaled lifted index (Numeric)
+5 5 Scaled cloud top pressure (Numeric)
+6 6 Scaled skin temperature (Numeric)
+7 7 Cloud mask (Code table 4.217)
+8 8 Pixel scene type (Code table 4.218)
+9 9 Fire detection indicator (Code table 4.223)
+# 10-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.3.1.table b/definitions/grib2/tables/18/4.2.3.1.table
new file mode 100644
index 0000000..8e0793f
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.3.1.table
@@ -0,0 +1,32 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Estimated precipitation (kg m-2)
+1 1 Instantaneous rain rate (kg m-2 s-1)
+2 2 Cloud top height (m)
+3 3 Cloud top height quality indicator (Code table 4.219)
+4 4 Estimated u-component of wind (m/s)
+5 5 Estimated v-component of wind (m/s)
+6 6 Number of pixel used (Numeric)
+7 7 Solar zenith angle (deg)
+8 8 Relative azimuth angle (deg)
+9 9 Reflectance in 0.6 micron channel (%)
+10 10 Reflectance in 0.8 micron channel (%)
+11 11 Reflectance in 1.6 micron channel (%)
+12 12 Reflectance in 3.9 micron channel (%)
+13 13 Atmospheric divergence (/s)
+14 14 Cloudy brightness temperature (K)
+15 15 Clear-sky brightness temperature (K)
+16 16 Cloudy radiance (with respect to wave number) (W m-1 sr-1)
+17 17 Clear-sky radiance (with respect to wave number) (W m-1 sr-1)
+18 18 Reserved 
+19 19 Wind speed (m/s)
+20 20 Aerosol optical thickness at 0.635 um
+21 21 Aerosol optical thickness at 0.810 um
+22 22 Aerosol optical thickness at 1.640 um
+23 23 Angstrom coefficient 
+# 24-26 Reserved 
+27 27 Bidirectional reflectance factor (Numeric)
+28 28 Brightness temperature (K)
+29 29 Scaled radiance (Numeric)
+# 30-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.2.3.2.table b/definitions/grib2/tables/18/4.2.3.2.table
new file mode 100644
index 0000000..191f352
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.3.2.table
@@ -0,0 +1,13 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Clear sky probability (%)
+1 1 Cloud top temperature (K)
+2 2 Cloud top pressure (Pa)
+3 3 Cloud type (Code table 4.218)
+4 4 Cloud phase (Code table 4.218)
+5 5 Cloud optical depth (Numeric)
+6 6 Cloud particle effective radius (m)
+7 7 Cloud liquid water path (kg m-2)
+8 8 Cloud ice water path (kg m-2)
+9 9 Cloud albedo (Numeric)
+10 10 Cloud emissivity (Numeric)
+11 11 Effective absorption optical depth ratio (Numeric)
diff --git a/definitions/grib2/tables/18/4.2.3.3.table b/definitions/grib2/tables/18/4.2.3.3.table
new file mode 100644
index 0000000..cb5c4b6
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.3.3.table
@@ -0,0 +1,4 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Probability of encountering marginal visual flight rule conditions (%)
+1 1 Probability of encountering low instrument flight rule conditions (%)
+2 2 Probability of encountering instrument flight rule conditions (%)
diff --git a/definitions/grib2/tables/18/4.2.3.4.table b/definitions/grib2/tables/18/4.2.3.4.table
new file mode 100644
index 0000000..f86d2d6
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.3.4.table
@@ -0,0 +1,10 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Volcanic ash probability (%)
+1 1 Volcanic ash cloud top temperature (K)
+2 2 Volcanic ash cloud top pressure (Pa)
+3 3 Volcanic ash cloud top height (m)
+4 4 Volcanic ash cloud emissivity (Numeric)
+5 5 Volcanic ash effective absorption optical depth ratio (Numeric)
+6 6 Volcanic ash cloud optical depth (Numeric)
+7 7 Volcanic ash column density (kg m-2)
+8 8 Volcanic ash particle effective radius (m)
diff --git a/definitions/grib2/tables/18/4.2.3.5.table b/definitions/grib2/tables/18/4.2.3.5.table
new file mode 100644
index 0000000..92a050d
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.3.5.table
@@ -0,0 +1,7 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Interface sea-surface temperature (K)
+1 1 Skin sea-surface temperature (K)
+2 2 Sub-skin sea-surface temperature (K)
+3 3 Foundation sea-surface temperature (K)
+4 4 Estimated bias between sea-surface temperature and standard (K)
+5 5 Estimated standard deviation between sea surface temperature and standard (K)
diff --git a/definitions/grib2/tables/18/4.2.3.6.table b/definitions/grib2/tables/18/4.2.3.6.table
new file mode 100644
index 0000000..471beed
--- /dev/null
+++ b/definitions/grib2/tables/18/4.2.3.6.table
@@ -0,0 +1,7 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Global solar irradiance (W m-2)
+1 1 Global solar exposure (J m-2)
+2 2 Direct solar irradiance (W m-2)
+3 3 Direct solar exposure (J m-2)
+4 4 Diffuse solar irradiance (W m-2)
+5 5 Diffuse solar exposure (J m-2)
diff --git a/definitions/grib2/tables/18/4.201.table b/definitions/grib2/tables/18/4.201.table
new file mode 100644
index 0000000..47f1b48
--- /dev/null
+++ b/definitions/grib2/tables/18/4.201.table
@@ -0,0 +1,15 @@
+# Code table 4.201 - Precipitation type
+0 0 Reserved 
+1 1 Rain 
+2 2 Thunderstorm 
+3 3 Freezing rain 
+4 4 Mixed/ice 
+5 5 Snow 
+6 6 Wet snow 
+7 7 Mixture of rain and snow 
+8 8 Ice pellets 
+9 9 Graupel 
+10 10 Hail 
+# 11-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.202.table b/definitions/grib2/tables/18/4.202.table
new file mode 100644
index 0000000..438502f
--- /dev/null
+++ b/definitions/grib2/tables/18/4.202.table
@@ -0,0 +1,4 @@
+# Code table 4.202 - Precipitable water category
+# 0-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.203.table b/definitions/grib2/tables/18/4.203.table
new file mode 100644
index 0000000..8a9aedf
--- /dev/null
+++ b/definitions/grib2/tables/18/4.203.table
@@ -0,0 +1,26 @@
+# Code table 4.203 - Cloud type
+0 0 Clear 
+1 1 Cumulonimbus 
+2 2 Stratus 
+3 3 Stratocumulus 
+4 4 Cumulus 
+5 5 Altostratus 
+6 6 Nimbostratus 
+7 7 Altocumulus 
+8 8 Cirrostratus 
+9 9 Cirrocumulus 
+10 10 Cirrus 
+11 11 Cumulonimbus - ground-based fog beneath the lowest layer 
+12 12 Stratus - ground-based fog beneath the lowest layer 
+13 13 Stratocumulus - ground-based fog beneath the lowest layer 
+14 14 Cumulus - ground-based fog beneath the lowest layer 
+15 15 Altostratus - ground-based fog beneath the lowest layer 
+16 16 Nimbostratus - ground-based fog beneath the lowest layer 
+17 17 Altocumulus - ground-based fog beneath the lowest layer 
+18 18 Cirrostratus - ground-based fog beneath the lowest layer 
+19 19 Cirrocumulus - ground-based fog beneath the lowest layer 
+20 20 Cirrus - ground-based fog beneath the lowest layer 
+# 21-190 Reserved 
+191 191 Unknown 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.204.table b/definitions/grib2/tables/18/4.204.table
new file mode 100644
index 0000000..4813729
--- /dev/null
+++ b/definitions/grib2/tables/18/4.204.table
@@ -0,0 +1,9 @@
+# Code table 4.204 - Thunderstorm coverage
+0 0 None 
+1 1 Isolated (1-2%) 
+2 2 Few (3-5%) 
+3 3 Scattered (6-45%) 
+4 4 Numerous (> 45%) 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.205.table b/definitions/grib2/tables/18/4.205.table
new file mode 100644
index 0000000..5b4484d
--- /dev/null
+++ b/definitions/grib2/tables/18/4.205.table
@@ -0,0 +1,6 @@
+# Code table 4.205 - Presence of aerosol
+0 0 Aerosol not present 
+1 1 Aerosol present 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.206.table b/definitions/grib2/tables/18/4.206.table
new file mode 100644
index 0000000..02c3dfd
--- /dev/null
+++ b/definitions/grib2/tables/18/4.206.table
@@ -0,0 +1,6 @@
+# Code table 4.206 - Volcanic ash
+0 0 Not present 
+1 1 Present 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.207.table b/definitions/grib2/tables/18/4.207.table
new file mode 100644
index 0000000..8ddb2e0
--- /dev/null
+++ b/definitions/grib2/tables/18/4.207.table
@@ -0,0 +1,10 @@
+# Code table 4.207 - Icing
+0 0 None 
+1 1 Light 
+2 2 Moderate 
+3 3 Severe 
+4 4 Trace 
+5 5 Heavy 
+# 6-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.208.table b/definitions/grib2/tables/18/4.208.table
new file mode 100644
index 0000000..b83685a
--- /dev/null
+++ b/definitions/grib2/tables/18/4.208.table
@@ -0,0 +1,9 @@
+# Code table 4.208 - Turbulence
+0 0 None (smooth) 
+1 1 Light 
+2 2 Moderate 
+3 3 Severe 
+4 4 Extreme 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.209.table b/definitions/grib2/tables/18/4.209.table
new file mode 100644
index 0000000..cb76170
--- /dev/null
+++ b/definitions/grib2/tables/18/4.209.table
@@ -0,0 +1,9 @@
+# Code table 4.209 - Planetary boundary-layer regime
+0 0 Reserved 
+1 1 Stable 
+2 2 Mechanically driven turbulence 
+3 3 Forced convection 
+4 4 Free convection 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.210.table b/definitions/grib2/tables/18/4.210.table
new file mode 100644
index 0000000..524a6ca
--- /dev/null
+++ b/definitions/grib2/tables/18/4.210.table
@@ -0,0 +1,6 @@
+# Code table 4.210 - Contrail intensity
+0 0 Contrail not present 
+1 1 Contrail present 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.211.table b/definitions/grib2/tables/18/4.211.table
new file mode 100644
index 0000000..098eb2d
--- /dev/null
+++ b/definitions/grib2/tables/18/4.211.table
@@ -0,0 +1,7 @@
+# Code table 4.211 - Contrail engine type
+0 0 Low bypass 
+1 1 High bypass 
+2 2 Non-bypass 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.212.table b/definitions/grib2/tables/18/4.212.table
new file mode 100644
index 0000000..1a085b8
--- /dev/null
+++ b/definitions/grib2/tables/18/4.212.table
@@ -0,0 +1,18 @@
+# Code table 4.212 - Land use
+0 0 Reserved 
+1 1 Urban land 
+2 2 Agriculture 
+3 3 Range land 
+4 4 Deciduous forest 
+5 5 Coniferous forest 
+6 6 Forest/wetland 
+7 7 Water 
+8 8 Wetlands 
+9 9 Desert 
+10 10 Tundra 
+11 11 Ice 
+12 12 Tropical forest 
+13 13 Savannah 
+# 14-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.213.table b/definitions/grib2/tables/18/4.213.table
new file mode 100644
index 0000000..c65784a
--- /dev/null
+++ b/definitions/grib2/tables/18/4.213.table
@@ -0,0 +1,16 @@
+# Code table 4.213 - Soil type
+0 0 Reserved 
+1 1 Sand 
+2 2 Loamy sand 
+3 3 Sandy loam 
+4 4 Silt loam 
+5 5 Organic (redefined) 
+6 6 Sandy clay loam 
+7 7 Silt clay loam 
+8 8 Clay loam 
+9 9 Sandy clay 
+10 10 Silty clay 
+11 11 Clay 
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.215.table b/definitions/grib2/tables/18/4.215.table
new file mode 100644
index 0000000..034db72
--- /dev/null
+++ b/definitions/grib2/tables/18/4.215.table
@@ -0,0 +1,9 @@
+# Code table 4.215 - Remotely sensed snow coverage
+# 0-49 Reserved 
+50 50 No-snow/no-cloud 
+# 51-99 Reserved 
+100 100 Clouds 
+# 101-249 Reserved 
+250 250 Snow 
+# 251-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.216.table b/definitions/grib2/tables/18/4.216.table
new file mode 100644
index 0000000..fd785ef
--- /dev/null
+++ b/definitions/grib2/tables/18/4.216.table
@@ -0,0 +1,96 @@
+# Code table 4.216 - Elevation of snow-covered terrain
+# 0-90 Elevation in increments of 100 m 
+0 0  Elevation in increments of 100 m
+1 1  Elevation in increments of 100 m
+2 2  Elevation in increments of 100 m
+3 3  Elevation in increments of 100 m
+4 4  Elevation in increments of 100 m
+5 5  Elevation in increments of 100 m
+6 6  Elevation in increments of 100 m
+7 7  Elevation in increments of 100 m
+8 8  Elevation in increments of 100 m
+9 9  Elevation in increments of 100 m
+10 10  Elevation in increments of 100 m
+11 11  Elevation in increments of 100 m
+12 12  Elevation in increments of 100 m
+13 13  Elevation in increments of 100 m
+14 14  Elevation in increments of 100 m
+15 15  Elevation in increments of 100 m
+16 16  Elevation in increments of 100 m
+17 17  Elevation in increments of 100 m
+18 18  Elevation in increments of 100 m
+19 19  Elevation in increments of 100 m
+20 20  Elevation in increments of 100 m
+21 21  Elevation in increments of 100 m
+22 22  Elevation in increments of 100 m
+23 23  Elevation in increments of 100 m
+24 24  Elevation in increments of 100 m
+25 25  Elevation in increments of 100 m
+26 26  Elevation in increments of 100 m
+27 27  Elevation in increments of 100 m
+28 28  Elevation in increments of 100 m
+29 29  Elevation in increments of 100 m
+30 30  Elevation in increments of 100 m
+31 31  Elevation in increments of 100 m
+32 32  Elevation in increments of 100 m
+33 33  Elevation in increments of 100 m
+34 34  Elevation in increments of 100 m
+35 35  Elevation in increments of 100 m
+36 36  Elevation in increments of 100 m
+37 37  Elevation in increments of 100 m
+38 38  Elevation in increments of 100 m
+39 39  Elevation in increments of 100 m
+40 40  Elevation in increments of 100 m
+41 41  Elevation in increments of 100 m
+42 42  Elevation in increments of 100 m
+43 43  Elevation in increments of 100 m
+44 44  Elevation in increments of 100 m
+45 45  Elevation in increments of 100 m
+46 46  Elevation in increments of 100 m
+47 47  Elevation in increments of 100 m
+48 48  Elevation in increments of 100 m
+49 49  Elevation in increments of 100 m
+50 50  Elevation in increments of 100 m
+51 51  Elevation in increments of 100 m
+52 52  Elevation in increments of 100 m
+53 53  Elevation in increments of 100 m
+54 54  Elevation in increments of 100 m
+55 55  Elevation in increments of 100 m
+56 56  Elevation in increments of 100 m
+57 57  Elevation in increments of 100 m
+58 58  Elevation in increments of 100 m
+59 59  Elevation in increments of 100 m
+60 60  Elevation in increments of 100 m
+61 61  Elevation in increments of 100 m
+62 62  Elevation in increments of 100 m
+63 63  Elevation in increments of 100 m
+64 64  Elevation in increments of 100 m
+65 65  Elevation in increments of 100 m
+66 66  Elevation in increments of 100 m
+67 67  Elevation in increments of 100 m
+68 68  Elevation in increments of 100 m
+69 69  Elevation in increments of 100 m
+70 70  Elevation in increments of 100 m
+71 71  Elevation in increments of 100 m
+72 72  Elevation in increments of 100 m
+73 73  Elevation in increments of 100 m
+74 74  Elevation in increments of 100 m
+75 75  Elevation in increments of 100 m
+76 76  Elevation in increments of 100 m
+77 77  Elevation in increments of 100 m
+78 78  Elevation in increments of 100 m
+79 79  Elevation in increments of 100 m
+80 80  Elevation in increments of 100 m
+81 81  Elevation in increments of 100 m
+82 82  Elevation in increments of 100 m
+83 83  Elevation in increments of 100 m
+84 84  Elevation in increments of 100 m
+85 85  Elevation in increments of 100 m
+86 86  Elevation in increments of 100 m
+87 87  Elevation in increments of 100 m
+88 88  Elevation in increments of 100 m
+89 89  Elevation in increments of 100 m
+90 90  Elevation in increments of 100 m
+# 91-253 Reserved 
+254 254 Clouds 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.217.table b/definitions/grib2/tables/18/4.217.table
new file mode 100644
index 0000000..a445218
--- /dev/null
+++ b/definitions/grib2/tables/18/4.217.table
@@ -0,0 +1,8 @@
+# Code table 4.217 - Cloud mask type
+0 0 Clear over water 
+1 1 Clear over land 
+2 2 Cloud 
+3 3 No data 
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.218.table b/definitions/grib2/tables/18/4.218.table
new file mode 100644
index 0000000..7e3a695
--- /dev/null
+++ b/definitions/grib2/tables/18/4.218.table
@@ -0,0 +1,44 @@
+# Code table 4.218 - Pixel scene type
+0 0 No scene identified 
+1 1 Green needle-leafed forest 
+2 2 Green broad-leafed forest 
+3 3 Deciduous needle-leafed forest 
+4 4 Deciduous broad-leafed forest 
+5 5 Deciduous mixed forest 
+6 6 Closed shrub-land 
+7 7 Open shrub-land 
+8 8 Woody savannah 
+9 9 Savannah 
+10 10 Grassland 
+11 11 Permanent wetland 
+12 12 Cropland 
+13 13 Urban 
+14 14 Vegetation/crops 
+15 15 Permanent snow/ice 
+16 16 Barren desert 
+17 17 Water bodies 
+18 18 Tundra 
+19 19 Warm liquid water cloud 
+20 20 Supercooled liquid water cloud 
+21 21 Mixed-phase cloud 
+22 22 Optically thin ice cloud 
+23 23 Optically thick ice cloud 
+24 24 Multilayered cloud 
+# 25-96 Reserved 
+97 97 Snow/ice on land 
+98 98 Snow/ice on water 
+99 99 Sun-glint 
+100 100 General cloud 
+101 101 Low cloud/fog/Stratus 
+102 102 Low cloud/Stratocumulus 
+103 103 Low cloud/unknown type 
+104 104 Medium cloud/Nimbostratus 
+105 105 Medium cloud/Altostratus 
+106 106 Medium cloud/unknown type 
+107 107 High cloud/Cumulus 
+108 108 High cloud/Cirrus 
+109 109 High cloud/unknown 
+110 110 Unknown cloud type 
+# 111-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.219.table b/definitions/grib2/tables/18/4.219.table
new file mode 100644
index 0000000..86df052
--- /dev/null
+++ b/definitions/grib2/tables/18/4.219.table
@@ -0,0 +1,8 @@
+# Code table 4.219 - Cloud top height quality indicator
+0 0 Nominal cloud top height quality 
+1 1 Fog in segment 
+2 2 Poor quality height estimation 
+3 3 Fog in segment and poor quality height estimation 
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.220.table b/definitions/grib2/tables/18/4.220.table
new file mode 100644
index 0000000..93e841f
--- /dev/null
+++ b/definitions/grib2/tables/18/4.220.table
@@ -0,0 +1,6 @@
+# Code table 4.220 - Horizontal dimension processed
+0 0 Latitude 
+1 1 Longitude 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.221.table b/definitions/grib2/tables/18/4.221.table
new file mode 100644
index 0000000..8448533
--- /dev/null
+++ b/definitions/grib2/tables/18/4.221.table
@@ -0,0 +1,6 @@
+# Code table 4.221 - Treatment of missing data
+0 0 Not included 
+1 1 Extrapolated 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.222.table b/definitions/grib2/tables/18/4.222.table
new file mode 100644
index 0000000..57f1130
--- /dev/null
+++ b/definitions/grib2/tables/18/4.222.table
@@ -0,0 +1,6 @@
+# Code table 4.222 - Categorical result
+0 0 No 
+1 1 Yes 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.223.table b/definitions/grib2/tables/18/4.223.table
new file mode 100644
index 0000000..f0deb07
--- /dev/null
+++ b/definitions/grib2/tables/18/4.223.table
@@ -0,0 +1,5 @@
+# Code table 4.223 - Fire detection indicator
+0 0 No fire detected 
+1 1 Possible fire detected 
+2 2 Probable fire detected 
+3 3 Missing 
diff --git a/definitions/grib2/tables/18/4.224.table b/definitions/grib2/tables/18/4.224.table
new file mode 100644
index 0000000..e87cde4
--- /dev/null
+++ b/definitions/grib2/tables/18/4.224.table
@@ -0,0 +1,18 @@
+# Code table 4.224 - Categorical outlook
+0 0 No risk area 
+1 1 Reserved 
+2 2 General thunderstorm risk area 
+3 3 Reserved 
+4 4 Slight risk area 
+5 5 Reserved 
+6 6 Moderate risk area 
+7 7 Reserved 
+8 8 High risk area 
+# 9-10 Reserved 
+11 11 Dry thunderstorm (dry lightning) risk area 
+# 12-13 Reserved 
+14 14 Critical risk area 
+# 15-17 Reserved 
+18 18 Extremely critical risk area 
+# 19-254 Reserved 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.225.table b/definitions/grib2/tables/18/4.225.table
new file mode 100644
index 0000000..537f110
--- /dev/null
+++ b/definitions/grib2/tables/18/4.225.table
@@ -0,0 +1,267 @@
+# Code table 4.225 - Weather (see FM 94 BUFR/FM 95 CREX Code table 0 20 003 - Present weather)
+00 00 Cloud development not observed or not observable
+01 01 Clouds generally dissolving or becoming less developed
+02 02 State of sky on the whole unchanged
+03 03 Clouds generally forming or developing
+04 04 Visibility reduced by smoke, e.g. veldt or forest fires, industrial smoke or volcanic ashes
+05 05 Haze
+06 06 Widespread dust in suspension in the air, not raised by wind at or near the station at the time of observation
+07 07 Dust or sand raised by wind at or near the station at the time of observation, but no well developed dust whirl(s) or sand whirl(s), and no duststorm or sandstorm seen; or, in the case of sea stations and coastal stations, blowing spray at the station
+08 08 Well-developed dust whirl(s) or sand whirl(s) seen at or near the station during the preceding hour or at the same time of observation, but no duststorm or sandstorm
+09 09 Duststorm or sandstorm within sight at the time of observation, or at the station during the preceding hour
+10 10 Mist
+11 11 Patches
+12 12 More or less continuous
+13 13 Lightning visible, no thunder heard
+14 14 Precipitation within sight, not reaching the ground or the surface of the sea
+15 15 Precipitation within sight, reaching the ground or the surface of the sea, but distant, i.e. estimated to be more than 5 km from the station
+16 16 Precipitation within sight, reaching the ground or the surface of the sea, near to, but not at the station
+17 17 Thunderstorm, but no precipitation at the time of observation
+18 18 Squalls
+19 19 Funnel cloud(s)
+20 20 Drizzle (not freezing) or snow grains
+21 21 Rain (not freezing)
+22 22 Snow
+23 23 Rain and snow or ice pellets
+24 24 Freezing drizzle or freezing rain
+25 25 Shower(s) of rain
+26 26 Shower(s) of snow, or of rain and snow
+27 27 Shower(s) of hail, or of rain and hail
+28 28 Fog or ice fog
+29 29 Thunderstorm (with or without precipitation)
+30 30 Slight or moderate duststorm or sandstorm has decreased during the preceding hour
+31 31 Slight or moderate duststorm or sandstorm no appreciable change during the preceding hour
+32 32 Slight or moderate duststorm or sandstorm has begun or has increased during the preceding hour
+33 33 Severe duststorm or sandstorm has decreased during the preceding hour
+34 34 Severe duststorm or sandstorm no appreciable change during the preceding hour
+35 35 Severe duststorm or sandstorm has begun or has increased during the preceding hour
+36 36 Slight or moderate drifting snow generally low (below eye level)
+37 37 Heavy drifting snow generally low (below eye level)
+38 38 Slight or moderate blowing snow generally high (above eye level)
+39 39 Heavy blowing snow generally high (above eye level)
+40 40 Fog or ice fog at a distance at the time of observation, but not at the station during the preceding hour, the fog or ice fog extending to a level above that of the observer
+41 41 Fog or ice fog in patches
+42 42 Fog or ice fog, sky visible has become thinner during the preceding hour
+43 43 Fog or ice fog, sky invisible has become thinner during the preceding hour
+44 44 Fog or ice fog, sky visible no appreciable change during the preceding hour
+45 45 Fog or ice fog, sky invisible no appreciable change during the preceding hour
+46 46 Fog or ice fog, sky visible has begun or has become thicker during the preceding hour
+47 47 Fog or ice fog, sky invisible has begun or has become thicker during the preceding hour
+48 48 Fog, depositing rime, sky visible
+49 49 Fog, depositing rime, sky invisible
+50 50 Drizzle, not freezing, intermittent slight at time of observation
+51 51 Drizzle, not freezing, continuous slight at time of observation
+52 52 Drizzle, not freezing, intermittent moderate at time of observation
+53 53 Drizzle, not freezing, continuous moderate at time of observation
+54 54 Drizzle, not freezing, intermittent heavy (dense) at time of observation
+55 55 Drizzle, not freezing, continuous heavy (dense) at time of observation
+56 56 Drizzle, freezing, slight
+57 57 Drizzle, freezing, moderate or heavy (dense)
+58 58 Drizzle and rain, slight
+59 59 Drizzle and rain, moderate or heavy
+60 60 Rain, not freezing, intermittent slight at time of observation
+61 61 Rain, not freezing, continuous slight at time of observation
+62 62 Rain, not freezing, intermittent moderate at time of observation
+63 63 Rain, not freezing, continuous moderate at time of observation
+64 64 Rain, not freezing, intermittent heavy at time of observation
+65 65 Rain, not freezing, continuous heavy at time of observation
+66 66 Rain, freezing, slight
+67 67 Rain, freezing, moderate or heavy
+68 68 Rain or drizzle and snow, slight
+69 69 Rain or drizzle and snow, moderate or heavy
+70 70 Intermittent fall of snowflakes slight at time of observation
+71 71 Continuous fall of snowflakes slight at time of observation
+72 72 Intermittent fall of snowflakes moderate at time of observation
+73 73 Continuous fall of snowflakes moderate at time of observation
+74 74 Intermittent fall of snowflakes heavy at time of observation
+75 75 Continuous fall of snowflakes heavy at time of observation
+76 76 Diamond dust (with or without fog)
+77 77 Snow grains (with or without fog)
+78 78 Isolated star-like snow crystals (with or without fog)
+79 79 Ice pellets
+80 80 Rain shower(s), slight
+81 81 Rain shower(s), moderate or heavy
+82 82 Rain shower(s), violent
+83 83 Shower(s) of rain and snow mixed, slight
+84 84 Shower(s) of rain and snow mixed, moderate or heavy
+85 85 Snow shower(s), slight
+86 86 Snow shower(s), moderate or heavy
+87 87 Shower(s) of snow pellets or small hail, with or without rain or rain and snow mixed slight
+88 88 Shower(s) of snow pellets or small hail, with or without rain or rain and snow mixed moderate or heavy
+89 89 Shower(s) of hail, with or without rain or rain and snow mixed, not associated with thunder slight
+90 90 Shower(s) of hail, with or without rain or rain and snow mixed, not associated with thunder moderate or heavy
+91 91 Slight rain at time of observation
+92 92 Moderate or heavy rain at time of observation
+93 93 Slight snow, or rain and snow mixed or hail at time of observation
+94 94 Moderate or heavy snow, or rain and snow mixed or hail at time of observation
+95 95 Thunderstorm, slight or moderate, without hail, but with rain and/or snow at time of observation
+96 96 Thunderstorm, slight or moderate, with hail at time of observation
+97 97 Thunderstorm, heavy, without hail, but with rain and/or snow at time of observation
+98 98 Thunderstorm combined with duststorm or sandstorm at time of observation
+99 99 Thunderstorm, heavy, with hail at time of observation
+100 100 No significant weather observed
+101 101 Clouds generally dissolving or becoming less developed during the past hour
+102 102 State of sky on the whole unchanged during the past hour
+103 103 Clouds generally forming or developing during the past hour
+104 104 Haze or smoke, or dust in suspension in the air, visibility equal to, or greater than, 1 km
+105 105 Haze or smoke, or dust in suspension in the air, visibility less than 1 km
+#106-109 Reserved
+110 110 Mist
+111 111 Diamond dust
+112 112 Distant lightning
+#113-117 Reserved
+118 118 Squalls
+#119 Reserved
+120 120 Fog
+121 121 PRECIPITATION
+122 122 Drizzle (not freezing) or snow grains
+123 123 Rain (not freezing)
+124 124 Snow
+125 125 Freezing drizzle or freezing rain
+126 126 Thunderstorm (with or without precipitation)
+127 127 BLOWING OR DRIFTING SNOW OR SAND
+128 128 Blowing or drifting snow or sand, visibility equal to, or greater than, 1 km
+129 129 Blowing or drifting snow or sand, visibility less than 1 km
+130 130 FOG
+131 131 Fog or ice fog in patches
+132 132 Fog or ice fog, has become thinner during the past hour
+133 133 Fog or ice fog, no appreciable change during the past hour
+134 134 Fog or ice fog, has begun or become thicker during the past hour
+135 135 Fog, depositing rime
+#136-139 Reserved
+140 140 PRECIPITATION
+141 141 Precipitation, slight or moderate
+142 142 Precipitation, heavy
+143 143 Liquid precipitation, slight or moderate
+144 144 Liquid precipitation, heavy
+145 145 Solid precipitation, slight or moderate
+146 146 Solid precipitation, heavy
+147 147 Freezing precipitation, slight or moderate
+148 148 Freezing precipitation, heavy
+#149 Reserved
+150 150 DRIZZLE
+151 151 Drizzle, not freezing, slight
+152 152 Drizzle, not freezing, moderate
+153 153 Drizzle, not freezing, heavy
+154 154 Drizzle, freezing, slight
+155 155 Drizzle, freezing, moderate
+156 156 Drizzle, freezing, heavy
+157 157 Drizzle and rain, slight
+158 158 Drizzle and rain, moderate or heavy
+#159 Reserved
+160 160 RAIN
+161 161 Rain, not freezing, slight
+162 162 Rain, not freezing, moderate
+163 163 Rain, not freezing, heavy
+164 164 Rain, freezing, slight
+165 165 Rain, freezing, moderate
+166 166 Rain, freezing, heavy
+167 167 Rain (or drizzle) and snow, slight
+168 168 Rain (or drizzle) and snow, moderate or heavy
+#169 Reserved
+170 170 SNOW
+171 171 Snow, slight
+172 172 Snow, moderate
+173 173 Snow, heavy
+174 174 Ice pellets, slight
+175 175 Ice pellets, moderate
+176 176 Ice pellets, heavy
+177 177 Snow grains
+178 178 Ice crystals
+#179 Reserved
+180 180 SHOWER(S) OR INTERMITTENT PRECIPITATION
+181 181 Rain shower(s) or intermittent rain, slight
+182 182 Rain shower(s) or intermittent rain, moderate
+183 183 Rain shower(s) or intermittent rain, heavy
+184 184 Rain shower(s) or intermittent rain, violent
+185 185 Snow shower(s) or intermittent snow, slight
+186 186 Snow shower(s) or intermittent snow, moderate
+187 187 Snow shower(s) or intermittent snow, heavy
+#188 Reserved
+189 189 Hail
+190 190 THUNDERSTORM
+191 191 Thunderstorm, slight or moderate, with no precipitation
+192 192 Thunderstorm, slight or moderate, with rain showers and/or snow showers
+193 193 Thunderstorm, slight or moderate, with hail
+194 194 Thunderstorm, heavy, with no precipitation
+195 195 Thunderstorm, heavy, with rain showers and/or snow showers
+196 196 Thunderstorm, heavy, with hail
+#197-198 Reserved
+199 199 Tornado
+204 204 Volcanic ash suspended in the air aloft
+206 206 Thick dust haze, visibility less than 1 km
+207 207 Blowing spray at the station
+208 208 Drifting dust (sand)
+209 209 Wall of dust or sand in distance (like haboob)
+210 210 Snow haze
+211 211 Whiteout
+213 213 Lightning, cloud to surface
+#214-216 Not used
+217 217 Dry thunderstorm
+219 219 Tornado cloud (destructive) at or within sight of the station during preceding hour or at the time of observation
+220 220 Deposition of volcanic ash
+221 221 Deposition of dust or sand
+222 222 Deposition of dew
+223 223 Deposition of wet snow
+224 224 Deposition of soft rime
+225 225 Deposition of hard rime
+226 226 Deposition of hoar frost
+227 227 Deposition of glaze
+228 228 Deposition of ice crust (ice slick)
+230 230 Duststorm or sandstorm with temperature below 0 degrees
+239 239 Blowing snow, impossible to determine whether snow is falling or not
+241 241 Fog on sea
+242 242 Fog in valleys
+243 243 Arctic or Antarctic sea smoke
+244 244 Steam fog (sea, lake or river)
+245 245 Steam log (land)
+246 246 Fog over ice or snow cover
+247 247 Dense fog, visibility 60-90 m
+248 248 Dense fog, visibility 30-60 m
+249 249 Dense fog, visibility less than 30 m
+250 250 Drizzle, rate of fall - less than 0.10 mm h-1
+251 251 Drizzle, rate of fall - 0.10-0.19 mm h-1
+252 252 Drizzle, rate of fall - 0.20-0.39 mm h-1
+253 253 Drizzle, rate of fall - 0.40-0.79 mm h-1
+254 254 Drizzle, rate of fall - 0.80-1.59 mm h-1
+255 255 Drizzle, rate of fall - 1.60-3.19 mm h-1
+256 256 Drizzle, rate of fall - 3.20-6.39 mm h-1
+257 257 Drizzle, rate of fall - 6.4 mm h-1 or more
+259 259 Drizzle and snow
+260 260 Rain, rate of fall - less than 1.0 mm h-1
+261 261 Rain, rate of fall - 1.0-1.9 mm h-1
+262 262 Rain, rate of fall - 2.0-3.9 mm h-1
+263 263 Rain, rate of fall - 4.0-7.9 mm h-1
+264 264 Rain, rate of fall - 8.0-15.9 mm h-1
+265 265 Rain, rate of fall - 16.0-31.9 mm h-1
+266 266 Rain, rate of fall - 32.0-63.9 mm h-1
+267 267 Rain, rate of fall - 64.0 mm h-1 or more
+270 270 Snow, rate of fall - less than 1.0 cm h-1
+271 271 Snow, rate of fall - 1.0-1.9 cm h-1
+272 272 Snow, rate of fall - 2.0-3.9 cm h-1
+273 273 Snow, rate of fall - 4.0-7.9 cm h-1
+274 274 Snow, rate of fall - 8.0-15.9 cm h-1
+275 275 Snow, rate of fall - 16.0-31.9 cm h-1
+276 276 Snow, rate of fall - 32.0-63.9 cm h-1
+277 277 Snow, rate of fall - 64.0 cm h-1 or more
+278 278 Snow or ice crystal precipitation from a clear sky
+279 279 Wet snow, freezing on contact
+280 280 Precipitation of rain
+281 281 Precipitation of rain, freezing
+282 282 Precipitation of rain and snow mixed
+283 283 Precipitation of snow
+284 284 Precipitation of snow pellets or small hall
+285 285 Precipitation of snow pellets or small hail, with rain
+286 286 Precipitation of snow pellets or small hail, with rain and snow mixed
+287 287 Precipitation of snow pellets or small hail, with snow
+288 288 Precipitation of hail
+289 289 Precipitation of hail, with rain
+290 290 Precipitation of hall, with rain and snow mixed
+291 291 Precipitation of hail, with snow
+292 292 Shower(s) or thunderstorm over sea
+293 293 Shower(s) or thunderstorm over mountains
+#300-507 Reserved
+508 508 No significant phenomenon to report, present and past weather omitted
+509 509 No observation, data not available, present and past weather omitted
+510 510 Present and past weather missing, but expected
+511 511 Missing value
diff --git a/definitions/grib2/tables/18/4.227.table b/definitions/grib2/tables/18/4.227.table
new file mode 100644
index 0000000..27c7655
--- /dev/null
+++ b/definitions/grib2/tables/18/4.227.table
@@ -0,0 +1,9 @@
+# Code table 4.227 - Icing scenario (weather/cloud classification)
+0 0 None 
+1 1 General 
+2 2 Convective 
+3 3 Stratiform 
+4 4 Freezing 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing value 
diff --git a/definitions/grib2/tables/18/4.230.table b/definitions/grib2/tables/18/4.230.table
new file mode 100644
index 0000000..272731d
--- /dev/null
+++ b/definitions/grib2/tables/18/4.230.table
@@ -0,0 +1,449 @@
+# Code table 4.230 - Atmospheric chemical constituent type
+0 0 Ozone O3
+1 1 Water vapour H2O
+2 2 Methane CH4
+3 3 Carbon dioxide CO2
+4 4 Carbon monoxide CO
+5 5 Nitrogen dioxide NO2
+6 6 Nitrous oxide N2O
+7 7 Formaldehyde HCHO
+8 8 Sulphur dioxide SO2
+9 9 Ammonia NH3
+10 10 Ammonium NH4+
+11 11 Nitrogen monoxide NO
+12 12 Atomic oxygen O
+13 13 Nitrate radical NO3
+14 14 Hydroperoxyl radical HO2
+15 15 Dinitrogen pentoxide N2O5
+16 16 Nitrous acid HONO
+17 17 Nitric acid HNO3
+18 18 Peroxynitric acid HO2NO2
+19 19 Hydrogen peroxide H2O2
+20 20 Molecular hydrogen H
+21 21 Atomic nitrogen N
+22 22 Sulphate SO42-
+23 23 Radon Rn
+24 24 Elemental mercury Hg(0)
+25 25 Divalent mercury Hg2+
+26 26 Atomic chlorine Cl
+27 27 Chlorine monoxide ClO
+28 28 Dichlorine peroxide Cl2O2
+29 29 Hypochlorous acid HClO
+30 30 Chlorine nitrate ClONO2
+31 31 Chlorine dioxide ClO2
+32 32 Atomic bromine Br
+33 33 Bromine monoxide BrO
+34 34 Bromine chloride BrCl
+35 35 Hydrogen bromide HBr
+36 36 Hypobromous acid HBrO
+37 37 Bromine nitrate BrONO2
+38 38 Oxygen O2
+#39-9999 Reserved
+10000 10000 Hydroxyl radical OH
+10001 10001 Methyl peroxy radical CH3O2
+10002 10002 Methyl hydroperoxide CH3O2H
+10004 10004 Methanol CH3OH
+10005 10005 Formic acid CH3OOH
+10006 10006 Hydrogen cyanide HCN
+10007 10007 Aceto nitrile CH3CN
+10008 10008 Ethane C2H6
+10009 10009 Ethene (= Ethylene) C2H4
+10010 10010 Ethyne (= Acetylene) C2H2
+10011 10011 Ethanol C2H5OH
+10012 10012 Acetic acid C2H5OOH
+10013 10013 Peroxyacetyl nitrate CH3C(O)OONO2
+10014 10014 Propane C3H8
+10015 10015 Propene C3H6
+10016 10016 Butanes C4H10
+10017 10017 Isoprene C5H10
+10018 10018 Alpha pinene C10H16
+10019 10019 Beta pinene C10H16
+10020 10020 Limonene C10H16
+10021 10021 Benzene C6H6
+10022 10022 Toluene C7H8
+10023 10023 Xylene C8H10
+#10024-10499 Reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides...)
+10500 10500 Dimethyl sulphide CH3SCH3 (DMS)
+#10501-20000 Reserved
+20001 20001 Hydrogen chloride
+20002 20002 CFC-11
+20003 20003 CFC-12
+20004 20004 CFC-113
+20005 20005 CFC-113a
+20006 20006 CFC-114
+20007 20007 CFC-115
+20008 20008 HCFC-22
+20009 20009 HCFC-141b
+20010 20010 HCFC-142b
+20011 20011 Halon-1202
+20012 20012 Halon-1211
+20013 20013 Halon-1301
+20014 20014 Halon-2402
+20015 20015 Methyl chloride (HCC-40)
+20016 20016 Carbon tetrachloride (HCC-10)
+20017 20017 HCC-140a CH3CCl3
+20018 20018 Methyl bromide (HBC-40B1)
+20019 20019 Hexachlorocyclohexane (HCH)
+20020 20020 Alpha hexachlorocyclohexane
+20021 20021 Hexachlorobiphenyl (PCB-153)
+#20022-29999 Reserved
+30000 30000 Radioactive pollutant (tracer, defined by originating centre)
+#30001-30009 Reserved
+30010 30010 Hydrogen H-3
+30011 30011 Hydrogen organic bounded H-3o
+30012 30012 Hydrogen inorganic H-3a
+30013 30013 Beryllium 7 Be-7
+30014 30014 Beryllium 10 Be-10
+30015 30015 Carbon 14 C-14
+30016 30016 Carbon 14 CO2 C-14CO2
+30017 30017 Carbon 14 other gases C-14og
+30018 30018 Nitrogen 13 N-13
+30019 30019 Nitrogen 16 N-16
+30020 30020 Fluorine 18 F-18
+30021 30021 Sodium 22 Na-22
+30022 30022 Phosphate 32 P-32
+30023 30023 Phosphate 33 P-33
+30024 30024 Sulphur 35 S-35
+30025 30025 Chlorine 36 Cl-36
+30026 30026 Potassium 40 K-40
+30027 30027 Argon 41 Ar-41
+30028 30028 Calcium 41 Ca-41
+30029 30029 Calcium 45 Ca-45
+30030 30030 Titanium 44 Ti-44
+30031 30031 Scandium 46 Sc-46
+30032 30032 Vanadium 48 V-48
+30033 30033 Vanadium 49 V-49
+30034 30034 Chrome 51 Cr-51
+30035 30035 Manganese 52 Mn-52
+30036 30036 Manganese 54 Mn-54
+30037 30037 Iron 55 Fe-55
+30038 30038 Iron 59 Fe-59
+30039 30039 Cobalt 56 Co-56
+30040 30040 Cobalt 57 Co-57
+30041 30041 Cobalt 58 Co-58
+30042 30042 Cobalt 60 Co-60
+30043 30043 Nickel 59 Ni-59
+30044 30044 Nickel 63 Ni-63
+30045 30045 Zinc 65 Zn-65
+30046 30046 Gallium 67 Ga-67
+30047 30047 Gallium 68 Ga-68
+30048 30048 Germanium 68 Ge-68
+30049 30049 Germanium 69 Ge-69
+30050 30050 Arsenic 73 As-73
+30051 30051 Selenium 75 Se-75
+30052 30052 Selenium 79 Se-79
+30053 30053 Rubidium 81 Rb-81
+30054 30054 Rubidium 83 Rb-83
+30055 30055 Rubidium 84 Rb-84
+30056 30056 Rubidium 86 Rb-86
+30057 30057 Rubidium 87 Rb-87
+30058 30058 Rubidium 88 Rb-88
+30059 30059 Krypton 85 Kr-85
+30060 30060 Krypton 85 metastable Kr-85m
+30061 30061 Krypton 87 Kr-87
+30062 30062 Krypton 88 Kr-88
+30063 30063 Krypton 89 Kr-89
+30064 30064 Strontium 85 Sr-85
+30065 30065 Strontium 89 Sr-89
+30066 30066 Strontium 89/90 Sr-8990
+30067 30067 Strontium 90 Sr-90
+30068 30068 Strontium 91 Sr-91
+30069 30069 Strontium 92 Sr-92
+30070 30070 Yttrium 87 Y-87
+30071 30071 Yttrium 88 Y-88
+30072 30072 Yttrium 90 Y-90
+30073 30073 Yttrium 91 Y-91
+30074 30074 Yttrium 91 metastable Y-91m
+30075 30075 Yttrium 92 Y-92
+30076 30076 Yttrium 93 Y-93
+30077 30077 Zirconium 89 Zr-89
+30078 30078 Zirconium 93 Zr-93
+30079 30079 Zirconium 95 Zr-95
+30080 30080 Zirconium 97 Zr-97
+30081 30081 Niobium 93 metastable Nb-93m
+30082 30082 Niobium 94 Nb-94
+30083 30083 Niobium 95 Nb-95
+30084 30084 Niobium 95 metastable Nb-95m
+30085 30085 Niobium 97 Nb-97
+30086 30086 Niobium 97 metastable Nb-97m
+30087 30087 Molybdenum 93 Mo-93
+30088 30088 Molybdenum 99 Mo-99
+30089 30089 Technetium 95 metastable Tc-95m
+30090 30090 Technetium 96 Tc-96
+30091 30091 Technetium 99 Tc-99
+30092 30092 Technetium 99 metastable Tc-99m
+30093 30093 Rhodium 99 Rh-99
+30094 30094 Rhodium 101 Rh-101
+30095 30095 Rhodium 102 metastable Rh-102m
+30096 30096 Rhodium 103 metastable Rh-103m
+30097 30097 Rhodium 105 Rh-105
+30098 30098 Rhodium 106 Rh-106
+30099 30099 Palladium 100 Pd-100
+30100 30100 Palladium 103 Pd-103
+30101 30101 Palladium 107 Pd-107
+30102 30102 Ruthenium 103 Ru-103
+30103 30103 Ruthenium 105 Ru-105
+30104 30104 Ruthenium 106 Ru-106
+30105 30105 Silver 108 metastable Ag-108m
+30106 30106 Silver 110 metastable Ag-110m
+30107 30107 Cadmium 109 Cd-109
+30108 30108 Cadmium 113 metastable Cd-113m
+30109 30109 Cadmium 115 metastable Cd-115m
+30110 30110 Indium 114 metastable In-114m
+30111 30111 Tin 113 Sn-113
+30112 30112 Tin 119 metastable Sn-119m
+30113 30113 Tin 121 metastable Sn-121m
+30114 30114 Tin 122 Sn-122
+30115 30115 Tin 123 Sn-123
+30116 30116 Tin 126 Sn-126
+30117 30117 Antimony 124 Sb-124
+30118 30118 Antimony 125 Sb-125
+30119 30119 Antimony 126 Sb-126
+30120 30120 Antimony 127 Sb-127
+30121 30121 Antimony 129 Sb-129
+30122 30122 Tellurium 123 metastable Te-123m
+30123 30123 Tellurium 125 metastable Te-125m
+30124 30124 Tellurium 127 Te-127
+30125 30125 Tellurium 127 metastable Te-127m
+30126 30126 Tellurium 129 Te-129
+30127 30127 Tellurium 129 metastable Te-129m
+30128 30128 Tellurium 131 metastable Te-131m
+30129 30129 Tellurium 132 Te-132
+30130 30130 Iodine 123 I-123
+30131 30131 Iodine 124 I-124
+30132 30132 Iodine 125 I-125
+30133 30133 Iodine 126 I-126
+30134 30134 Iodine 129 I-129
+30135 30135 Iodine 129 elementary gaseous I-129g
+30136 30136 Iodine 129 organic bounded I-129o
+30137 30137 Iodine 131 I-131
+30138 30138 Iodine 131 elementary gaseous I-131g
+30139 30139 Iodine 131 organic bounded I-131o
+30140 30140 Iodine 131 gaseous elementary and organic bounded I-131go
+30141 30141 Iodine 131 aerosol I-131a
+30142 30142 Iodine 132 I-132
+30143 30143 Iodine 132 elementary gaseous I-132g
+30144 30144 Iodine 132 organic bounded I-132o
+30145 30145 Iodine 132 gaseous elementary and organic bounded I-132go
+30146 30146 Iodine 132 aerosol I-132a
+30147 30147 Iodine 133 I-133
+30148 30148 Iodine 133 elementary gaseous I-133g
+30149 30149 Iodine 133 organic bounded I-133o
+30150 30150 Iodine 133 gaseous elementary and organic bounded I-133go
+30151 30151 Iodine 133 aerosol I-133a
+30152 30152 Iodine 134 I-134
+30153 30153 Iodine 134 elementary gaseous I-134g
+30154 30154 Iodine 134 organic bounded I-134o
+30155 30155 Iodine 135 I-135
+30156 30156 Iodine 135 elementary gaseous I-135g
+30157 30157 Iodine 135 organic bounded I-135o
+30158 30158 Iodine 135 gaseous elementary and organic bounded I-135go
+30159 30159 Iodine 135 aerosol I-135a
+30160 30160 Xenon 131 metastable Xe-131m
+30161 30161 Xenon 133 Xe-133
+30162 30162 Xenon 133 metastable Xe-133m
+30163 30163 Xenon 135 Xe-135
+30164 30164 Xenon 135 metastable Xe-135m
+30165 30165 Xenon 137 Xe-137
+30166 30166 Xenon 138 Xe-138
+30167 30167 Xenon sum of all Xenon isotopes Xe-sum
+30168 30168 Caesium 131 Cs-131
+30169 30169 Caesium 134 Cs-134
+30170 30170 Caesium 135 Cs-135
+30171 30171 Caesium 136 Cs-136
+30172 30172 Caesium 137 Cs-137
+30173 30173 Barium 133 Ba-133
+30174 30174 Barium 137 metastable Ba-137m
+30175 30175 Barium 140 Ba-140
+30176 30176 Cerium 139 Ce-139
+30177 30177 Cerium 141 Ce-141
+30178 30178 Cerium 143 Ce-143
+30179 30179 Cerium 144 Ce-144
+30180 30180 Lanthanum 140 La-140
+30181 30181 Lanthanum 141 La-141
+30182 30182 Praseodymium 143 Pr-143
+30183 30183 Praseodymium 144 Pr-144
+30184 30184 Praseodymium 144 metastable Pr-144m
+30185 30185 Samarium 145 Sm-145
+30186 30186 Samarium 147 Sm-147
+30187 30187 Samarium 151 Sm-151
+30188 30188 Neodymium 147 Nd-147
+30189 30189 Promethium 146 Pm-146
+30190 30190 Promethium 147 Pm-147
+30191 30191 Promethium 151 Pm-151
+30192 30192 Europium 152 Eu-152
+30193 30193 Europium 154 Eu-154
+30194 30194 Europium 155 Eu-155
+30195 30195 Gadolinium 153 Gd-153
+30196 30196 Terbium 160 Tb-160
+30197 30197 Holmium 166 metastable Ho-166m
+30198 30198 Thulium 170 Tm-170
+30199 30199 Ytterbium 169 Yb-169
+30200 30200 Hafnium 175 Hf-175
+30201 30201 Hafnium 181 Hf-181
+30202 30202 Tantalum 179 Ta-179
+30203 30203 Tantalum 182 Ta-182
+30204 30204 Rhenium 184 Re-184
+30205 30205 Iridium 192 Ir-192
+30206 30206 Mercury 203 Hg-203
+30207 30207 Thallium 204 Tl-204
+30208 30208 Thallium 207 Tl-207
+30209 30209 Thallium 208 Tl-208
+30210 30210 Thallium 209 Tl-209
+30211 30211 Bismuth 205 Bi-205
+30212 30212 Bismuth 207 Bi-207
+30213 30213 Bismuth 210 Bi-210
+30214 30214 Bismuth 211 Bi-211
+30215 30215 Bismuth 212 Bi-212
+30216 30216 Bismuth 213 Bi-213
+30217 30217 Bismuth 214 Bi-214
+30218 30218 Polonium 208 Po-208
+30219 30219 Polonium 210 Po-210
+30220 30220 Polonium 212 Po-212
+30221 30221 Polonium 213 Po-213
+30222 30222 Polonium 214 Po-214
+30223 30223 Polonium 215 Po-215
+30224 30224 Polonium 216 Po-216
+30225 30225 Polonium 218 Po-218
+30226 30226 Lead 209 Pb-209
+30227 30227 Lead 210 Pb-210
+30228 30228 Lead 211 Pb-211
+30229 30229 Lead 212 Pb-212
+30230 30230 Lead 214 Pb-214
+30231 30231 Astatine 217 At-217
+30232 30232 Radon 219 Rn-219
+30233 30233 Radon 220 Rn-220
+30234 30234 Radon 222 Rn-222
+30235 30235 Francium 221 Fr-221
+30236 30236 Francium 223 Fr-223
+30237 30237 Radium 223 Ra-223
+30238 30238 Radium 224 Ra-224
+30239 30239 Radium 225 Ra-225
+30240 30240 Radium 226 Ra-226
+30241 30241 Radium 228 Ra-228
+30242 30242 Actinium 225 Ac-225
+30243 30243 Actinium 227 Ac-227
+30244 30244 Actinium 228 Ac-228
+30245 30245 Thorium 227 Th-227
+30246 30246 Thorium 228 Th-228
+30247 30247 Thorium 229 Th-229
+30248 30248 Thorium 230 Th-230
+30249 30249 Thorium 231 Th-231
+30250 30250 Thorium 232 Th-232
+30251 30251 Thorium 234 Th-234
+30252 30252 Protactinium 231 Pa-231
+30253 30253 Protactinium 233 Pa-233
+30254 30254 Protactinium 234 metastable Pa-234m
+30255 30255 Uranium 232 U-232
+30256 30256 Uranium 233 U-233
+30257 30257 Uranium 234 U-234
+30258 30258 Uranium 235 U-235
+30259 30259 Uranium 236 U-236
+30260 30260 Uranium 237 U-237
+30261 30261 Uranium 238 U-238
+30262 30262 Plutonium 236 Pu-236
+30263 30263 Plutonium 238 Pu-238
+30264 30264 Plutonium 239 Pu-239
+30265 30265 Plutonium 240 Pu-240
+30266 30266 Plutonium 241 Pu-241
+30267 30267 Plutonium 242 Pu-242
+30268 30268 Plutonium 244 Pu-244
+30269 30269 Neptunium 237 Np-237
+30270 30270 Neptunium 238 Np-238
+30271 30271 Neptunium 239 Np-239
+30272 30272 Americium 241 Am-241
+30273 30273 Americium 242 Am-242
+30274 30274 Americium 242 metastable Am-242m
+30275 30275 Americium 243 Am-243
+30276 30276 Curium 242 Cm-242
+30277 30277 Curium 243 Cm-243
+30278 30278 Curium 244 Cm-244
+30279 30279 Curium 245 Cm-245
+30280 30280 Curium 246 Cm-246
+30281 30281 Curium 247 Cm-247
+30282 30282 Curium 248 Cm-248
+30283 30283 Curium 243/244 Cm-243244
+30284 30284 Plutonium 238/Americium 241 Pu-238Am-241
+30285 30285 Plutonium 239/240 Pu-239240
+30286 30286 Berkelium 249 Bk-249
+30287 30287 Californium 249 Cf-249
+30288 30288 Californium 250 Cf-250
+30289 30289 Californium 252 Cf-252
+30290 30290 Sum aerosol particulates SumAer
+30291 30291 Sum Iodine SumIod
+30292 30292 Sum noble gas SumNG
+30293 30293 Activation gas ActGas
+30294 30294 Cs-137 Equivalent EquCs137
+#30295-59999 Reserved
+60000 60000 HOx radical (OH+HO2)
+60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2)
+60002 60002 Passive Ozone
+60003 60003 NOx expressed as nitrogen NOx
+60004 60004 All nitrogen oxides (NOy) expressed as nitrogen NOy
+60005 60005 Total inorganic chlorine Clx
+60006 60006 Total inorganic bromine Brx
+60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx
+60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx
+60009 60009 Lumped alkanes
+60010 60010 Lumped alkenes
+60011 60011 Lumped aromatic compounds
+60012 60012 Lumped terpenes
+60013 60013 Non-methane volatile organic compounds expressed as carbon
+60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon
+60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon
+60016 60016 Lumped oxygenated hydrocarbons
+60017 60017 NOx expressed as nitrogen dioxide (NO2)
+#60018-61999 Reserved
+62000 62000 Total aerosol
+62001 62001 Dust dry
+62002 62002 Water in ambient
+62003 62003 Ammonium dry
+62004 62004 Nitrate dry
+62005 62005 Nitric acid trihydrate
+62006 62006 Sulphate dry
+62007 62007 Mercury dry
+62008 62008 Sea salt dry
+62009 62009 Black carbon dry
+62010 62010 Particulate organic matter dry
+62011 62011 Primary particulate organic matter dry
+62012 62012 Secondary particulate organic matter dry
+62013 62013 Black carbon hydrophilic dry
+62014 62014 Black carbon hydrophobic dry
+62015 62015 Particulate organic matter hydrophilic dry
+62016 62016 Particulate organic matter hydrophobic dry
+62017 62017 Nitrate hydrophilic dry
+62018 62018 Nitrate hydrophobic dry
+#62019 Reserved
+62020 62020 Smoke - high absorption
+62021 62021 Smoke - low absorption
+62022 62022 Aerosol - high absorption
+62023 62023 Aerosol - low absorption
+62025 62025 Volcanic ash
+62026 62026 Particulate matter (PM)
+# 62027-62099 Reserved
+62100 62100 Alnus (Alder) pollen
+62101 62101 Betula (Birch) pollen
+62102 62102 Castanea (Chestnut) pollen
+62103 62103 Carpinus (Hornbeam) pollen
+62104 62104 Corylus (Hazel) pollen
+62105 62105 Fagus (Beech) pollen
+62106 62106 Fraxinus (Ash) pollen
+62107 62107 Pinus (Pine) pollen
+62108 62108 Platanus (Plane) pollen
+62109 62109 Populus (Cottonwood, Poplar) pollen
+62110 62110 Quercus (Oak) pollen
+62111 62111 Salix (Willow) pollen
+62112 62112 Taxus (Yew) pollen
+62113 62113 Tilia (Lime, Linden) pollen
+62114 62114 Ulmus (Elm) pollen
+# 62115-62199 Reserved
+62200 62200 Ambrosia (Ragweed, Burr-ragweed ) pollen
+62201 62201 Artemisia (Sagebrush, Wormwood, Mugwort) pollen
+62202 62202 Brassica (Rape, Broccoli, Brussels Sprouts, Cabbage, Cauliflower, Collards, Kale, Kohlrabi, Mustard, Rutabaga) pollen
+62203 62203 Plantago (Plantain) pollen
+62204 62204 Rumex (Dock, Sorrel) pollen
+62205 62205 Urtica (Nettle) pollen
+# 62206-62299 Reserved 
+62300 62300 Poaceae (Grass family) pollen
+# 62301-65534 Reserved
+65535 65535 Missing
diff --git a/definitions/grib2/tables/18/4.233.table b/definitions/grib2/tables/18/4.233.table
new file mode 100644
index 0000000..1d3021e
--- /dev/null
+++ b/definitions/grib2/tables/18/4.233.table
@@ -0,0 +1,449 @@
+# Code table 4.233 - Aerosol type
+0 0 Ozone O3
+1 1 Water vapour H2O
+2 2 Methane CH4
+3 3 Carbon dioxide CO2
+4 4 Carbon monoxide CO
+5 5 Nitrogen dioxide NO2
+6 6 Nitrous oxide N2O
+7 7 Formaldehyde HCHO
+8 8 Sulphur dioxide SO2
+9 9 Ammonia NH3
+10 10 Ammonium NH4+
+11 11 Nitrogen monoxide NO
+12 12 Atomic oxygen O
+13 13 Nitrate radical NO3
+14 14 Hydroperoxyl radical HO2
+15 15 Dinitrogen pentoxide N2O5
+16 16 Nitrous acid HONO
+17 17 Nitric acid HNO3
+18 18 Peroxynitric acid HO2NO2
+19 19 Hydrogen peroxide H2O2
+20 20 Molecular hydrogen H
+21 21 Atomic nitrogen N
+22 22 Sulphate SO42-
+23 23 Radon Rn
+24 24 Elemental mercury Hg(0)
+25 25 Divalent mercury Hg2+
+26 26 Atomic chlorine Cl
+27 27 Chlorine monoxide ClO
+28 28 Dichlorine peroxide Cl2O2
+29 29 Hypochlorous acid HClO
+30 30 Chlorine nitrate ClONO2
+31 31 Chlorine dioxide ClO2
+32 32 Atomic bromine Br
+33 33 Bromine monoxide BrO
+34 34 Bromine chloride BrCl
+35 35 Hydrogen bromide HBr
+36 36 Hypobromous acid HBrO
+37 37 Bromine nitrate BrONO2
+38 38 Oxygen O2
+#39-9999 Reserved
+10000 10000 Hydroxyl radical OH
+10001 10001 Methyl peroxy radical CH3O2
+10002 10002 Methyl hydroperoxide CH3O2H
+10004 10004 Methanol CH3OH
+10005 10005 Formic acid CH3OOH
+10006 10006 Hydrogen cyanide HCN
+10007 10007 Aceto nitrile CH3CN
+10008 10008 Ethane C2H6
+10009 10009 Ethene (= Ethylene) C2H4
+10010 10010 Ethyne (= Acetylene) C2H2
+10011 10011 Ethanol C2H5OH
+10012 10012 Acetic acid C2H5OOH
+10013 10013 Peroxyacetyl nitrate CH3C(O)OONO2
+10014 10014 Propane C3H8
+10015 10015 Propene C3H6
+10016 10016 Butanes C4H10
+10017 10017 Isoprene C5H10
+10018 10018 Alpha pinene C10H16
+10019 10019 Beta pinene C10H16
+10020 10020 Limonene C10H16
+10021 10021 Benzene C6H6
+10022 10022 Toluene C7H8
+10023 10023 Xylene C8H10
+#10024-10499 Reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides...)
+10500 10500 Dimethyl sulphide CH3SCH3 (DMS)
+#10501-20000 Reserved
+20001 20001 Hydrogen chloride
+20002 20002 CFC-11
+20003 20003 CFC-12
+20004 20004 CFC-113
+20005 20005 CFC-113a
+20006 20006 CFC-114
+20007 20007 CFC-115
+20008 20008 HCFC-22
+20009 20009 HCFC-141b
+20010 20010 HCFC-142b
+20011 20011 Halon-1202
+20012 20012 Halon-1211
+20013 20013 Halon-1301
+20014 20014 Halon-2402
+20015 20015 Methyl chloride (HCC-40)
+20016 20016 Carbon tetrachloride (HCC-10)
+20017 20017 HCC-140a CH3CCl3
+20018 20018 Methyl bromide (HBC-40B1)
+20019 20019 Hexachlorocyclohexane (HCH)
+20020 20020 Alpha hexachlorocyclohexane
+20021 20021 Hexachlorobiphenyl (PCB-153)
+#20022-29999 Reserved
+30000 30000 Radioactive pollutant (tracer, defined by originating centre)
+#30001-30009 Reserved
+30010 30010 Hydrogen H-3
+30011 30011 Hydrogen organic bounded H-3o
+30012 30012 Hydrogen inorganic H-3a
+30013 30013 Beryllium 7 Be-7
+30014 30014 Beryllium 10 Be-10
+30015 30015 Carbon 14 C-14
+30016 30016 Carbon 14 CO2 C-14CO2
+30017 30017 Carbon 14 other gases C-14og
+30018 30018 Nitrogen 13 N-13
+30019 30019 Nitrogen 16 N-16
+30020 30020 Fluorine 18 F-18
+30021 30021 Sodium 22 Na-22
+30022 30022 Phosphate 32 P-32
+30023 30023 Phosphate 33 P-33
+30024 30024 Sulphur 35 S-35
+30025 30025 Chlorine 36 Cl-36
+30026 30026 Potassium 40 K-40
+30027 30027 Argon 41 Ar-41
+30028 30028 Calcium 41 Ca-41
+30029 30029 Calcium 45 Ca-45
+30030 30030 Titanium 44 Ti-44
+30031 30031 Scandium 46 Sc-46
+30032 30032 Vanadium 48 V-48
+30033 30033 Vanadium 49 V-49
+30034 30034 Chrome 51 Cr-51
+30035 30035 Manganese 52 Mn-52
+30036 30036 Manganese 54 Mn-54
+30037 30037 Iron 55 Fe-55
+30038 30038 Iron 59 Fe-59
+30039 30039 Cobalt 56 Co-56
+30040 30040 Cobalt 57 Co-57
+30041 30041 Cobalt 58 Co-58
+30042 30042 Cobalt 60 Co-60
+30043 30043 Nickel 59 Ni-59
+30044 30044 Nickel 63 Ni-63
+30045 30045 Zinc 65 Zn-65
+30046 30046 Gallium 67 Ga-67
+30047 30047 Gallium 68 Ga-68
+30048 30048 Germanium 68 Ge-68
+30049 30049 Germanium 69 Ge-69
+30050 30050 Arsenic 73 As-73
+30051 30051 Selenium 75 Se-75
+30052 30052 Selenium 79 Se-79
+30053 30053 Rubidium 81 Rb-81
+30054 30054 Rubidium 83 Rb-83
+30055 30055 Rubidium 84 Rb-84
+30056 30056 Rubidium 86 Rb-86
+30057 30057 Rubidium 87 Rb-87
+30058 30058 Rubidium 88 Rb-88
+30059 30059 Krypton 85 Kr-85
+30060 30060 Krypton 85 metastable Kr-85m
+30061 30061 Krypton 87 Kr-87
+30062 30062 Krypton 88 Kr-88
+30063 30063 Krypton 89 Kr-89
+30064 30064 Strontium 85 Sr-85
+30065 30065 Strontium 89 Sr-89
+30066 30066 Strontium 89/90 Sr-8990
+30067 30067 Strontium 90 Sr-90
+30068 30068 Strontium 91 Sr-91
+30069 30069 Strontium 92 Sr-92
+30070 30070 Yttrium 87 Y-87
+30071 30071 Yttrium 88 Y-88
+30072 30072 Yttrium 90 Y-90
+30073 30073 Yttrium 91 Y-91
+30074 30074 Yttrium 91 metastable Y-91m
+30075 30075 Yttrium 92 Y-92
+30076 30076 Yttrium 93 Y-93
+30077 30077 Zirconium 89 Zr-89
+30078 30078 Zirconium 93 Zr-93
+30079 30079 Zirconium 95 Zr-95
+30080 30080 Zirconium 97 Zr-97
+30081 30081 Niobium 93 metastable Nb-93m
+30082 30082 Niobium 94 Nb-94
+30083 30083 Niobium 95 Nb-95
+30084 30084 Niobium 95 metastable Nb-95m
+30085 30085 Niobium 97 Nb-97
+30086 30086 Niobium 97 metastable Nb-97m
+30087 30087 Molybdenum 93 Mo-93
+30088 30088 Molybdenum 99 Mo-99
+30089 30089 Technetium 95 metastable Tc-95m
+30090 30090 Technetium 96 Tc-96
+30091 30091 Technetium 99 Tc-99
+30092 30092 Technetium 99 metastable Tc-99m
+30093 30093 Rhodium 99 Rh-99
+30094 30094 Rhodium 101 Rh-101
+30095 30095 Rhodium 102 metastable Rh-102m
+30096 30096 Rhodium 103 metastable Rh-103m
+30097 30097 Rhodium 105 Rh-105
+30098 30098 Rhodium 106 Rh-106
+30099 30099 Palladium 100 Pd-100
+30100 30100 Palladium 103 Pd-103
+30101 30101 Palladium 107 Pd-107
+30102 30102 Ruthenium 103 Ru-103
+30103 30103 Ruthenium 105 Ru-105
+30104 30104 Ruthenium 106 Ru-106
+30105 30105 Silver 108 metastable Ag-108m
+30106 30106 Silver 110 metastable Ag-110m
+30107 30107 Cadmium 109 Cd-109
+30108 30108 Cadmium 113 metastable Cd-113m
+30109 30109 Cadmium 115 metastable Cd-115m
+30110 30110 Indium 114 metastable In-114m
+30111 30111 Tin 113 Sn-113
+30112 30112 Tin 119 metastable Sn-119m
+30113 30113 Tin 121 metastable Sn-121m
+30114 30114 Tin 122 Sn-122
+30115 30115 Tin 123 Sn-123
+30116 30116 Tin 126 Sn-126
+30117 30117 Antimony 124 Sb-124
+30118 30118 Antimony 125 Sb-125
+30119 30119 Antimony 126 Sb-126
+30120 30120 Antimony 127 Sb-127
+30121 30121 Antimony 129 Sb-129
+30122 30122 Tellurium 123 metastable Te-123m
+30123 30123 Tellurium 125 metastable Te-125m
+30124 30124 Tellurium 127 Te-127
+30125 30125 Tellurium 127 metastable Te-127m
+30126 30126 Tellurium 129 Te-129
+30127 30127 Tellurium 129 metastable Te-129m
+30128 30128 Tellurium 131 metastable Te-131m
+30129 30129 Tellurium 132 Te-132
+30130 30130 Iodine 123 I-123
+30131 30131 Iodine 124 I-124
+30132 30132 Iodine 125 I-125
+30133 30133 Iodine 126 I-126
+30134 30134 Iodine 129 I-129
+30135 30135 Iodine 129 elementary gaseous I-129g
+30136 30136 Iodine 129 organic bounded I-129o
+30137 30137 Iodine 131 I-131
+30138 30138 Iodine 131 elementary gaseous I-131g
+30139 30139 Iodine 131 organic bounded I-131o
+30140 30140 Iodine 131 gaseous elementary and organic bounded I-131go
+30141 30141 Iodine 131 aerosol I-131a
+30142 30142 Iodine 132 I-132
+30143 30143 Iodine 132 elementary gaseous I-132g
+30144 30144 Iodine 132 organic bounded I-132o
+30145 30145 Iodine 132 gaseous elementary and organic bounded I-132go
+30146 30146 Iodine 132 aerosol I-132a
+30147 30147 Iodine 133 I-133
+30148 30148 Iodine 133 elementary gaseous I-133g
+30149 30149 Iodine 133 organic bounded I-133o
+30150 30150 Iodine 133 gaseous elementary and organic bounded I-133go
+30151 30151 Iodine 133 aerosol I-133a
+30152 30152 Iodine 134 I-134
+30153 30153 Iodine 134 elementary gaseous I-134g
+30154 30154 Iodine 134 organic bounded I-134o
+30155 30155 Iodine 135 I-135
+30156 30156 Iodine 135 elementary gaseous I-135g
+30157 30157 Iodine 135 organic bounded I-135o
+30158 30158 Iodine 135 gaseous elementary and organic bounded I-135go
+30159 30159 Iodine 135 aerosol I-135a
+30160 30160 Xenon 131 metastable Xe-131m
+30161 30161 Xenon 133 Xe-133
+30162 30162 Xenon 133 metastable Xe-133m
+30163 30163 Xenon 135 Xe-135
+30164 30164 Xenon 135 metastable Xe-135m
+30165 30165 Xenon 137 Xe-137
+30166 30166 Xenon 138 Xe-138
+30167 30167 Xenon sum of all Xenon isotopes Xe-sum
+30168 30168 Caesium 131 Cs-131
+30169 30169 Caesium 134 Cs-134
+30170 30170 Caesium 135 Cs-135
+30171 30171 Caesium 136 Cs-136
+30172 30172 Caesium 137 Cs-137
+30173 30173 Barium 133 Ba-133
+30174 30174 Barium 137 metastable Ba-137m
+30175 30175 Barium 140 Ba-140
+30176 30176 Cerium 139 Ce-139
+30177 30177 Cerium 141 Ce-141
+30178 30178 Cerium 143 Ce-143
+30179 30179 Cerium 144 Ce-144
+30180 30180 Lanthanum 140 La-140
+30181 30181 Lanthanum 141 La-141
+30182 30182 Praseodymium 143 Pr-143
+30183 30183 Praseodymium 144 Pr-144
+30184 30184 Praseodymium 144 metastable Pr-144m
+30185 30185 Samarium 145 Sm-145
+30186 30186 Samarium 147 Sm-147
+30187 30187 Samarium 151 Sm-151
+30188 30188 Neodymium 147 Nd-147
+30189 30189 Promethium 146 Pm-146
+30190 30190 Promethium 147 Pm-147
+30191 30191 Promethium 151 Pm-151
+30192 30192 Europium 152 Eu-152
+30193 30193 Europium 154 Eu-154
+30194 30194 Europium 155 Eu-155
+30195 30195 Gadolinium 153 Gd-153
+30196 30196 Terbium 160 Tb-160
+30197 30197 Holmium 166 metastable Ho-166m
+30198 30198 Thulium 170 Tm-170
+30199 30199 Ytterbium 169 Yb-169
+30200 30200 Hafnium 175 Hf-175
+30201 30201 Hafnium 181 Hf-181
+30202 30202 Tantalum 179 Ta-179
+30203 30203 Tantalum 182 Ta-182
+30204 30204 Rhenium 184 Re-184
+30205 30205 Iridium 192 Ir-192
+30206 30206 Mercury 203 Hg-203
+30207 30207 Thallium 204 Tl-204
+30208 30208 Thallium 207 Tl-207
+30209 30209 Thallium 208 Tl-208
+30210 30210 Thallium 209 Tl-209
+30211 30211 Bismuth 205 Bi-205
+30212 30212 Bismuth 207 Bi-207
+30213 30213 Bismuth 210 Bi-210
+30214 30214 Bismuth 211 Bi-211
+30215 30215 Bismuth 212 Bi-212
+30216 30216 Bismuth 213 Bi-213
+30217 30217 Bismuth 214 Bi-214
+30218 30218 Polonium 208 Po-208
+30219 30219 Polonium 210 Po-210
+30220 30220 Polonium 212 Po-212
+30221 30221 Polonium 213 Po-213
+30222 30222 Polonium 214 Po-214
+30223 30223 Polonium 215 Po-215
+30224 30224 Polonium 216 Po-216
+30225 30225 Polonium 218 Po-218
+30226 30226 Lead 209 Pb-209
+30227 30227 Lead 210 Pb-210
+30228 30228 Lead 211 Pb-211
+30229 30229 Lead 212 Pb-212
+30230 30230 Lead 214 Pb-214
+30231 30231 Astatine 217 At-217
+30232 30232 Radon 219 Rn-219
+30233 30233 Radon 220 Rn-220
+30234 30234 Radon 222 Rn-222
+30235 30235 Francium 221 Fr-221
+30236 30236 Francium 223 Fr-223
+30237 30237 Radium 223 Ra-223
+30238 30238 Radium 224 Ra-224
+30239 30239 Radium 225 Ra-225
+30240 30240 Radium 226 Ra-226
+30241 30241 Radium 228 Ra-228
+30242 30242 Actinium 225 Ac-225
+30243 30243 Actinium 227 Ac-227
+30244 30244 Actinium 228 Ac-228
+30245 30245 Thorium 227 Th-227
+30246 30246 Thorium 228 Th-228
+30247 30247 Thorium 229 Th-229
+30248 30248 Thorium 230 Th-230
+30249 30249 Thorium 231 Th-231
+30250 30250 Thorium 232 Th-232
+30251 30251 Thorium 234 Th-234
+30252 30252 Protactinium 231 Pa-231
+30253 30253 Protactinium 233 Pa-233
+30254 30254 Protactinium 234 metastable Pa-234m
+30255 30255 Uranium 232 U-232
+30256 30256 Uranium 233 U-233
+30257 30257 Uranium 234 U-234
+30258 30258 Uranium 235 U-235
+30259 30259 Uranium 236 U-236
+30260 30260 Uranium 237 U-237
+30261 30261 Uranium 238 U-238
+30262 30262 Plutonium 236 Pu-236
+30263 30263 Plutonium 238 Pu-238
+30264 30264 Plutonium 239 Pu-239
+30265 30265 Plutonium 240 Pu-240
+30266 30266 Plutonium 241 Pu-241
+30267 30267 Plutonium 242 Pu-242
+30268 30268 Plutonium 244 Pu-244
+30269 30269 Neptunium 237 Np-237
+30270 30270 Neptunium 238 Np-238
+30271 30271 Neptunium 239 Np-239
+30272 30272 Americium 241 Am-241
+30273 30273 Americium 242 Am-242
+30274 30274 Americium 242 metastable Am-242m
+30275 30275 Americium 243 Am-243
+30276 30276 Curium 242 Cm-242
+30277 30277 Curium 243 Cm-243
+30278 30278 Curium 244 Cm-244
+30279 30279 Curium 245 Cm-245
+30280 30280 Curium 246 Cm-246
+30281 30281 Curium 247 Cm-247
+30282 30282 Curium 248 Cm-248
+30283 30283 Curium 243/244 Cm-243244
+30284 30284 Plutonium 238/Americium 241 Pu-238Am-241
+30285 30285 Plutonium 239/240 Pu-239240
+30286 30286 Berkelium 249 Bk-249
+30287 30287 Californium 249 Cf-249
+30288 30288 Californium 250 Cf-250
+30289 30289 Californium 252 Cf-252
+30290 30290 Sum aerosol particulates SumAer
+30291 30291 Sum Iodine SumIod
+30292 30292 Sum noble gas SumNG
+30293 30293 Activation gas ActGas
+30294 30294 Cs-137 Equivalent EquCs137
+#30295-59999 Reserved
+60000 60000 HOx radical (OH+HO2)
+60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2)
+60002 60002 Passive Ozone
+60003 60003 NOx expressed as nitrogen NOx
+60004 60004 All nitrogen oxides (NOy) expressed as nitrogen NOy
+60005 60005 Total inorganic chlorine Clx
+60006 60006 Total inorganic bromine Brx
+60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx
+60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx
+60009 60009 Lumped alkanes
+60010 60010 Lumped alkenes
+60011 60011 Lumped aromatic compounds
+60012 60012 Lumped terpenes
+60013 60013 Non-methane volatile organic compounds expressed as carbon
+60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon
+60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon
+60016 60016 Lumped oxygenated hydrocarbons
+60017 60017 NOx expressed as nitrogen dioxide (NO2)
+#60018-61999 Reserved
+62000 62000 Total aerosol
+62001 62001 Dust dry
+62002 62002 Water in ambient
+62003 62003 Ammonium dry
+62004 62004 Nitrate dry
+62005 62005 Nitric acid trihydrate
+62006 62006 Sulphate dry
+62007 62007 Mercury dry
+62008 62008 Sea salt dry
+62009 62009 Black carbon dry
+62010 62010 Particulate organic matter dry
+62011 62011 Primary particulate organic matter dry
+62012 62012 Secondary particulate organic matter dry
+62013 62013 Black carbon hydrophilic dry
+62014 62014 Black carbon hydrophobic dry
+62015 62015 Particulate organic matter hydrophilic dry
+62016 62016 Particulate organic matter hydrophobic dry
+62017 62017 Nitrate hydrophilic dry
+62018 62018 Nitrate hydrophobic dry
+#62019 Reserved
+62020 62020 Smoke - high absorption
+62021 62021 Smoke - low absorption
+62022 62022 Aerosol - high absorption
+62023 62023 Aerosol - low absorption
+62025 62025 Volcanic ash
+62026 62026 Particulate matter (PM)
+# 62027-62099 Reserved
+62100 62100 Alnus (Alder) pollen
+62101 62101 Betula (Birch) pollen
+62102 62102 Castanea (Chestnut) pollen
+62103 62103 Carpinus (Hornbeam) pollen
+62104 62104 Corylus (Hazel) pollen
+62105 62105 Fagus (Beech) pollen
+62106 62106 Fraxinus (Ash) pollen
+62107 62107 Pinus (Pine) pollen
+62108 62108 Platanus (Plane) pollen
+62109 62109 Populus (Cottonwood, Poplar) pollen
+62110 62110 Quercus (Oak) pollen
+62111 62111 Salix (Willow) pollen
+62112 62112 Taxus (Yew) pollen
+62113 62113 Tilia (Lime, Linden) pollen
+62114 62114 Ulmus (Elm) pollen
+# 62115-62199 Reserved
+62200 62200 Ambrosia (Ragweed, Burr-ragweed ) pollen
+62201 62201 Artemisia (Sagebrush, Wormwood, Mugwort) pollen
+62202 62202 Brassica (Rape, Broccoli, Brussels Sprouts, Cabbage, Cauliflower, Collards, Kale, Kohlrabi, Mustard, Rutabaga) pollen
+62203 62203 Plantago (Plantain) pollen
+62204 62204 Rumex (Dock, Sorrel) pollen
+62205 62205 Urtica (Nettle) pollen
+# 62206-62299 Reserved 
+62300 62300 Poaceae (Grass family) pollen
+# 62301-65534 Reserved
+65535 65535 Missing
diff --git a/definitions/grib2/tables/18/4.234.table b/definitions/grib2/tables/18/4.234.table
new file mode 100644
index 0000000..816541c
--- /dev/null
+++ b/definitions/grib2/tables/18/4.234.table
@@ -0,0 +1,21 @@
+# Code table 4.234 - Canopy cover fraction (to be used as partitioned parameter in product definition template 4.53 or 4.54)
+1 1 Crops, mixed farming 
+2 2 Short grass 
+3 3 Evergreen needleleaf trees 
+4 4 Deciduous needleleaf trees 
+5 5 Deciduous broadleaf trees 
+6 6 Evergreen broadleaf trees 
+7 7 Tall grass 
+8 8 Desert 
+9 9 Tundra 
+10 10 Irrigated crops 
+11 11 Semidesert 
+12 12 Ice caps and glaciers 
+13 13 Bogs and marshes 
+14 14 Inland water 
+15 15 Ocean 
+16 16 Evergreen shrubs 
+17 17 Deciduous shrubs 
+18 18 Mixed forest 
+19 19 Interrupted forest 
+20 20 Water and land mixtures 
diff --git a/definitions/grib2/tables/18/4.236.table b/definitions/grib2/tables/18/4.236.table
new file mode 100644
index 0000000..fbe093c
--- /dev/null
+++ b/definitions/grib2/tables/18/4.236.table
@@ -0,0 +1,8 @@
+# Code table 4.236 - Soil texture fraction (to be used as partitioned parameter in product definition template 4.53 or 4.54)
+1 1 Coarse 
+2 2 Medium 
+3 3 Medium-fine 
+4 4 Fine 
+5 5 Very-fine 
+6 6 Organic 
+7 7 Tropical-organic 
diff --git a/definitions/grib2/tables/18/4.240.table b/definitions/grib2/tables/18/4.240.table
new file mode 100644
index 0000000..7313e6e
--- /dev/null
+++ b/definitions/grib2/tables/18/4.240.table
@@ -0,0 +1,12 @@
+# Code table 4.240 - Type of distribution function
+0 0 No specific distribution function given 
+1 1 Delta functions with spatially variable concentration and fixed diameters Dl (p1) in metre 
+2 2 Delta functions with spatially variable concentration and fixed masses Ml (p1) in kg 
+3 3 Gaussian (normal) distribution with spatially variable concentration and fixed mean diameter Dl(p1) and variance(p2) 
+4 4 Gaussian (normal) distribution with spatially variable concentration, mean diameter and variance 
+5 5 Log-normal distribution with spatially variable number density, mean diameter and variance 
+6 6 Log-normal distribution with spatially variable number density, mean diameter and fixed variance(p1) 
+7 7 Log-normal distribution with spatially variable number density and mass density and fixed variance(p1) and fixed particle density(p2)
+# 8-49151 Reserved 
+# 49152-65534 Reserved for local use 
+65535 65535 Missing value 
diff --git a/definitions/grib2/tables/18/4.241.table b/definitions/grib2/tables/18/4.241.table
new file mode 100644
index 0000000..a037b4b
--- /dev/null
+++ b/definitions/grib2/tables/18/4.241.table
@@ -0,0 +1,9 @@
+# Code table 4.241 - Coverage attributes
+0 0 Undefined 
+1 1 Unmodified 
+2 2 Snow covered 
+3 3 Flooded 
+4 4 Ice covered 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing value 
diff --git a/definitions/grib2/tables/18/4.242.table b/definitions/grib2/tables/18/4.242.table
new file mode 100644
index 0000000..083f88c
--- /dev/null
+++ b/definitions/grib2/tables/18/4.242.table
@@ -0,0 +1,7 @@
+# Code table 4.242 - Tile classification
+0 0 Reserved 
+1 1 Land use classes according to ESA-GlobCover GCV2009 
+2 2 Land use classes according to European Commission-Global Land Cover Project GLC2000 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing value 
diff --git a/definitions/grib2/tables/18/4.243.table b/definitions/grib2/tables/18/4.243.table
new file mode 100644
index 0000000..b390533
--- /dev/null
+++ b/definitions/grib2/tables/18/4.243.table
@@ -0,0 +1,43 @@
+# Code table 4.243 - Tile class
+0 0 Reserved 
+1 1 Evergreen broadleaved forest 
+2 2 Deciduous broadleaved closed forest 
+3 3 Deciduous broadleaved open forest 
+4 4 Evergreen needle-leaf forest 
+5 5 Deciduous needle-leaf forest 
+6 6 Mixed leaf trees 
+7 7 Freshwater flooded trees 
+8 8 Saline water flooded trees 
+9 9 Mosaic tree/natural vegetation 
+10 10 Burnt tree cover 
+11 11 Evergreen shrubs closed-open 
+12 12 Deciduous shrubs closed-open 
+13 13 Herbaceous vegetation closed-open 
+14 14 Sparse herbaceous or grass 
+15 15 Flooded shrubs or herbaceous 
+16 16 Cultivated and managed areas 
+17 17 Mosaic crop/tree/natural vegetation 
+18 18 Mosaic crop/shrub/grass 
+19 19 Bare areas 
+20 20 Water 
+21 21 Snow and ice 
+22 22 Artificial surface 
+23 23 Ocean 
+24 24 Irrigated croplands 
+25 25 Rainfed croplands 
+26 26 Mosaic cropland (50-70%) - vegetation (20-50%) 
+27 27 Mosaic vegetation (50-70%) - cropland (20-50%) 
+28 28 Closed broadleaved evergreen forest 
+29 29 Closed needle-leaved evergreen forest 
+30 30 Open needle-leaved deciduous forest 
+31 31 Mixed broadleaved and needle-leaved forest 
+32 32 Mosaic shrubland (50-70%) - grassland (20-50%) 
+33 33 Mosaic grassland (50-70%) - shrubland (20-50%) 
+34 34 Closed to open shrubland 
+35 35 Sparse vegetation 
+36 36 Closed to open forest regularly flooded 
+37 37 Closed forest or shrubland permanently flooded 
+38 38 Closed to open grassland regularly flooded 
+39 39 Undefined 
+# 40-32767 Reserved 
+# 32768- Reserved for local use 
diff --git a/definitions/grib2/tables/18/4.3.table b/definitions/grib2/tables/18/4.3.table
new file mode 100644
index 0000000..8ba9e08
--- /dev/null
+++ b/definitions/grib2/tables/18/4.3.table
@@ -0,0 +1,23 @@
+# Code table 4.3 - Type of generating process
+0 0 Analysis 
+1 1 Initialization 
+2 2 Forecast 
+3 3 Bias corrected forecast 
+4 4 Ensemble forecast 
+5 5 Probability forecast 
+6 6 Forecast error 
+7 7 Analysis error 
+8 8 Observation 
+9 9 Climatological 
+10 10 Probability-weighted forecast 
+11 11 Bias-corrected ensemble forecast 
+12 12 Post-processed analysis 
+13 13 Post-processed forecast 
+14 14 Nowcast 
+15 15 Hindcast 
+16 16 Physical retrieval 
+17 17 Regression analysis 
+18 18 Difference between two forecasts 
+# 19-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.4.table b/definitions/grib2/tables/18/4.4.table
new file mode 100644
index 0000000..7087ebd
--- /dev/null
+++ b/definitions/grib2/tables/18/4.4.table
@@ -0,0 +1,17 @@
+# Code table 4.4 - Indicator of unit of time range
+0 m Minute 
+1 h Hour 
+2 D Day 
+3 M Month 
+4 Y Year 
+5 10Y Decade (10 years) 
+6 30Y Normal (30 years) 
+7 C Century (100 years) 
+# 8-9 Reserved 
+10 3h 3 hours 
+11 6h 6 hours 
+12 12h 12 hours 
+13 s Second 
+# 14-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.5.table b/definitions/grib2/tables/18/4.5.table
similarity index 81%
copy from definitions/grib2/tables/17/4.5.table
copy to definitions/grib2/tables/18/4.5.table
index 1387725..c14343e 100644
--- a/definitions/grib2/tables/17/4.5.table
+++ b/definitions/grib2/tables/18/4.5.table
@@ -18,7 +18,11 @@
 16 16 Level of neutral buoyancy or equilibrium level (LNB)
 # 17-19 Reserved 
 20 20 Isothermal level (K)
-# 21-99 Reserved 
+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 
 102 102 Specific altitude above mean sea level (m)
@@ -34,7 +38,8 @@
 112 112 Reserved 
 113 113 Logarithmic hybrid level 
 114 114 Snow level (Numeric)
-# 115-116 Reserved 
+115 115 Sigma height level
+# 116 Reserved
 117 117 Mixed layer depth (m)
 118 hhl Hybrid height level (-)
 119 hpl Hybrid pressure level (-)
@@ -55,7 +60,7 @@
 175 175 Top surface of ice, under snow cover, on sea, lake or river
 176 176 Bottom surface (underside) ice on sea, lake or river
 177 sfc Deep soil (of indefinite depth)
-178 178 Reserved
+# 178 Reserved
 179 179 Top surface of glacier ice and inland ice
 180 180 Deep inland or glacier ice (of indefinite depth)
 181 181 Grid tile land fraction as a model surface
diff --git a/definitions/grib2/tables/18/4.6.table b/definitions/grib2/tables/18/4.6.table
new file mode 100644
index 0000000..b2dfeb4
--- /dev/null
+++ b/definitions/grib2/tables/18/4.6.table
@@ -0,0 +1,9 @@
+# Code table 4.6 - Type of ensemble forecast
+0 0 Unperturbed high-resolution control forecast 
+1 1 Unperturbed low-resolution control forecast 
+2 2 Negatively perturbed forecast 
+3 3 Positively perturbed forecast 
+4 4 Multi-model forecast 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.7.table b/definitions/grib2/tables/18/4.7.table
new file mode 100644
index 0000000..e0de0e1
--- /dev/null
+++ b/definitions/grib2/tables/18/4.7.table
@@ -0,0 +1,14 @@
+# Code table 4.7 - Derived forecast
+0 0 Unweighted mean of all members 
+1 1 Weighted mean of all members 
+2 2 Standard deviation with respect to cluster mean 
+3 3 Standard deviation with respect to cluster mean, normalized 
+4 4 Spread of all members 
+5 5 Large anomaly index of all members 
+6 6 Unweighted mean of the cluster members 
+7 7 Interquartile range (range between the 25th and 75th quantile) 
+8 8 Minimum of all ensemble members 
+9 9 Maximum of all ensemble members 
+# 10-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.8.table b/definitions/grib2/tables/18/4.8.table
new file mode 100644
index 0000000..ad88303
--- /dev/null
+++ b/definitions/grib2/tables/18/4.8.table
@@ -0,0 +1,6 @@
+# Code table 4.8 - Clustering method
+0 0 Anomaly correlation 
+1 1 Root mean square 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.9.table b/definitions/grib2/tables/18/4.9.table
new file mode 100644
index 0000000..5878b5a
--- /dev/null
+++ b/definitions/grib2/tables/18/4.9.table
@@ -0,0 +1,9 @@
+# Code table 4.9 - Probability type
+0 0 Probability of event below lower limit 
+1 1 Probability of event above upper limit 
+2 2 Probability of event between lower and upper limits (the range includes the lower limit but not the upper limit) 
+3 3 Probability of event above lower limit 
+4 4 Probability of event below upper limit 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/4.91.table b/definitions/grib2/tables/18/4.91.table
new file mode 100644
index 0000000..44cf25f
--- /dev/null
+++ b/definitions/grib2/tables/18/4.91.table
@@ -0,0 +1,16 @@
+# Code table 4.91 - Type of Interval
+0 0 Smaller than first limit 
+1 1 Greater than second limit 
+2 2 Between first and second limit. The range includes the first limit but not the second limit 
+3 3 Greater than first limit 
+4 4 Smaller than second limit 
+5 5 Smaller or equal first limit 
+6 6 Greater or equal second limit 
+7 7 Between first and second. The range includes the first limit and the second limit 
+8 8 Greater or equal first limit 
+9 9 Smaller or equal second limit 
+10 10 Between first and second limit. The range includes the second limit but not the first limit 
+11 11 Equal to first limit 
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 missing Missing 
diff --git a/definitions/grib2/tables/18/5.0.table b/definitions/grib2/tables/18/5.0.table
new file mode 100644
index 0000000..1d4c5e5
--- /dev/null
+++ b/definitions/grib2/tables/18/5.0.table
@@ -0,0 +1,25 @@
+# Code table 5.0 - Data representation template number
+0 0 Grid point data - simple packing 
+1 1 Matrix value at grid point - simple packing 
+2 2 Grid point data - complex packing 
+3 3 Grid point data - complex packing and spatial differencing 
+4 4 Grid point data - IEEE floating point data 
+6 6 Grid point data - simple packing with pre-processing
+40 40 Grid point data - JPEG 2000 code stream format 
+41 41 Grid point data - Portable Network Graphics (PNG) 
+42 42 Grid point and spectral data - CCSDS recommended lossless compression
+# 43-49 Reserved 
+50 50 Spectral data - simple packing 
+51 51 Spherical harmonics data - complex packing 
+# 52-60 Reserved 
+61 61 Grid point data - simple packing with logarithm pre-processing 
+# 62-199 Reserved 
+200 200 Run length packing with level values 
+# 201-49151 Reserved 
+# 49152-65534 Reserved for local use 
+40000 40000 JPEG2000 Packing
+40010 40010 PNG pacling
+50000 50000 Sperical harmonics ieee packing
+50001 50001 Second order packing
+50002 50002 Second order packing
+65535 65535 Missing 
diff --git a/definitions/grib2/tables/18/5.1.table b/definitions/grib2/tables/18/5.1.table
new file mode 100644
index 0000000..854330c
--- /dev/null
+++ b/definitions/grib2/tables/18/5.1.table
@@ -0,0 +1,6 @@
+# Code table 5.1 - Type of original field values
+0 0 Floating point 
+1 1 Integer 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/5.2.table b/definitions/grib2/tables/18/5.2.table
new file mode 100644
index 0000000..40586a1
--- /dev/null
+++ b/definitions/grib2/tables/18/5.2.table
@@ -0,0 +1,8 @@
+# Code table 5.2 - Matrix coordinate value function definition
+0 0 Explicit coordinate values set 
+1 1 Linear coordinates f(1) = C1, f(n) = f(n-1) + C2 
+# 2-10 Reserved 
+11 11 Geometric coordinates f(1)=C1, f(n)=C2*f(n-1)
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/5.3.table b/definitions/grib2/tables/18/5.3.table
new file mode 100644
index 0000000..c3b7b30
--- /dev/null
+++ b/definitions/grib2/tables/18/5.3.table
@@ -0,0 +1,7 @@
+# Code table 5.3 - Matrix coordinate parameter
+1 1 Direction degrees true 
+2 2 Frequency (s-1) 
+3 3 Radial number (2pi/lambda) (m-1) 
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/5.4.table b/definitions/grib2/tables/18/5.4.table
new file mode 100644
index 0000000..8121c18
--- /dev/null
+++ b/definitions/grib2/tables/18/5.4.table
@@ -0,0 +1,6 @@
+# Code table 5.4 - Group splitting method
+0 0 Row by row splitting 
+1 1 General group splitting 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/5.40.table b/definitions/grib2/tables/18/5.40.table
new file mode 100644
index 0000000..b9bad2c
--- /dev/null
+++ b/definitions/grib2/tables/18/5.40.table
@@ -0,0 +1,5 @@
+# Code table 5.40 - Type of compression
+0 0 Lossless 
+1 1 Lossy 
+# 2-254 Reserved 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/5.40000.table b/definitions/grib2/tables/18/5.40000.table
new file mode 100644
index 0000000..1eef7c7
--- /dev/null
+++ b/definitions/grib2/tables/18/5.40000.table
@@ -0,0 +1,5 @@
+# Code Table 5.40: Type of Compression
+0 0 Lossless
+1 1 Lossy
+#2-254 Reserved
+255 255 Missing
diff --git a/definitions/grib2/tables/18/5.5.table b/definitions/grib2/tables/18/5.5.table
new file mode 100644
index 0000000..3ef3eb0
--- /dev/null
+++ b/definitions/grib2/tables/18/5.5.table
@@ -0,0 +1,7 @@
+# Code table 5.5 - Missing value management for complex packing
+0 0 No explicit missing values included within data values 
+1 1 Primary missing values included within data values 
+2 2 Primary and secondary missing values included within data values 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/5.50002.table b/definitions/grib2/tables/18/5.50002.table
new file mode 100644
index 0000000..10c243c
--- /dev/null
+++ b/definitions/grib2/tables/18/5.50002.table
@@ -0,0 +1,19 @@
+# second order packing modes table
+
+1 0 no boustrophedonic
+1 1 boustrophedonic
+2 0 Reserved
+2 1 Reserved
+3 0 Reserved
+3 1 Reserved
+4 0 Reserved
+4 1 Reserved
+5 0 Reserved
+5 1 Reserved
+6 0 Reserved
+6 1 Reserved
+7 0 Reserved
+7 1 Reserved
+8 0 Reserved
+8 1 Reserved
+
diff --git a/definitions/grib2/tables/18/5.6.table b/definitions/grib2/tables/18/5.6.table
new file mode 100644
index 0000000..6d51778
--- /dev/null
+++ b/definitions/grib2/tables/18/5.6.table
@@ -0,0 +1,7 @@
+# Code table 5.6 - Order of spatial differencing
+0 0 Reserved 
+1 1 First-order spatial differencing 
+2 2 Second-order spatial differencing 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/5.7.table b/definitions/grib2/tables/18/5.7.table
new file mode 100644
index 0000000..5ab7800
--- /dev/null
+++ b/definitions/grib2/tables/18/5.7.table
@@ -0,0 +1,7 @@
+# Code table 5.7 - Precision of floating-point numbers
+0 0 Reserved 
+1 1 IEEE 32-bit (I=4 in section 7) 
+2 2 IEEE 64-bit (I=8 in section 7) 
+3 3 IEEE 128-bit (I=16 in section 7) 
+# 4-254 Reserved 
+255 255 Missing 
diff --git a/definitions/grib2/tables/18/6.0.table b/definitions/grib2/tables/18/6.0.table
new file mode 100644
index 0000000..2a29aa2
--- /dev/null
+++ b/definitions/grib2/tables/18/6.0.table
@@ -0,0 +1,6 @@
+# Code table 6.0 - Bit map indicator
+0 0 A bit map applies to this product and is specified in this Section 
+1 1  A bit map pre-determined by the originating/generating centre applies to this product and is not specified in this Section
+# 1-253 A bit map predetermined by the originating/generating centre applies to this product and is not specified in this Section 
+254 254 A bit map defined previously in the same GRIB message applies to this product 
+255 255 A bit map does not apply to this product 
diff --git a/definitions/grib2/tables/18/stepType.table b/definitions/grib2/tables/18/stepType.table
new file mode 100644
index 0000000..d88e441
--- /dev/null
+++ b/definitions/grib2/tables/18/stepType.table
@@ -0,0 +1,4 @@
+# CODE TABLE Step Type
+
+0 instant  Instant
+1 interval Interval
diff --git a/definitions/grib2/template.3.4.def b/definitions/grib2/template.3.4.def
index 3ba12e2..e631885 100644
--- a/definitions/grib2/template.3.4.def
+++ b/definitions/grib2/template.3.4.def
@@ -7,7 +7,7 @@
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
 
-# TEMPLATE 3.4, variable resolution latitude/longitude
+# TEMPLATE 3.4, Variable resolution latitude/longitude
             
 include "grib2/template.3.shape_of_the_earth.def";
 include "grib2/template.3.latlon_vares.def";
diff --git a/definitions/grib2/template.3.5.def b/definitions/grib2/template.3.5.def
index 6c5a49e..7079080 100644
--- a/definitions/grib2/template.3.5.def
+++ b/definitions/grib2/template.3.5.def
@@ -7,7 +7,7 @@
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
 
-# TEMPLATE 3.5, variable resolution rotated latitude/longitude
+# TEMPLATE 3.5, Variable resolution rotated latitude/longitude
             
 include "grib2/template.3.shape_of_the_earth.def";
 include "grib2/template.3.latlon_vares.def";
diff --git a/definitions/grib2/template.4.30.def b/definitions/grib2/template.4.30.def
index 8cb719e..e4a3e46 100644
--- a/definitions/grib2/template.4.30.def
+++ b/definitions/grib2/template.4.30.def
@@ -13,6 +13,9 @@ constant dataRepresentationType = 90;
 
 # START 2/template.4.30 ----------------------------------------------------------------------
 # TEMPLATE 4.30, Satellite Product
+
+# Note: This template is deprecated. Template 4.31 should be used instead.
+
 #  Parameter category
 codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir) : dump;
 
diff --git a/definitions/grib2/template.4.32.def b/definitions/grib2/template.4.32.def
index 9e0aa44..e66dab8 100644
--- a/definitions/grib2/template.4.32.def
+++ b/definitions/grib2/template.4.32.def
@@ -12,7 +12,7 @@ constant dataRepresentationType = 90;
 
 
 # START template.4.32 ----------------------------------------------------------------------
-# 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
+# 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
 
 include "grib2/template.4.parameter.def"
 include "grib2/template.4.point_in_time.def";
diff --git a/definitions/grib2/template.4.57.def b/definitions/grib2/template.4.49.def
similarity index 64%
copy from definitions/grib2/template.4.57.def
copy to definitions/grib2/template.4.49.def
index 38b15a9..f448350 100644
--- a/definitions/grib2/template.4.57.def
+++ b/definitions/grib2/template.4.49.def
@@ -6,8 +6,10 @@
 # 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.
 #
-# TEMPLATE 4.57, analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function
 
-include "grib2/template.4.parameter_chemical_distribution.def";
+# TEMPLATE 4.49, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol
+
+include "grib2/template.4.parameter_aerosol_optical.def";
 include "grib2/template.4.point_in_time.def";
 include "grib2/template.4.horizontal.def";
+include "grib2/template.4.eps.def"
diff --git a/definitions/grib2/template.4.55.def b/definitions/grib2/template.4.55.def
index 8139bda..26c1efd 100644
--- a/definitions/grib2/template.4.55.def
+++ b/definitions/grib2/template.4.55.def
@@ -6,7 +6,7 @@
 # In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
-# TEMPLATE 4.55, spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time
+# TEMPLATE 4.55, Spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time
 
 include "grib2/template.4.parameter_tile.def"
 include "grib2/template.4.horizontal.def"
diff --git a/definitions/grib2/template.4.56.def b/definitions/grib2/template.4.56.def
index e4461f2..e9d80d2 100644
--- a/definitions/grib2/template.4.56.def
+++ b/definitions/grib2/template.4.56.def
@@ -6,7 +6,9 @@
 # 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.
 #
-# TEMPLATE 4.56, individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters
+# TEMPLATE 4.56, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters
+
+# Note: This template is deprecated. Template 4.59 should be used instead.
 
 include "grib2/template.4.parameter_tile.def"
 include "grib2/template.4.horizontal.def"
@@ -23,4 +25,3 @@ alias number=perturbationNumber;
 
 unsigned[1] numberOfForecastsInEnsemble  : dump;
 alias totalNumber=numberOfForecastsInEnsemble;
-
diff --git a/definitions/grib2/template.4.57.def b/definitions/grib2/template.4.57.def
index 38b15a9..6e415ac 100644
--- a/definitions/grib2/template.4.57.def
+++ b/definitions/grib2/template.4.57.def
@@ -6,7 +6,7 @@
 # In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
-# TEMPLATE 4.57, analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function
+# TEMPLATE 4.57, Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function
 
 include "grib2/template.4.parameter_chemical_distribution.def";
 include "grib2/template.4.point_in_time.def";
diff --git a/definitions/grib2/template.4.55.def b/definitions/grib2/template.4.59.def
similarity index 65%
copy from definitions/grib2/template.4.55.def
copy to definitions/grib2/template.4.59.def
index 8139bda..859309d 100644
--- a/definitions/grib2/template.4.55.def
+++ b/definitions/grib2/template.4.59.def
@@ -6,7 +6,10 @@
 # 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.
 #
-# TEMPLATE 4.55, spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time
+# TEMPLATE 4.59, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters
+
+# Use this instead of template 4.56
 
 include "grib2/template.4.parameter_tile.def"
 include "grib2/template.4.horizontal.def"
+include "grib2/template.4.eps.def"
diff --git a/definitions/grib2/template.4.57.def b/definitions/grib2/template.4.70.def
similarity index 66%
copy from definitions/grib2/template.4.57.def
copy to definitions/grib2/template.4.70.def
index 38b15a9..1d74288 100644
--- a/definitions/grib2/template.4.57.def
+++ b/definitions/grib2/template.4.70.def
@@ -6,8 +6,9 @@
 # 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.
 #
-# TEMPLATE 4.57, analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function
 
-include "grib2/template.4.parameter_chemical_distribution.def";
+# EFAS: Analysis or forecast at a horizontal level or in a horizontal layer at a point in time
+
+include "grib2/template.4.parameter_postproc.def";
 include "grib2/template.4.point_in_time.def";
 include "grib2/template.4.horizontal.def";
diff --git a/definitions/grib2/template.4.55.def b/definitions/grib2/template.4.71.def
similarity index 62%
copy from definitions/grib2/template.4.55.def
copy to definitions/grib2/template.4.71.def
index 8139bda..714dfb8 100644
--- a/definitions/grib2/template.4.55.def
+++ b/definitions/grib2/template.4.71.def
@@ -6,7 +6,10 @@
 # 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.
 #
-# TEMPLATE 4.55, spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time
 
-include "grib2/template.4.parameter_tile.def"
+# EFAS: Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time
+
+include "grib2/template.4.parameter_postproc.def"
+include "grib2/template.4.point_in_time.def";
 include "grib2/template.4.horizontal.def"
+include "grib2/template.4.eps.def"
diff --git a/definitions/grib2/template.4.55.def b/definitions/grib2/template.4.72.def
similarity index 60%
copy from definitions/grib2/template.4.55.def
copy to definitions/grib2/template.4.72.def
index 8139bda..7d6a4e2 100644
--- a/definitions/grib2/template.4.55.def
+++ b/definitions/grib2/template.4.72.def
@@ -6,7 +6,9 @@
 # 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.
 #
-# TEMPLATE 4.55, spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time
 
-include "grib2/template.4.parameter_tile.def"
+# EFAS: Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval
+
+include "grib2/template.4.parameter_postproc.def"
 include "grib2/template.4.horizontal.def"
+include "grib2/template.4.statistical.def"
diff --git a/definitions/grib2/template.4.55.def b/definitions/grib2/template.4.73.def
similarity index 59%
copy from definitions/grib2/template.4.55.def
copy to definitions/grib2/template.4.73.def
index 8139bda..dbdc3c4 100644
--- a/definitions/grib2/template.4.55.def
+++ b/definitions/grib2/template.4.73.def
@@ -6,7 +6,10 @@
 # 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.
 #
-# TEMPLATE 4.55, spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time
 
-include "grib2/template.4.parameter_tile.def"
+# EFAS: Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval
+
+include "grib2/template.4.parameter_postproc.def"
 include "grib2/template.4.horizontal.def"
+include "grib2/template.4.eps.def"
+include "grib2/template.4.statistical.def"
diff --git a/definitions/grib2/template.4.parameter.def b/definitions/grib2/template.4.parameter.def
index d19502d..658c2cf 100644
--- a/definitions/grib2/template.4.parameter.def
+++ b/definitions/grib2/template.4.parameter.def
@@ -25,13 +25,11 @@ codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir) : dump;
 unsigned[1] backgroundProcess = 255 : edition_specific;
 alias backgroundGeneratingProcessIdentifier=backgroundProcess;
 
-
 #  Analysis or forecast generating processes identifier
 # (defined by originating centre)
 unsigned[1] generatingProcessIdentifier  : dump;
 
 #  Hours of observational data cut-off after reference time
-# NOTE 1 NOT FOUND
 unsigned[2] hoursAfterDataCutoff =missing() : edition_specific,can_be_missing;
 alias hoursAfterReferenceTimeOfDataCutoff=hoursAfterDataCutoff;
 
@@ -45,4 +43,3 @@ codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
 
 #  Forecast time in units defined by octet 18 (GRIB-29: supports negative forecast time)
 signed[4] forecastTime  : dump;
-
diff --git a/definitions/grib2/template.4.parameter_partition.def b/definitions/grib2/template.4.parameter_partition.def
index 4a7d4f9..0a09fed 100644
--- a/definitions/grib2/template.4.parameter_partition.def
+++ b/definitions/grib2/template.4.parameter_partition.def
@@ -27,18 +27,15 @@ codetable[2] partitionNumber ('4.[partitionTable].table',masterDir,localDir) : d
 #  Type of generating process
 codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir) : dump;
 
-#  Background generating process identifier
-# (defined by originating centre)
+#  Background generating process identifier (defined by originating centre)
 unsigned[1] backgroundProcess = 255 : edition_specific;
 alias backgroundGeneratingProcessIdentifier=backgroundProcess;
 
-
 #  Analysis or forecast generating processes identifier
 # (defined by originating centre)
 unsigned[1] generatingProcessIdentifier  : dump;
 
 #  Hours of observational data cut-off after reference time
-# NOTE 1 NOT FOUND
 unsigned[2] hoursAfterDataCutoff =missing() : edition_specific,can_be_missing;
 alias hoursAfterReferenceTimeOfDataCutoff=hoursAfterDataCutoff;
 
@@ -52,4 +49,3 @@ codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
 
 #  Forecast time in units defined by octet 18 (GRIB-29: supports negative forecast time)
 signed[4] forecastTime  : dump;
-
diff --git a/definitions/grib2/template.4.parameter_partition.def b/definitions/grib2/template.4.parameter_postproc.def
similarity index 63%
copy from definitions/grib2/template.4.parameter_partition.def
copy to definitions/grib2/template.4.parameter_postproc.def
index 4a7d4f9..6824a00 100644
--- a/definitions/grib2/template.4.parameter_partition.def
+++ b/definitions/grib2/template.4.parameter_postproc.def
@@ -10,36 +10,35 @@
 label "Parameter information";
 
 #  Parameter category
-codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir) : dump;
+codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir): dump;
 
 #  Parameter number
 codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir)  : dump;
 meta parameterUnits codetable_units(parameterNumber) : dump;
 meta parameterName  codetable_title(parameterNumber) : dump;
-unsigned[1] partitionTable : dump;
-unsigned[1] numberOfPartitions=1 :dump;
-partitions list(numberOfPartitions) {
-    unsigned[2] partitionItems ;
-}
 
-codetable[2] partitionNumber ('4.[partitionTable].table',masterDir,localDir) : dump;
+#  The input process identifier shall have the value of the 'analysis or forecast process identifier' of the
+#  original GRIB message used as input of the post-processing
+unsigned[2]  inputProcessIdentifier                      : dump,edition_specific;
+#  The input originating centre shall have the value of the 'originating centre' of the original GRIB message
+#  used as input of the post-processing
+codetable[2] inputOriginatingCentre 'grib2/centre.table' : dump,edition_specific,string_type;
+#  This identifies which post-processing technique was used. This is defined by the originating centre
+unsigned[1]  typeOfPostProcessing                        : dump,edition_specific;
 
 #  Type of generating process
-codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir) : dump;
+codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir)  : dump;
 
-#  Background generating process identifier
-# (defined by originating centre)
+#  Background generating process identifier (defined by originating centre)
 unsigned[1] backgroundProcess = 255 : edition_specific;
 alias backgroundGeneratingProcessIdentifier=backgroundProcess;
 
-
 #  Analysis or forecast generating processes identifier
 # (defined by originating centre)
 unsigned[1] generatingProcessIdentifier  : dump;
 
 #  Hours of observational data cut-off after reference time
-# NOTE 1 NOT FOUND
-unsigned[2] hoursAfterDataCutoff =missing() : edition_specific,can_be_missing;
+unsigned[2] hoursAfterDataCutoff = missing()  : edition_specific,can_be_missing;
 alias hoursAfterReferenceTimeOfDataCutoff=hoursAfterDataCutoff;
 
 #  Minutes of observational data cut-off after reference time
@@ -50,6 +49,5 @@ alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff;
 codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir)  : dump;
 codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
 
-#  Forecast time in units defined by octet 18 (GRIB-29: supports negative forecast time)
+#  Forecast time in units defined by indicatorOfUnitOfTimeRange
 signed[4] forecastTime  : dump;
-
diff --git a/definitions/grib2/template.5.42.def b/definitions/grib2/template.5.42.def
index 22d4998..5c0c886 100644
--- a/definitions/grib2/template.5.42.def
+++ b/definitions/grib2/template.5.42.def
@@ -7,12 +7,13 @@
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
 
-# TEMPLATE 5.42, Grid point and spectral data - CCSDS
+# TEMPLATE 5.42, Grid point and spectral data - CCSDS recommended lossless compression
 
 include "grib2/template.5.packing.def";
 include "grib2/template.5.original_values.def";
 
 unsigned[1] ccsdsFlags : dump;
+alias ccsdsCompressionOptionsMask=ccsdsFlags;
 
 flagbit AEC_DATA_SIGNED_OPTION_MASK(ccsdsFlags,0)     = 0;
 
@@ -28,3 +29,4 @@ flagbit AEC_PAD_RSI_OPTION_MASK(ccsdsFlags,5)         = 0;
 
 unsigned[1] ccsdsBlockSize = 32 : dump;
 unsigned[2] ccsdsRsi = 128      : dump;
+alias referenceSampleInterval=ccsdsRsi;
diff --git a/share/ecbuild/toolchains/ecmwf-XC30-Cray.cmake b/share/ecbuild/toolchains/ecmwf-XC30-Cray.cmake
index 31a241b..c6947e8 100644
--- a/share/ecbuild/toolchains/ecmwf-XC30-Cray.cmake
+++ b/share/ecbuild/toolchains/ecmwf-XC30-Cray.cmake
@@ -20,14 +20,6 @@ set( ECBUILD_FIND_MPI OFF )
 set( ECBUILD_TRUST_FLAGS ON )
 
 ####################################################################
-# MPI
-####################################################################
-
-set( MPIEXEC                 "aprun" )
-set( MPIEXEC_NUMPROC_FLAG    "-n"    )
-set( MPIEXEC_NUMTHREAD_FLAG  "-d"    )
-
-####################################################################
 # OpenMP FLAGS
 ####################################################################
 
@@ -43,7 +35,7 @@ set( OMPSTUBS_Fortran_FLAGS  "-hnoomp" )
 # LINK FLAGS
 ####################################################################
 
-set( ECBUILD_C_LINK_FLAGS        "-Wl,-Map,loadmap -Wl,--as-needed -Ktrap=fp" )
-set( ECBUILD_CXX_LINK_FLAGS      "-Wl,-Map,loadmap -Wl,--as-needed -Ktrap=fp" )
-set( ECBUILD_Fortran_LINK_FLAGS  "-Wl,-Map,loadmap -Wl,--as-needed -Ktrap=fp" )
+set( ECBUILD_C_LINK_FLAGS        "-Wl,-Map,loadmap -Wl,--as-needed -Wl,--eh-frame-hdr -Ktrap=fp" )
+set( ECBUILD_CXX_LINK_FLAGS      "-Wl,-Map,loadmap -Wl,--as-needed -Wl,--eh-frame-hdr -Ktrap=fp" )
+set( ECBUILD_Fortran_LINK_FLAGS  "-Wl,-Map,loadmap -Wl,--as-needed -Wl,--eh-frame-hdr -Ktrap=fp" )
 set( ECBUILD_CXX_IMPLICIT_LINK_LIBRARIES "$ENV{CC_X86_64}/lib/x86-64/libcray-c++-rts.so" CACHE STRING "" )
diff --git a/share/ecbuild/toolchains/ecmwf-XC30-GNU.cmake b/share/ecbuild/toolchains/ecmwf-XC30-GNU.cmake
index 3f69f06..3ea294f 100644
--- a/share/ecbuild/toolchains/ecmwf-XC30-GNU.cmake
+++ b/share/ecbuild/toolchains/ecmwf-XC30-GNU.cmake
@@ -20,14 +20,6 @@ set( ECBUILD_FIND_MPI OFF )
 set( ECBUILD_TRUST_FLAGS ON )
 
 ####################################################################
-# MPI
-####################################################################
-
-set( MPIEXEC                 "aprun" )
-set( MPIEXEC_NUMPROC_FLAG    "-n"    )
-set( MPIEXEC_NUMTHREAD_FLAG  "-d"    )
-
-####################################################################
 # OpenMP FLAGS
 ####################################################################
 
@@ -47,6 +39,6 @@ set( ECBUILD_Fortran_FLAGS_DEBUG  "-ffree-line-length-none -O0 -g -fcheck=bounds
 # LINK FLAGS
 ####################################################################
 
-set( ECBUILD_C_LINK_FLAGS        "-Wl,-Map,load.map -Wl,--as-needed" )
-set( ECBUILD_CXX_LINK_FLAGS      "-Wl,-Map,load.map -Wl,--as-needed" )
-set( ECBUILD_Fortran_LINK_FLAGS  "-Wl,-Map,load.map -Wl,--as-needed" )
+set( ECBUILD_C_LINK_FLAGS        "-Wl,-Map,load.map -Wl,--as-needed -Wl,--eh-frame-hdr" )
+set( ECBUILD_CXX_LINK_FLAGS      "-Wl,-Map,load.map -Wl,--as-needed -Wl,--eh-frame-hdr" )
+set( ECBUILD_Fortran_LINK_FLAGS  "-Wl,-Map,load.map -Wl,--as-needed -Wl,--eh-frame-hdr" )
diff --git a/share/ecbuild/toolchains/ecmwf-XC30-Intel.cmake b/share/ecbuild/toolchains/ecmwf-XC30-Intel.cmake
index 01c6267..d5fdb32 100644
--- a/share/ecbuild/toolchains/ecmwf-XC30-Intel.cmake
+++ b/share/ecbuild/toolchains/ecmwf-XC30-Intel.cmake
@@ -21,14 +21,6 @@ set( ECBUILD_FIND_MPI OFF )
 set( ECBUILD_TRUST_FLAGS ON )
 
 ####################################################################
-# MPI
-####################################################################
-
-set( MPIEXEC                 "aprun" )
-set( MPIEXEC_NUMPROC_FLAG    "-n"    )
-set( MPIEXEC_NUMTHREAD_FLAG  "-d"    )
-
-####################################################################
 # OpenMP FLAGS
 ####################################################################
 
@@ -68,6 +60,6 @@ set( ECBUILD_Fortran_FLAGS_DEBUG  "-O0 -g -traceback -warn all -heap-arrays -fpe
 # LINK FLAGS
 ####################################################################
 
-set( ECBUILD_C_LINK_FLAGS        "-Wl,-Map,load.map -Wl,--as-needed" )
-set( ECBUILD_CXX_LINK_FLAGS      "-Wl,-Map,load.map -Wl,--as-needed" )
-set( ECBUILD_Fortran_LINK_FLAGS  "-Wl,-Map,load.map -Wl,--as-needed" )
+set( ECBUILD_C_LINK_FLAGS        "-Wl,-Map,load.map -Wl,--as-needed -Wl,--eh-frame-hdr" )
+set( ECBUILD_CXX_LINK_FLAGS      "-Wl,-Map,load.map -Wl,--as-needed -Wl,--eh-frame-hdr" )
+set( ECBUILD_Fortran_LINK_FLAGS  "-Wl,-Map,load.map -Wl,--as-needed -Wl,--eh-frame-hdr" )
diff --git a/src/grib_accessor_class_bufr_data_array.c b/src/grib_accessor_class_bufr_data_array.c
index e80d1b0..12fd09f 100644
--- a/src/grib_accessor_class_bufr_data_array.c
+++ b/src/grib_accessor_class_bufr_data_array.c
@@ -527,7 +527,7 @@ static grib_darray* decode_double_array(grib_context* c,unsigned char* data,long
 static int encode_string_array(grib_context* c,grib_buffer* buff,long* pos, bufr_descriptor* bd,
         grib_accessor_bufr_data_array* self,grib_sarray* stringValues)
 {
-    int err=0,n;
+    int err=0,n,ival;
     int k,j,modifiedWidth,width;
 
     if (self->iss_list==NULL) return GRIB_INTERNAL_ERROR;
@@ -536,7 +536,12 @@ static int encode_string_array(grib_context* c,grib_buffer* buff,long* pos, bufr
 
     if (n<=0) return GRIB_NO_VALUES;
 
-    if (grib_sarray_used_size(stringValues)==1) n=1;
+    if (grib_sarray_used_size(stringValues)==1) {
+      n=1;
+      ival=0;
+    } else {
+      ival=self->iss_list->v[0];
+    }
 
     if (n>grib_sarray_used_size(stringValues))
         return GRIB_ARRAY_TOO_SMALL;
@@ -544,7 +549,7 @@ static int encode_string_array(grib_context* c,grib_buffer* buff,long* pos, bufr
     modifiedWidth= bd->width;
 
     grib_buffer_set_ulength_bits(c,buff,buff->ulength_bits+modifiedWidth);
-    grib_encode_string(buff->data,pos,modifiedWidth/8,stringValues->v[0]);
+    grib_encode_string(buff->data,pos,modifiedWidth/8,stringValues->v[ival]);
     width= n > 1 ? modifiedWidth : 0;
 
     grib_buffer_set_ulength_bits(c,buff,buff->ulength_bits+6);
@@ -582,6 +587,8 @@ static int encode_double_array(grib_context* c,grib_buffer* buff,long* pos, bufr
     double* v=NULL;
     double* values=NULL;
     int thereIsAMissing=0;
+    int is_constant;
+    double val0;
 
     if (self->iss_list==NULL) return GRIB_INTERNAL_ERROR;
 
@@ -601,7 +608,7 @@ static int encode_double_array(grib_context* c,grib_buffer* buff,long* pos, bufr
     v=dvalues->v;
 
     /* is constant */
-    if (grib_darray_used_size(dvalues)==1) {
+    if (grib_darray_is_constant(dvalues)) {
         localWidth=0;
         grib_buffer_set_ulength_bits(c,buff,buff->ulength_bits+modifiedWidth);
         if (*v == GRIB_MISSING_DOUBLE) {
@@ -617,11 +624,16 @@ static int encode_double_array(grib_context* c,grib_buffer* buff,long* pos, bufr
 
     if (nvals>grib_darray_used_size(dvalues)) return GRIB_ARRAY_TOO_SMALL;
     values=grib_context_malloc_clear(c,sizeof(double)*nvals);
-    for (i=0;i<nvals;i++) values[i]=dvalues->v[self->iss_list->v[i]];
+    val0=dvalues->v[self->iss_list->v[0]];
+    is_constant=1;
+    for (i=0;i<nvals;i++) {
+      values[i]=dvalues->v[self->iss_list->v[i]];
+      if (val0 != values[i]) is_constant=0;
+    }
     v=values;
 
-    /* encoding only one value out of many*/
-    if (nvals==1) {
+    /* encoding a range with constant values*/
+    if (is_constant==1) {
         localWidth=0;
         grib_buffer_set_ulength_bits(c,buff,buff->ulength_bits+modifiedWidth);
         if (*v == GRIB_MISSING_DOUBLE) {
diff --git a/src/grib_api_prototypes.h b/src/grib_api_prototypes.h
index 71bd514..6802368 100644
--- a/src/grib_api_prototypes.h
+++ b/src/grib_api_prototypes.h
@@ -205,6 +205,7 @@ grib_darray *grib_darray_push(grib_context *c, grib_darray *v, double val);
 void grib_darray_delete(grib_context *c, grib_darray *v);
 double *grib_darray_get_array(grib_context *c, grib_darray *v);
 size_t grib_darray_used_size(grib_darray *v);
+int grib_darray_is_constant(grib_darray* v);
 
 /* grib_sarray.c */
 grib_sarray *grib_sarray_new(grib_context *c, size_t size, size_t incsize);
@@ -231,6 +232,7 @@ void grib_iarray_delete(grib_iarray *v);
 void grib_iarray_delete_array(grib_iarray *v);
 long *grib_iarray_get_array(grib_iarray *v);
 size_t grib_iarray_used_size(grib_iarray *v);
+int grib_iarray_is_constant(grib_iarray* v);
 
 /* grib_vdarray.c */
 grib_vdarray *grib_vdarray_new(grib_context *c, size_t size, size_t incsize);
diff --git a/src/grib_darray.c b/src/grib_darray.c
index 91ade77..90c7463 100644
--- a/src/grib_darray.c
+++ b/src/grib_darray.c
@@ -93,4 +93,16 @@ double* grib_darray_get_array(grib_context* c,grib_darray* v) {
   return ret;
 }
 
+int grib_darray_is_constant(grib_darray* v) {
+  int i;
+  double val;
+  if (v->n == 1) return 1;
+
+  val=v->v[0];
+  for (i=1;i<v->n;i++)  {
+    if (val!=v->v[i]) return 0;
+  }
+  return 1;
+}
+
 size_t grib_darray_used_size(grib_darray* v) { return v->n;}
diff --git a/src/grib_iarray.c b/src/grib_iarray.c
index 1376f52..670398c 100644
--- a/src/grib_iarray.c
+++ b/src/grib_iarray.c
@@ -213,3 +213,16 @@ long* grib_iarray_get_array(grib_iarray* v)
 }
 
 size_t grib_iarray_used_size(grib_iarray* v) {return v==NULL ? 0 : v->n;}
+
+int grib_iarray_is_constant(grib_iarray* v) {
+  int i;
+  long val;
+  if (v->n == 1) return 1;
+
+  val=v->v[0];
+  for (i=1;i<v->n;i++)  {
+    if (val!=v->v[i]) return 0;
+  }
+  return 1;
+}
+
diff --git a/src/grib_query.c b/src/grib_query.c
index 6dff5c4..34b8a58 100644
--- a/src/grib_query.c
+++ b/src/grib_query.c
@@ -270,6 +270,19 @@ static void search_from_accessors_list(grib_accessors_list* al,grib_accessors_li
         }
         al=al->next;
     }
+    if (al==end && al->accessor) {
+        if (strcmp(al->accessor->name,accessor_name)==0) {
+            if (attribute_name[0]) {
+                accessor_result=grib_accessor_get_attribute(al->accessor,attribute_name);
+            } else {
+                accessor_result=al->accessor;
+            }
+            if (accessor_result) {
+                grib_accessors_list_push(result,accessor_result);
+            }
+        }
+    }
+
 }
 
 static void search_accessors_list_by_condition(grib_accessors_list* al,const char* name,codes_condition* condition,grib_accessors_list* result)
diff --git a/tests/bufr_filter.sh b/tests/bufr_filter.sh
index 1f98d32..8d59984 100755
--- a/tests/bufr_filter.sh
+++ b/tests/bufr_filter.sh
@@ -1429,3 +1429,46 @@ EOF
 diff ${f}.log.ref ${f}.log 
 
 rm -f ${f}.log ${f}.log.ref ${f}.out $fLog $fRules
+#-----------------------------------------------------------
+# Test: subset extraction constant values
+#-----------------------------------------------------------
+cat > $fRules <<EOF
+set numberOfSubsets=10;
+set compressedData=1;
+set unexpandedDescriptors={5002};
+set latitude={0,0,0,0,0,0,0,1,0,0};
+set pack=1;
+write;
+EOF
+
+f="go15_87.bufr"
+
+echo "Test: subset extraction constant values" >> $fLog
+echo "file: $f" >> $fLog
+
+${tools_dir}bufr_filter -o ${f}.out $fRules $f
+
+cat > $fRules <<EOF
+set unpack=1;
+set extractSubsetIntervalStart=1;
+set extractSubsetIntervalEnd=4;
+set doExtractSubsets=1;
+write;
+EOF
+
+${tools_dir}bufr_filter -o ${f}.out.out $fRules ${f}.out
+
+cat > $fRules <<EOF
+set unpack=1;
+print "latitude=[latitude]";
+EOF
+
+${tools_dir}bufr_filter $fRules ${f}.out.out > ${f}.log
+
+cat > ${f}.log.ref <<EOF
+latitude=0
+EOF
+
+diff ${f}.log.ref ${f}.log 
+
+rm -f ${f}.log ${f}.log.ref ${f}.out ${f}.out.out $fLog $fRules
diff --git a/version.sh b/version.sh
index 8f2b9bf..ee14dc9 100644
--- a/version.sh
+++ b/version.sh
@@ -15,7 +15,7 @@ PACKAGE_NAME='eccodes'
 # Package version
 ECCODES_MAJOR_VERSION=2
 ECCODES_MINOR_VERSION=0
-ECCODES_REVISION_VERSION=0
+ECCODES_REVISION_VERSION=2
 
 ECCODES_CURRENT=1
 ECCODES_REVISION=0

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/eccodes.git



More information about the debian-science-commits mailing list